明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1317|回复: 7

[讨论]非常奇怪的现象,付源码

[复制链接]
发表于 2005-6-28 17:27:00 | 显示全部楼层 |阅读模式
程序为把标注中的<>变为实际数值 但是我在一些图中测试成功,但在一些复杂的图形中的标注无法完全把 标注中的<>变为实际数值 望高手指点,在线等~~~~~~~~~~~ Public keyWord As String
Public m As Integer
Public n As Integer
Public Sub SelfOverRide(objDim As AcadSelectionSet)
Dim objBlk As AcadBlock
Dim objEnt As AcadEntity
Dim objEnt2 As AcadEntity
Dim varPos As Variant
Dim varInsPnt As Variant
Dim objDimText As AcadMText
Dim objBlocks As AcadBlocks
Dim blnDone As Boolean
'On Error Resume Next
Set objBlocks = ThisDrawing.Blocks
'varPos = objDim.TextPosition
'For Each objBlk In objBlocks
' If Not blnDone Then
m = 0
n = 0
For Each objEnt2 In objDim
If TypeOf objEnt2 Is AcadDimension Then
varPos = objEnt2.TextPosition
m = m + 1
For Each objBlk In objBlocks
If Left(objBlk.Name, 2) = "*D" Then
For Each objEnt In objBlk
If TypeOf objEnt Is AcadMText Then
Set objDimText = objEnt
varInsPnt = objDimText.InsertionPoint
If varInsPnt(0) = varPos(0) Then
If varInsPnt(1) = varPos(1) Then
If keyWord = "T" Then
objEnt2.TextOverride = objDimText.TextString
Else
objEnt2.TextOverride = "<>"
End If
n = n + 1
Exit For
End If
End If
End If
Next objEnt
End If
Next objBlk
End If
Next objEnt2
'Else
' Exit For
' End If End Sub Sub DIMtext()
Dim strPrmt As String
Dim objEnt As AcadEntity
Dim varPnt As Variant
Dim IsDimension As Boolean
Dim objDim As AcadDimension
Dim SS As AcadSelectionSet On Error Resume Next
strPrmt = vbCr & "选择标注对象:"
ThisDrawing.Utility.InitializeUserInput 1, "T A"
keyWord = ThisDrawing.Utility.GetKeyword _
("选择标注形式 (文字(T)/自动(A)): ")
ThisDrawing.Utility.Prompt strPrmt
ThisDrawing.SelectionSets.Item("SS1").Delete
Set SS = ThisDrawing.SelectionSets.Add("SS1")
SS.SelectOnScreen


SelfOverRide SS
ThisDrawing.Utility.Prompt "共选择尺寸标注" & m & "个," & "转换成功" & n & "个."
Exit Sub End Sub
发表于 2005-6-28 21:21:00 | 显示全部楼层
有这样的例图么?贴一个上来看看?
 楼主| 发表于 2005-6-29 08:31:00 | 显示全部楼层
图形是CAD图


随便找一张复杂点的图都会出现这个问题 不能把所有标注转换为真实值 仍然显示<>


斑竹指教啊
 楼主| 发表于 2005-6-29 10:11:00 | 显示全部楼层
我发现主要问题是出在标注文字的插入点和CAD摸板空间中对应的MTEXT文字块插入点不一样如何解决??? varPos = objEnt2.TextPosition 不等于 varInsPnt = objDimText.InsertionPoint
If varInsPnt(0) = varPos(0) Then
If varInsPnt(1) = varPos(1) Then
 楼主| 发表于 2005-6-29 10:20:00 | 显示全部楼层
我想到了另一种方法,但是我不知道怎么找到尺寸文字标注的块名,例如LISP里可以看到标注的文字块名 *D 在VBA中如何找啊????
发表于 2005-6-29 10:21:00 | 显示全部楼层
可以试试Vlax类调用lisp代码实现,另外,源代码共享版有明总的方法,可以看看
 楼主| 发表于 2005-6-29 11:18:00 | 显示全部楼层
我看到了,明总的方法和我的一样,也存在这个问题


我已经知道原因了,归纳了一下.


CAD中的标注文字以块的形式存在于图中,为隐藏块.至于标注中的值就存在这些块里,例如*D46等等,如果是自动标注,块里的文字仍然是真实值.每一个标注对应一个隐藏块,由于用户可能要拖动尺寸的控制点,所以CAD并没有把标注中的文字与块中文字插入点等同起来.而是用块名去查找.


但是如果图中用到了外部引用块或是编辑过标注的属性,块中的文字插入点就和标注中文字插入点不一样,这时唯一的方法只能刷新图面,让图面重新计算坐标.单靠REDRAW是不行的,必须让CAD重绘.一切问题就可解决
 楼主| 发表于 2005-6-29 11:20:00 | 显示全部楼层
如果哪为DX有新的见解,请多指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 12:33 , Processed in 0.164466 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表