修改我现有的例程:
- ;;;==========================[ MacAlign.lsp ]==========================
- ;;; Author: Copyright© 2009 Lee McDonnell (Lee Mac)
- ;;; (Contact @ CADTutor.net, The Swamp.org)
- ;;; Version: 1.0 June 13, 2009
- ;;; 2.0 June 14, 2009
- ;;; 3.0 June 16, 2009
- ;;; 4.0 June 16, 2009
- ;;; 5.0 July 22, 2009
- ;;; Purpose: To Align Text to a Curve
- ;;; Sub_Routines: getpoint_or_text.lsp by Charles Alan Butler (CAB)
- ;;;
- ;;; Additional Features:
- ;;; Use +/- to Alter Text Offset
- ;;; Use "P" to toggle perpendicularity
- ;;;====================================================================
- ;;; MODIFIED TO SET TEXT AS CURVE LAYER ;;
- (defun c:MacAlign (/ *error* doc spc tmp tStr ent cObj
- tObj gr cPt pt cAng lAng tSze
-
- ; *Mac$Str* }
- ; *Mac$tOff* } Global Variables
- ; *Mac$Per* }
- )
- (vl-load-com)
- ;; Error Handler
- (defun *error* (msg)
- (and tObj (not (vlax-erased-p tObj))
- (vla-delete tObj))
- (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
- (princ (strcat "\n<< Error: " msg " >>")))
- (redraw) (princ))
- ;; Check for Locked Current Layer
- (if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar "CLAYER"))))))
- (progn
- (princ "\n<< Current Layer Locked >>") (exit)))
- ;; Get Space & Doc
- (setq doc (vla-get-ActiveDocument
- (vlax-get-Acad-Object))
- spc (if (zerop (vla-get-activespace doc))
- (if (= (vla-get-mspace doc) :vlax-true) ; Vport
- (vla-get-modelspace doc)
- (vla-get-paperspace doc))
- (vla-get-modelspace doc)))
- ;; Set First-time Defaults
-
- (or *Mac$Str* (setq *Mac$Str* "text"))
- (or *Mac$Per* (setq *Mac$Per* (/ pi 2.)))
- (or *Mac$tOff* (setq *Mac$tOff* 1.))
- (or tSze (setq tSze (getvar "TEXTSIZE")))
-
- ;; Get Curve to Align
-
- (while
- (progn
- (setq ent (nentsel "\nSelect Curve: "))
- (cond ((and (vl-consp ent)
- (vl-position
- (cdr (assoc 0 (entget (car ent))))
- '("LINE" "LWPOLYLINE" "POLYLINE" "ARC"
- "SPLINE" "CIRCLE" "ELLIPSE" "XLINE")))
- (setq cObj (vlax-ename->vla-object (car ent)))
- nil) ; Exit Loop
- (t (princ "\nMissed, Try Again..."))))) ; Keep in Loop
- (setq tStr (vla-get-layer cObj))
- ;; Create Text Object
-
- (vla-put-alignment
- (if tObj tObj
- (setq tObj
- (vla-addText spc tStr
- (vlax-3D-point '(0 0 0)) tSze))) acAlignmentMiddleCenter)
- (setq msg (princ "\n<< Type [+] or [-] for offset, and [P]erpendicular >>"))
- ;; Place Text
-
- (while
- (progn
- (setq gr (grread t 15 0))
- (redraw)
- (cond ((and (eq 5 (car gr)) (listp (setq cPt (cadr gr))))
- (setq pt (vlax-curve-getClosestPointto cObj cPt))
- (if (and (< 0 (getvar "OSMODE") 16383)
- (setq osPt (osnap pt (osLst (getvar "OSMODE")))))
- (osMark osPt))
- (setq cAng (angle pt cPt)
- lAng (+ cAng *Mac$Per*))
- ;; Correct Angle
-
- (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
- (setq lAng (- lAng pi)))
- ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
- (setq lAng (+ lAng pi))))
-
- (vla-move tObj
- (vla-get-TextAlignmentPoint tObj)
- (vlax-3D-point
- (polar pt cAng (* tSze *Mac$tOff*))))
- (vla-put-Rotation tObj lAng) t)
- ((eq 2 (car gr))
- (cond ((vl-position (cadr gr) '(43 61))
- (setq *Mac$tOff*
- (+ (/ 1 10.) *Mac$tOff*)))
|