ID2D1Geometry::Outline-Methoden

Berechnet die Gliederung der Geometrie und schreibt das Ergebnis in einen ID2D1SimplifiedGeometrySink.

Überladeliste

Methode Beschreibung
Outline(D2D1_MATRIX_3X2_F,ID2D1SimplifiedGeometrySink&*) Berechnet die Gliederung der Geometrie und schreibt das Ergebnis in einen ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,ID2D1SimplifiedGeometrySink*) Berechnet die Gliederung der Geometrie und schreibt das Ergebnis in einen ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F,FLOAT,ID2D1SimplifiedGeometrySink&*) Berechnet die Gliederung der Geometrie und schreibt das Ergebnis in einen ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,FLOAT,ID2D1SimplifiedGeometrySink*) Berechnet die Gliederung der Geometrie und schreibt das Ergebnis in einen ID2D1SimplifiedGeometrySink.

Bemerkungen

Mit der Outline-Methode kann der Aufrufer eine Geometrie mit einer entsprechenden Füllung der Eingabegeometrie mit den folgenden zusätzlichen Eigenschaften erstellen:

  • Die Ausgabegeometrie enthält keine quer übergreifenden Schnittmengen; Das heißt, Segmente können sich berühren, aber sie kreuzen sich nie.
  • Die äußersten Figuren in der Ausgabegeometrie sind alle gegen den Uhrzeigersinn ausgerichtet.
  • Die Ausgabegeometrie ist Füllmodus invariant; Das heißt, die Füllung der Geometrie hängt nicht von der Wahl des Füllmodus ab. Weitere Informationen zum Füllmodus finden Sie unter D2D1_FILL_MODE.

Darüber hinaus kann die Outline-Methode nützlich sein, um redundante Teile dieser Geometrien zu entfernen, um komplexe Geometrien zu vereinfachen. Es kann auch in Kombination mit ID2D1GeometryGroup nützlich sein, um gleichzeitig Unions zwischen mehreren Geometrien zu erstellen.

Beispiele

Der folgende Code zeigt, wie Sie mithilfe von Gliederung eine entsprechende Geometrie ohne Selbstschnitt erstellen. Es verwendet die standardmäßige Abflachungstoleranz und sollte daher nicht bei sehr kleinen Geometrien verwendet werden.

HRESULT D2DOutline(
    ID2D1Geometry *pGeometry,
    ID2D1Geometry **ppGeometry
    )
{
    HRESULT hr;
    ID2D1Factory *pFactory = NULL;
    pGeometry->GetFactory(&pFactory);

    ID2D1PathGeometry *pPathGeometry = NULL;
    hr = pFactory->CreatePathGeometry(&pPathGeometry);

    if (SUCCEEDED(hr))
    {
        ID2D1GeometrySink *pSink = NULL;
        hr = pPathGeometry->Open(&pSink);

        if (SUCCEEDED(hr))
        {
            hr = pGeometry->Outline(NULL, pSink);

            if (SUCCEEDED(hr))
            {
                hr = pSink->Close();

                if (SUCCEEDED(hr))
                {
                    *ppGeometry = pPathGeometry;
                    (*ppGeometry)->AddRef();
                }
            }
            pSink->Release();
        }
        pPathGeometry->Release();
    }

    pFactory->Release();

    return hr;
}

Anforderungen

Anforderung Wert
Bibliothek
D2d1.lib
DLL
D2d1.dll

Siehe auch

ID2D1Geometrie