明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4468|回复: 12

[LISP]选择集

  [复制链接]
发表于 2006-3-22 15:39:00 | 显示全部楼层 |阅读模式

通常是用

(setq ss (ssadd))

(command "_line" p1 p2 "")

(setq ss (ssadd (entlast) ss)

(command "_line" p2 p3 "")

(setq ss (ssadd (entlast) ss)

..............................

来加入选择集.

如果是如下的命令一次执行线的命令,而不是分次执行也不是用pline

(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")

该选择集可以作到吗.

我感觉每次要下(setq ss (ssadd (entlast) ss),程序好像变得很长.

发表于 2006-3-22 15:50:00 | 显示全部楼层
(setq ss0(ssget "x"))
(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")
(command "select" "all" "r" ss0 "")
(setq ss1(ssget "p"))
这是其中一种方法
回复 支持 1 反对 0

使用道具 举报

发表于 2024-6-20 02:10:20 | 显示全部楼层
感谢各位大佬,学习到了!
 楼主| 发表于 2006-3-22 19:28:00 | 显示全部楼层

2楼楼主,谢谢您,问题解决了.

还有其他的方法,也能说一下吗.想学呢!

感谢您.

发表于 2006-3-23 06:35:00 | 显示全部楼层
方法二:
  1. (setq en  (ssadd)
  2.       enw (entlast)
  3. )
  4. (command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")
  5. (if enw
  6.   (while (setq enw (entnext enw))
  7.     (setq en (ssadd enw en))
  8.   )
  9.   (setq en (ssget "x"))
  10. )
 楼主| 发表于 2006-3-23 12:02:00 | 显示全部楼层

(setq ss0(ssget "x"))
(command "_line" p1 p2 p3 p4 p5 p6 p7 p8 "c")
(command "select" "all" "r" ss0 "")
(setq ss1(ssget "p"))
之后要再加入新图元

(setvar "clayer" "center")
   (setq cen_line2 (ssadd))                          ;宣告新选择集cen_line2
   (command "_.line"  p17 p18 "")
   (setq cen_line2 (ssadd (entlast) cen_line2))
   (command "_.line"  p19 p20 "")
   (setq cen_line2 (ssadd (entlast) cen_line2))
   (setq ss1 (ssadd cen_line2 ss1)) ;;<<这一行有问题,

发表于 2006-3-23 12:16:00 | 显示全部楼层

引用:(setq ss1 (ssadd cen_line2 ss1)) ;;<<这一行有问题,

你看看帮助里ssadd的用法, 格式:(ssadd [ename [ss]])  

 楼主| 发表于 2006-3-23 13:20:00 | 显示全部楼层

格式:(ssadd [ename [ss]])   ename must be an entity.

所以ename不可以是选择集.

若是想将二个选择集合併就不可以如此编辑.

发表于 2006-3-23 13:54:00 | 显示全部楼层
供参考:
  1. (defun c:test ()
  2.   (setq ptlst1 '(p1 p2 p3 p4 p5 p6 p7 p8)
  3. ss     (ssadd)
  4. ptlst2 (cdr ptlst1)
  5.   )
  6.   (command "line" p1)
  7.   (foreach pt ptlst2
  8.     (command pt)
  9.     (setq ss (ssadd (entlast) ss))
  10.   )
  11.   (command "c")
  12.   (setq ss (ssadd (entlast) ss))
  13.   ss
  14. )
 楼主| 发表于 2006-3-24 16:07:00 | 显示全部楼层

如果原本就存在ss1选择集,

而另外有一ss2选择集要加入到ss1选择集(ss1与ss2合併)

程序:

(defun merge_ss(ss1 ss2/i)

(setq i 0)

(repeat (sslength ss2)

 (setq ss1 (ssadd (ssname ss2 i) ss1))

 (setq i (1 + i))

)

有没有直接合併的函数可以用.

发表于 2006-3-24 16:33:00 | 显示全部楼层

也可以这样

(command "select" ss1 ss2 "")
(setq ss1(ssget "p"))

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

本版积分规则

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

GMT+8, 2024-11-25 16:24 , Processed in 0.199833 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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