Вы правы, Size
из ArcSegment
не является радиусом между точками, которые определяют начало и конец дуги.Это свойство описывает, насколько большим должен быть эллипс между этими точками.Если вы хотите иметь круг вместо эллипса, вы должны всегда помнить, что значения x и y размера должны быть одинаковыми.Если вы хотите, чтобы всегда была нарисована половина круга, вам также необходимо убедиться, что Size
будет половиной расстояния между этими двумя точками.
Например, посмотрите на код ниже:
<Canvas>
<Path Stroke="Black">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="100,100">
<ArcSegment IsLargeArc="True"
Size="50, 50"
Point="200, 100"
SweepDirection="Clockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
Нарисует верхнюю половину круга, которая начинается в точке 100, 100
и заканчивается в точке 200, 100
.Так как я установил свойство Size
на 50, 50
(расстояние между этими точками равно 100), это создаст ровно половину круга.SweepDirection
утверждает, что круг должен быть нарисован по часовой стрелке, и именно поэтому он будет рисовать верхнюю половину.Проверьте разницу между Clockwise
и Counterclockwise
на экранах ниже:
IsLargeArc
выбирает, рисовать большую часть эллипса или меньше.Поскольку я рисую половину круга, это не имеет смысла, но если бы вы нарисовали эллипс с другим размером, это значительно изменило бы внешний вид выходного документа, просто поиграйте с ним, чтобы увидеть, как он работает.
Вот какэто выглядит, когда вы пытаетесь поместить размер 200, 200
, clockwise
, используя его большую часть дуги.Как вы можете видеть - дуга даже не подходит к окну (это снимок из дизайнера WPF, в нормальном приложении часть с переполнением будет обрезана)
И это то же самое, но с небольшим размеромarc:
Когда я изменил свойство Size
на 200, 200
, нарисованный круг просто в 4 раза больше, но все еще начинается и заканчивается в точных точках, которые вы определили.Size
не имеет ничего общего с точками, между которыми вы рисуете свой эллипс / крикл, но это меняет вид эллипса.
Я надеюсь, что оно показывает вам, что означает Size
в ArcSegment
не стесняйтесь задавать более подробные вопросы, если вы все еще в замешательстве.