Draw end of arrow on quadratic bezier segment using xaml

What is the easiest way to draw an arrow at the end of a QuadraticBezierSegment ? The tricky part is getting the right rotation to handle the incoming line segment.

Any ideas on how to do this? Should I extend the PathSegment ?

Bezier segment with an arrow at the end

I have this for drawing a simple bezier string.

<Path Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigureCollection>
          <PathFigure StartPoint="100,430">
            <PathFigure.Segments>
              <PathSegmentCollection>
                <QuadraticBezierSegment Point1="150,250" Point2="250,300" />
              </PathSegmentCollection>
            </PathFigure.Segments>
          </PathFigure>
        </PathFigureCollection>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>
+5
source share
1 answer

You can define the geometry for the arrowhead .... but for proper orientation at the end of the bezier curve, trial and error would be required.

, , .

  • http://blogs.msdn.com/b/mrochon/archive/2011/01/10/custom-line-caps-in-wpf.aspx

    <loc:CappedLine Stroke="Red" StrokeThickness="1" Canvas.Left="40" Canvas.Top="200" RenderTransformOrigin="0.5,0.5" Height="107" Width="195">
        <loc:CappedLine.EndCap>
            <GeometryGroup>
                <LineGeometry StartPoint="0,0" EndPoint="10,10"/>
                <LineGeometry StartPoint="0,0" EndPoint="10,-10"/>
            </GeometryGroup>
        </loc:CappedLine.EndCap>
        <loc:CappedLine.LinePath>
            <PathGeometry Figures="M0,0 C1,1 10.5,75.5 48.5,66.5 86.5,57.5 5,3.5000146 105.5,16.500091 157.5,29.500166 164.5,87.500505 164.5,87.500505" />
        </loc:CappedLine.LinePath>
    </loc:CappedLine>
    
    <loc:CappedLine Stroke="Red" StrokeThickness="1" Canvas.Left="180" Canvas.Top="200" RenderTransformOrigin="0.5,0.5" Height="107" Width="195">
        <loc:CappedLine.EndCap>
            <GeometryGroup>
                <LineGeometry StartPoint="0,0" EndPoint="10,10"/>
                <LineGeometry StartPoint="0,0" EndPoint="10,-10"/>
            </GeometryGroup>
        </loc:CappedLine.EndCap>
        <loc:CappedLine.LinePath>
            <PathGeometry Figures="M0,0 C1,1 10.5,75.5 48.5,66.5 86.5,57.5 5,3.5000146 105.5,16.500091" />
        </loc:CappedLine.LinePath>
    </loc:CappedLine>
    

enter image description here

+8

All Articles