📄 module1.vb
字号:
Imports System.Math
imports System.Drawing.Drawing2D
Module Module1
Public Const PI = 3.1416
Public Enum geDrawMode
Normal = 1
Selec = 2
Drag = 3
Delete = 4
End Enum
Public Enum geType
Line = 1
Circle = 2
Arc = 3
Text = 4
End Enum
Public Enum geStyle
Solid = 1
Dash = 2
Dot = 3
DashDot = 4
DashDotDot = 5
End Enum
Public viewDX As Single
Public viewDY As Single
Public viewScale As Single = 1
Public viewLT As New PointF()
Public viewRB As New PointF()
Public transDX As Single
Public transDY As Single
Public transScale As Single = 1
Public PickRadius As Single = 3
Public geNum As Integer
Public aCommand As ICommand
Public ges As New ArrayList()
Public geSels As New ArrayList()
Public creLine As New CCreateLine()
Public creRectangle As New CCreateRectangle()
Public creCircle As New CCreateCircle()
Public creArc As New CCreateArc()
Public creText As New CCreateText()
Private mat As New Matrix()
'计算点与点之间的距离
Public Function DistPtoP(ByVal p1 As PointF, ByVal p2 As PointF) As Single
Dim dx, dy As Single
dx = p2.X - p1.X
dy = p2.Y - p1.Y
Return Sqrt((dx * dx) + (dy * dy))
End Function
'计算点间连线与X轴正向之间的夹角
Public Function GetAngle(ByVal p1 As PointF, ByVal p2 As PointF) As Single
Dim tansita, sita, dx As Single
dx = Abs(p2.X - p1.X)
If p2.X = p1.X Then dx = 0.0001
tansita = Abs(p2.Y - p1.Y) / dx
sita = Atan(tansita)
'如果终点横坐标大于、等于起点横坐标,并且终点纵坐标大于、等于起点纵坐标
If p2.X >= p1.X And p2.Y >= p1.Y Then
Return sita
'如果终点横坐标小于、等于起点横坐标,并且终点纵坐标大于、等于起点纵坐标
ElseIf p2.X <= p1.X And p2.Y >= p1.Y Then
Return PI - sita
'如果终点横坐标小于、等于起点横坐标,并且终点纵坐标小于、等于起点纵坐标
ElseIf p2.X <= p1.X And p2.Y <= p1.Y Then
Return PI + sita
'如果终点横坐标大于、等于起点横坐标,并且终点纵坐标小于、等于起点纵坐标
ElseIf p2.X >= p1.X And p2.Y <= p1.Y Then
Return PI * 2 - sita
End If
End Function
Public Sub Coordinate(ByVal g As Graphics)
g.TranslateTransform(viewDX, viewDY, MatrixOrder.Append)
g.ScaleTransform(viewScale, viewScale, MatrixOrder.Append)
g.Clear(Color.White)
DrawAll(g)
End Sub
Public Sub DrawAll(ByVal g As Graphics)
Dim i As Integer
For i = 0 To ges.Count - 1
ges(i).draw(g, geDrawMode.Normal)
Next
End Sub
Public Sub DrawSel(ByVal g As Graphics)
Dim i As Integer
For i = 0 To geSels.Count - 1
geSels(i).draw(g, geDrawMode.Selec)
Next
End Sub
'页面坐标转换为通用坐标
Public Function PagetoWorld(ByVal ep As PointF) As PointF
Dim p As New PointF()
With ep
p.X = (.X - viewDX) * viewScale
p.Y = -(.Y - viewDY) * viewScale
End With
Return p
End Function
'通用坐标转换为页面坐标
Public Function WorldtoPage(ByVal pp As PointF) As PointF
Dim p As New PointF()
With pp
p.X = .X / viewScale + viewDX
p.Y = -.Y / viewScale + viewDY
End With
Return p
End Function
End Module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -