将楼主的程序修改了一下可以实现批量剪切
;;;;;;;;;;;经实验可切除圆内部或图形 (defun c:trc (/ oldcmdcho oldosmode enobj kk endata) ;;;hy_trim_in (setq oldcmdcho (getvar "cmdecho")) (setvar "cmdecho" 0) (setq oldosmode (getvar "osmode")) (setvar "osmode" 0) ;(command "ucs" "w") ;(COMMAND "REGEN") (prompt "\n请选择需圆内剪切的圆:") (setq ss_ent (ssget '((0 . "circle")))) (setq ss_n (sslength ss_ent) in 0 ) (while (< in ss_n) (setq enobj (ssname ss_ent in)) (setq endata (entget enobj)) (setq kk "1") (if (= (cdr (assoc 0 endata)) "CIRCLE") (hy_trim_in_circle) ) (setq in (1+ in)) ) (setvar "cmdecho" oldcmdcho) (setvar "osmode" oldosmode) (princ) ) ;;;;;;;;;;剪除圆内或外部的物体;;;;;;;;;; (defun hy_trim_in_circle (/ centerpoint radius point_list be_angle jk viu_point item) (setq centerpoint (cdr (assoc 10 endata))) (setq radius (cdr (assoc 40 endata))) (if (= kk "1") (setq jk (- radius 0.01)) (setq jk (+ radius 0.01)) ) (setq point_list '()) ;;;以0.5度为一阶,半径缩小0.05圆上所有点 ;(setq be_angle 0);起始角度为0 (setq i 0) ;;计数器归0 (repeat 720 (setq viu_point (polar centerpoint (/ (* 0.5 i pi) 180) jk ) ;end polar ) (setq point_list (cons viu_point point_list)) (setq i (1+ i)) ) ;end repeat (command "undo" "be") (if (= kk "1") (progn (command "trim" enobj "" "f") (foreach item point_list (command item)) (command "" "") ) ) (if (/= kk "1") (progn (setq i 0) (repeat (length point_list) (command "trim" enobj "" "f" (nth i point_list) (nth (1+ i) point_list) "" "" ) (setq i (1+ i)) ) ) ) (command "undo" "e") ) |