找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 526|回复: 10

[LISP程序]:构造这样的选择集?

[复制链接]
发表于 2003-7-13 15:32:30 | 显示全部楼层 |阅读模式

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

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

×
怎样构造与某一实体相交的所有实体的选择集?
(希望提供思路或代码)
3X!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2003-7-13 15:38:51 | 显示全部楼层

Re: [LISP程序]:构造这样的选择集?

最初由 redapple 发布
[B]怎样构造与某一实体相交的所有实体的选择集?
(希望提供思路或代码)
3X!! [/B]


你先跟大家说说,希望的实体怎么算是相交? 比如直线可以起点和中点连线相交,那么PLINE? 封闭的PLINE? 此外还有文字,块等等,你说说这些怎么算是相交?把你可能遇到的实体都说说吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-13 15:44:03 | 显示全部楼层
实体主要是line,arc,pline,不包括文字和块及标注
当两者有实际交点时为相交,不包括延伸后相交的情况
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-13 15:53:07 | 显示全部楼层
Express Tools中的快速选择工具Fast Select(FS)就可完成你的要求!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-13 16:56:41 | 显示全部楼层

Re: [LISP程序]:构造这样的选择集?

最初由 redapple 发布
[B]怎样构造与某一实体相交的所有实体的选择集?
(希望提供思路或代码)
3X!! [/B]

