32
2722
2666
后起之秀
(defun c:demo (/ chfd data p1 p2 gr);;; Demo for pBe Jan 2014 ;;; (defun *error* (msg) (command "._undo" "_end") (setvar 'cmdecho cmo)(setvar "dimtad" tad) (setvar "dimgap" gap)(setvar "Dimtxt" dtxt)) ;_ end_defun(defun chfd (/ _dxf _para _valid a typ obj p1 p2 intrpt P3 P4)(Defun _dxf (e dx) (cdr (assoc dx (entget e))))(defun _valid (e typ / e) (if (wcmatch (Setq v (_dxf e 0)) typ) v))(setq cmo (getvar 'cmdecho))(setvar 'cmdecho 0) (command "._undo" "_begin") (if (and (setq a (entsel "\nSelect Chamfered segment: ")) (Setq typ (_valid (setq obj (car a)) "LWPOLYLINE,LINE"))) (if (eq typ "LINE") (progn (while (not (And (setq obj2 (car (entsel "\nSelect another segment: "))) (setq obj3 (car (entsel "\nAnd another: "))) (_valid obj2 "LINE") (_valid obj3 "LINE")) ) ) (setq intrpt (inters (_dxf obj2 10) (_dxf obj2 11) (_dxf obj3 10) (_dxf obj3 11) nil)) (Setq p3 (_dxf obj 10) p4 (_dxf obj 11))) (progn;;; Kent Cooper ;;;;;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General ;;;;;; /Find-segments-of-polyline/td-p/4785889 ;;; (defun ptpar (par) (reverse (cdr (reverse (vlax-curve-getPointAtParam plent par) ) ) ) ) (setvar "osmode" 0) (setq plent (car a) ; the PolyLine ENTity name verts (cdr (assoc 90 (entget plent))) ; number of VERTiceS prepar (fix (vlax-curve-getParamAtPoint plent (osnap (cadr a) "_nea") ) ) ; PREceding-pick-point vertex's PARameter value p1 (ptpar (rem (1- (+ prepar verts)) verts)) p4 (ptpar prepar) p3 (ptpar (rem (1+ prepar) verts)) p2 (ptpar (rem (+ 2 prepar) verts)) ) ; setq (setq intrpt (inters p1 p4 p2 p3 nil)) ) )(princ "\nNull/Invalid selection") ) (list P3 P4 (if intrpt (strcat "<<< " (rtos (distance p3 intrpt) 2 2) "x" (rtos (distance p4 intrpt) 2 2) " >>>" ) "Invalid data" ) )) (setq tad (Getvar "dimtad") dtxt (getvar "Dimtxt")gap (getvar "dimgap"))(if (not height) (setq height 1.00))(setq height (cond ((getreal (strcat "\nEnter text height <" (rtos height 2 2) ">: "))) (height))) (if (eq (last (setq data (chfd))) "Invalid data") (princ "\nNo Data to process") (progn (setvar "dimtad" 0)(setvar "dimgap" -1)(setvar "Dimtxt" height)(setvar "cmdecho" 0) (setq el (entlast) ss2 (ssadd)) (setq p2 (getpoint (setq p1 (mapcar (function (lambda (a b) (/ (+ a b) 2.))) (car data) (cadr data))) "\n Place annotation: ")) (setvar 'nomutt 1) (command "leader" "_non" p1 "_non" p2 "" (last data) "" ^c) (setvar 'nomutt 0) (While (setq el (entnext el)) (ssadd el ss2)) (setq bridge (entmakex (list (cons 0 "LINE") (cons 10 (car data)) (cons 11 (cadr data))))) (while (eq 5 (car (setq gr (grread T 15 0)))) (redraw) (setq p2 (vlax-curve-getClosestPointTo bridge (cadr gr))) (repeat (setq n (sslength ss2)) (vla-move (vlax-ename->vla-object (ssname ss2 (setq ent (setq n (1- n))))) (vlax-3d-point p1)(vlax-3d-point p2)) ) (setq p1 p2) ) (entdel bridge)