AutoCAD MAC 2019: Text Ausrichtung auf einen Bogen oder Kreis -Autolisp

Hallo Zusammen,
„Frohes neues Jahr“ noch, bevor es wieder richtig los geht! Damit Sie gut in 2019 starten habe ich ein kleines Autolisp -Geschenk für alle AutoCAD MAC 2019 Anwender! Denn auf dem MAC sind nicht alle Express Tools realisiert worden, unter anderem gibt es keine Funktion die einen gebogen Text erstellt. So kommt man relativ schnell zu der Frage:

AutoLISP: Wie erzeugt man einen Text der mit einem Bogen ausgerichtet ist?

Meine Antwort: Mit der nachstehenden AutoLisp Funktion. Sie müssen nur den Mac Texteditor aufrufen. Das nachstehende Programm kopieren und in die Textdatei einfügen, abspeichern. Dann das gespeicherte Programm in AutoCAD MAC 2019 laden über Menü „Extras“-> „Anwendung laden“ und schon kann es losgehen.

An der Befehlszeile geben Sie „ARCText“ ein so wie mit den Express Tools in Windows und schon werden die verschiedenen Punkte abgefragt ganz intuitiv:

Kreiszentrum, Textposition, der Text selbst, Texthöhe und die Textausrichtung

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
;*
;* ATEXT types text in an arc. The function gets the midpoint of the
;* txt, the radius point, and the orientation. It determines if the text
;* height is fixed and prompts for height if not. It uses the ANGTOC function.#
;* MCD Media consulting -Helge Brettschneider


; changed radi (distance radp midp) to radi (hd radp midp)  WRM 7/31/89

(defun C:ARTEXT ( / midp radp txt radi txtlen txtspc txthgt cmd arclen
  arcang sang orent txtang txtp char)

  (setvar "HIGHLIGHT" 0)        ;Schaltet highlite aus
  (setvar "CMDECHO" 0)          ;Schaltet die Meldungen in der Befehlszeile aus
(SETQ ABASE(GETVAR"ANGBASE"))   ;Aktuelle Einstellungen werden gespeichert und später wieder aktiviert
(SETVAR"ANGBASE" 0)             ;Ausgangswinkel wird angepasst
  (setq                         ;Variablen werden festgelegt
    radp (getpoint "\nZentrum des Kreis angeben: " )        ;Zentrum des Kreisbogens wird festgelegt
    midp (getpoint "\nTextposition: " radp) ;Mittelpunkt des Text wird festgelegt
    txt (getstring "\nText: " T)                    ;Text eingeben
    radi (hd radp midp)                       ;Radius ermitteln
    txtlen (strlen txt)                             ;Textleänge ermitteln
    txtspc (cdr (assoc 41 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))  ;Aktuellen Textstil ermitteln
  );Ende der Variablenzuweisung

  (if (= (setq txthgt (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE"))))) 0)
       ;Test ob eine feste Höhe existiert
    (setq                       ;Wenn nicht dann...  
      txthgt (getdist "\nTexthoehe: ")  ;Texthöhe abfragen
      cmd '(command "_TEXT" "_C" txtp txthgt txtang char) ;Befehlsliste
    )
    (setq                       ;Wenn eine feste höhe existiert...
      cmd '(command "_TEXT" "_C" txtp txtang char)    ;Befehlsliste
    )
  );end if

  (setq orent         ;Textausrichtung
    (strcase (getstring "\nZeigt Die Hoehe in Richtung des Zentrums; <J>: ")) ;ueber
  )

  (if (or (= orent "") (= orent "J"))   ;Radiuslänge und Ausrichtung
    (setq radi (- radi (/ txthgt 2)))
    (setq radi (+ radi (/ txthgt 2)))          
  );end if

  (setq               ;Berechnungen
    arclen (* txtlen txtspc txthgt)       ;Berechnung der Länge des Bogens
    txtspc (/ arclen txtlen)              ;Berechnung der Länge eines Buchstabens
    arcang (/ arclen radi)                ;Berechnung des Winkels eines Buchstabens
    sang (- (+ (angle radp midp) (/ arcang 2)) (/ txtspc radi 2))  ;Berechung des Startwinkel
    count 1           ;Counter        
  )

  (repeat txtlen      ;Buchstaben einfügen schleife
    (if (or (= orent "") (= orent "Y"))   ;Test winkel
        (setq txtang (angtoc  ;Preface angle w/ << for universal angular units in dec. string
                       (- sang (/ pi 2))  ;Convert start angle minus 90deg
                     )                                      
              txtpos count
        )
        ;Calc angle for character towards radius and character position in string
        (setq txtang (angtos (- sang (* pi 1.5)) 0) ;angle to a command function
           txtpos (- (1+ txtlen) count)
        )
        ;Calc angle for character away from radius and character position in string
    )
    (setq txtp (polar radp sang radi))    ;Calculate character point
    (setq char (substr txt txtpos 1))     ;Get text character
    (eval cmd)                            ;Execute command list
    (setq count (1+ count))               ;Increment counter
    (setq sang (- sang (/ txtspc radi)))  ;Calculate new start angle
  );End repeat loop

  (setvar "HIGHLIGHT" 1)        ;Turn highlight on
  (setvar "CMDECHO" 1)          ;Turn command echo on
  (SETVAR"ANGBASE" ABASE)       ;restore angle base direction
  (princ)                       ;Ends program cleanly
);End defun
;* ANGTOC is a angle formatting function that takes an angle
:* argument in radians and returns it with 6 decimal places
;* in a form universally acceptable to AutoCAD command input.

(defun angtoc (ang)
  (setq ang
    (rtos (atof (angtos ang 0 8)) 2 6)
  )
  (strcat "<<" ang)
)

; return horizontal distance
(defun hd (p1 p2)
   (distance (list (car p1) (cadr p1)) (list (car p2) (cadr p2)))
)
(princ)

Anmerkung: Der erstellte Text besteht aus einzelnen Buchstaben.

Bei Fragen melden Sie sich bitte. -Ich helfe Ihnen gerne!

Mit freundlichen Grüßen,
Helge Brettschneider