[color=#8b4513]; pick 3 texts and align to a block ;; Write what the code does, so you won't have to figure out what was this[/color]
[b][color=BLACK]([/color][/b]vl-load-com[b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b] [color=#8b4513];; Load all visual lisp extensions[/color]
[b][color=BLACK]([/color][/b]defun c:trt [color=#8b4513];; Define a command function, call with [color=#2f4f4f]"TRT"[/color] [b][color=FUCHSIA]([/color][/b]this is the main command[b][color=FUCHSIA])[/color][/b][/color]
[b][color=FUCHSIA]([/color][/b] / blockent blockobj oldang oldunit oldsnap ang ins xscale bname [color=#8b4513];; Localise all the used code variables[/color]
len off textent1 textobj1 pt1 textent2 textobj2 pt1
[b][color=FUCHSIA])[/color][/b]
[color=#8b4513]; Example by BIGAL ;; Write in the author in case you have further questions[/color]
[b][color=FUCHSIA]([/color][/b]and [color=#8b4513];; wrap all evaluations with [b][color=NAVY]([/color][/b]and[b][color=NAVY])[/color][/b] function - this means if somewhere nil is returned, the program will stop[/color]
[b][color=NAVY]([/color][/b]setq blockobj [b][color=MAROON]([/color][/b]vlax-ename->vla-object blockent[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; convert the block entity to vla-object[/color]
[b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]= Objname [color=#2f4f4f]"AcDbBlockReference"[/color][b][color=MAROON])[/color][/b] [color=#8b4513];; check if block was selected[/color]
T [color=#8b4513];; return True if block was selected [/color]
[b][color=MAROON]([/color][/b]alert [color=#2f4f4f]"You have not Picked a block\n\nPress ok "[/color][b][color=MAROON])[/color][/b] [color=#8b4513];; prompt alert message [b][color=MAROON]([/color][/b]alert returns nil[b][color=MAROON])[/color][/b][/color]
[b][color=NAVY]([/color][/b]mapcar 'set '[b][color=MAROON]([/color][/b]oldang oldunit oldsnap[b][color=MAROON])[/color][/b] [color=#8b4513]; store some system variables [sKIP THIS for now][/color]
[b][color=MAROON]([/color][/b]mapcar '[b][color=GREEN]([/color][/b]lambda [b][color=BLUE]([/color][/b]a b / c[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setq c [b][color=RED]([/color][/b]getvar a[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]setvar a b[b][color=BLUE])[/color][/b] c[b][color=GREEN])[/color][/b]
[b][color=NAVY]([/color][/b]mapcar 'set '[b][color=MAROON]([/color][/b]ang ins xscale bname[b][color=MAROON])[/color][/b] [color=#8b4513]; store some properties from the block's object [sKIP THIS for now][/color]
[b][color=NAVY]([/color][/b]cond [color=#8b4513];; set a codition to determine what value to assign for 'len', depending on the block name[/color]
[b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]= bname [color=#2f4f4f]"TERM_AER_E"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq len 6[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [color=#8b4513]; as per sample [/color]
[b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]= bname [color=#2f4f4f]"Block1"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq len 10[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [color=#8b4513]; other blocks change len value[/color]
[b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]= bname [color=#2f4f4f]"Block2"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]setq len 10[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [color=#8b4513]; other blocks change len value[/color]
[b][color=MAROON]([/color][/b] [b][color=GREEN]([/color][/b]setq len 20[b][color=GREEN])[/color][/b] [b][color=MAROON])[/color][/b] [color=#8b4513]; for unknown block change len value[/color]
[b][color=NAVY]([/color][/b]setq off 8.0[b][color=NAVY])[/color][/b] [color=#8b4513];; set offset value[/color]
[b][color=NAVY]([/color][/b]setq textent1 [b][color=MAROON]([/color][/b]car [b][color=GREEN]([/color][/b]entsel [color=#2f4f4f]"\nPick text1"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; Prompt to select a text entity[/color]
[b][color=NAVY]([/color][/b]setq textobj1 [b][color=MAROON]([/color][/b]vlax-ename->vla-object textent1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; convert the text entity into a vla-object[/color]
[b][color=NAVY]([/color][/b]setq pt1 [b][color=MAROON]([/color][/b]polar ins [b][color=GREEN]([/color][/b]+ ang [b][color=BLUE]([/color][/b]/ pi 2.0[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] off[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; calculate the new base point for the text[/color]
[b][color=NAVY]([/color][/b]vla-put textobj1 'insertionpoint pt1[b][color=NAVY])[/color][/b] [color=#8b4513];; set the new base point for the text[/color]
[b][color=NAVY]([/color][/b]vla-put-rotation textobj1 [b][color=MAROON]([/color][/b]MakeReadable ang[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; set the text rotation, by recalculating the angle with [b][color=NAVY]([/color][/b]MakeReadable[b][color=NAVY])[/color][/b] subfunction[/color]
[b][color=NAVY]([/color][/b]setq textent2 [b][color=MAROON]([/color][/b]car [b][color=GREEN]([/color][/b]entsel [color=#2f4f4f]"\nPick text2"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; Prompt to select a text entity[/color]
[b][color=NAVY]([/color][/b]setq textobj2 [b][color=MAROON]([/color][/b]vlax-ename->vla-object textent2 [b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; convert the text entity into a vla-object[/color]
[b][color=NAVY]([/color][/b]setq pt1 [b][color=MAROON]([/color][/b]polar ins ang [b][color=GREEN]([/color][/b]* len 2.0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; calculate the new base point for the text[/color]
[b][color=NAVY]([/color][/b]vlax-put textobj2 'insertionpoint pt1[b][color=NAVY])[/color][/b] [color=#8b4513];; set the new base point for the text[/color]
[b][color=NAVY]([/color][/b]vla-put-rotation textobj2 [b][color=MAROON]([/color][/b]MakeReadable ang[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513];; set the text rotation, by recalculating the angle with [b][color=NAVY]([/color][/b]MakeReadable[b][color=NAVY])[/color][/b] subfunction[/color]
[b][color=FUCHSIA]([/color][/b]mapcar '[b][color=NAVY]([/color][/b]lambda [b][color=MAROON]([/color][/b]a b[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]and a b [b][color=GREEN]([/color][/b]setvar a b[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [color=#8b4513]; Restore the system variables [sKIP THIS for now][/color]
[b][color=FUCHSIA]([/color][/b]setq a [b][color=NAVY]([/color][/b]rem [b][color=MAROON]([/color][/b]+ a pi pi[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]+ pi pi[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]rem [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]< [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b] a [b][color=GREEN]([/color][/b]* pi 1.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
[b][color=MAROON]([/color][/b]+ a pi[b][color=MAROON])[/color][/b]
a
[b][color=NAVY])[/color][/b]
[b][color=NAVY]([/color][/b]+ pi pi[b][color=NAVY])[/color][/b]