Condividi tramite


Metodi ID2D1Geometry::Outline

Calcola la struttura della geometria e scrive il risultato in un ID2D1SimplifiedGeometrySink.

Elenco di overload

metodo Descrizione
Outline(D2D1_MATRIX_3X2_F&,ID2D1SimplifiedGeometrySink*) Calcola la struttura della geometria e scrive il risultato in un ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,ID2D1SimplifiedGeometrySink*) Calcola la struttura della geometria e scrive il risultato in un ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F&,FLOAT,ID2D1SimplifiedGeometrySink*) Calcola la struttura della geometria e scrive il risultato in un ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,FLOAT,ID2D1SimplifiedGeometrySink*) Calcola la struttura della geometria e scrive il risultato in un ID2D1SimplifiedGeometrySink.

Osservazioni:

Il metodo Outline consente al chiamante di produrre una geometria con un riempimento equivalente alla geometria di input, con le proprietà aggiuntive seguenti:

  • La geometria di output non contiene intersezioni trasverse; cioè, i segmenti possono toccare, ma non si incrociano mai.
  • Le figure più esterne nella geometria di output sono tutte orientate in senso antiorario.
  • La geometria di output è invariante in modalità riempimento; ovvero, il riempimento della geometria non dipende dalla scelta della modalità di riempimento. Per altre informazioni sulla modalità di riempimento, vedere D2D1_FILL_MODE.

Inoltre, il metodo Outline può essere utile per rimuovere parti ridondanti delle geometrie dette per semplificare geometrie complesse. Può essere utile anche in combinazione con ID2D1GeometryGroup per creare unioni tra più geometrie contemporaneamente.

Esempi

Nel codice seguente viene illustrato come usare Outline per costruire una geometria equivalente senza intersezioni self-intersezioni. Usa la tolleranza di appiattimento predefinita e pertanto non deve essere usata con geometrie molto piccole.

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;
}

Requisiti

Requisito Valore
Libreria
D2d1.lib
DLL
D2d1.dll

Vedi anche

ID2D1Geometry