路漫漫兮吾将上下而求索

寻梦·追梦;在梦想中遨游,在现实中拼搏!路漫漫其修远兮,吾将上下而求索

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  37 随笔 :: 8 文章 :: 22 评论 :: 0 引用

公告

2008年7月23日 #

AutoCAD中提取明细栏和标题栏中的数据

AutoCAD中的明细栏和标题栏通常是采用定义块然后添加相应的属性值。那么如何在AutoCAD中提取到这些属性值呢?下面是实现的方法(通过AutoCAD VBA实现的)。

  1. 获取当前Dwg文档中已定义的块

-block 命令查看用户定义的块。

VBA 代码实现。

Dim objBlock As AcadBlock

For i = 0 To ThisDrawing.Blocks.Count - 1

Set objBlock = ThisDrawing.Blocks.Item(i)

If objBlock.IsXRef = False And objBlock.IsLayout = False Then’用户定义的块

MsgBox objBlock.Name + " " + objBlock.ObjectName

End If

Next

  1. 获取块对应的属性值。

AutoCAD中,块属性值一般都是放在AcDbBlockReference类的对象中,该对象的Name表示他属于的块名称,GetAttributes方法返回对象的属性,其中包含值。因此,可以在整个模型空间中查找AcDbBlockReference类型的对象,然后根据名称来分类。VBA实现代码如下:

Dim tempCount As Integer

tempCount = ThisDrawing.ModelSpace.Count’得到模型空间中的所有对象个数

For i = 0 To tempCount - 1

Set curAcadObject = ThisDrawing.ModelSpace.Item(i)

If curAcadObject.ObjectName = "AcDbBlockReference" Then

Dim ss As AcadBlockReference

Set ss = curAcadObject

If ss.HasAttributes = True Then

Dim aa() As Object ‘存放属性的数组

aa = ss.GetAttributes()

Dim cc As Integer

Dim strr As String

Dim oo As AcadAttributeReference‘属性对象

strr = ""

For cc = LBound(aa) To UBound(aa)

Set oo = aa(cc)

strr = strr + oo.TagString + ":" + oo.TextString + vbCrLf

Next

MsgBox strr, vbDefaultButton1, curAcadObject.Name

End If

End If

Next

posted @ 2008-07-23 12:35 MichaeL 阅读(358) 评论(0) 编辑