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

📄 frmmain.frm

📁 都是基于VB所做的程序集合,值得大家作为实践的参考资料.
💻 FRM
字号:
VERSION 5.00
Object = "{03ED3B1E-ED1B-4A2E-8FE3-D8D1A673F5D4}#5.2#0"; "SuperMap.ocx"
Begin VB.Form Frm3PArc 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "三点画弧"
   ClientHeight    =   6555
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   9330
   FillColor       =   &H00C0C0C0&
   ForeColor       =   &H8000000F&
   Icon            =   "frmMain.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   6555
   ScaleWidth      =   9330
   StartUpPosition =   3  'Windows Default
   Begin SuperMapLib.SuperMap sm 
      Height          =   6090
      Left            =   30
      TabIndex        =   4
      Top             =   450
      Width           =   9255
      _Version        =   327682
      _ExtentX        =   16325
      _ExtentY        =   10742
      _StockProps     =   160
      Appearance      =   1
   End
   Begin SuperMapLib.SuperWorkspace sw 
      Left            =   6780
      Top             =   180
      _Version        =   327682
      _ExtentX        =   847
      _ExtentY        =   847
      _StockProps     =   0
   End
   Begin VB.OptionButton OptNothing 
      Caption         =   "什么也不做"
      Height          =   195
      Left            =   90
      TabIndex        =   3
      Top             =   150
      Value           =   -1  'True
      Width           =   1245
   End
   Begin VB.OptionButton OptTrackArc3P 
      Caption         =   "scaTrackArc3P"
      ForeColor       =   &H00FF0000&
      Height          =   195
      Left            =   4470
      TabIndex        =   2
      Top             =   150
      Width           =   1995
   End
   Begin VB.OptionButton OptCircle3P 
      Caption         =   "scaEditCreateCircle3P"
      ForeColor       =   &H00008000&
      Height          =   195
      Left            =   2410
      TabIndex        =   1
      Top             =   150
      Width           =   1995
   End
   Begin VB.OptionButton OptCustom 
      Caption         =   "自定义"
      ForeColor       =   &H000000FF&
      Height          =   195
      Left            =   1400
      TabIndex        =   0
      Top             =   150
      Width           =   900
   End
End
Attribute VB_Name = "Frm3PArc"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'=====================================SuperMap Objects示范工程说明=================================
'
'功能简介:示范利用SuperMap Objects画三点弧的功能。SuperMap Objects画三点弧的方法比较灵活,可以提供三种
'         方式,一种是用户自定义方式,另两种直接借助SuperMap定义的Action。此示例对于跟踪层和几何对象的操作
'         是很好的示范。
'所用控件:SuperMap 控件、SuperWorkspace 控件
'所用数据:临时创建的Track.sdb数据源
'操作说明:
'         选中某种画圆弧方式后在地图窗口中进行操作即可
'         本例中sm为Supermap的name; sw为SuperWorkspace的name
'
'===================================SuperMap Objects示范工程说明结束================================
Option Explicit
Dim iMyAction As Integer    '用来表示是否开始画三点圆弧,如果为1则开始画
Dim objMyPoints As New soPoints '依次记录三点弧的三个点

Private Sub Form_Load() '创建Track数据源,elements的CAD数据集
    Dim objDatasource As soDataSource
    Dim objDataset As soDataset
    
    iMyAction = 0
    sm.Connect sw.Object
    
    Set objDatasource = sw.CreateDataSource(App.Path & "\..\Data\MakeWith3p\Track.sdb", "Track", sceSDBPlus, False, True, False, "")
    If Not (objDatasource Is Nothing) Then
        Set objDataset = objDatasource.CreateDataset("Elements", scdCAD, scoDefault)
        If Not (objDataset Is Nothing) Then
            sm.Layers.AddDataset objDataset, True
        Else
            MsgBox "创建数据集失败"
        End If
    Else
        MsgBox "创建默认数据源track.sdb失败"
    End If
    
    Set objDatasource = Nothing
    Set objDataset = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set objMyPoints = Nothing
    sm.Close
    sm.Disconnect
    sw.Close
End Sub



Private Sub OptCircle3P_Click() '编辑三点弧
    If OptCircle3P.Value Then
        iMyAction = 2
        sm.Action = scaNull
        sm.Layers.SetEditableLayer 1
        sm.CurStyle.PenColor = RGB(0, 255, 0)
        sm.Action = scaEditCreateArc3P
    End If
End Sub

Private Sub OptCustom_Click() '自定义
    If OptCustom.Value Then
        sm.selection.RemoveAll
        sm.Refresh
        sm.Layers.SetEditableLayer 0
        sm.Action = scaTrackPoint
        iMyAction = 1
        objMyPoints.RemoveAll
    End If
End Sub


Private Sub OptNothing_Click() '什么也不做
    If OptNothing.Value Then
        sm.selection.RemoveAll
        sm.Refresh
        sm.Action = scaNull
        iMyAction = 0
        objMyPoints.RemoveAll
        sm.Layers.SetEditableLayer 0
    End If
End Sub

Private Sub OptTrackArc3P_Click() '跟踪层上绘制3点圆弧
   If OptTrackArc3P.Value Then
        sm.selection.RemoveAll
        sm.Layers.SetEditableLayer 0
        iMyAction = 3
        sm.Action = scaTrackArc3P
        sm.Refresh
    End If
End Sub

Private Sub sm_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    If Button = 2 Then
        If objMyPoints.Count > 0 Then
            objMyPoints.RemoveAll
        End If
        sm.TrackingLayer.ClearEvents
    End If
