107
615
575
中流砥柱
(defun c:test ( / *error* big ent enx idx int lst pt1 pt2 rtn sel spc tmp tot val var vtx ) (defun *error* ( msg ) (foreach obj rtn (if (and (vlax-write-enabled-p obj) (not (vlax-erased-p obj))) (vla-delete obj) ) ) (mapcar 'setvar var val) (LM:endundo (LM:acdoc)) (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")) (princ (strcat "\nError: " msg)) ) (princ) ) (LM:startundo (LM:acdoc)) (cond ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (getvar 'clayer)))))) (princ "\nCurrent layer locked.") ) ( (setq sel (LM:ssget "\nSelect Lines or Polylines: " (list (list '(-4 . "<OR") '(0 . "LINE") '(-4 . "<AND") '(0 . "LWPOLYLINE") '(-4 . "<NOT") '(-4 . "<>") '(42 . 0.0) '(-4 . "NOT>") '(-4 . "AND>") '(-4 . "OR>") (if (= 1 (getvar 'cvport)) (cons 410 (getvar 'ctab)) '(410 . "Model") ) ) ) ) ) (setq spc (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace ) ) ) (repeat (setq idx (sslength sel)) (if (= "LINE" (cdr (assoc 0 (setq enx (entget (ssname sel (setq idx (1- idx)))))))) (setq lst (cons (list (cdr (assoc 10 enx)) (cdr (assoc 11 enx))) lst)) (setq vtx (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) enx)) vtx (mapcar 'list vtx (if (= 1 (logand 1 (cdr (assoc 70 enx)))) (cons (last vtx) vtx) (cdr vtx))) lst (append vtx lst) ) ) ) (foreach pl1 lst (setq pt1 (car pl1) pt2 (cadr pl1) ) (foreach pl2 lst (if (and (not (equal pl1 pl2 1e-8)) (setq int (inters pt1 pt2 (car pl2) (cadr pl2))) (not (vl-member-if '(lambda ( pnt ) (equal pnt int 1e-8)) pl1)) ) (setq pl1 (cons int pl1)) ) ) (setq rtn (append (mapcar (function (lambda ( a b ) (vla-addline spc (vlax-3D-point a) (vlax-3D-point b) ) ) ) (setq pl1 (vl-sort pl1 (function (lambda ( a b ) (< (distance pt1 a) (distance pt1 b)) ) ) ) ) (cdr pl1) ) rtn ) ) ) (setq var '(cmdecho peditaccept) val (mapcar 'getvar var) tot 0.0 ) (mapcar 'setvar var '(0 1)) (foreach reg (vlax-invoke spc 'addregion rtn) (setq ent (entlast)) (command "_.pedit" "_m") (apply 'command (mapcar 'vlax-vla-object->ename (vlax-invoke reg 'explode))) (command "" "_j" "" "") (if (and (not (eq ent (setq ent (entlast)))) (= "LWPOLYLINE" (cdr (assoc 0 (entget ent)))) ) (progn