提示用户指定点来选择对象(图元),得到这个对象所指片段的对象名
(nentsel [msg])
nentsel 函数提示用户选择一个对象。除非用户专门指定,否则它将忽略当前的对象捕捉模式。为了给命令行提供更多的支持,nentsel 函数支持以前用 initget 定义的关键字。
参数
msg
用作提示信息的字符串。如果省略该参数,则显示“选择对象”提示。
返回值
如果用户选择的不是复杂对象(如三维多段线或块),nentsel 函数返回的信息与 entsel 函数相同。然而,如果所选对象是三维多段线,nentsel 函数返回一个表,其中包含子图元(顶点)名和拾取点坐标。这与 entsel 函数返回的表类似,不同的是 nentsel 函数返回的是三维多段线的所选顶点名,而不是多段线的头部图元名。nentsel 函数总是返回选定多段线段的起始顶点,例如,拾取某多段线的第三段,返回的是该多段线的第三个顶点。nentsel 函数从不返回三维多段线的 SEQEND 图元。
注意 在图形数据库中,优化多段线定义为简单图元。它不包含子图元。
选择块参照中的属性时,nentsel 返回该属性的属性名和拾取点坐标。如果选取的是块参照的一个部件而不是属性,nentsel 返回一个包含四个元素的表。
拾取了块中的对象而返回的表中,第一个元素是被选中图元的图元名,第二个元素是一个表,其中包含用户拾取该对象时指定点的坐标。
第三个元素称为模型坐标系到世界坐标系的转换矩阵,它是一个包含四个子表的表,四个子表中的每一个都包含了一个坐标集。该矩阵可以用来将图元定义数据中的点从称为模型坐标系 (MCS) 的内部坐标系转换为世界坐标系 (WCS)。MCS 的原点是包含所选图元的块的插入点,而 MCS 轴的方向则由创建该块时 UCS 的方向决定。
注意 nentsel 是唯一一个使用这种类型矩阵的 明经通道 AutoLISP 函数。nentselp 函数返回的矩阵与其他 AutoLISP 和 ObjectARX 函数使用的矩阵类似。
第四个元素是一个表,它包含了选定对象所在块的图元名。若所选的对象内含在嵌套块中(即块中块),则该表会包括内含该对象的所有块的图元名。该表的排列顺序是从最内层的块开始,向外层推,直到遇到插入图形中的最外层块才结束。
关于将 MCS 坐标转换为 WCS 坐标的信息,请参见《Visual LISP 开发人员手册》的 用 AutoLISP 操纵 AutoCAD 对象 一章中的 图元上下文和坐标转换数据。
示例
使用线段来绘制一条三维多段线,然后加载并执行下列函数,选择直线的不同线段。取消拾取某条线段,然后重新拾取它,以此来观察子图元的处理。然后在一条优化多段线上重复上述操作,观察其中的区别。
(defun c:subent ()
(while
(setq Ent (entsel "\nPick an entity: "))
(print (strcat "Entity handle is: "
(cdr (assoc 5 (entget (car Ent))))))
)
(while
(setq Ent (nentsel "\nPick an entity or subEntity: "))
(print (strcat "Entity or subEntity handle is: "
(cdr (assoc 5 (entget (car Ent))))))
)
(prompt "\nDone.")
(princ)
)
参阅
entsel、initget 和 nentselp 函数以及 《Visual LISP 开发人员手册中》的 图元名称函数。
明经通道 版权所有 未经许可 不得传播 | 评论 |