7
30
23
初来乍到
使用道具 举报
114
1万
中流砥柱
(defun c:PLen ( / *error* doc spc ent uFlag tStr ) (vl-load-com) ;; Lee Mac ~ 21.04.10 (defun *error* (msg) (and uFlag (vla-EndUndoMark doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) spc (if (or (eq AcModelSpace (vla-get-ActiveSpace doc)) (eq :vlax-true (vla-get-MSpace doc))) (vla-get-ModelSpace doc) (vla-get-PaperSpace doc))) (setq *num (cond ( *num ) ( 1 )) *num (1- (cond ((getint (strcat "\nSpecify Starting Number <" (itoa *num) "> : "))) (*num)))) (while (setq ent (CurveifFoo (lambda (ent) (and (isCurveObject ent) (vlax-property-available-p (vlax-ename->vla-object ent) 'Length))) (strcat "\nSelect Curve Number [" (itoa (setq *num (1+ *num))) "] : "))) (setq uFlag (not (vla-StartUndoMark doc)) tStr (strcat (itoa *num) "- %<\\AcObjProp Object(%<\\_ObjId " (GetObjectID (vlax-ename->vla-object ent)) ">%).Length \\f "%lu6\>%")) (AlignObjtoCurve (MCMText spc (getvar 'VIEWCTR) 0. tStr) ent (getvar 'TEXTSIZE)) (setq uFlag (vla-EndUndoMark doc))) (princ))(defun GetObjectID ( obj ) (if (eq "X64" (strcase (getenv "PROCESSOR_ARCHITECTURE"))) (vlax-invoke-method (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object))) 'GetObjectIdString obj :vlax-false) (itoa (vla-get-Objectid obj))))(defun MCMText (block point width string / o) (vla-put-AttachmentPoint (setq o (vla-AddMText block (vlax-3D-point point) width string)) acAttachmentPointMiddleCenter) o)(defun isCurveObject (ent) (not (vl-catch-all-error-p (vl-catch-all-apply (function vlax-curve-getEndParam) (list ent)))))(defun CurveifFoo ( foo str / sel ent ) (while (progn (setq sel (entsel str)) (cond ( (vl-consp sel) (if (not (foo (setq ent (car sel)))) (princ "\n** Invalid Object Selected **")))))) ent) (defun AlignObjToCurve ( obj ent o / *error* msg gr code data pt cAng lAng ) (vl-load-com) (defun *error* (msg) (and obj (not (vlax-erased-p obj)) (vla-delete obj)) (and uFlag (vla-EndUndoMark doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (or *Mac$Per* (setq *Mac$Per* (/ pi 2.))) (or *Mac$Off* (setq *Mac$Off* 1.)) (setq msg (princ "\n<< [+/-] for offset, [P]erpendicularity toggle >>")) (while (progn (setq gr (grread 't 15 0) code (car gr) data (cadr gr)) (cond ( (and (= 5 code) (listp data)) (setq pt (vlax-curve-getClosestPointto ent data) cAng (angle pt data) lAng (+ cAng *Mac$Per*)) (cond ( (and (> lAng (/ pi 2)) (<= lAng pi)) (setq lAng (- lAng pi))) ( (and (> lAng pi) (<= lAng (/ (* 3 pi) 2))) (setq lAng (+ lAng pi)))) (vla-put-InsertionPoint Obj (vlax-3D-point (polar pt cAng (* o *Mac$Off*)))) (vla-put-Rotation Obj lAng) t) ( (= 2 code)