本帖最后由 zzl9105 于 2011-10-19 14:50 编辑
经过对点表稍加处理,能实现交点处打断,只是水平线,还是只能打断一个点,竖向线能全部打断,望高手指教。

- (vl-load-com)
- (defun c:bbb (/ SS OS PT_LST PT_LSTALL N EN OBJ
- E1 E2 M EM PT1 PT2 PT3 PT4 PT)
- (command "_.UNDO" "BEGIN")
- (setq PT_LSTALL '() )
- (setq OS (getvar "osmode"))
- (setvar "osmode" 0)
- (setq SS (ssget '((0 . "LINE"))))
- (setq N 0)
- (repeat (sslength SS)
- (setq EN (ssname SS N))
- (setq PT_LST '() )
- (setq OBJ (vlax-ename->vla-object EN))
- (setq PT1 (vlax-curve-getstartpoint EN))
- (setq PT2 (vlax-curve-getendpoint EN))
- (setq M 0)
- (repeat (sslength SS)
- (if (/= M N)
- (progn
- (setq EM (ssname SS M))
- (setq PT3 (vlax-curve-getstartpoint EM))
- (setq PT4 (vlax-curve-getendpoint EM))
- (if (setq PT (inters PT1 PT2 PT3 PT4))
- (setq PT_LST (cons PT PT_LST))
- )
- )
- )
- (setq M (1+ M))
- )
-
- (setq PT_LST
- (vl-sort PT_LST
- (function (lambda (E1 E2)
- (< (car E1) (car E2))))))
- (setq PT_LST
- (vl-sort PT_LST
- (function (lambda (E1 E2)
- (< (cadr E1) (cadr E2))))))
- (setq PT_LSTALL (cons PT_LST PT_LSTALL))
- (setq N (1+ N))
- )
- (setq PT_LSTALL (reverse (cons PT_LST PT_LSTALL)))
- (setq N 0)
- (repeat (sslength SS)
- (setq EN (ssname SS N))
- (setq PT_LST (nth N PT_LSTALL))
- (foreach PT PT_LST
- (command "_.break" (list EN PT) "f" "non" PT "non" PT)
- )
- (setq N (1+ N))
- )
- (setvar "osmode" OS)
- (command "UNDO" "END")
- (princ)
- )
|