马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
用XdRx_ModEnt 配合Nentsel 函数可以方便的对块内实体进行修改,在加上XdRx_Regen 更新图中所有块。适用于对块的简单操作,特定情况下比重新定义块要方便。
以下是两个函数的说明:
- [COLOR=BLUE]XdRx_ModEnt [/COLOR]
- 功 能:修改实体用(entmod)
- 调用格式:(xdrx_ModEnt <组码1> <修改后的值> [组码2] [修改后的值] ... [组码n] [修改后的值])
- 说 明:组码和修改的值必须配对出现,可以提供多个配对。
- 示 例:将选取的文字字高修改为400,图层修改为mytxt.
- xdrx_SetSsToDb,xdrx_GetEntData,xdrx_ModEnt配合使用示例。
- (if (setq ss(ssget '((0 . "text"))))
- (progn
- (xdrx_SetSsToDb ss 0)
- (while (setq e (xdrx_GetEntData 0))
- (xdrx_ModEnt 40 400 8 "mytxt")
- )
- )
- )
- [COLOR=BLUE] Nentsel [/COLOR]
- 提示用户指定点来选择对象(图元),得到这个对象所指片段的对象名
- (nentsel [msg])
- nentsel 函数提示用户选择一个对象。除非用户专门指定,否则它将忽略当前的对象捕捉模式。
- 为了给命令行提供更多的支持,
- nentsel 函数支持以前用 initget 定义的关键字。
- 参数
- msg
- 用作提示信息的字符串。如果省略该参数,则显示“选择对象”提示。
- 返回值
- 如果用户选择的不是复杂对象(如三维多段线或块),nentsel 函数返回的信息与 entsel 函数
- 相同。然而,如果所选对象是三维多段线,nentsel 函数返回一个表,其中包含子图元(顶点)
- 名和拾取点坐标。这与 entsel 函数返回的表类似,不同的是 nentsel 函数返回的是三维多段线
- 的所选顶点名,而不是多段线的头部图元名。nentsel 函数总是返回选定多段线段的起始顶点,
- 例如,拾取某多段线的第三段,返回的是该多段线的第三个顶点。nentsel 函数从不返回三维多
- 段线的 SEQEND 图元。
- 注意 在图形数据库中,优化多段线定义为简单图元。它不包含子图元。
- 选择块参照中的属性时,nentsel 返回该属性的属性名和拾取点坐标。如果选取的是块参照的一
- 个部件而不是属性,nentsel 返回一个包含四个元素的表。
- 拾取了块中的对象而返回的表中,[COLOR=RED]第一个元素是被选中图元的图元名[/COLOR],第二个元素是一个表,其
- 中包含用户拾取该对象时指定点的坐标。
- 第三个元素称为模型坐标系到世界坐标系的转换矩阵,它是一个包含四个子表的表,四个子表中
- 的每一个都包含了一个坐标集。该矩阵可以用来将图元定义数据中的点从称为模型坐标系 (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)
- )
例如修改块内某一文字:STR 为新字串
(setq e (nentsel "\n选择文字: "))
(xdrx_setenttodb e)
(modent 1 STR) |