ID2D1PathGeometry1::ComputePointAndSegmentAtLength(FLOAT,UINT32,constD2D1_MATRIX_3X2_F*,FLOAT,D2D1_POINT_DESCRIPTION*) method (d2d1_1.h)

Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point.

Syntax

HRESULT ComputePointAndSegmentAtLength(
                 FLOAT                   length,
                 UINT32                  startSegment,
  [in, optional] const D2D1_MATRIX_3X2_F *worldTransform,
                 FLOAT                   flatteningTolerance,
  [out]          D2D1_POINT_DESCRIPTION  *pointDescription
);

Parameters

length

Type: FLOAT

The distance to walk along the path.

startSegment

Type: UINT

The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.

[in, optional] worldTransform

Type: const D2D1_MATRIX_3X2_F*

The transform to apply to the path prior to walking.

flatteningTolerance

Type: FLOAT

The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.

[out] pointDescription

Type: D2D1_POINT_DESCRIPTION*

When this method returns, contains a description of the point that can be found at the given location.

Return value

Type: HRESULT

The method returns an HRESULT. Possible values include, but are not limited to, those in the following table.

HRESULT Description
S_OK No error occurred.
E_OUTOFMEMORY Direct2D could not allocate sufficient memory to complete the call.
E_INVALIDARG One of the inputs was in an invalid range.

Remarks

A length that is less than 0 or is not a number is treated as if it were 0.

If length is greater than the total length of the path, then the end point of the path is returned.

Example Illustration

Consider this example that explains the value of different parameters returned for the given path geometry. A diagram of a path geometry and its lengths. Here are two different scenarios.

You want to retrieve the segment at a length L2

You call ComputePointAndSegmentAtLength(Length = L2, startSegment =0). The API returns the following:

You wants to improve the performance of calculating a point at a given length for animating along a path

Normally, the time intervals would be small and regular, resulting in many animation points per segment. For the purposes of demonstration, however, we will assume the you query ComputePointAndSegmentAtLength three times, with irregularly-spaced lengths L1, L2, L3:

You call ComputePointAndSegmentAtLength(Length = L1, startSegment = 0). The API returns the following:

You call ComputePointAndSegmentAtLength(Length = L2 - Length(AB), startSegment = 1). The API returns the following: You call ComputePointAndSegmentAtLength(= L3-length(AB)-length(BD), startSegment = 3). The API returns the following:

Requirements

Requirement Value
Minimum supported client Windows 8 and Platform Update for Windows 7 [desktop apps | UWP apps]
Minimum supported server Windows Server 2012 and Platform Update for Windows Server 2008 R2 [desktop apps | UWP apps]
Target Platform Windows
Header d2d1_1.h
DLL D2d1.dll

See also

D2D1_MATRIX_3X2_F

D2D1_POINT_2F

D2D1_POINT_DESCRIPTION

ID2D1PathGeometry

ID2D1PathGeometry1