Métodos ID2D1Geometry::Outline

Calcula a estrutura de tópicos da geometria e grava o resultado em um ID2D1SimplifiedGeometrySink.

Lista de sobrecarga

Método Descrição
Outline(D2D1_MATRIX_3X2_F,ID2D1SimplifiedGeometrySink&*) Calcula a estrutura de tópicos da geometria e grava o resultado em um ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,ID2D1SimplifiedGeometrySink*) Calcula a estrutura de tópicos da geometria e grava o resultado em um ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F,FLOAT,ID2D1SimplifiedGeometrySink&*) Calcula a estrutura de tópicos da geometria e grava o resultado em um ID2D1SimplifiedGeometrySink.
Outline(D2D1_MATRIX_3X2_F*,FLOAT,ID2D1SimplifiedGeometrySink*) Calcula a estrutura de tópicos da geometria e grava o resultado em um ID2D1SimplifiedGeometrySink.

Comentários

O método Outline permite que o chamador produza uma geometria com um preenchimento equivalente à geometria de entrada, com as seguintes propriedades adicionais:

  • A geometria de saída não contém interseções transversais; ou seja, segmentos podem tocar, mas nunca cruzam.
  • As figuras mais externas na geometria de saída são todas orientadas no sentido anti-horário.
  • A geometria de saída é invariável no modo de preenchimento; ou seja, o preenchimento da geometria não depende da escolha do modo de preenchimento. Para obter mais informações sobre o modo de preenchimento, consulte D2D1_FILL_MODE.

Além disso, o método Outline pode ser útil na remoção de partes redundantes dessas geometrias para simplificar geometrias complexas. Ele também pode ser útil em combinação com ID2D1GeometryGroup para criar uniões entre várias geometrias simultaneamente.

Exemplos

O código a seguir mostra como usar a Estrutura de Tópicos para construir uma geometria equivalente sem interseções autônomas. Ele usa a tolerância de nivelamento padrão e, portanto, não deve ser usado com geometrias muito pequenas.

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

Requisitos

Requisito Valor
Biblioteca
D2d1.lib
DLL
D2d1.dll

Confira também

ID2D1Geometry