Requires: Direct2D.lg32
Add a Bezier curve(s) to the geometry sink object.
D2Sink_AddBezier geoSink, bezier
D2Sink_AddBeziers geoSink, arbezier(), count%
D2Sink_AddQuadraticBezier geoSink, qdbezier
geoSink | : Object created with D2GeometrySink() |
bezier | : D2D1_BEZIER_SEGMENT |
arbezier() | : array var of D2D1_BEZIER_SEGMENT |
qdbezier | : D2D1_QUADRATIC_BEZIER_SEGMENT |
D2Sink_AddBezier creates a cubic Bezier curve defined in a D2D1_BEZIER_SEGMENT type. The bezier type describes the control points and end point of the Bezier curve to add.
D2Sink_AddBeziers creates a sequence of cubic Bezier curves and adds them to the geometry sink. The array arbezier() is an array of Bezier segments (D2D1_BEZIER_SEGMENT) that describes the Bezier curves to create. Count% specifies the number of segments to add. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by BeginFigure) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.
D2Sink_AddQuadraticBezier adds a quadratic Bezier curve defined in a D2D1_QUADRATIC_BEZIER_SEGMENT type to the sink object. The qdbezier type variable describes the control point and the end point of the quadratic Bezier curve to add.
'
' D2Sink_AddBezier sample (dpi-unaware)
'
$Library "direct2d"
Global Object Win1RT, geo
OpenW 1, 0, 0, 320, 260, ~15
Set Win1RT = D2GetRT() ' DC render target
Set geo = DefGeo()
Do
Sleep
Until Me Is Nothing
Sub Win_1_Paint
D2BeginDraw Win1RT, D2C_Wheat
D2DrawGeometry geo
D2EndDraw
EndSub
Sub Win_1_ReSize
D2ResizeRT Win1RT, _X, _Y
EndSub
Function DefGeo() As Object
Local geo As Object, geoSink As Object
Local bezier As D2D1_BEZIER_SEGMENT
Local qdbezier As D2D1_QUADRATIC_BEZIER_SEGMENT
Set geo = D2PathGeometry()
Set geoSink = D2GeometrySink(geo)
' Curve 10, 10, 10, 100, 100, 10, 100, 100
D2Sink_BeginFigure geoSink, 10, 10
bezier.point1.x = 10, bezier.point1.y = 100
bezier.point2.x = 100, bezier.point2.y = 10
bezier.point3.x = 100, bezier.point3.y = 100
D2Sink_AddBezier geoSink, bezier
D2Sink_EndFigure geoSink
D2Sink_BeginFigure geoSink, 110, 10
qdbezier.point1.x = 200, qdbezier.point1.y = 50
qdbezier.point2.x = 110, qdbezier.point2.y = 100
D2Sink_AddQuadraticBezier geoSink, qdbezier
D2Sink_EndFigure geoSink
D2Sink_Close geoSink
Set DefGeo = geo
EndFunc
These commands are wrappers for the following interface methods
ID2D1GeometrySink::AddBezier(const D2D1_BEZIER_SEGMENT &) (d2d1.h) - Win32 apps;
ID2D1SimplifiedGeometrySink::AddBeziers (d2d1.h) - Win32 apps ;
ID2D1GeometrySink::AddQuadraticBezier(const D2D1_QUADRATIC_BEZIER_SEGMENT &) (d2d1.h) - Win32 apps.
D2PathGeometry, D2GeometrySink, D2DrawGeometry, D2FillGeometry, D2Sink_BeginFigure, D2Sink_EndFigure, D2Sink_Close, D2Sink_Fillmode, D2Sink_AddArc, D2Sink_AddLine.
{Created by Sjouke Hamstra; Last updated: 11/03/2021 by James Gaite}