Вращение и направление сегмента дуги


Есть ли способ заставить сегмент дуги рисовать в определенном направлении? Насколько я могу судить, он всегда тянет сверху вниз. Например, у меня есть сегмент дуги, который начинается на 180 градусов (270 градусов-это север) и рисует почти эллипс на 180 градусов. Прямо сейчас, рисунок идет по часовой стрелке от....Ну, извини, давай я тебе покажу.

вещи

Левая-это значения, которые я получаю из набора значений преобразования, но мне нужно, чтобы он действовал как правой руки одно.

<Canvas Background="#FDB" Width="720" Height="540">
  <Path Canvas.Left="100" Canvas.Top="100" Stroke="#385D8A" StrokeThickness="2" StrokeLineJoin="Round" Fill="#4F81BD">
    <!-- this is the LEFT shape that I need drawn like the other one -->
    <Path.Data>
      <GeometryGroup>
        <PathGeometry>
          <PathGeometry.Figures>
            <PathFigure StartPoint="0,51" IsClosed="True">
              <PathFigure.Segments>
                <LineSegment Point="51,51" />
              </PathFigure.Segments>
            </PathFigure>
            <PathFigure StartPoint="25.5,0">
              <PathFigure.Segments>
                <LineSegment Point="25.5,102" />
              </PathFigure.Segments>
            </PathFigure>
            <PathFigure StartPoint="25.5,51" IsClosed="True" >
              <PathFigure.Segments>
                <ArcSegment Size="25.5,25.5" IsLargeArc="True" SweepDirection="Clockwise" Point="25.49,51" />
              </PathFigure.Segments>
            </PathFigure>
          </PathGeometry.Figures>
        </PathGeometry>
      </GeometryGroup>
    </Path.Data>
  </Path>
  <Path Canvas.Left="200" Canvas.Top="100" Stroke="#385D8A" StrokeThickness="2" StrokeLineJoin="Round" Fill="#4F81BD">
    <!-- this is the RIGHT shape, the way it should behave, but notice the different StartPoint and Point -->
    <Path.Data>
      <GeometryGroup>
        <PathGeometry>
          <PathGeometry.Figures>
            <PathFigure StartPoint="0,51" IsClosed="True">
              <PathFigure.Segments>
                <LineSegment Point="51,51" />
              </PathFigure.Segments>
            </PathFigure>
            <PathFigure StartPoint="25.5,0">
              <PathFigure.Segments>
                <LineSegment Point="25.5,102" />
              </PathFigure.Segments>
            </PathFigure>
            <PathFigure StartPoint="51,25.5" IsClosed="True" >
              <PathFigure.Segments>
                <ArcSegment Size="25.5,25.5" IsLargeArc="True" SweepDirection="Clockwise" Point="50.99,25.5" />
              </PathFigure.Segments>
            </PathFigure>
          </PathGeometry.Figures>
        </PathGeometry>
      </GeometryGroup>
    </Path.Data>
  </Path>
</Canvas>

Я пытался играть с RotationAngle, но это, кажется, не имеет никакого эффекта, поскольку он работает только с осью X, а не с осью Y.

Значения первого пути берутся из процедуры преобразования, поэтому я не могу легко изменить их.

1 2

1 ответ:

Я думаю, что понял это - просто сделайте ось Y короче, чем ось X. Итак:

<PathFigure StartPoint="51,25.5" IsClosed="True" >
    <PathFigure.Segments>
        <ArcSegment Point="50.99,25.5" Size="25.5,25.5" IsLargeArc="True" SweepDirection="Clockwise"  />
    </PathFigure.Segments>
</PathFigure>

Должно быть:

<PathFigure StartPoint="51,25.5" IsClosed="True" >
    <PathFigure.Segments>
        <ArcSegment Point="51,24.99" Size="25.5,25.5" IsLargeArc="True" SweepDirection="Clockwise"  />
    </PathFigure.Segments>
</PathFigure>

Вот так просто.