明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3017|回复: 9

如何才能取得嵌套块内的子图元

[复制链接]
发表于 2011-1-27 18:50:48 | 显示全部楼层 |阅读模式
我遇到了一个问题,有一个块C,它嵌套在B内,B又嵌套在A内,我用nentsel命令点取其中的直线,可是得到的是块,该怎么做才行.我又看了nentsel的用法,好像只能取得一层的块中的实体.如下
语法
    (nentsel [prompt])
功能及参数
    此函数可存取包含在一个插入图元中 (在一个图块内部) 的图元定义数据。
     nentsel 将提示用户选择一个图形。这个函数会忽略 Osnap命令的目前设定(表示没有图形捕捉), 除非您在函数中特别要求它。
    prompt选择项参数如果提供的话, 它必须是一个字符串。如果它被省略, 则表示将发出标准 Select Object:提示语句。当所选择的图形不是一个复合的图元 (一个多段线或图块图形) , nentsel 所返回的说明会和 entsel 相同。但是如果所选择的图元是一个多段线, nentsel 将会返回一个包含子图元 (顶点) 和选取点名称的表。这就类似于entsel 所返回来的表, 所不同的是返回来的是选择顶点的名称, 而不是多段线的前导区标头。nentsel 都会返回所选择多段线分段的起始顶点。例如:选取一条多段线的第三个分段将返回第三个顶点。对于一条多段线而言, nentsel 都不会返回 Seqend 子图元。
    当您所选取的图形是一个图块的组件时, nentsel 将传回一个包含四个元素的表, 这四个元素将在下面描述。而例外的情况则是一个图块中的属性 (Attribute)。选择一个图块中的属性将只会返回该属性的名称和选取点 (类似在 entsel 所返回来的表)
    在一个图块中选取一个图元所返回表的第一个元素是所选择的图元名。第二个名称是一个包含用来选用图元的选取点坐标表。
    第三个元素被称为通用转换矩阵模型。它是一个由四个子串列所组成的表, 每一个子表都包含一组坐标。这个矩阵可用来定义图元数据的点。从一个标为“模型坐标系统”(Model Coordinate System, MCS) 的坐标系统转换成通用坐标系统 (WCS)。包含所选择图元的图块插入点将定义MCS 的原点。当图块被建立时, UCS 的方位将决定 MCS轴的方向。
    第四个元素是一个由包含所选择图元的图块图元名所组成的表。如果所选择的图元包含在一个嵌套的图块中 (一个图块在一个图块里面), 则会输出一个额外的表, 其中将包含在嵌套选择图元中所有图块的图元名称。从最内层的图块开始向外一直到被插入至图形中的图块名称被报告出来为止。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-1-27 19:13:12 | 显示全部楼层
(car (nentsel)) 返回的就是图块的子图元,不管嵌套几层!
发表于 2011-1-27 23:04:37 | 显示全部楼层
这个我也很感兴趣,如何能够点选一个块后,依次能够将此块内的其它元素读取出来,就像ssget和ssname搭配着用。
发表于 2011-1-27 23:31:45 | 显示全部楼层
;;可以是可以,但是块内的图元跟非块内的图元是两个概念,一个是在块容器(BLOCK对象)内的,对其操作则会重新定义块,或者说:当前图形内块(INSERT对象)可以不存在,但块容器可以存在。例如entdel对非块内图元操作有效,对块内图元则无效。
(defun c:tt (/ OBJ LST)
(setq OBJ (vlax-ename->vla-object (car (entsel))))
(vlax-for X
(vla-item
(vla-get-blocks (vla-get-ActiveDocument(vlax-get-acad-object)))
(vla-get-name OBJ)
)
(setq lst (cons (vlax-vla-object->ename X) LST))
)
LST
)
 楼主| 发表于 2011-1-28 10:25:18 | 显示全部楼层
本帖最后由 tjuzkj 于 2011-1-28 10:30 编辑

事实似乎不是这样的,我用express的xlist工具,得到的却是块的信息.如下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2011-1-28 10:33:37 | 显示全部楼层
以下是xlist中部分源码:
;The next while loop checks for null or invalid selection.
  (while (or
    (not (setq ePick (nentsel "\n选择要列表显示的嵌套外部参照或块对象: ")))
    (< (length ePick) 3)
    );end or
    (progn  (princ "\n对象无效或未被选中。"))
  );end while
 楼主| 发表于 2011-1-28 10:34:59 | 显示全部楼层
本帖最后由 tjuzkj 于 2011-1-28 10:36 编辑

xlist全部源码见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-2-16 12:01:37 | 显示全部楼层
谢谢楼主介绍的"nentsel"函数。。。使我解决了更改CASS7.0高程点 值的问题。。。谢谢
发表于 2012-5-3 07:47:47 | 显示全部楼层
学习一下,看看
发表于 2022-4-30 11:29:53 来自手机 | 显示全部楼层
好东西,学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 13:15 , Processed in 0.161927 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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