D2Sink_AddBezier, D2Sink_AddBeziers, and D2Sink_AddQuadraticBezier

Requires: Direct2D.lg32

Purpose

Add a Bezier curve(s) to the geometry sink object.

Syntax

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

Description

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.

Example

'

' 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

Remarks

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.

See Also

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}