CDocument.cls
上传用户:yayuwl
上传日期:2022-03-18
资源大小:8952k
文件大小:4k
源码类别:

CAD

开发平台:

VBA

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "CDocument"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = False
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Private m_Entitys As New Collection
  15. Private m_oApp As AcadApplication
  16. Private WithEvents m_oDoc As AcadDocument
  17. Attribute m_oDoc.VB_VarHelpID = -1
  18. Private m_sName As String
  19. Private m_Owner As TlsReactor
  20. Private m_dhWnd As Long
  21. Public Property Let Owner(ByVal vNewValue As TlsReactor)
  22. On Error Resume Next
  23.     Set m_Owner = vNewValue
  24. End Property
  25. Public Property Let Application(ByVal vNewValue As AcadApplication)
  26. On Error Resume Next
  27.     Set m_oApp = vNewValue
  28.     Set m_oDoc = m_oApp.ActiveDocument
  29.     m_dhWnd = m_oDoc.hwnd
  30. End Property
  31. Public Property Let Name(ByVal vNewValue As String)
  32.     m_sName = vNewValue
  33. End Property
  34. Public Sub Add(ByVal Entity As AcadObject, ByVal Value)
  35. On Error Resume Next
  36.     Dim oEnt As New CEntity
  37.     oEnt.Entity = Entity
  38.     oEnt.Value = Value
  39.     oEnt.Owner = m_Owner
  40.     m_Entitys.Add oEnt, "CEntity" & Entity.ObjectID
  41. End Sub
  42. Public Sub LoadData()
  43. On Error Resume Next
  44.     Dim Entity As AcadObject
  45.     Dim Infos
  46.     Dim oEnt As CEntity
  47.     Infos = GetXRecord("TlsReactor", m_sName)
  48.     For Each i In Infos
  49.         Err.Clear
  50.         Set Entity = m_oDoc.HandleToObject(LeftStr(i, ","))
  51.         If Not Err And i <> "" Then
  52.             Set oEnt = New CEntity
  53.             oEnt.Owner = m_Owner
  54.             oEnt.EntityInfo = i
  55.             m_Entitys.Add oEnt, "CEntity" & Entity.ObjectID
  56.         End If
  57.     Next i
  58. End Sub
  59. Public Sub SaveData()
  60. On Error Resume Next
  61.     Dim Infos As New Collection
  62.     Dim Info As String
  63.     For Each i In m_Entitys
  64.         Info = i.EntityInfo
  65.         If Info <> "" Then Infos.Add Info
  66.     Next i
  67.     SetXRecord "TlsReactor", m_sName, Col2Arr(Infos)
  68. End Sub
  69. Private Function Col2Arr(ByVal Values As Collection)
  70. On Error Resume Next
  71.     Dim arr()
  72.     ReDim arr(Values.Count - 1)
  73.     For i = 0 To Values.Count - 1
  74.         arr(i) = Values(i + 1)
  75.     Next i
  76.     Col2Arr = arr
  77. End Function
  78. Private Function SetXRecord(ByVal DictName As String, ByVal Keyword As String, ByVal XRecordData)
  79. On Error Resume Next
  80.     Dim pDict As AcadDictionary
  81.     Dim pXRecord As AcadXRecord
  82.     Dim XRecordType() As Integer
  83.     Dim pLen As Integer
  84.     Set pDict = m_oDoc.Dictionaries.Add(DictName)
  85.     Set pXRecord = pDict.AddXRecord(Keyword)
  86.     pLen = UBound(XRecordData)
  87.     ReDim XRecordType(pLen) As Integer
  88.     For i = 0 To pLen
  89.         Select Case VarType(XRecordData(i))
  90.             Case vbInteger, vbLong
  91.                 XRecordType(i) = 70
  92.             Case vbSingle, vbDouble
  93.                 XRecordType(i) = 40
  94.             Case vbString
  95.                 XRecordType(i) = 1
  96.         End Select
  97.     Next i
  98.     pXRecord.SetXRecordData XRecordType, XRecordData
  99. End Function
  100. Private Function GetXRecord(ByVal DictName As String, ByVal Keyword As String)
  101. On Error Resume Next
  102.     Dim pDict As AcadDictionary
  103.     Dim pXRecord As AcadXRecord
  104.     Dim xt
  105.     Set pDict = m_oDoc.Dictionaries(DictName)
  106.     Set pXRecord = pDict.GetObject(Keyword)
  107.     pXRecord.GetXRecordData xt, GetXRecord
  108. End Function
  109. Private Function LeftStr(ByVal String1 As Variant, ByVal String2 As Variant)
  110. On Error Resume Next
  111.     LeftStr = Left(String1, InStr(String1, String2) - 1)
  112.     If InStr(String1, String2) = 0 Then LeftStr = String1
  113. End Function
  114. Private Sub m_oDoc_BeginClose()
  115. On Error Resume Next
  116.     Set m_Entitys = Nothing
  117.     m_Owner.RemoveDoc m_dhWnd
  118. End Sub
  119. Private Sub m_oDoc_BeginDoubleClick(ByVal PickPoint As Variant)
  120. On Error Resume Next
  121.     Dim ss As New TlsSelectionSet
  122.     Dim oEnt As CEntity
  123.     ss.Application = m_oApp
  124.     ss.GetPickfirstSelectionSet
  125.     If ss.Count = m_Owner.SelCount Then
  126.         Err.Clear
  127.         Set oEnt = m_Entitys("CEntity" & ss(0).ObjectID)
  128.         If Err.Number = 0 Then
  129.             m_Owner.Change 1, oEnt.Entity, oEnt.Value
  130.             m_Owner.Owner.DoubleClick True
  131.             Exit Sub
  132.         End If
  133.     End If
  134.     m_Owner.Owner.DoubleClick False
  135. End Sub
  136. Private Sub m_oDoc_ObjectErased(ByVal ObjectID As Long)
  137. On Error Resume Next
  138.     Dim oEnt As CEntity
  139.     Set oEnt = m_Entitys("CEntity" & ObjectID)
  140.     If Err.Number = 0 Then
  141.         m_Owner.Change 2, , oEnt.Value
  142.     End If
  143. End Sub