乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 93|回复: 5

请教该如何获取当前图形块中所含的每一个物体

[复制链接]

4

主题

27

帖子

3

银币

初来乍到

Rank: 1

铜币
43
发表于 2005-1-7 15:56:00 | 显示全部楼层 |阅读模式
我正在编一个类似块属性编辑的东西
遇到问题请帮忙
程序运行总是显示
“对象不支持属性或方法“
源代码如下:
Private Sub CommandButton24_Click()
Dim returnObj As Object
Dim basePnt As Variant
Dim elemod As Object
'On Error Resume Next
Me.Hide
       
ThisDrawing.Utility.GetEntity returnObj, basePnt, "请选择属性块进行编辑"
MSFlexGrid1.Clear
MSFlexGrid1.Rows = 1
MSFlexGrid1.TextMatrix(0, 1) = "标记"
MSFlexGrid1.TextMatrix(0, 2) = "提示"
MSFlexGrid1.TextMatrix(0, 3) = "值"
i = 1
If returnObj.ObjectName = "AcDbBlockReference" Then
                               
                         For Each elemod In returnObj (此处显示问题?????????????)
                                                                                                                         If elemod.ObjectName = "AcDbAttributeDefinition" Then
                                                                                                                                                         varAttributes = setqd.GetAttributes
                                                                                                                                                         MSFlexGrid1.AddItem (i)
                                                                                                                                                         
                                                                                                                                                         MSFlexGrid1.Row = i
                                                                                                                                                         MSFlexGrid1.Col = 1
                                                                                                                                                         MSFlexGrid1.Text = elemod.TagString
                                                                                                                                                         MSFlexGrid1.CellAlignment = 0
                                                                                         
                                                                                                                                                         MSFlexGrid1.Row = i
                                                                                                                                                         MSFlexGrid1.Col = 2
                                                                                                                                                         MSFlexGrid1.Text = elemod.PromptString
                                                                                                                                                         MSFlexGrid1.CellAlignment = 0
                                                                                                                 
                                                                                                                                                         MSFlexGrid1.Row = i
                                                                                                                                                         MSFlexGrid1.Col = 3
                                                                                                                                                         MSFlexGrid1.Text = elemod.TextString
                                                                                                                                                         MSFlexGrid1.CellAlignment = 0
                                                                                                                                                         i = i + 1
                                                                                                                         End If
                                                                                         Next
Else
x = MsgBox("你选择的不是图块,请从新选择", vbOKOnly, "提示")
End If
       
Me.Show
       
End Sub
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-1-7 17:59:00 | 显示全部楼层
首先需要用HasAttributes属性判断图块是否带有属性。
如果有则使用GetAttributes方法来取得块中的属性。
所取得的返回值是以AttributeReference 对象的数组返回。
这样则可以通过数组得到所有的属性。
而不是象你所写的那样遍历块参照的对象。注意块参照只是一个对象,它只是一个参照,而要遍历的话,也是要对块本身进行遍历。
回复

使用道具 举报

4

主题

27

帖子

3

银币

初来乍到

Rank: 1

铜币
43
发表于 2005-1-10 13:03:00 | 显示全部楼层
我之所以这样做使我想得到提示一栏的内容,利用属性只能得到“标记“和“值“
请问板竹,我如何作才能得到提示一栏的内容???////
多谢?我已经酷似好几天了,还有我在监视。OBJECTNAME时,有时显示时AcDbBlockReference,这时可以获得属性,但有时显示AcDbBlockTableRecord,请问他俩由什么区别呢
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2005-1-10 21:59:00 | 显示全部楼层
标记TagString和值TextString要吧通过AttributeRef得到。而PromptString需要通过Attribute对象得到。
AttributeRef是通过BlockRef得到,而Attribute是通过Block得到。
回复

使用道具 举报

26

主题

589

帖子

10

银币

中流砥柱

Rank: 25

铜币
693
发表于 2005-1-11 13:26:00 | 显示全部楼层
主要还是块和块引用的区别。AcadBlock是块,它定义了一个块的构成,其中的属性称为属性定义,因而,它称为块定义更准确一点。AcadBlockReference是块引用,它是块插入到模型空间或者图纸空间中而生成的对象,它类似于一个索引,指向块,其中的属性称为属性引用。块中的属性与其它实体的区别是它对于名称相同的块,可以有不同的特性。
回复

使用道具 举报

0

主题

6

帖子

4

银币

初来乍到

Rank: 1

铜币
6
发表于 2007-10-16 18:15:00 | 显示全部楼层
很久就想知道的问题,今天碰巧遇到了,学习了!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 07:24 , Processed in 1.505467 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表