D2D1 Геометрия пути: поведение пересекающихся фигур - PullRequest
1 голос
/ 10 мая 2019

У меня есть следующий код (+ некоторая обработка ошибок), который генерирует 2 прямоугольника с использованием одного экземпляра ID2D1PathGeometry:

  m_geometry->Open(&m_geometrySink);

  m_geometrySink->BeginFigure(D2D1::Point2F(100, 100), D2D1_FIGURE_BEGIN_FILLED);

  m_geometrySink->AddLine(D2D1::Point2F(300, 100));
  m_geometrySink->AddLine(D2D1::Point2F(300, 300));
  m_geometrySink->AddLine(D2D1::Point2F(100, 300));

  m_geometrySink->EndFigure(D2D1_FIGURE_END_CLOSED);

  m_geometrySink->BeginFigure(D2D1::Point2F(200, 200), D2D1_FIGURE_BEGIN_FILLED);

  m_geometrySink->AddLine(D2D1::Point2F(400, 200));
  m_geometrySink->AddLine(D2D1::Point2F(400, 400));
  m_geometrySink->AddLine(D2D1::Point2F(200, 400));

  m_geometrySink->EndFigure(D2D1_FIGURE_END_CLOSED);

  m_geometrySink->Close();

Это создает следующие прямоугольники: enter image description here

Как вы можете видеть, места, где они пересекаются, остаются без заполнения.

Мне интересно: Можно ли изменить это поведение (я хочу, чтобы пересекающаяся область также была заполнена) без необходимости создания дополнительного объекта ID2D1PathGeometry?

1 Ответ

1 голос
/ 10 мая 2019

Вы должны вызвать m_geometrySink->SetFillMode(D2D1_FILL_MODE_WINDING); до добавления фигур. В противном случае будет использоваться альтернативный режим заливки по умолчанию.

...