找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2052|回复: 8

[求助]:如何用lisp获得一个INSERT中子物体的图元名?

[复制链接]
发表于 2002-7-3 00:18:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
比如一个门的块,如何获得其中的一条线段?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-3 00:27:07 | 显示全部楼层
用TBLSEARCH函数搜索块表,得到BLOCK定义,然后遍历,判断得到你需要的实体。

命令: (setq blk (tblsearch "block" "a"))
((0 . "BLOCK") (2 . "a") (70 . 0) (10 0.0 0.0 0.0) (-2 . <图元名: 4007de78>))

命令: (setq e (cdr (assoc -2 blk)))
<图元名: 4007de78>

命令: (setq e1 (entnext e))
<图元名: 4007de80>

命令: (entget e1)
((-1 . <图元名: 4007de80>) (0 . "LINE") (330 . <图元名: 4007de60>) (5 . "98")
(100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine") (10 23542.2 7551.17
0.0) (11 32833.6 7551.17 0.0) (210 0.0 0.0 1.0))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2002-7-3 00:29:30 | 显示全部楼层
摘自ACAD联机帮助。

  1. Nentsel

  2. 提示用户指定点来选择对象(图元),得到这个对象所指片段的对象名
  3. (nentsel [msg])

  4. nentsel 函数提示用户选择一个对象。除非用户专门指定,否则它将忽略当前的对象捕捉模式。为了给命令行提供更多的支持,
  5. nentsel 函数支持以前用 initget 定义的关键字。

  6. 参数

  7. msg

  8. 用作提示信息的字符串。如果省略该参数,则显示“选择对象”提示。

  9. 返回值

  10. 如果用户选择的不是复杂对象(如三维多段线或块),nentsel 函数返回的信息与 entsel 函数相同。然而,如果所选对象是三
  11. 维多段线,nentsel 函数返回一个表,其中包含子图元(顶点)名和拾取点坐标。这与 entsel 函数返回的表类似,不同的
  12. 是 nentsel 函数返回的是三维多段线的所选顶点名,而不是多段线的头部图元名。nentsel 函数总是返回选定多段线段的
  13. 起始顶点,例如,拾取某多段线的第三段,返回的是该多段线的第三个顶点。nentsel 函数从不返回三维多段线的
  14. SEQEND 图元。

  15. 注意 在图形数据库中,优化多段线定义为简单图元。它不包含子图元。
  16. 选择块参照中的属性时,nentsel 返回该属性的属性名和拾取点坐标。如果选取的是块参照的一个部件而不是属性,
  17. nentsel 返回一个包含四个元素的表。
  18. 拾取了块中的对象而返回的表中,第一个元素是被选中图元的图元名,第二个元素是一个表,其中包含用户拾取该对象
  19. 时指定点的坐标。
  20. 第三个元素称为模型坐标系到世界坐标系的转换矩阵,它是一个包含四个子表的表,四个子表中的每一个都包含了一个
  21. 坐标集。该矩阵可以用来将图元定义数据中的点从称为模型坐标系 (MCS) 的内部坐标系转换为世界坐标系 (WCS)。
  22. MCS 的原点是包含所选图元的块的插入点,而 MCS 轴的方向则由创建该块时 UCS 的方向决定。

  23. 注意 nentsel 是唯一一个使用这种类型矩阵的 AutoLISP 函数。nentselp 函数返回的矩阵与其他 AutoLISP 和
  24. ObjectARX 函数使用的矩阵类似。
  25. 第四个元素是一个表,它包含了选定对象所在块的图元名。若所选的对象内含在嵌套块中(即块中块),则该表会
  26. 包括内含该对象的所有块的图元名。该表的排列顺序是从最内层的块开始,向外层推,直到遇到插入图形中的最外
  27. 层块才结束。
  28. 关于将 MCS 坐标转换为 WCS 坐标的信息,请参见Visual LISP 开发人员手册的用 AutoLISP 操纵 AutoCAD 对象一
  29. 章中的图元上下文和坐标转换数据。

  30. 样例

  31. 使用线段来绘制一条三维多段线,然后加载并执行下列函数,选择直线的不同线段。取消拾取某条线段,然后重新拾
  32. 取它,以此来观察子图元的处理。然后在一条优化多段线上重复上述操作,观察其中的区别。

  33. (defun c:subent ()
  34.   (while   
  35.      (setq Ent (entsel "\nPick an entity: "))
  36.      (print (strcat "Entity handle is: "
  37.           (cdr (assoc 5 (entget (car Ent))))))
  38.    )
  39.    (while   
  40.       (setq Ent (nentsel "\nPick an entity or subEntity: "))
  41.       (print (strcat "Entity or subEntity handle is:  "
  42.           (cdr (assoc 5 (entget (car Ent))))))
  43.    )
  44.   (prompt "\nDone.")
  45.   (princ)

  46. )

  47. 请参见 本参考中的 entsel、initget 和 nentselp 函数,以及 Visual LISP 开发人员手册中的图元名称函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-3 00:47:05 | 显示全部楼层
晓东的方法是获得块的定义本身,不是插入的一个具体的块,
eachy的方法是点选一个块内的物体,
我想知道有没有办法,从一个具体的块获得块中一个具体的线段,
目的是得到跟nentsel获得的一样的“子图元”的数据,但途径是经过其父辈的“复杂物体”,即块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-3 00:53:28 | 显示全部楼层
我的意思是nentsel所获得的图元到底藏在哪儿?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-3 01:11:48 | 显示全部楼层
最初由 ionic 发布
[B]晓东的方法是获得块的定义本身,不是插入的一个具体的块,
eachy的方法是点选一个块内的物体,
我想知道有没有办法,从一个具体的块获得块中一个具体的线段,
目的是得到跟nentsel获得的一样的“子图元”的数据,... [/B]


INSERT是对BLOCK的引用,所有的实体都在块表记录里面。INSERT引用他们,根据比例等,对BLOCK里面的实体进行矩阵变换后,显示到屏幕上。

所以,你要得到INSERT里面的实体,必须通过遍历BLOCK。

用我上面说的方法,先用TBLSEARCH根据块名得到块表记录入口。

然后得到-2组码的实体名e

然后ENTNEXT E得到第一个实体
以后一直循环,得到-1组码实体,一直ENTNEXT直到块表记录结束。

在上面的循环中,根据你的判断,是否得到了需要的实体。

论坛我以前贴过这样的完整代码和教学的,包括XDRX_API的更简单的解决方法。

你搜索下论坛,用 TBLSEARCH 做关键字,看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-3 13:47:17 | 显示全部楼层
我看你炸开试一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-7-4 02:19:39 | 显示全部楼层
明白了
我搜遍了整个block table,也找不到呀,
看了晓东的帖子才明白,其实块中的子物体都是不存在的,炸开了之后才生成新的物体
真不明白CAD的trim能以块中的物体作边线到底是怎么实现的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 66个

财富等级: 招财进宝

发表于 2017-6-6 11:11:59 | 显示全部楼层
"矿量"xxfxxxx
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-20 21:41 , Processed in 0.189749 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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