ccreatearc.vb

来自「苏金明编写的《用VB.NET和VC#.NET开发交互式CAD系统》一书的源代码」· VB 代码 · 共 105 行

VB
105
字号
'创建圆弧类
Public Class CCreateArc
    Implements ICommand

    Private m_Step As Integer
    Private m_Center, m_Begin, m_End As PointF

    Public Sub LButtonDown(ByVal g As Graphics, ByVal aPos As PointF) Implements ICommand.LButtonDown
        '记录鼠标左键的单击次数
        m_Step += 1
        Select Case m_Step
            Case 1               '第1次单击鼠标左键
                m_Center = aPos
            Case 2
                m_Begin = aPos
                m_End = aPos
                Dim tempArc1 As New CArc(m_Center, aPos, aPos)
                tempArc1.Draw(g, CGElement.geDrawMode.Drag)
                tempArc1 = Nothing
            Case 3
                '清除最后一次拖动时圆心到起点的橡皮线
                Dim tempLine1 As New CLine(m_Center, m_Begin)
                tempLine1.Draw(g, CGElement.geDrawMode.Drag)
                tempLine1 = Nothing

                '清除最后一次拖动时圆心到终点的橡皮线
                Dim tempLine2 As New CLine(m_Center, m_End)
                tempLine2.Draw(g, CGElement.geDrawMode.Drag)
                tempLine2 = Nothing

                '清除最后一次拖动时显示的橡皮弧
                Dim tempArc As New CArc(m_Center, m_Begin, m_End)
                tempArc.Draw(g, CGElement.geDrawMode.Drag)
                tempArc = Nothing

                '绘当前位置的圆弧
                Dim newArc As New CArc(m_Center, m_Begin, aPos)
                newArc.Draw(g, CGElement.geDrawMode.Normal)

                ges.Add(newArc)

                m_Step = 0

        End Select
    End Sub

    Public Sub MouseMove(ByVal g As Graphics, ByVal aPos As PointF) Implements ICommand.MouseMove

        Select Case m_Step
            Case 2
                Dim prePos As New PointF()
                Dim curPos As New PointF()

                prePos = m_End
                curPos = aPos

                '清除上一条圆心到终点的橡皮线
                Dim tempLine1 As New CLine(m_Center, prePos)
                tempLine1.Draw(g, CGElement.geDrawMode.Drag)
                tempLine1 = Nothing

                '清除上一个橡皮弧
                Dim tempArc1 As New CArc(m_Center, m_Begin, prePos)
                tempArc1.Draw(g, CGElement.geDrawMode.Drag)
                tempArc1 = Nothing

                '绘当前圆心到终点的橡皮线
                Dim tempLine2 As New CLine(m_Center, curPos)
                tempLine2.Draw(g, CGElement.geDrawMode.Drag)
                tempLine2 = Nothing

                '绘当前位置的橡皮弧
                Dim tempArc2 As New CArc(m_Center, m_Begin, curPos)
                tempArc2.Draw(g, CGElement.geDrawMode.Drag)
                tempArc2 = Nothing

                m_End = curPos

        End Select
    End Sub

    '单击鼠标右键时的绘图行为
    Public Sub RButtonDown(ByVal g As Graphics, ByVal aPos As PointF) Implements ICommand.RButtonDown
        If m_Step = 2 Then
            '清除圆心到起点的橡皮线
            Dim tempLine1 As New CLine(m_Center, m_Begin)
            tempLine1.Draw(g, CGElement.geDrawMode.Drag)
            tempLine1 = Nothing

            '清除圆心到终点的橡皮线
            Dim tempLine2 As New CLine(m_Center, m_End)
            tempLine2.Draw(g, CGElement.geDrawMode.Drag)
            tempLine2 = Nothing

            '清除橡皮弧
            Dim tempArc As New CArc(m_Center, m_Begin, m_End)
            tempArc.Draw(g, CGElement.geDrawMode.Drag)
            tempArc = Nothing
        End If

        m_Step = 0
    End Sub

End Class

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?