当实体是 Line 或者没有 Arc 段的 Pline 时,取出实体顶点,然后用
(ssget "f" plst '((0 . "polyline,line,arc"))) 构造选择集,当实体是 ARc 或者是含 arc 的多义线时就麻烦了,必须将弧段模拟,模拟后的点表构造的选择集就不一定准确了,可能漏掉实体也可能多选了实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-13 21:27:16 | 显示全部楼层
最初由 redapple 发布
[B]请问eachy:上面的plst的意义是什么? [/B]

  1. 根据选定对象创建选择集
  2. (ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

  3. 选择集中可以包含图纸空间和模型空间两个空间中的对象,但该选择集用于某操作时,
  4. 那些在当前无效的空间中的对象会被 ssget 过滤掉。由 ssget 函数返回的选择集中仅
  5. 包含主图元(不包含属性和多段线顶点)。

  6. 参数

  7. sel-method

  8. 字符串,指定对象选择方法。有效选择方法包括:
  9. C  窗交。
  10. CP  圈交(指定多段线内和与该多段线相交的所有对象)。
  11. F  栏选。
  12. I  隐含窗口选择(在执行 PICKFIRST 期间选择的对象)。
  13. L  添加到数据库的最后一个可见对象。
  14. P  最后一个创建的选择集。
  15. W  窗口选择。
  16. WP  圈围(指定多边形内的所有对象)。
  17. X  整个数据库。如果指定了 X 选择方法,而又没有提供 filter-list 参数,
  18. 则 ssget 选择数据库中的所有图元,包括关闭、冻结图层中的图元和可见屏幕外的图元。

  19. :E  光标的对象选择拾取框中的所有对象。
  20. :N  在执行 ssget 操作的过程中,为选定图元调用 ssnamex 获得容器块和转换矩阵的附加信息。
  21. 只有通过窗口、窗交点拾取等图形选择方法选定的图元,这一附加信息才可以使用。
  22. 与其他对象选择方法不同,:N 可能会返回选择集中的多个同名图元。
  23. 例如,如果用户选择了一个复杂图元(如 BlockReference、
  24. PolygonMesh 或
  25. 老式多段线)的子图元,那么 ssget 将查看该子图元是否已被选中。不过,
  26. ssget 实际上会将主图元(如 BlockReference 和 PolygonMesh)添加到选择集中。
  27. 这样就会在选择集中出现多个同名图元,而 ssnamex 获得的每个图元的子图元信息各不相同。

  28. :S   仅允许单一选择集。

  29. pt1

  30. 与选择相关的点。

  31. pt2

  32. 与选择相关的点。

  33. pt-list

  34. 点表。

  35. filter-list

  36. 关联表,指定对象的特性。与 filter-list 相匹配的对象将被添加到选择集。

  37. 如果省略所有参数,则 ssget 函数给出“选择对象”提示,允许用户交互式地构造选择集。
  38. 如果仅提供了一个点,而没有提供对象选择方法,AutoCAD 假定用户拾取单个点来选择对象。

  39. 返回值

  40. 如果成功则返回创建选择集的名称。如果没有选定对象则返回 nil。

  41. 对象选择方法说明

  42. 在使用 :N 选择方法时,如果用户选择了一个复杂图元(如 BlockReference、PolygonMesh 或老式多段线)的子图元,那么 ssget
  43. 将查看该子图元是否已被选中。不过,ssget 实际上会将主图元(如 BlockReference 和
  44. PolygonMesh)添加到选择集中。这样就很可能会在选择集中出现多个同名图元,
  45. 而 ssnamex 获得的每个图元的子图元信息各不相同。由于 :N 方法不能保证每个图元的
  46. 唯一性,所以不应对由该选项创建的选择集应用需要保证唯一性的代码。

  47. 在 MDI 环境中使用 L 选择方法时,最后一个绘制的对象并不一定就是可见的。
  48. 例如,如果绘制了一条直线,然后将 AutoCAD 绘图窗口最小化或层叠放置,
  49. 这条直线可能就看不见了。这时,使用 L 选项的 ssget 将返回 nil。

  50. 样例

  51. 提示用户选择要加入选择集的对象:

  52. 命令:(ssget)

  53. <Selection set: 2>

  54. 创建通过点 (2,2) 的对象的选择集:

  55. 命令:(ssget '(2 2))

  56. nil

  57. 创建一个选择集,该选择集由最近所选择的对象组成:

  58. 命令:(ssget "_P")

  59. <Selection set: 4>

  60. 创建一个选择集,该选择集由交叉窗选而成,交叉窗口的对角顶点是 (0,0) 和 (1,1):

  61. 命令:(ssget "_C" '(0 0) '(1 1))

  62. <Selection set: b>

  63. 创建一个选择集,该选择集由从 (0,0) 到 (5,5) 的窗口中包含的所有对象组成:

  64. 命令:(ssget "_W" '(0 0) '(5 5))

  65. <Selection set: d>

  66. 通过指定过滤器,可以获得由指定类型、图层或颜色的所有对象构成的选择集。
  67. 下例返回的选择集仅包含隐含选择集中的蓝色直线(这些对象是在 PICKFIRST 有效时选取的):

  68. 命令:(ssget "_I" '((0 . "LINE") (62 . 5)))

  69. <Selection set: 4>

  70. 下例中需要将点表传递给 ssget 函数。pt_list 变量不能包含定义零长度线段的点。
  71. 创建点表:

  72. 命令:(setq pt_list '((1 1)(3 1)(5 2)(2 4)))

  73. ((1 1) (3 1) (5 2) (2 4))

  74. 创建一个选择集,该选择集由 pt_list 所定义的多边形包含或与之相交的所有图元组成:

  75. 命令:(ssget "_CP" pt_list)

  76. <Selection set: 13>

  77. 创建一个选择集,该选择集由 pt_list 所定义的多边形包含的所有蓝色线段组成:

  78. 命令:(ssget "_WP" pt_list '((0 . "LINE") (62 . 5)))

  79. <Selection set: 8>

  80. 只有在不带参数调用 ssget 函数时,才会亮显被选取的对象。选择集会消耗
  81. AutoCAD 的临时文件存储区,所以 AutoLISP 不允许同时打开多于 128 个选择集。
  82. 如果选择集的数目达到了这个极限,AutoCAD 会拒绝再创建新的选择集,以后调用 ssget 函数只会返回 nil。
  83. 可以通过将选择集设为 nil 来关闭不再需要的选择集。
  84. 在任何可以用 Last 选择方式来响应 AutoCAD“选择对象”提示的地方,
  85. 都可以通过向 AutoCAD 传递一个选择集变量来响应。这样将选择该选择集变量中的所有对象。

  86. ssget 函数忽略对象捕捉模式的当前设置,除非在调用本函数时专门指定它。

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

使用道具 举报

发表于 2003-7-19 11:16:28 | 显示全部楼层
最初由 redapple 发布
[B]不是很明白 zhqchn 所说的,能不能再说清楚一些?谢谢! [/B]



fast select的使用:
fsmode=off时,选择与该实体直接相交的实体
fsmode=on时,"相交"会"传递"
若要去掉多选的文字,块等实体,在程序中应是很容易实现的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-19 19:20:50 | 显示全部楼层
如果你没有装载Express Tools,可编程解决:
先选择所有line,arc,pline实体 (setq ss (ssget "x" '((0 . "polyline,line,arc"))))
用(vla-intersectwith base obj acextentNone)在选择集ss内筛选你所要的实体
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-7-21 22:30:54 | 显示全部楼层
最初由 lsjjm 发布
[B]如果你没有装载Express Tools,可编程解决:
先选择所有line,arc,pline实体 (setq ss (ssget "x" '((0 . "polyline,line,arc"))))
用(vla-intersectwith base obj acextentNone)在选择集ss内筛选你所要的实体 [/B]


这样写,很慢的,选屏幕内的可行一些.Express也只选屏幕内的.

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 21:52 , Processed in 0.392086 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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