tender138 发表于 2018-6-4 11:46:28

兄弟们:请问如何得到剪切后的选择集?谢谢!

兄弟们:请问如何得到剪切后的选择集?谢谢!

Andyhon 发表于 2018-6-4 11:50:44

Ref:
http://bbs.mjtd.com/thread-57569-1-1.html
http://bbs.mjtd.com/thread-65778-1-1.html
http://bbs.mjtd.com/thread-171322-1-1.html

自贡黄明儒 发表于 2018-6-4 13:03:54

剪切前后选择集是不会变化的。

xinxirong 发表于 2018-6-4 13:14:46

我也不太懂,我用clipbrd查看剪切板,是图片格式的,但如果只是图版,那么它粘贴到cad中又变回图元。因为高版本复制不到低版,而低版却可以复制到高版,所以一开始我以为它是以临时文件的形式来保存,然后clipboard里应该是文件路径,但事实上却不是。

tender138 发表于 2018-6-4 14:33:27

非常感谢各位兄弟的帮忙,我想得到剪切后的对象集,现附图及代码?请兄弟们帮忙找出错在哪?非常感谢!

(defun c:tt(/ ss)
(command ".UNDO" "BE")
(setq BoundaryLine (entsel "\n选择修剪边界线 :"))
(if BoundaryLine (setq ss (LZXTrim BoundaryLine)))
(command ".UNDO" "E")
(sssetfirst ss ss)
(princ)
)
(defun LZXTrim (BoundaryLine / Vcmdecho Vosmode newObj obj lst n i ptl ss)
(setq Vcmdecho (getvar "cmdecho"))
(setq Vosmode (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(vl-cmdf "zoom" "e")
(setq obj (entlast));标记对象
(vl-cmdf "offset" 1 BoundaryLine "-1000,-1000" "")
(setq newObj (entlast))
(setq lst (PLpt newObj))
(setq n (length lst))
(vl-cmdf "trim" BoundaryLine "" "F")
(setq i 0)
(repeat n
    (vl-cmdf (nth i lst))
    (setq i (+ i 1))
)
(vl-cmdf (nth 0 lst) "" "")
(setq ss (ssadd))
(while (setq obj (entnext obj)) (ssadd obj ss));标记对象后创建对象组成选择集
(entdel newObj)
(vl-cmdf "zoom" "p")
(if Vosmode (setvar "osmode" Vosmode))
(if Vcmdecho (setvar "cmdecho" Vcmdecho))
ss
)


(defun PLpt (ent / key)
(setq key 10)
(setq ent (if (= (type ent) 'LIST) (car ent) ent))
(setq ent (entget ent))
(apply 'append (mapcar '(lambda (x) (if (eq (car x) key) (list (cdr x)))) ent))
)
页: [1]
查看完整版本: 兄弟们:请问如何得到剪切后的选择集?谢谢!