End Sub

Private Sub sm_Tracked()
    Dim objStyle As New soStyle
    Dim objGeoPoint As soGeoPoint
    Dim objPoints As New soPoints
    Dim objGeoLine As New soGeoLine
    Dim objGeoArc As New soGeoArc
    Dim objRecordset As soRecordset
    
    Select Case iMyAction
        Case 1
            objStyle.PenColor = RGB(255, 0, 0)
            objStyle.SymbolSize = 20
            Select Case objMyPoints.Count  '根据画过的点数处理跟踪层
                Case 0 '第一个点
                    sm.TrackingLayer.ClearEvents
                    sm.TrackingLayer.AddEvent sm.TrackedGeometry, objStyle, "Point1"
                    Set objGeoPoint = sm.TrackedGeometry
                    objMyPoints.Add2 objGeoPoint.x, objGeoPoint.y
                    sm.TrackingLayer.Refresh
                Case 1 '第二个点
                    Set objGeoPoint = sm.TrackedGeometry
                    objMyPoints.Add2 objGeoPoint.x, objGeoPoint.y
    
                    '在Trackinglayer上面显示第一点和第二点之间的连线
                    sm.TrackingLayer.RemoveEvent "Line"
                    objPoints.Add objMyPoints.Item(1)
                    objPoints.Add objMyPoints.Item(2)
                    objGeoLine.AddPart objPoints
                    objStyle.PenStyle = 2
                    objStyle.PenColor = RGB(196, 196, 196)
                    sm.TrackingLayer.AddEvent objGeoLine, objStyle, "Line1"
    
                    objStyle.PenColor = RGB(255, 0, 0)
                    sm.TrackingLayer.AddEvent sm.TrackedGeometry, objStyle, "Point2"
                    sm.TrackingLayer.Refresh
                Case 2 '第三个点
                    Set objGeoPoint = sm.TrackedGeometry
                    objMyPoints.Add2 objGeoPoint.x, objGeoPoint.y
                    objGeoArc.MakeWith3P objMyPoints.Item(1), objMyPoints.Item(2), objMyPoints.Item(3)
                    Set objGeoArc.Style = objStyle
                    Set objRecordset = sm.Layers(1).Dataset.Query("1<0", True)
                    objRecordset.AddNew objGeoArc
                    objRecordset.Update
                    sm.TrackingLayer.ClearEvents
                    objMyPoints.RemoveAll  '清空,以便进行下一次绘图
                    sm.Refresh
            End Select
            
        Case 2
        Case 3  '通过在跟踪层上画三点弧的方式进行画三点弧,此处截获三点弧并保存下来
            Set objGeoArc = sm.TrackedGeometry
            objStyle.PenColor = RGB(0, 0, 255)
            Set objGeoArc.Style = objStyle
            If Not (objGeoArc Is Nothing) Then
                Set objRecordset = sm.Layers(1).Dataset.Query("1<0", True)
                objRecordset.AddNew objGeoArc
                objRecordset.Update
                sm.Refresh
            End If
    End Select
    
    Set objStyle = Nothing
    Set objGeoLine = Nothing
    Set objGeoPoint = Nothing
    Set objPoints = Nothing
    Set objRecordset = Nothing
End Sub

Private Sub sm_Tracking(ByVal x As Double, ByVal y As Double, ByVal dCurrentLength As Double, ByVal dCurrentAngle As Double, ByVal dTotalLength As Double, ByVal dTotalArea As Double, ByVal nButtonClicked As Long)
    Dim objStyle As New soStyle
    Dim objPoints As New soPoints
    Dim objGeoLine As New soGeoLine
    Dim objGeoArc As New soGeoArc
    Dim objPoint As New soPoint
    
    Select Case iMyAction
        Case 1
            objStyle.PenColor = RGB(196, 196, 196)
            Select Case objMyPoints.Count
                Case 0
                Case 1  '根据当前点和前一个点连线
                    sm.TrackingLayer.RemoveEvent "Line" '清楚跟踪层
                    objPoints.Add objMyPoints.Item(1)
                    objPoints.Add2 x, y
                    objGeoLine.AddPart objPoints
                    objStyle.PenStyle = 2
                    sm.TrackingLayer.AddEvent objGeoLine, objStyle, "Line"
                    sm.TrackingLayer.Refresh
                Case 2  '根据当前点和前两个点连线
                    sm.TrackingLayer.RemoveEvent "Line2"
                    sm.TrackingLayer.RemoveEvent "Arc"
                    
                    objPoints.Add objMyPoints.Item(2)
                    objPoints.Add2 x, y
                    objGeoLine.AddPart objPoints
                    objStyle.PenStyle = 2
                    sm.TrackingLayer.AddEvent objGeoLine, objStyle, "Line2"
                    
                    objPoint.x = x
                    objPoint.y = y
                    objGeoArc.MakeWith3P objMyPoints.Item(1), objMyPoints.Item(2), objPoint
                    
                    objStyle.PenColor = RGB(255, 0, 0)
                    objStyle.PenStyle = 0
                    Set objGeoArc.Style = objStyle
                    
                    sm.TrackingLayer.AddEvent objGeoArc, objStyle, "Arc"
                    sm.TrackingLayer.Refresh
            End Select
    End Select
    
    Set objStyle = Nothing
    Set objPoints = Nothing
    Set objPoint = Nothing
    Set objGeoLine = Nothing
    Set objGeoArc = Nothing
End Sub

⌨️ 快捷键说明

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