Freigeben über


Transformieren einer Geometrie

Zum Transformieren einer Geometrie können Sie entweder die Transformation auf das Renderziel anwenden, indem Sie SetTransform aufrufen oder die Transformation auf die Geometrie anwenden, indem Sie CreateTransformedGeometry aufrufen. Obwohl beide Ansätze eine Geometrie transformieren, weisen sie einige grundlegende Unterschiede auf. CreateTransformedGeometry wirkt sich auf die Füllung, aber nicht auf die Strichbreite aus. Darüber hinaus transformiert CreateTransformedGeometry die Geometrie allein, ohne andere Shapes auf dem Renderziel zu beeinflussen, während SetTransform die Transformation auf alle Shapes im Renderziel anwendet.

In diesem Thema wird beschrieben, wie Sie eine Geometrie transformieren, indem Sie CreateTransformedGeometry aufrufen.

So transformieren Sie eine Geometrie

  1. Deklarieren Sie eine ID2D1TransformedGeometry-Variable .
  2. Rufen Sie die CreateTransformedGeometry-Methode auf, um eine transformierte Geometrie zu erstellen.

Der folgende Code zeigt, wie Sie ein Stundenglas erstellen, das Stundenglas transformieren und die ursprüngliche und die resultierende Stundenbrille zeichnen.

// Create a path geometry.
if (SUCCEEDED(hr))
{
    hr = m_pD2DFactory->CreatePathGeometry(&m_pPathGeometry);

    if (SUCCEEDED(hr))
    {
        // Write to the path geometry using the geometry sink.
        hr = m_pPathGeometry->Open(&pSink);

        if (SUCCEEDED(hr))
        {
            pSink->BeginFigure(
                D2D1::Point2F(0, 0),
                D2D1_FIGURE_BEGIN_FILLED
                );

            pSink->AddLine(D2D1::Point2F(200, 0));

            pSink->AddBezier(
                D2D1::BezierSegment(
                    D2D1::Point2F(150, 50),
                    D2D1::Point2F(150, 150),
                    D2D1::Point2F(200, 200))
                );

            pSink->AddLine(D2D1::Point2F(0, 200));

            pSink->AddBezier(
                D2D1::BezierSegment(
                    D2D1::Point2F(50, 150),
                    D2D1::Point2F(50, 50),
                    D2D1::Point2F(0, 0))
                );

            pSink->EndFigure(D2D1_FIGURE_END_CLOSED);

            hr = pSink->Close();
        }
        SafeRelease(&pSink);
    }
}

if (SUCCEEDED(hr))
{
    // Create a transformed geometry which is tilted at an angle to the previous geometry
    hr = m_pD2DFactory->CreateTransformedGeometry(
        m_pPathGeometry,
        D2D1::Matrix3x2F::Rotation(
            45.f,
            D2D1::Point2F(100, 100)),
        &m_pTransformedGeometry
        );
}