📄 clsline.cls
字号:
Next i
mvarBeginPoint = mvarMidPoint(1)
mvarEndPoint = mvarMidPoint(mvarMidPointCount)
DrawArrow
End If
i = (mvarMidPointCount + 1) / 2
k = Len(mvarLineName)
strLong = k
For j = 1 To k
If Asc(Mid(mvarLineName, j, 1)) < 0 Then
strLong = strLong + 1
End If
Next j
TextOut mvarDrawFrm.hdc, mvarMidPoint(i).X / 15 - strLong * 3, mvarMidPoint(i).Y / 15 - 5, mvarLineName, strLong
End Sub
Public Sub MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i, j, k As Integer
Dim tmpPoint As POINTAPI
mvarDrawFrm.DrawMode = 2
mvarDrawFrm.DrawWidth = 1
mvarDrawFrm.DrawStyle = 1
For i = 2 To mvarMidPointCount
mvarDrawFrm.Line (mvarMidPoint(i).X, mvarMidPoint(i).Y)-(mvarMidPoint(i - 1).X, mvarMidPoint(i - 1).Y)
Next i
If mvarBeginRect = 0 Then
Else
i = mvarBeginRect
Call mvarRect(i).ExistState(-100, -1000)
End If
If Button = 100 Then Exit Sub
If Button = 200 Then
DrawPoint
mvarSetActiveFlag = True
Exit Sub
End If
mvarDrawFrm.DrawMode = 2
mvarDrawFrm.DrawWidth = 1
mvarDrawFrm.DrawStyle = 1
For i = 1 To mvarMidPointCount
mvarMidPoint(i).X = mvarMidPoint(i).X + X
mvarMidPoint(i).Y = mvarMidPoint(i).Y + Y
If i > 1 Then
mvarDrawFrm.Line (mvarMidPoint(i).X, mvarMidPoint(i).Y)-(mvarMidPoint(i - 1).X, mvarMidPoint(i - 1).Y)
End If
Next i
'起点在那个节点上
k = 0
For i = 1 To mRectCount
tmpPoint = mvarMidPoint(1)
j = mvarRect(i).LinkPointState(CSng(tmpPoint.X), CSng(tmpPoint.Y))
If j = 0 Then
ElseIf j = 1 Then '上中点
Call mvarRect(i).ExistState(CSng(mvarRect(i).EndPoint.X), CSng(mvarRect(i).EndPoint.Y))
k = i
Exit For
ElseIf j = 2 Then '下中点
Call mvarRect(i).ExistState(CSng(mvarRect(i).EndPoint.X), CSng(mvarRect(i).EndPoint.Y))
k = i
Exit For
ElseIf j = 3 Then '左中点
Call mvarRect(i).ExistState(CSng(mvarRect(i).EndPoint.X), CSng(mvarRect(i).EndPoint.Y))
k = i
Exit For
ElseIf j = 4 Then '右中点
Call mvarRect(i).ExistState(CSng(mvarRect(i).EndPoint.X), CSng(mvarRect(i).EndPoint.Y))
k = i
Exit For
End If
Next i
' mvarBeginRect = k
' If j = 0 Then
' BeginRectPlace = ""
' ElseIf j = 1 Then
' BeginRectPlace = "上"
' ElseIf j = 2 Then
' BeginRectPlace = "下"
' ElseIf j = 3 Then
' BeginRectPlace = "右"
' ElseIf j = 4 Then
' BeginRectPlace = "左"
' End If
End Sub
Public Sub MoveLine(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer
mvarDrawFrm.DrawMode = 2
mvarDrawFrm.DrawWidth = 1
mvarDrawFrm.DrawStyle = 1
For i = 2 To mvarMidPointCount
mvarDrawFrm.Line (mvarMidPoint(i).X, mvarMidPoint(i).Y)-(mvarMidPoint(i - 1).X, mvarMidPoint(i - 1).Y)
Next i
If Button = 100 Then Exit Sub
If Button = 200 Then
DrawPoint
mvarSetActiveFlag = True
Exit Sub
End If
If Shift > mvarMidPointCount Then Exit Sub
If Shift = 1 Then '移动起点
If Button = 300 Then
If mvarMidPoint(Shift).X = mvarMidPoint(Shift + 1).X Then
mvarBeginPoint.X = mvarBeginPoint.X + X
mvarBeginPoint.Y = mvarBeginPoint.Y + Y
ReDraw 0
Else
mvarBeginPoint.X = mvarBeginPoint.X + X
mvarBeginPoint.Y = mvarBeginPoint.Y + Y
ReDraw 50
End If
Else
If mvarMidPoint(Shift).X = mvarMidPoint(Shift + 1).X Then
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift + 1).X = mvarMidPoint(Shift + 1).X + X
mvarMidPoint(Shift + 1).Y = mvarMidPoint(Shift + 1).Y + Y / 2
mvarMidPoint(Shift + 2).X = mvarMidPoint(Shift + 2).X + X
If Shift + 2 < mvarMidPointCount Then
mvarMidPoint(Shift + 3).X = mvarMidPoint(Shift + 3).X + X / 2
End If
Else
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift + 1).Y = mvarMidPoint(Shift + 1).Y + Y
mvarMidPoint(Shift + 1).X = mvarMidPoint(Shift + 1).X + X / 2
mvarMidPoint(Shift + 2).Y = mvarMidPoint(Shift + 2).Y + Y
If Shift + 2 < mvarMidPointCount Then
mvarMidPoint(Shift + 3).Y = mvarMidPoint(Shift + 3).Y + Y / 2
End If
End If
End If
ElseIf Shift = mvarMidPointCount Then '移动终点
If Button = 300 Then
If mvarMidPoint(Shift).X = mvarMidPoint(Shift - 1).X Then
mvarEndPoint.X = mvarEndPoint.X + X
mvarEndPoint.Y = mvarEndPoint.Y + Y
ReDraw 0
Else
mvarEndPoint.X = mvarEndPoint.X + X
mvarEndPoint.Y = mvarEndPoint.Y + Y
ReDraw 50
End If
Else
If mvarMidPoint(Shift).X = mvarMidPoint(Shift - 1).X Then
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift - 1).X = mvarMidPoint(Shift - 1).X + X
mvarMidPoint(Shift - 1).Y = mvarMidPoint(Shift - 1).Y + Y / 2
mvarMidPoint(Shift - 2).X = mvarMidPoint(Shift - 2).X + X
If Shift - 2 > 1 Then
mvarMidPoint(Shift - 3).X = mvarMidPoint(Shift - 3).X + X / 2
End If
Else
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift - 1).Y = mvarMidPoint(Shift - 1).Y + Y
mvarMidPoint(Shift - 1).X = mvarMidPoint(Shift - 1).X + X / 2
mvarMidPoint(Shift - 2).Y = mvarMidPoint(Shift - 2).Y + Y
If Shift - 2 > 1 Then
mvarMidPoint(Shift - 3).Y = mvarMidPoint(Shift - 3).Y + Y / 2
End If
End If
End If
ElseIf (Shift Mod 2) = 0 Then '移动线间的点
If mvarMidPointCount > 3 Then
If mvarMidPoint(Shift).X = mvarMidPoint(Shift - 1).X Then
mvarMidPoint(Shift - 1).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift + 1).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
If Shift - 1 > 0 Then
mvarMidPoint(Shift - 2).X = mvarMidPoint(Shift - 2).X + X / 2
End If
If Shift + 1 < mvarMidPointCount Then
mvarMidPoint(Shift + 2).X = mvarMidPoint(Shift + 2).X + X / 2
End If
Else
mvarMidPoint(Shift - 1).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift + 1).Y = mvarMidPoint(Shift).Y + Y
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
If Shift - 1 > 1 Then
mvarMidPoint(Shift - 2).Y = mvarMidPoint(Shift - 2).Y + Y / 2
End If
If Shift + 1 < mvarMidPointCount Then
mvarMidPoint(Shift + 2).Y = mvarMidPoint(Shift + 2).Y + Y / 2
End If
End If
End If
Else '移动线端点
If mvarMidPoint(Shift).X = mvarMidPoint(Shift - 1).X Then
mvarMidPoint(Shift - 1).X = mvarMidPoint(Shift - 1).X + X
mvarMidPoint(Shift - 1).Y = mvarMidPoint(Shift - 1).Y + Y / 2
mvarMidPoint(Shift - 2).X = mvarMidPoint(Shift - 2).X + X
If (Shift - 2) > 1 Then
mvarMidPoint(Shift - 3).X = mvarMidPoint(Shift - 3).X + X / 2
End If
Else
mvarMidPoint(Shift - 1).Y = mvarMidPoint(Shift - 1).Y + Y
mvarMidPoint(Shift - 1).X = mvarMidPoint(Shift - 1).X + X / 2
mvarMidPoint(Shift - 2).Y = mvarMidPoint(Shift - 2).Y + Y
If (Shift - 2) > 1 Then
mvarMidPoint(Shift - 3).Y = mvarMidPoint(Shift - 3).Y + Y / 2
End If
End If
If mvarMidPoint(Shift).X = mvarMidPoint(Shift + 1).X Then
mvarMidPoint(Shift + 1).X = mvarMidPoint(Shift + 1).X + X
mvarMidPoint(Shift + 1).Y = mvarMidPoint(Shift + 1).Y + Y / 2
mvarMidPoint(Shift + 2).X = mvarMidPoint(Shift + 2).X + X
If (Shift + 2) < mvarMidPointCount Then
mvarMidPoint(Shift + 3).X = mvarMidPoint(Shift + 3).X + X / 2
End If
Else
mvarMidPoint(Shift + 1).Y = mvarMidPoint(Shift + 1).Y + Y
mvarMidPoint(Shift + 1).X = mvarMidPoint(Shift + 1).X + X / 2
mvarMidPoint(Shift + 2).Y = mvarMidPoint(Shift + 2).Y + Y
If (Shift + 2) < mvarMidPointCount Then
mvarMidPoint(Shift + 3).Y = mvarMidPoint(Shift + 3).Y + Y / 2
End If
End If
mvarMidPoint(Shift).X = mvarMidPoint(Shift).X + X
mvarMidPoint(Shift).Y = mvarMidPoint(Shift).Y + Y
End If
For i = 2 To mvarMidPointCount
mvarDrawFrm.Line (mvarMidPoint(i).X, mvarMidPoint(i).Y)-(mvarMidPoint(i - 1).X, mvarMidPoint(i - 1).Y)
Next i
End Sub
Private Sub MergePoint()
Dim i, j As Integer
Dim MidPoint As POINTAPI
On Error Resume Next
If mvarMidPointCount = 3 Then Exit Sub
If (mvarMidPoint(1).X < mvarMidPoint(3).X + 10 And mvarMidPoint(1).X > mvarMidPoint(3).X - 10) And _
(mvarMidPoint(1).Y < mvarMidPoint(3).Y + 10 And mvarMidPoint(1).Y > mvarMidPoint(3).Y - 10) Then '合并起点
For i = 1 To mvarMidPointCount - 2
mvarMidPoint(i) = mvarMidPoint(i + 2)
Next i
mvarMidPointCount = mvarMidPointCount - 2
Call MergePoint
Exit Sub
End If
If (mvarMidPoint(mvarMidPointCount).X < (mvarMidPoint(mvarMidPointCount - 2).X + 10)) And _
(mvarMidPoint(mvarMidPointCount).X > (mvarMidPoint(mvarMidPointCount - 2).X - 10)) And _
(mvarMidPoint(mvarMidPointCount).Y < (mvarMidPoint(mvarMidPointCount - 2).Y + 10)) And _
(mvarMidPoint(mvarMidPointCount).Y > (mvarMidPoint(mvarMidPointCount - 2).Y - 10)) Then '合并终点
mvarMidPointCount = mvarMidPointCount - 2
Call MergePoint
Exit Sub
End If
For i = 5 To mvarMidPointCount - 2 Step 2
If (mvarMidPoint(i).X < (mvarMidPoint(i - 2).X + 10)) And _
(mvarMidPoint(i).X > (mvarMidPoint(i - 2).X - 10)) And _
(mvarMidPoint(i).Y < (mvarMidPoint(i - 2).Y + 10)) And _
(mvarMidPoint(i).Y > (mvarMidPoint(i - 2).Y - 10)) Then '合并终点
mvarMidPointCount = mvarMidPointCount - 4
If (mvarMidPoint(i + 2).X < mvarMidPoint(i - 4).X + 10) And _
(mvarMidPoint(i + 2).X > mvarMidPoint(i - 4).X - 10) Then
mvarMidPoint(i + 2).X = mvarMidPoint(i - 4).X
Else
mvarMidPoint(i + 2).Y = mvarMidPoint(i - 4).Y
End If
MidPoint.X = (mvarMidPoint(i + 2).X + mvarMidPoint(i - 4).X) / 2
MidPoint.Y = (mvarMidPoint(i + 2).Y + mvarMidPoint(i - 4).Y) / 2
mvarMidPoint(i - 3) = MidPoint
For j = i - 2 To mvarMidPointCount
mvarMidPoint(j) = mvarMidPoint(j + 4)
Next j
Call MergePoint
Exit Sub
End If
Next i
'处理开始节点
If mvarBeginRect > 0 Then
If mvarBeginRectPlace = "上" Then
If mvarMidPoint(1).X = mvarMidPoint(2).X Then
mvarMidPoint(1).X = mvarRect(mvarBeginRect).EndPoint.X
mvarMidPoint(2).X = mvarMidPoint(1).X
mvarMidPoint(3).X = mvarMidPoint(1).X
mvarMidPoint(1).Y = mvarRect(mvarBeginRect).EndPoint.Y - 400
mvarMidPoint(2).Y = (mvarMidPoint(1).Y + mvarMidPoint(3).Y) / 2
If mvarMidPointCount > 3 Then
mvarMidPoint(4).X = (mvarMidPoint(3).X + mvarMidPoint(5).X) / 2
End If
Else
mvarMidPoint(1).X = mvarRect(mvarBeginRect).EndPoint.X
mvarMidPoint(1).Y = mvarRect(mvarBeginRect).EndPoint.Y - 400
mvarMidPoint(2).Y = mvarMidPoint(1).Y
mvarMidPoint(3).Y = mvarMidPoint(1).Y
mvarMidPoint(2).X = (mvarMidPoint(1).X + mvarMidPoint(3).X) / 2
If mvarMidPointCount > 3 Then
mvarMidPoint(4).Y = (mvarMidPoint(3).Y + mvarMidPoint(5).Y) / 2
End If
End If
ElseIf mvarBeginRectPlace = "下" Then
If mvarMidPoint(1).X = mvarMidPoint(2).X Then
mvarMidPoint(1).X = mvarRect(mvarBeginRect).EndPoint.X
mvarMidPoint(2).X = mvarMidPoint(1).X
mvarMidPoint(3).X = mvarMidPoint(1).X
mvarMidPoint(1).Y = mvarRect(mvarBeginRect).EndPoint.Y + 400
mvarMidPoint(2).Y = (mvarMidPoint(1).Y + mvarMidPoint(3).Y) / 2
If mvarMidPointCount > 3 Then
mvarMidPoint(4).X = (mvarMidPoint(3).X + mvarMidPoint(5).X) / 2
End If
Else
mvarMidPoint(1).X = mvarRect(mvarBeginRect).EndPoint.X
mvarMidPoint(1).Y = mvarRect(mvarBeginRect).EndPoint.Y + 400
mvarMidPoint(2).Y = mvarMidPoint(1).Y
mvarMidPoint(3).Y = mvarMidPoint(1).Y
mvarMidPoint(2).X = (mvarMidPoint(1).X + mvarMidPoint(3).X) / 2
If mvarMidPointCount > 3 Then
mvarMidPoint(4).Y = (mvarMidPoint(3).Y + mvarMidPoint(5).Y) / 2
End If
End If
ElseIf mvarBeginRectPlace = "右" Then
If mvarMidPoint(1).X = mvarMidPoint(2).X Then
mvarMidPoint(1).Y = mvarRect(mvarBeginRect).EndPoint.Y
mvarMidPoint(1).X = mvarRect(mvarBeginRect).EndPoint.X - 300
mvarMidPoint(2).X = mvarMidPoint(1).X
mvarMidPoint(3).X = mvarMidPoint(1).X
mvarMidPoint(2).Y = (mvarMidPoint(1).Y + mvarMidPoint(3).Y) / 2
If mvarMidPointCount > 3 Then
mvarMidPoint(4).X = (mvarMidPoint(3).X + mvarMidPoint(5).X) / 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -