;;;---------------------------------------------------------------------------; ;;; FILENAME: utext.lsp ;;; ;;; Copyright (C) 1998 by John Atkinson ;;; ;;; ;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ;;; ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF ;;; MERCHANTABILITY ARE HEREBY DISCLAIMED. ;;; ;;; By: John Atkinson ;;; ;;; Date: 9/11/98 ;;; ;;;---------------------------------------------------------------------------; ;;; MODIFICATION HISTORY ;;; V1.1 8.12.98 ;;; TAKES INTO CONSIDERATION JUSTIFICATION EXCEPT FOR ALIGN AND FIT ;;; V1.2 9.12.98 ;;; TAKES INTO CONSIDERATION ALL TYPES OF JUSTIFICATION ;;; V1.3 30.07.99 ;;; DIFFERENTIATES BETWEEN MTEXT OR TEXT AND USES MTEXT DIALOGUE BOX IF MTEXT ;;; HAS BEEN SELECTED ;;; ;;;---------------------------------------------------------------------------; ;;; DESCRIPTION ;;; THIS ROUTINE IS TO BE USED WHEN ADDITIONAL TEXT IS REQUIRED UNDERNEATH ;;; EXISTING TEXT. IT WILL EXTRACT ALL RELEVANT INFORMATION ON THE EXISTING ;;; TEXT AND THEN IMPLIMENT THE TEXT COMMAND TO START TYPING. ONCE FINISHED ;;; THE EXISTING SETTINGS WILL BE RESTORED. ;;; ;;;---------------------------------------------------------------------------; (defun RAD2DEG (RD) (/ (* RD 180.0) pi) ) (defun DEG2RAD (DG) (/ (* DG pi) 180) ) (defun *ERROR* (MSG) (setvar "CMDECHO" 0) (setvar "ATTDIA" 1) (princ MSG) (princ) ) ;;;TEXTUN ROUTINE FOR TEXT (defun textun (/ exc1 exc2 JTY coord1 coord2 ang1 ang2 x_val y_val y_val1 col1 style1 lname layer1 col1 col2 col3 style2) ;;;EXTRACT EXISTING JUSTIFICATION (setq JTV1 (cdr (assoc 73 en3))) (setq JTH1 (cdr (assoc 72 en3))) (cond ((and (= JTV1 0)(= JTH1 0))(setq JTY nil)) ((and (= JTV1 0)(= JTH1 1))(setq JTY "C")) ((and (= JTV1 0)(= JTH1 2))(setq JTY "R")) ((and (= JTV1 0)(= JTH1 3))(setq JTY "A")) ((and (= JTV1 0)(= JTH1 4))(setq JTY "M")) ((and (= JTV1 0)(= JTH1 5))(setq JTY "F")) ((and (= JTV1 1)(= JTH1 0))(setq JTY "BL")) ((and (= JTV1 1)(= JTH1 1))(setq JTY "BC")) ((and (= JTV1 1)(= JTH1 2))(setq JTY "BR")) ((and (= JTV1 2)(= JTH1 0))(setq JTY "ML")) ((and (= JTV1 2)(= JTH1 1))(setq JTY "MC")) ((and (= JTV1 2)(= JTH1 2))(setq JTY "MR")) ((and (= JTV1 3)(= JTH1 0))(setq JTY "TL")) ((and (= JTV1 3)(= JTH1 1))(setq JTY "TC")) ((and (= JTV1 3)(= JTH1 2))(setq JTY "TR")) ) ;;;EXTRACT TEXT HEIGHT (setq ht1 (cdr (assoc 40 en3))) (setq dist (* 1.619 ht1)) ;;;EXTRACT EXISTING TEXT ROTATION ANGLE (setq ang1 (cdr (assoc 50 en3))) ;;;EXTRACT EXISTING START COORDINATES AND SET POINTS (cond ((= JTY nil)(progn (setq coord1 (assoc 10 en3)) (setq x_val (cadr coord1)) (setq y_val (caddr coord1)) (setq excoord (list x_val y_val)) (setq y_val1 (- y_val dist)) (setq coord2 (list x_val y_val1)) ) ) ((= JTY "F")(progn (setq coord1 (assoc 10 en3)) (setq coord10 (assoc 11 en3)) (setq x_val (cadr coord1)) (setq x_val10 (cadr coord10)) (setq y_val (caddr coord1)) (setq y_val10 (caddr coord10)) (setq exc1 (list x_val y_val)) (setq exc2 (list x_val10 y_val10)) (setq coordf1 (polar exc1 (+ ang1 (deg2rad 270)) dist)) (setq coordf2 (polar exc2 (+ ang1 (deg2rad 270)) dist)) ) ) ((= JTY "A")(progn (setq coord1 (assoc 10 en3)) (setq coord10 (assoc 11 en3)) (setq x_val (cadr coord1)) (setq x_val10 (cadr coord10)) (setq y_val (caddr coord1)) (setq y_val10 (caddr coord10)) (setq exc1 (list x_val y_val)) (setq exc2 (list x_val10 y_val10)) (setq coordf3 (polar exc1 (+ ang1 (deg2rad 270)) dist)) (setq coordf4 (polar exc2 (+ ang1 (deg2rad 270)) dist)) ) ) ((/= JTY nil)(progn (setq coord1 (assoc 11 en3)) (setq x_val (cadr coord1)) (setq y_val (caddr coord1)) (setq excoord (list x_val y_val)) (setq y_val1 (- y_val dist)) (setq coord2 (list x_val y_val1)) ) ) ) ;;;EXTRACT TEXT ROTATION ANGLE (setq ang2 (rad2deg ang1)) (cond ((/= ang2 0)(setq coord2 (polar excoord (+ ang1 (deg2rad 270)) dist))) ((= ang2 0)(setq coord2 coord2)) ) ;;;EXTRACT TEXT STYLE (setq style2 (cdr (assoc 7 en3))) (if (/= style2 style1)(setvar "textstyle" style2)) ;;;EXTRACT TEXT LAYER NAME (setq lname (cdr (assoc 8 en3))) (if (/= layer1 lname)(setvar "clayer" lname)) ;;;EXTRACT TEXT COLOUR (if (/= (cdr (assoc 62 en3)) nil) (progn (setq col1 (cdr (assoc 62 en3))) ) ) ;;;EXECUTE COMMAND LINES (command ".color" col1) (command ".layer" "s" lname "") (cond ((= JTY nil)(command "dtext" coord2 ht1 ang2)) ((= JTY "F")(command "dtext" "J" "F" coordf1 coordf2 ht1)) ((= JTY "A")(progn (setvar "textsize" ht1)(command "dtext" "J" "A" coordf3 coordf4))) (T (command "dtext" "j" JTY coord2 ht1 ang2)) ) (princ) ) (defun c:utext (/) (graphscr) ;;;EXTRACT EXISTING INFORMATION (setq style1 (getvar "textstyle")) (setq layer1 (getvar "clayer")) (setq size1 (getvar "textsize")) (setq col2 (getvar "cecolor")) (setq col3 (atoi col2)) ;;;SELECT TEXT TO UNDERWRITE (setq en1 (entsel "Select the text to write under: ")) (while (= en1 nil) (alert "No text selected") (setq en1 (entsel "Select the text to write under: ")) ) (setq en2 (car en1)) (setq en3 (entget en2)) ;;;CHECK TO SEE IF TEXT OR MTEXT (setq type1 (cdr (assoc 0 en3))) (if (= type1 "MTEXT")(command "DDEDIT" en1 "")(TEXTUN)) ;;;RESET EXISTING VALUES (setvar "textsize" size1) (setvar "textstyle" style1) (setvar "clayer" layer1) (setvar "cecolor" col2) (princ) )