思路:
   
高程点是一个块参照(Insert,BlockReference),先建立高程点的选择集,然后通过高程点的选择集内实体去建立高程注记选择集,然后判断高程注记是否与高程点的Z值相等,如果不相等,则假设高程注记是正确的,根据高程注记修改高程点的Z值,修改完毕后,并以高程点的X、Y,Z=0为圆心,5为半径,绘制圆,颜色为绿色,方便后期人工复查。
 
具体代码如下:
Option Explicit
'判断高程点的Z值和高程注记是否匹配
'如果不匹配,则把高程注记的颜色变为绿色
Public Sub CheckGCD_Z()
  Zoom_Extent 
'先执行全屏显示视图
  '定义绿色
  Dim CorGreen As AcadAcCmColor
  Set CorGreen =
AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.16")
  Call CorGreen.SetRGB(0, 255,
0)   '绿色
  '建立高程点的选择集
  Dim pGCDSelSet As AcadSelectionSet
  Set pGCDSelSet = CreateSelectionSet
 
  Dim pType As Variant
  Dim pData As Variant
  BuildFilter pType, pData, 0, "INSERT", 8,
"GCD"
 
  pGCDSelSet.Select acSelectionSetAll, , , pType,
pData
   
  Dim pInsertObj As AcadBlockReference
  '进行选择集循环
  For Each pInsertObj In pGCDSelSet
    Dim
pInsertPt As Variant
    pInsertPt =
pInsertObj.InsertionPoint
   
    Dim
pGCDSelSet_Txt As AcadSelectionSet
    Set
pGCDSelSet_Txt = CreateSelectionSet2
   
    Dim
pType_Txt As Variant
    Dim
pData_Txt As Variant
    BuildFilter
pType_Txt, pData_Txt, 0, "Text", 8, "GCD"
   
   
'定义选择范围的左下角、右上角
    Dim minExt(0
To 2) As Double
    Dim maxExt(0
To 2) As Double
   
'范围为块参照插入点上下、左右各变化0.5米
    minExt(0) =
pInsertPt(0) - 2.5: minExt(1) = pInsertPt(1) - 2.5: minExt(2) =
0
    maxExt(0) =
pInsertPt(0) + 2.5: maxExt(1) = pInsertPt(1) + 2.5: maxExt(2) =
0
   
   
pGCDSelSet_Txt.Select acSelectionSetCrossing, minExt, maxExt,
pType_Txt, pData_Txt
    Dim
pGCD_TxtObj As AcadText
    For Each
pGCD_TxtObj In pGCDSelSet_Txt
     
Dim pGCD_Z As String
     
pGCD_Z = pGCD_TxtObj.TextString
     
     
'如果高程注记与高程点的Z值不相等,
     
'则把高程Z值修改为高程注记的值,且以高程点为圆心,
     
'绘制半径为5的圆
     
If Val(pGCD_Z) <>
Format(pInsertPt(2), "0.00") Then
        
pInsertPt(2) = Val(pGCD_Z)  
'将注记赋给Z值
                  
        
pInsertObj.InsertionPoint = pInsertPt 
'重新修改插入点的值
        
        
'绘制圆
        
Dim pCircle As AcadCircle
        
Dim pCentPt As Variant
        
Dim pRadius As Integer
        
pCentPt = pInsertPt
        
pCentPt(2) = 0
        
pRadius = 5
        
        
Set pCircle = ThisDrawing.ModelSpace.AddCircle(pCentPt,
pRadius)
        
pCircle.TrueColor = CorGreen '颜色为绿色
     
End If
     
    Next
pGCD_TxtObj
  Next pInsertObj
 
  MsgBox
"高程点Z值与高程注记匹配检查完毕!", vbInformation,
"高程点Z值与高程注记匹配检查"
  ThisDrawing.Application.Update 
'刷新
 
End Sub
'创建过滤器的函数
Public Sub BuildFilter(TypeArray, DataArray, ParamArray
gCodes())
    Dim fType()
As Integer, fData()
    Dim index As
Long, i As Long
   
    index =
LBound(gCodes) - 1
    For i =
LBound(gCodes) To UBound(gCodes) Step 2
       
index = index + 1
       
ReDim Preserve fType(0 To index)
       
ReDim Preserve fData(0 To index)
       
fType(index) = CInt(gCodes(i))
       
fData(index) = gCodes(i + 1)
    Next
    TypeArray =
fType: DataArray = fData
   
End Sub
'创建空间选择集的函数
Public Function CreateSelectionSet(Optional ssName As String =
"ss") As AcadSelectionSet
    Dim ss As
AcadSelectionSet
    On Error
Resume Next
    Set ss =
ThisDrawing.SelectionSets(ssName)
    If Err Then
Set ss = ThisDrawing.SelectionSets.Add(ssName)
   
ss.Clear
    Set
CreateSelectionSet = ss
End Function
'创建空间选择集的函数2
Public Function CreateSelectionSet2(Optional ssName As String =
"ss2") As AcadSelectionSet
    Dim ss2
As AcadSelectionSet
    On Error
Resume Next
    Set ss2 =
ThisDrawing.SelectionSets(ssName)
    If Err Then
Set ss2 = ThisDrawing.SelectionSets.Add(ssName)
   
ss2.Clear
    Set
CreateSelectionSet2 = ss2
End Function
'全图显示
Public Sub Zoom_Extent()
  ThisDrawing.Application.ZoomExtents
End Sub
							
		 
						
		加载中,请稍候......