下边的程序,想利用trim 命令过程,将已剪切部分恢复,对矩形对象作不出来,希望帮手
解决:
(defun c:ftrim (/ cm os ort) (command "_.undo" "be") (setq ob (entsel "\n剪切边:")) (while (setq obj (entsel "\n保留部分:")) (setq o_data (entget (car obj))) (tr o_data) ) (command "_.undo" "e") (princ) ) (defun tr (o_data) (command "trim" ob "" obj "") (setq n_data (entget (car obj))) (setq xen (cdr (assoc 0 O_data))) (cond ((= xen "LINE") (setq ass10 (assoc 10 o_data) ass11 (assoc 11 o_data) ) (setq assn10 (assoc 10 n_data) assn11 (assoc 11 n_data) ) (cond ((equal assn10 ass10) (setq n_data (subst (cons 10 (cdr assn11)) assn10 n_data)) (setq n_data (subst ass11 assn11 n_data)) (entmod n_data) ) ((equal assn11 ass11) (setq n_data (subst (cons 11 (cdr assn10)) assn11 n_data)) (setq n_data (subst ass10 assn10 n_data)) (entmod n_data) ) ) ) ((= xen "CIRCLE") (setq assn51 (ASSOC 51 n_data) assn50 (ASSOC 50 n_data)) (setq n_data (subst (cons 51 (cdr assn50) ) assn51 n_data ) ) (setq n_data (subst (cons 50 (cdr assn51) ) assn50 n_data ) ) (entmod n_data) ) ((= xen "ARC") (setq ass50 (assoc 50 o_data) ass51 (assoc 51 o_data) ) (setq assn50 (assoc 50 n_data) assn51 (assoc 51 n_data) ) (cond ((equal assn50 ass50) (setq n_data (subst (cons 50 (cdr assn51)) assn50 n_data)) (setq n_data (subst ass51 assn51 n_data)) (entmod n_data) ) ((equal assn51 ass51) (setq n_data (subst (cons 51 (cdr assn50)) assn51 n_data)) (setq n_data (subst ass50 assn50 n_data)) (entmod n_data) ) ) ) ((= xen "XLINE") (setq assn11 (assoc 11 n_data)) (setq n_data (subst (cons 11 (cons (* -1 (car (cdr assn11))) (list (* -1 (cadr (cdr assn11))) 0.0 ) ) ) (assoc 11 n_data) n_data ) ) (entmod n_data) ) (T (alert "暂未支持此类实体")) ) ) |