CLARKLEE 发表于 2005-1-7 15:56:00

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

<DIV><FONT face=宋体 size=2>我正在编一个类似块属性编辑的东西</FONT></DIV>
<DIV><FONT face=宋体 size=2>遇到问题请帮忙</FONT></DIV>
<DIV><FONT face=宋体 size=2>程序运行总是显示</FONT></DIV>
<DIV><FONT face=宋体 size=2>“对象不支持属性或方法“</FONT></DIV>
<DIV><FONT face=宋体 size=2>源代码如下:</FONT></DIV>
<DIV><FONT face=宋体 size=2>Private Sub CommandButton24_Click()<BR>Dim returnObj As Object<BR>Dim basePnt As Variant<BR>Dim elemod As Object<BR><BR>'On Error Resume Next<BR>Me.Hide</FONT></DIV>
<DIV>        </DIV>
<DIV><FONT face=宋体 size=2>ThisDrawing.Utility.GetEntity returnObj, basePnt, "请选择属性块进行编辑"<BR>MSFlexGrid1.Clear<BR>MSFlexGrid1.Rows = 1<BR>MSFlexGrid1.TextMatrix(0, 1) = "标记"<BR>MSFlexGrid1.TextMatrix(0, 2) = "提示"<BR>MSFlexGrid1.TextMatrix(0, 3) = "值"<BR>i = 1<BR>If returnObj.ObjectName = "AcDbBlockReference" Then<BR>                                <BR>                       <FONT color=#ff0080>For Each elemod In returnObj (此处显示问题?????????????)</FONT></FONT></DIV>
<DIV><FONT face=宋体 size=2>                                                                                                                       If elemod.ObjectName = "AcDbAttributeDefinition" Then<BR>                                                                                                                                                       varAttributes = setqd.GetAttributes<BR>                                                                                                                                                       MSFlexGrid1.AddItem (i)<BR>                                                                                                                                                       <BR>                                                                                                                                                       MSFlexGrid1.Row = i<BR>                                                                                                                                                       MSFlexGrid1.Col = 1<BR>                                                                                                                                                       MSFlexGrid1.Text = elemod.TagString<BR>                                                                                                                                                       MSFlexGrid1.CellAlignment = 0<BR>                                                                                       <BR>                                                                                                                                                       MSFlexGrid1.Row = i<BR>                                                                                                                                                       MSFlexGrid1.Col = 2<BR>                                                                                                                                                       MSFlexGrid1.Text = elemod.PromptString<BR>                                                                                                                                                       MSFlexGrid1.CellAlignment = 0<BR>                                                                                                               <BR>                                                                                                                                                       MSFlexGrid1.Row = i<BR>                                                                                                                                                       MSFlexGrid1.Col = 3<BR>                                                                                                                                                       MSFlexGrid1.Text = elemod.TextString<BR>                                                                                                                                                       MSFlexGrid1.CellAlignment = 0<BR>                                                                                                                                                       i = i + 1<BR>                                                                                                                       End If<BR>                                                                                       Next<BR>Else<BR>x = MsgBox("你选择的不是图块,请从新选择", vbOKOnly, "提示")<BR>End If</FONT></DIV>
<DIV>        </DIV>
<DIV><FONT face=宋体 size=2>Me.Show</FONT></DIV>
<DIV>        </DIV>
<DIV><FONT face=宋体 size=2>End Sub</FONT></DIV>

mccad 发表于 2005-1-7 17:59:00

首先需要用HasAttributes属性判断图块是否带有属性。<BR>如果有则使用GetAttributes方法来取得块中的属性。<BR>所取得的返回值是以AttributeReference 对象的数组返回。<BR>这样则可以通过数组得到所有的属性。


而不是象你所写的那样遍历块参照的对象。注意块参照只是一个对象,它只是一个参照,而要遍历的话,也是要对块本身进行遍历。

CLARKLEE 发表于 2005-1-10 13:03:00

我之所以这样做使我想得到提示一栏的内容,利用属性只能得到“标记“和“值“


请问板竹,我如何作才能得到提示一栏的内容???////


多谢?我已经酷似好几天了,还有我在监视。OBJECTNAME时,有时显示时<FONT size=2>AcDbBlockReference,这时可以获得属性,但有时显示AcDbBlockTableRecord,请问他俩由什么区别呢</FONT>

mccad 发表于 2005-1-10 21:59:00

标记TagString和值TextString要吧通过AttributeRef得到。而PromptString需要通过Attribute对象得到。<BR>AttributeRef是通过BlockRef得到,而Attribute是通过Block得到。

efan2000 发表于 2005-1-11 13:26:00

主要还是块和块引用的区别。AcadBlock是块,它定义了一个块的构成,其中的属性称为属性定义,因而,它称为块定义更准确一点。AcadBlockReference是块引用,它是块插入到模型空间或者图纸空间中而生成的对象,它类似于一个索引,指向块,其中的属性称为属性引用。块中的属性与其它实体的区别是它对于名称相同的块,可以有不同的特性。

leo_zp_yang 发表于 2007-10-16 18:15:00

很久就想知道的问题,今天碰巧遇到了,学习了!
页: [1]
查看完整版本: 请教该如何获取当前图形块中所含的每一个物体