caoyongjun 发表于 2024-12-19 12:01:04

怎么获取复制后的图元,用程序,建立一个新的....

已知选择集A,将选择集A复制到另外一个处,怎么获取复制后的图元,并用程序,建立一个新的选集B。
在此谢谢各位大神了。

xyp1964 发表于 2024-12-19 21:09:16

(defun SsEntnext (en / ss)
"SsEntnext 返回某图元后的图元集并设为当前 (SsEntnext en)"
(setq ss (ssadd))
(while (setq en (entnext en)) (ssadd en ss))
(if (and ss (> (sslength ss) 0))
    (progn (command "select" ss "") (ssget "p"))
)
)

(defun c:tt ()
(setq s0 (entlast))
(repeat 10 (command "line" "non" '(0 0) "non"'(1000 1000) ""))
(setq ss (SsEntnext s0))
(sssetfirst nil ss)
(princ)
)

e2002 发表于 2024-12-19 14:27:22

本帖最后由 e2002 于 2024-12-19 14:29 编辑

caoyongjun 发表于 2024-12-19 12:41
感谢,我的意思是不用鼠标点选,实现复制后的图元构成一个新的选集B,只能提供一个选集A的条件。
选择集实际上只是在用户与 AutoCAD 交互时选择对象的集合,对于用户写的程序来说,通常都是转换为图元名或图元对象的 List, 然后遍历处理。对象的 Copy 操作,是有返回值的,返回值就是 Copy出来的新的对象的 objID,显然也是遍历后创建出新的一系列的元素为 objID 的 newList, 你只需要处理这个 newList即可。除非你是在写一个子函数,需要有一个类型为 SelectionSet 的返回值。

Bao_lai 发表于 2024-12-19 12:22:09

;取得copy后梁截面选择集
(setq enlast (entlast))
(setq ss0 (ssget))
(setq ss1 (ssadd))
(command "copy" ss0 "" "non" pt0 "non" pt1)
(while
(setq enlast (entnext enlast))
(ssadd enlast ss1)
)

飞雪神光 发表于 2024-12-19 12:11:29

本帖最后由 飞雪神光 于 2024-12-19 12:15 编辑

(entlast) 和(entnext ty) 配合收集明经上看到过好多
如何获得某个command后生成的所有物体 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

caoyongjun 发表于 2024-12-19 12:41:38

Bao_lai 发表于 2024-12-19 12:22


感谢,我的意思是不用鼠标点选,实现复制后的图元构成一个新的选集B,只能提供一个选集A的条件。

Andyhon 发表于 2024-12-19 14:20:55


提供一个选集A的条件
不用鼠标点选

copySSA-->SSB(新的选集B)


换个思路
原地 copy ssA
move ssA 至新位置
==SSB

有了SSB想处理什么?

qazxswk 发表于 2024-12-19 20:53:22

caoyongjun 发表于 2024-12-19 12:41
感谢,我的意思是不用鼠标点选,实现复制后的图元构成一个新的选集B,只能提供一个选集A的条件。

你这样说,把大家整得一头雾水。不用鼠标点选,那选择集A,是怎么来的?

qazxswk 发表于 2024-12-19 20:54:58

同样的问题,你发了好几个帖了,至今没有得到答案,跟你表达能力有很大的关系。

qazxswk 发表于 2024-12-19 21:06:01


页: [1] 2
查看完整版本: 怎么获取复制后的图元,用程序,建立一个新的....