Tsuky Posted August 13, 2023 Posted August 13, 2023 (edited) Hi You can try this for move text to mleader (vl-load-com) (defun make_mlead (pt str lay / tmp ptlst arr nw_obj) (initget 9) (setq tmp (getpoint (trans pt 0 1) "\nLeader position: ") ptlst (append pt (polar pt (angle pt (trans tmp 1 0)) (distance pt (trans tmp 1 0)))) arr (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1))) ) (vlax-safearray-fill arr ptlst) (setq nw_obj (vla-addMLeader Space (vlax-make-variant arr) 0)) (vla-put-contenttype nw_obj acMTextContent) (vla-put-textstring nw_obj str) (vla-put-layer nw_obj lay) (vla-put-ArrowheadSize nw_obj (* (getvar "TEXTSIZE") 0.5)) (vla-put-TextHeight nw_obj (getvar "TEXTSIZE")) (if (> (car pt) (car (trans tmp 1 0))) (progn (vla-SetDogLegDirection nw_obj 0 (vlax-3D-point '(-1.0 0.0 0.0))) (vla-put-TextJustify nw_obj acAttachmentPointMiddleRight) (vla-setLeaderLineVertices nw_obj 0 (vlax-make-variant arr)) ) (vla-put-TextJustify nw_obj acAttachmentPointMiddleLeft) ) (vla-update nw_obj) ) (vl-load-com) (defun c:movetxt2leader ( / js htx AcDoc Space ent pt ss dxf_ent txt lay) (princ "\nSelect polyline.") (while (not (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nGive text size <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-startundomark AcDoc) (setq ent (ssname js 0) pr -1) (redraw ent 3) (repeat (fix (vlax-curve-getEndParam ent)) (setq pt (vlax-curve-GetPointAtParam ent (setq pr (1+ pr))) ss (ssget "_C" pt (mapcar '+ pt (list (getvar "PDSIZE") (getvar "PDSIZE") (getvar "PDSIZE"))) '((0 . "TEXT")) ) ) (cond (ss (setq dxf_ent (entget (ssname ss 0)) txt (cdr (assoc 1 dxf_ent)) lay (cdr (assoc 8 dxf_ent)) ) (make_mlead pt txt lay) (entdel (ssname ss 0)) ) ) ) (redraw ent 4) (vla-regen AcDoc acactiveviewport) (vla-endundomark AcDoc) (prin1) ) Edited August 15, 2023 by Tsuky Update for ask : request this code accepts only text on ID layer 1 Quote
CADWORKER Posted August 15, 2023 Author Posted August 15, 2023 On 8/13/2023 at 12:41 PM, Tsuky said: Hi You can try this for move text to mleader (vl-load-com) (defun make_mlead (pt str / tmp ptlst arr nw_obj) (initget 9) (setq tmp (getpoint (trans pt 0 1) "\nLeader position: ") ptlst (append pt (polar pt (angle pt (trans tmp 1 0)) (distance pt (trans tmp 1 0)))) arr (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1))) ) (vlax-safearray-fill arr ptlst) (setq nw_obj (vla-addMLeader Space (vlax-make-variant arr) 0)) (vla-put-contenttype nw_obj acMTextContent) (vla-put-textstring nw_obj str) (vla-put-layer nw_obj "ID") (vla-put-ArrowheadSize nw_obj (* (getvar "TEXTSIZE") 0.5)) (vla-put-TextHeight nw_obj (getvar "TEXTSIZE")) (if (> (car pt) (car (trans tmp 1 0))) (progn (vla-SetDogLegDirection nw_obj 0 (vlax-3D-point '(-1.0 0.0 0.0))) (vla-put-TextJustify nw_obj acAttachmentPointMiddleRight) (vla-setLeaderLineVertices nw_obj 0 (vlax-make-variant arr)) ) (vla-put-TextJustify nw_obj acAttachmentPointMiddleLeft) ) (vla-update nw_obj) ) (vl-load-com) (defun c:movetxt2leader ( / js htx AcDoc Space ent pt ss txt) (princ "\nSelect polyline.") (while (not (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nGive text size <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-startundomark AcDoc) (setq ent (ssname js 0) pr -1) (redraw ent 3) (repeat (fix (vlax-curve-getEndParam ent)) (setq pt (vlax-curve-GetPointAtParam ent (setq pr (1+ pr))) ss (ssget "_C" pt (mapcar '+ pt (list (getvar "PDSIZE") (getvar "PDSIZE") (getvar "PDSIZE"))) '((0 . "TEXT") (8 . "ID")) ) ) (cond (ss (setq txt (cdr (assoc 1 (entget (ssname ss 0))))) (make_mlead pt txt) (entdel (ssname ss 0)) ) ) ) (redraw ent 4) (vla-regen AcDoc acactiveviewport) (vla-endundomark AcDoc) (prin1) ) Thanks a lot this is what I need. Also, a small request this code accepts only text on ID layer what if the objects are on multiple layers and I need the arrow on the same layer as the text. This is a request. Quote
Tsuky Posted August 15, 2023 Posted August 15, 2023 3 hours ago, CADWORKER said: Also, a small request this code accepts only text on ID layer what if the objects are on multiple layers and I need the arrow on the same layer as the text I have edited the previous code for your request Quote
CADWORKER Posted August 15, 2023 Author Posted August 15, 2023 (edited) 22 hours ago, Tsuky said: I have edited the previous code for your request THANKS A LOT Edited August 16, 2023 by CADWORKER Quote
CADWORKER Posted August 16, 2023 Author Posted August 16, 2023 22 hours ago, Tsuky said: I have edited the previous code for your request THANKS A LOT; is there any way to select the text which has to be relocated instead of all the texts on that line. Quote
Tsuky Posted August 17, 2023 Posted August 17, 2023 On 8/16/2023 at 9:36 AM, CADWORKER said: THANKS A LOT; is there any way to select the text which has to be relocated instead of all the texts on that line. With a question for each? (vl-load-com) (defun make_mlead (pt str lay / tmp ptlst arr nw_obj) (initget 9) (setq tmp (getpoint (trans pt 0 1) "\nLeader position: ") ptlst (append pt (polar pt (angle pt (trans tmp 1 0)) (distance pt (trans tmp 1 0)))) arr (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1))) ) (vlax-safearray-fill arr ptlst) (setq nw_obj (vla-addMLeader Space (vlax-make-variant arr) 0)) (vla-put-contenttype nw_obj acMTextContent) (vla-put-textstring nw_obj str) (vla-put-layer nw_obj lay) (vla-put-ArrowheadSize nw_obj (* (getvar "TEXTSIZE") 0.5)) (vla-put-TextHeight nw_obj (getvar "TEXTSIZE")) (if (> (car pt) (car (trans tmp 1 0))) (progn (vla-SetDogLegDirection nw_obj 0 (vlax-3D-point '(-1.0 0.0 0.0))) (vla-put-TextJustify nw_obj acAttachmentPointMiddleRight) (vla-setLeaderLineVertices nw_obj 0 (vlax-make-variant arr)) ) (vla-put-TextJustify nw_obj acAttachmentPointMiddleLeft) ) (vla-update nw_obj) ) (vl-load-com) (defun c:movetxt2leader ( / js htx AcDoc Space ent pt ss dxf_ent txt lay) (princ "\nSelect polyline.") (while (not (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nGive text size <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-startundomark AcDoc) (setq ent (ssname js 0) pr -1) (repeat (fix (vlax-curve-getEndParam ent)) (setq pt (vlax-curve-GetPointAtParam ent (setq pr (1+ pr))) ss (ssget "_C" pt (mapcar '+ pt (list (getvar "PDSIZE") (getvar "PDSIZE") (getvar "PDSIZE"))) '((0 . "TEXT")) ) ) (cond (ss (setq dxf_ent (entget (ssname ss 0)) txt (cdr (assoc 1 dxf_ent)) lay (cdr (assoc 8 dxf_ent)) ) (redraw (cdar dxf_ent) 3) (initget "Yes No") (if (eq (getkword "\nProcess? [Yes/No] <N>: ") "Yes") (progn (make_mlead pt txt lay) (redraw (cdar dxf_ent) 4) (entdel (ssname ss 0))) (redraw (cdar dxf_ent) 4) ) ) ) ) (vla-regen AcDoc acactiveviewport) (vla-endundomark AcDoc) (prin1) ) Quote
CADWORKER Posted August 17, 2023 Author Posted August 17, 2023 2 hours ago, Tsuky said: With a question for each? (vl-load-com) (defun make_mlead (pt str lay / tmp ptlst arr nw_obj) (initget 9) (setq tmp (getpoint (trans pt 0 1) "\nLeader position: ") ptlst (append pt (polar pt (angle pt (trans tmp 1 0)) (distance pt (trans tmp 1 0)))) arr (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptlst) 1))) ) (vlax-safearray-fill arr ptlst) (setq nw_obj (vla-addMLeader Space (vlax-make-variant arr) 0)) (vla-put-contenttype nw_obj acMTextContent) (vla-put-textstring nw_obj str) (vla-put-layer nw_obj lay) (vla-put-ArrowheadSize nw_obj (* (getvar "TEXTSIZE") 0.5)) (vla-put-TextHeight nw_obj (getvar "TEXTSIZE")) (if (> (car pt) (car (trans tmp 1 0))) (progn (vla-SetDogLegDirection nw_obj 0 (vlax-3D-point '(-1.0 0.0 0.0))) (vla-put-TextJustify nw_obj acAttachmentPointMiddleRight) (vla-setLeaderLineVertices nw_obj 0 (vlax-make-variant arr)) ) (vla-put-TextJustify nw_obj acAttachmentPointMiddleLeft) ) (vla-update nw_obj) ) (vl-load-com) (defun c:movetxt2leader ( / js htx AcDoc Space ent pt ss dxf_ent txt lay) (princ "\nSelect polyline.") (while (not (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE")))))) (initget 6) (setq htx (getdist (getvar "VIEWCTR") (strcat "\nGive text size <" (rtos (getvar "TEXTSIZE")) ">: "))) (if htx (setvar "TEXTSIZE" htx)) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (vla-startundomark AcDoc) (setq ent (ssname js 0) pr -1) (repeat (fix (vlax-curve-getEndParam ent)) (setq pt (vlax-curve-GetPointAtParam ent (setq pr (1+ pr))) ss (ssget "_C" pt (mapcar '+ pt (list (getvar "PDSIZE") (getvar "PDSIZE") (getvar "PDSIZE"))) '((0 . "TEXT")) ) ) (cond (ss (setq dxf_ent (entget (ssname ss 0)) txt (cdr (assoc 1 dxf_ent)) lay (cdr (assoc 8 dxf_ent)) ) (redraw (cdar dxf_ent) 3) (initget "Yes No") (if (eq (getkword "\nProcess? [Yes/No] <N>: ") "Yes") (progn (make_mlead pt txt lay) (redraw (cdar dxf_ent) 4) (entdel (ssname ss 0))) (redraw (cdar dxf_ent) 4) ) ) ) ) (vla-regen AcDoc acactiveviewport) (vla-endundomark AcDoc) (prin1) ) yes, this is good and it is very much appreciated. Thank you. Intially my idea was to select the line and select a text and move to a new location with arrow and size change then select another. Anyways this is also good. Quote
CADWORKER Posted August 19, 2023 Author Posted August 19, 2023 Hi, I have made a code that is not perfect. what I does it move the text and draws an arrow from the text insertion point. I need in this code is to change the text height, set the arrow to the layer of the text and an option for arrow size. continuous selections of text after each relocation. (Defun c:Tpx (/ IP IP2) (setq txt (car (entsel "Pick Text"))); entity (if txt (progn (setq elist (entget txt)); entity list (setq IP (cdr (assoc 10 elist))); Insertion Point ); progn ); if (setq IP2 (getpoint "\nPick Next point: ")) (command "move" txt "" ip IP2 "") (command "_.leader" IP IP2 "_a" "" "_n")) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.