Public Sub MButtonDown(ByVal g As System.Drawing.Graphics, ByVal aPos As System.Drawing.PointF) Implements ICommand.MButtonDown
TempSelectPoints.Clear()
Dim prePos As New PointF()
m_Step += 1
Select Case m_Step
Case 1
TempSelectObjects.Clear()
p1 = aPos
DrawTPoint(g, p1) '设置一个标识点
Case 2
Dim m_lLinek As Double
TPoint_Clear(g) '清除标识点
p2 = aPos
If p2.X = p1.X Then
m_Begin.X = -lMax
m_Begin.Y = p1.Y
m_End.X = lMax
m_End.Y = p1.Y
Else
m_lLinek = (p2.Y - p1.Y) / (p2.X - p1.X)
'数学情形为以下注释
' y1 = p1.Y
' x1 = p1.X
' k = m_lLinek
' xb = m_Begin.X
' yb = m_Begin.Y
' xe = m_End.X
' ye = m_End.X
' if |y2-y1|>|x2-x1| then
' If ((x2 > x1) And (y2 > y1)) Or ((x2 < x1) And (y2 < y1)) Then
' yb = -lMax
' ye = lMax
' xe = (ye - y1) / k + x1
' xb = (yb - y1) / k + x1
' Else
' ye = -lMax
' yb = lMax
' xe = (ye - y1) / k + x1
' xb = (yb - y1) / k + x1
' else
' If ((x2 > x1) And (y2 > y1)) Or ((x2 < x1) And (y2 < y1)) Then
' xb = -lMax
' xe = lMax
' yb = (xb - x1) * k + y1
' ye = (xe - x1) * k + y1
' Else
' xb = lMax
' xe = -lMax
' yb = (xb - x1) * k + y1
' ye = (xe - x1) * k + y1
' End If
' End If
If Abs(p2.Y - p1.Y) > Abs(p2.X - p1.X) Then
If p2.X > p1.X Then
If p2.Y > p1.Y Then
m_Begin.Y = -lMax
m_End.Y = lMax
m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
Else
m_End.Y = -lMax
m_Begin.Y = lMax
m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
End If
Else
If p2.Y < p1.Y Then
m_Begin.Y = -lMax
m_End.Y = lMax
m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
Else
m_End.Y = -lMax
m_Begin.Y = lMax
m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
End If
End If
Else
If p2.X > p1.X Then
If p2.Y > p1.Y Then
m_Begin.X = -lMax
m_End.X = lMax
m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
Else
m_End.X = -lMax
m_Begin.X = lMax
m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
End If
Else
If p2.Y < p1.Y Then
m_Begin.X = -lMax
m_End.X = lMax
m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
Else
m_End.X = -lMax
m_Begin.X = lMax
m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
End If
End If
End If
End If
DrawLine(g, m_Begin, m_End)
qSelect(g)
m_Step = 0
End Select
End Sub