柱哥 发表于 2018-6-6 15:23:33

请教关于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)
)

USER2128 发表于 2018-6-7 09:01:46

将(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]
查看完整版本: 请教关于trim命令的修改