绘制工艺流程图时,交叉线经常要打断。但是代码只能竖断,不能横断,请高手指点。如何通过选择横或竖对象,来进行打断。而且代码只限定横竖交叉是垂直的,不能是斜线吗?望高手看看。在此感谢! 以下是代码: (defun CC (/ TMP PT PT1 PT2 SS PT3 PT4 I SI ENTI) ;;改动1:将space设置为全局变量,可以保存上次的输入 (if (= SPACE NIL) (setq SPACE 4) ) ;;设置 (if (setq TMP (getdist (strcat "\n请输入断开间距 <" (rtos SPACE 2 2) ">:") ) ) (setq SPACE TMP) ) ;;循环 (while (setq PT (getpoint "\n选择需断开的交点:")) ;;改动2:使用polar函数可以简化坐标计算 (setq PT1 (polar PT (* 0.25 pi) SPACE) PT2 (polar PT (* 1.25 pi) SPACE) ) ;;改动3:判断是否选择到了对象、对象个数、 (if (and (setq SS (ssget "C" PT1 PT2 ) ) (= (sslength SS) 2) ) (progn ;;改动4:在除法运算中将2改为2.0,以避免两整数相除消除尾数现象。 (setq PT3 (polar PT (* 0.5 pi) (/ SPACE 2.0)) PT4 (polar PT (* 1.5 pi) (/ SPACE 2.0)) ) (setq I 0) (repeat 2 (setq SI (ssname SS I) ENTI (entget SI) ) ;;改动5:判断对象是否为直线段,且竖直。 (if (and (= (cdr (assoc 0 ENTI)) "LINE") (equal (cadr (assoc 10 ENTI)) (cadr (assoc 11 ENTI)) 0.00001 ) ) ;;改动6:在没有关闭对象捕捉情况下,command函数中指定点位前,最好使用"non"选项,以消除捕捉影响。 (command "_.break" (list SI PT) "f" "non" PT3 "non" PT4 ) ) (setq I (1+ I)) ) ;_结束 repeat ) ) ;_结束 if ) ;_结束 while ;;静默退出 (princ) ) ;_结束 defun |