Поделиться через


Методы ID2D1Geometry::Outline

Вычисляет структуру геометрии и записывает результат в идентификатор ID2D1SimplifiedGeometrySink.

Список перегрузки

Метод Description
Структура(D2D1_MATRIX_3X2_F&;ID2D1SimplifiedGeometrySink*) Вычисляет структуру геометрии и записывает результат в идентификатор ID2D1SimplifiedGeometrySink.
Структура(D2D1_MATRIX_3X2_F*,ID2D1SimplifiedGeometrySink*) Вычисляет структуру геометрии и записывает результат в идентификатор ID2D1SimplifiedGeometrySink.
Структура(D2D1_MATRIX_3X2_F&;FLOAT,ID2D1SimplifiedGeometrySink*) Вычисляет структуру геометрии и записывает результат в идентификатор ID2D1SimplifiedGeometrySink.
Структура(D2D1_MATRIX_3X2_F*,FLOAT,ID2D1SimplifiedGeometrySink*) Вычисляет структуру геометрии и записывает результат в идентификатор ID2D1SimplifiedGeometrySink.

Замечания

Метод Outline позволяет вызывающему объекту создавать геометрию с эквивалентной заливкой входной геометрии со следующими дополнительными свойствами:

  • Геометрия выходных данных не содержит поперечных пересечений; то есть сегменты могут касаться, но они никогда не пересекаются.
  • Наиболее внешние фигуры в геометрии выходных данных — это все ориентированные счетчики со стрелкой.
  • Выходная геометрия — инвариантный режим заполнения; То есть заливка геометрии не зависит от выбора режима заполнения. Дополнительные сведения о режиме заполнения см. в D2D1_FILL_MODE.

Кроме того, метод Outline может быть полезен при удалении избыточных частей указанных геометрий для упрощения сложных геометрий. Это также может быть полезно в сочетании с ID2D1GeometryGroup для создания союзов между несколькими геометриями одновременно.

Примеры

В следующем коде показано, как использовать структуру для создания эквивалентной геометрии без самостоятельного пересечения. Он использует допустимое значение по умолчанию, поэтому не следует использовать с очень небольшими геометриями.

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

Requirements

Требование Значение
Библиотека
D2d1.lib
DLL-библиотеки
D2d1.dll

См. также

ID2D1Geometry