Я хочу нарисовать стрелку в средней точке ссылки (это труба с начальным и конечным узлами). В нем будет течь. я написал код vb для решения этой задачи, но я застрял в точке, где головка стрелки меняет свое направление при изменении квадранта. На самом деле я хочу нарисовать стрелку вперед, если пользователь начинает с Start_Node и заканчивается на End_Node и аналогично стрелку назад, если пользователь начинает с End_Node и заканчивается в Start_Node. если есть рисунок ctrl с: + X в правой части и + Y в нижней части.
Private Sub DrawArrowInPipes(ctrl As MapControl, g As Graphics)
Dim arrowpen As New Pen(Brushes.Yellow, 3)
Dim rotationangle As Double = GetInclination '
'If rotationangle < 0 Then rotationangle = 360 - rotationangle
' rotationangle = 360 - GetInclination
Dim midp As PointF = ctrl.ToScreenCoordinates(MidPoint)
Dim arrowvector As Vector2D = New Vector2D(15, 0)
If flow < 0 Then rotationangle += 180
Dim side1 As Double = 180 + 45
Dim side2 As Double = 180 - 45
Dim p1 As PointF = midp + arrowvector.Rotate(side1)
Dim p2 As PointF = midp + arrowvector.Rotate(side2)
' If flow <> 0 Then g.DrawLines(arrowpen, New PointF() {p1, midp, p2})
g.DrawLines(arrowpen, New PointF() {p1, midp, p2})
End Sub
<Browsable(False)>
Public ReadOnly Property GetInclination() As Double
Get
Dim V1 As Vector2D = EndNode.DrawnPosition - StartNode.DrawnPosition
Return Math.Atan2(V1.Y, V1.X) * 180 / Math.PI
End Get
End Property
Требуется помощь.
Решено с помощью:
Private Sub DrawArrowInPipes(ctrl As SwMapControl, g As Graphics)
Dim arrowpen As New Pen(Color.FromArgb(167, 25, 48), 2)
Dim rotationangle As Double = 360 - GetInclination
Dim midp As PointF = ctrl.ToScreenCoordinates(MidPoint)
Dim arrowvector As Vector2D = New Vector2D(10, 0)
If flow < 0 Then rotationangle += 180
Dim p1 As PointF = midp + arrowvector.Rotate(rotationangle + 45 + 180)
Dim p2 As PointF = midp + arrowvector.Rotate(rotationangle - 45 + 180)
g.DrawLines(arrowpen, New PointF() {p1, midp, p2})
End Sub