匆匆肥马 发表于 2021-1-8 09:15:26

命令生成的对象做成选择集

如题。我想把命令生成的对象,用LSP做成一个选择集。
   如:我用镜像命令生成了三条直线,我想把它做成选择集。

xj6019 发表于 2021-1-8 20:47:35

(setq ss(ssget "p"))   行吗

匆匆肥马 发表于 2021-1-9 08:43:48

xj6019 发表于 2021-1-8 20:47
(setq ss(ssget "p"))   行吗

;;返回图元名之后所有图元选择集
;;(setq ss(Cc_get-last-ss en))
(defun Cc_get-last-ss (ent / ss)
(if (not ent)
    (progn
      (setq ss (ssadd (setq ent (entnext))))
    )
    (progn
      (setq ss (ssadd))
    )
)
(while (and
           (setq ent (entnext ent))
       )
    (ssadd ent ss)
)
(if (= 0 (sslength ss))
    (progn
      nil
    )
    (progn
      ss
    )
)
)
:lol已经解决了。

you_boss 发表于 2021-4-9 15:00:56

(ssget "L") 生成一个选择集,该选择集由最后被增加到图形数据库中的那个可见对象组成,
所以每生成一个对象就把这个对象添加到独立选择集中,最后在把选择集合并

sunny_8848 发表于 2021-4-9 19:06:04

楼主能帮忙加个快捷命令吗,不会用

you_boss 发表于 2021-4-27 15:08:44

没那么复杂,用entlast函数就可以,下面是一个例子,选择两点command生成一条直线,然后用entlast将生成的直线赋予一个名称,然后利用ssadd将直线加入到选择集,如果图元比较多,则可以写成循环,没生成一个图元操作一次

(defun c:q3 ()
(setq p1 (getpoint "\n选择一个点"))
(setq p2 (getpoint "\n选择另一个点"))

(command "line"p1 p2 "")
(setq L1 (entlast))
(setq ss0(ssadd))
(ssadd l1 ss0) (print 2)
(command "COPY" ss0 "" p1 p2 "")(print 2);验证这条直线是否被加入到选择集,如果能复制出来,说明的确的被加入了这个选择集。最后的(print 2)是我个人的习惯,最后能打印出2说明程序完整的执行了,
)

sunny_8848 发表于 2021-4-27 19:01:00

you_boss 发表于 2021-4-27 15:08
没那么复杂,用entlast函数就可以,下面是一个例子,选择两点command生成一条直线,然后用entlast将生成的 ...

挺好用的。能帮忙写一个lsp,画一个圆,然后标注这个圆的直径吗。我用excel vba画圆然后标注直径,标注直径有时成功有时出错
页: [1]
查看完整版本: 命令生成的对象做成选择集