Как нарисовать половину эллипса в Win2D? - PullRequest
0 голосов
/ 15 марта 2019

Я хочу нарисовать нижнюю или верхнюю половину эллиптической дуги, используя Win2D в приложении C ++ / winrt.Я могу нарисовать кривую, но в ее начале есть диагональная линия, которая выглядит так, как будто я начал с отрезка прямой линии - как если бы фигура начиналась не с дуги, а с некоторого расстояния вниз и вправо.Как я могу ограничить рисование только дугой?Вот код и изображение результата:

float2 arcSize(100, 6);
auto pathBuilder = CanvasPathBuilder(drawingSession.Device());
pathBuilder.BeginFigure(244, 175);
//Starting at 3 o"clock, sweep pi radians, that is, to 9:00
pathBuilder.AddArc(arcSize,50,6,0.0, 3.14);
pathBuilder.EndFigure(CanvasFigureLoop::Open); //Don't close path
auto geometry = CanvasGeometry::CreatePath(pathBuilder);
session.DrawGeometry(geometry,244, 175, Colors::Black(),1.5);

The arc looks like it has a handle:

1 Ответ

0 голосов
/ 15 марта 2019

ОК, благодаря подсказке Inspectable у меня есть решение: проблема в том, где начинается путь. В моем коде я по ошибке использовал предложенный размер дуги в качестве первого аргумента AddArc, когда на самом деле это должны быть координаты центра дуги. И BeginFigure в случае этой дуги должно быть точкой, лежащей у правого края, в точке, которая будет 3:00 по кругу. Если ArcCenter правильно относительно BeginFigure, то AddArc не рисует дополнительную линию. [Обновление:] p.s. Координаты x и y для вызова DrawGeometry в этом случае должны быть равны нулю; который рисует его в исходных координатах из BeginFigure, а не в смещении. Может быть, этот p.s может получить мне еще -1 за этот вопрос.

...