请教关于trim命令的修改
本帖最后由 柱哥 于 2018-6-6 15:48 编辑请问如何修以下代码,让框选修剪后保留框选内的曲线!
下图是想要得到的效果:
(defun c:tf (/)
(command "undo" "be")
(prompt "\n 选择修剪的图形:")
(setqss (ssget '((-4 . "<NOT")
(0 . "LINE")
(-4 . "NOT>")
)
)
)
(setqsvd_os(getvar "osmode")
svd_cmd(getvar "cmdecho")
)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setqxq (last (ssnamex ss 0))
p1 (last (cadr xq))
p3 (last (cadddr xq))
)
(setq s1 (ssget "w" p1 p3 '((0 . "CIRCLE"))))
(if s1
(progn
(setq s1i 0)
(repeat (sslength s1)
(setq sn (ssname s1 s1i))
(setq pl (circ_pts sn))
(command "trim" sn "" "f")
(foreach x pl (command x))
(command "" "")
(setq s1i (1+ s1i))
)
)
)
(setq s2 (ssget "w" p1 p3 '((0 . "LWPOLYLINE"))))
(if s2
(progn
(setq s2i 0)
(repeat (sslength s2)
(setq sn (ssname s2 s2i))
(setq pl (massoc 10 (entget sn)))
(setq pm (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (car pl) (caddr pl))) ;中点
(command "offset" "0.001" sn pm "")
(setq enl (entlast))
(setq pl (massoc 10 (entget enl))
pl (append pl (list (car pl)))
)
(entdel enl)
(command ".trim" sn "" "f")
(foreach x pl (command x))
(command "" "")
(setq s2i (1+ s2i))
)
)
)
(setvar "cmdecho" svd_cmd)
(setvar "osmode" svd_os)
(command "undo" "e")
(princ)
)
(defun circ_pts(enm) ;选区为圆点表
(setqlst (entget enm)
ang (* pi 2)
inc (/ ang 64)
tmp '()
seg 65
)
(repeat seg
(setq pt(polar (cdr (assoc 10 lst)) ang (- (cdr (assoc 40 lst)) 0.01))
ang (+ inc ang)
)
(setq tmp (cons pt tmp))
)
tmp
)
;(massoc 10 (entget (car (entsel))))
(defun massoc (key alist / x nlist) ;选区为多段线各顶点表
(foreach x alist
(if(eq key (car x))
(setq nlist (cons (cdr x) nlist))
)
)
(reverse nlist)
)
将(command "offset" "0.001" sn pm "")换成:
(vla-offset (vlax-ename->vla-object sn) 0.001)
将(setq pt(polar (cdr (assoc 10 lst)) ang (- (cdr (assoc 40 lst)) 0.01))换成:
(setq pt(polar (cdr (assoc 10 lst)) ang (+ (cdr (assoc 40 lst)) 0.01))
试试
页:
[1]