(defun c:lbl (/ ss idx xOff yOff mspace ent obj x y inspt textval mtxt) (vl-load-com) ;;------------------------------------------------ -------- ;; function gets a string representation of ObjectID ;; regardless of AutoCAD x86 or x64 ;; Source: "Field and objectid problem" ;; http://forums.autodesk.com/t5/Visual-LISP-AutoLISP-and-General/Field-and-objectid-problem/m-p/247859... ;; http://forum.dwg.ru/showthread.php?t=51822 ;;------------------------------------------------ -------- (defun Get-ObjectID-x86-x64 (obj / util) (setq util (vla-get-Utility (vla-get-activedocument (vlax-get-acad-object)) ) ) (if (= (type obj) 'ENAME) (setq obj (vlax-ename->vla-object obj)) ) (if (= (type obj) 'VLA-OBJECT) (if (> (vl-string-search "x64" (getvar "platform")) 0) (vlax-invoke-method util "GetObjectIdString" obj :vlax-False ) (rtos (vla-get-objectid obj) 2 0) ) ) ) (if (setq ss (ssget '((0 . "AECC_ASSEMBLY,AECC_SUBASSEMBLY")))) (progn (if (not jmm:defX) (setq jmm:defX 0) ) (if (not jmm:defY) (setq jmm:defY -1.8) ) (setq idx -1 xOff (getreal (strcat "\nEnter MText X Offset[" (rtos jmm:defX) "]:0") ) yOff (getreal (strcat "\nEnter MText Y Offset[" (rtos jmm:defY) "]:-1.8" ) ) doc (vla-get-activedocument (vlax-get-acad-object)) mspace (vla-get-modelspace doc) ) (if xoff (setq jmm:defX xOff) (setq xOff jmm:defX) ) (if yoff (setq jmm:defY yOff) (setq yOff jmm:defY) ) (while (setq ent (ssname ss (setq idx (1+ idx)))) (setq obj (vlax-ename->vla-object ent)) (setq x (+ xOff (vlax-get (vlax-get obj 'position) 'x))) (setq y (+ yOff (vlax-get (vlax-get obj 'position) 'y))) (setq inspt (list x y 0.0)) (setq textVal (strcat "%<\\AcObjProp Object(%<\\_ObjId " (Get-ObjectID-x86-x64 obj) ">%).Name>%" ) ) (setq mtxt (vlax-invoke mspace 'addmtext inspt 0 textVal)) (vla-put-attachmentpoint mtxt acAttachmentPointMiddleCenter) (vlax-put mtxt 'InsertionPoint inspt) ) ) ) )