对于TransMatrix和ContextData参数的解释
TransMatrix :为模型坐标系到世界坐标系的转换矩阵,它是一个二维4X4矩阵,每一行都包含了一个坐标集。该矩阵可以用来将图元定义数据中的点从称为模型坐标系 (MCS) 的内部坐标系转换为世界坐标系 (WCS)。MCS 的原点是包含所选图元的块的插入点,而 MCS 轴的方向则由创建该块时 UCS 的方向决定。
ContextData :
一维数组,它包含了选定对象所在块的图元名。若所选的对象内含在嵌套块中(即块中块),则该表会包括内含该对象的所有块的对象ID。该表的排列顺序是从最内层的块开始,向外层推,直到遇到插入图形中的最外层块才结束。
GetSubEntity方法与GetEntity方法不同的是它返回两个附加的值,用于处理块参照中的嵌套图元。
另一个差别是当用户选择了复杂图元来响应 GetSubEntity 调用,该方法返回选定的子图元的图元名称,而不是象GetEntity 那样返回复杂图元的表头图元。
例如,如果用户选择了三维多段线,GetSubEntity方法 返回顶点子图元,而不是多段线的表头图元。该方法也适用于用户选择嵌套块参照中的属性。
选择块参照中的属性将返回属性的名称和拾取点。当选定的对象是块参照的一个部件而不是一个属性时,GetSubEntity方法返回包含下列元素的参数:
选定图元的名称。
包含用于拾取对象的点的坐标的表。
“模型到世界转换矩阵”,它是一个二维4X4矩阵,每一行都包含了一个坐标集。该矩阵用于将图元定义数据点从内部坐标系,也被称为模型坐标系 (MCS),转换为世界坐标系 WCS。包含选定图元的块的插入点定义 MCS 的原点,创建块时的 UCS 方向决定了 MCS 轴的方向。
由包含选定对象的块的对象ID组成的表。如果选定的对象在一个嵌套块中(块内有块),则该表会包含嵌套选定对象的所有块的对象ID。该数组的排列顺序是从最内层的块开始,向外层推,直到插入图形中的最外层的块才结束。
一旦获得了图元名称和“模型到世界转换矩阵”,就能把图元定义数据点从 MCS 转换为 WCS。至于怎样转换,还有待进一步的研究。
efan2000老师能否再提示一下,怎样把这程序改一下实现窗选的功能。你的编程水平太高
efan2000老师能否再提示一下,怎样把这程序改一下实现窗选的功能。你的编程水平太高了!窗选的有一个问题。
窗选只能选择最外层的实体,比如,块中的属性,那么它只能选择到块,而块中的属性没有办法获取,如果通用枚举块的所有属性来操作,那么就可能包含有些不是想要的数据,如不显示的,或者属性的位置在窗选之外的(注:块中的属性位置可以任意指定)等,对于这些问题还是要考虑清楚。没想到还有这么多学问
我觉得对于本例来说,此程序的主要用处就是单纯地对数字相加(而不是对块中"数字"属性相加),比如对图纸一览表中各零件重量的相加统计。我是这样用的,因此我觉得对于数字比较多的时候,用窗选比较方便。至于efan2000老师说的对块中"数字"属性的选取,不知此程序如何应用?
怪!我刚发现一个问题,为何如下图形中小计一列中的数字无法选取,选取后按鼠标右键,提示如下错误
“自动化(Automation)错误“请问如何解决?
用GetSubEntity可以直接选择块中的属性
用GetSubEntity可以直接选择块中的属性,而对于块,用HasAttributes判断有没有包含属性,用GetAttributes返回属性的集合(不包括固定属性)。前一个程序由于没有对实体的类型进行判断,所以如果选中了其它类型的实体就会出错。现已经修改,并附上一个使用选择集操作的例子,有的可能需要根据自己的需要进行修改,就象你所提供的那张图,不是位于世界坐标系,而用VBA生成的文字一定是根据世界坐标系来定位的,因而显示的效果就不一样了。
页:
1
[2]