⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module1.vb

📁 苏金明编写的《用VB.NET和VC#.NET开发交互式CAD系统》一书的源代码
💻 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 + -