ID2D1PathGeometry 接口是 Direct2D 中表示路径几何图形的接口。路径几何图形是由线段和曲线组成的路径,可用于在渲染目标上绘制各种形状。以下是该接口的一些基本信息:

ID2D1PathGeometry 接口简介:

ID2D1PathGeometry 接口是 Direct2D 中表示路径几何图形的接口。路径几何图形是由线段和曲线组成的路径,可以通过该接口定义并在渲染目标上绘制。

头文件:
#include <d2d1.h>

声明:
interface ID2D1PathGeometry : public ID2D1Geometry
{
    STDMETHOD(Open)(
        _Outptr_ ID2D1GeometrySink **geometrySink
        ) PURE;

    STDMETHOD(Stream)(
        _In_ ID2D1GeometrySink *geometrySink
        ) CONST PURE;
};

主要方法:

1. Open:
   - 描述:打开路径几何图形以便定义其形状。
   - 参数:
     - geometrySink: 用于存储 ID2D1GeometrySink 接口的指针,用于定义路径的形状。
   - 返回值:HRESULT。

2. Stream:
   - 描述:将路径几何图形的数据流传递给指定的 ID2D1GeometrySink。
   - 参数:
     - geometrySink: 接收路径数据流的 ID2D1GeometrySink 接口。
   - 返回值:HRESULT。

示例用法:
// 创建路径几何图形
ID2D1PathGeometry* pathGeometry = nullptr;
HRESULT hr = factory->CreatePathGeometry(&pathGeometry);

if (SUCCEEDED(hr))
{
    // 打开路径几何图形以定义其形状
    ID2D1GeometrySink* geometrySink = nullptr;
    hr = pathGeometry->Open(&geometrySink);

    if (SUCCEEDED(hr))
    {
        // 开始定义路径
        geometrySink->BeginFigure(D2D1::Point2F(10.0f, 10.0f), D2D1_FIGURE_BEGIN_FILLED);

        // 添加线段
        geometrySink->AddLine(D2D1::Point2F(100.0f, 10.0f));

        // 添加二次贝塞尔曲线
        D2D1_QUADRATIC_BEZIER_SEGMENT bezierSegment = {
            D2D1::Point2F(150.0f, 100.0f),  // 控制点
            D2D1::Point2F(200.0f, 10.0f)    // 终点
        };
        geometrySink->AddQuadraticBezier(bezierSegment);

        // 结束定义路径
        geometrySink->EndFigure(D2D1_FIGURE_END_CLOSED);

        // 关闭路径几何图形
        hr = geometrySink->Close();

        // 释放 ID2D1GeometrySink 接口
        geometrySink->Release();
    }

    // 在渲染目标上使用路径几何图形绘制图形
    if (SUCCEEDED(hr))
    {
        renderTarget->DrawGeometry(pathGeometry, /* 可选的笔刷和变换参数 */);
    }

    // 释放资源
    pathGeometry->Release();
}

在上述代码中,factory 是 ID2D1Factory 接口的实例,而 renderTarget 是 ID2D1RenderTarget 接口的实例。该示例演示了如何创建路径几何图形并在路径上定义形状,然后在渲染目标上使用路径几何图形绘制图形。路径几何图形的形状可以通过添加线段、曲线等来进行定义。


转载请注明出处:http://www.zyzy.cn/article/detail/25271/Win32 API/D2d1.h/ID2D1PathGeometry