;............................................................
;:      DATE : 91-01-01    Kunde:                           :
;:      Schuetz/Schmidt    AutoCAD-Version 11               :
;:      Version 1.0        ab Version 2.6                   :
;:                                                          :
;:      KREISTXT.LSP       Bogenfoermiger Text              :
;:      Schreibt Text in bogenfoermiger Anordnung           :
;:..........................................................:
;
;Deklaration:
;       txts    Kreis-Text                      Str
;       txth    Texth”he                        Real
;       mp      Zentrum des Textes              List
;       p1      Text-Startpunkt                 List
;       endp    Text-Endpunkt                   List
;       wi1     Winkel Zentr. nach Startpt.     Real
;       wi2     Winkel Zentr. nach Endpt.       Real
;       krad    Kreisradius                     Real
;       tlen    Textl„nge                       Int
;       widreh  Winkel zwischen den Zeichen     Real
;       lauf    Laufvariable                    Int
;       asatz   Auswahlsatz (Text)              Pickset
;       tins    Buchstaben aus dem Text         Str
;       wrech   Winkel des Buchstabens          Real
;       pins    Einfgept des Buchstabens       List
;       angd    Winkelrichtung (ANGDIR)         Int
;       angb    Winkelbasis (ANGBASE)           Real
;       blip    Konst.punkte (BLIPMODE)         Int
;       auni    Winkeleinheit (AUNITS)          Int

(DEFUN tdia()           ;Textdialog
        (SETQ txts (GETSTRING T "\nInput Text String:     "))
                        ;Gewnschter Text an Variable TEXT0 binden
        (INITGET (+ 1 2 4))
                        ;keine Leereingabe, Nullwert oder negativer
                        ;Wert fr n„chste Getreal-Funktion setzen
        (SETQ txth (GETREAL "Text Height:        "))
                        ;Texth”he abfragen und speichern
        (INITGET 1)
        (SETQ mp (GETPOINT "\nPick Center of Circle:  "))
                        ;Zentrum abfragen und speichern
        (INITGET 1)
        (SETQ p1 (GETPOINT mp "\nPick Text Startpoint:   "))
                        ;Startpunkt abfragen und speichern
        (GRDRAW mp p1 -1)
                        ;Startwinkel anzeigen
        (INITGET 1)
        (SETQ endp (GETPOINT mp "\nPick Text Endpoint:     "))
                        ;Endpunkt abfragen und speichern
)

(DEFUN trech(/ wi2)     ;Textberechnung
        (SETQ wi1 (ANGLE mp p1)
                        ;Winkel Zentrum nach Startpt. speichern
              wi2 (ANGLE mp endp)
                        ;Winkel Zentrum nach Endpt. speichern
              krad (DISTANCE mp p1)
                        ;Abstand Zentrum nach Startpt. speichern
              tlen (STRLEN txts)
                        ;Textl„nge speichern
              widreh (/ (IF (> wi1 wi2)
                            (- wi1 wi2)
                            (- (* PI 2)(- wi2 wi1))
                        )(- tlen 1)
                     )
                        ;Winkel zwischen den Zeichen speichern
                        ;Differenzwinkel / (Textl„nge - 1)
        )
)

(DEFUN tmach(/ lauf tins wrech pins) ;Text schreiben
    (SETQ lauf 0
                        ;Z„hler auf Null setzen
        asatz (SSADD)
                        ;Auswahlsatz erzeugen
    )
    (WHILE (< lauf tlen)
                        ;solange Z„hler kleiner als Textl„nge
       (SETQ tins (SUBSTR txts (+ lauf 1) 1)
                        ;extrahieren des einzufgenden Zeichens
                        ;tins = Das (Z„hler + 1) Zeichen von txts
           wrech (- wi1 (* lauf widreh))
                        ;absoluten Winkel des Zeichens speichern
           pins (POLAR mp wrech krad)
                        ;Einfuegept. des Zeichens speichern
       )
       (COMMAND "_TEXT" "_M" pins txth wrech tins)
                        ;AutoCAD schreibt das aktuelle Zeichen
       (SSADD (ENTLAST) asatz)
                        ;aufnehmen in den Auswahlsatz
       (SETQ lauf (1+  lauf))
                        ;lauf um 1 erh”ht
    )
                        ;ende solange
)

(DEFUN tdreh(/ dif pz1 pz2)     ;Text nachtr„glich drehen
        (IF (= (STRCASE (SUBSTR (GETSTRING "\nRotatet the Circle Y/N <N>: ") 1 1)) "Y")
                        ;wenn Kreis drehen mit "J" beantwortet wird
            (PROGN
                        ;beginne
                (PRINC "\nRotation-Angle: ")
                        ;Meldung Drehwinkel
                (COMMAND "_ROTATE" asatz "" mp PAUSE)
                        ;alles im Fenster drehen mit Zugmodus
            )
        )
)

(DEFUN *ERROR*(em)      ;Fehlerbehandlungs-Funktion
        (PROMPT "Abbruch ")
                        ;Meldung 'Abbruch '
        (PROMPT em)
                        ;Meldung Art des Abbruches
        (tend)
                        ;zurrcksetzen der Systemumgebung
)

(DEFUN tstart()         ;Speichern der Systemumgebung und initialisieren
        (SETQ angd (GETVAR "ANGDIR")
                        ;Winkelrichtung speichern
              angb (GETVAR "ANGBASE")
                        ;Winkelbasis speichern
              blip (GETVAR "BLIPMODE")
                        ;Konstruktionspunktemodus speichern
              auni (GETVAR "AUNITS")
                        ;Winkeleinheit speichern
        )
        (SETVAR "ANGDIR" 0)
                        ;Winkel positiv im Gegenuhrzeigersinn
        (SETVAR "AUNITS" 3)
                        ;Winkeleinheit auf Bogenmass setzen
        (SETVAR "ANGBASE" (* (/ PI 2) 3))
                        ;Winkelbasis auf -90 Grad setzen
        (SETVAR "BLIPMODE" 0)
                        ;Konstruktionspunktemodus aus
        (SETVAR "CMDECHO" 0)
                        ;Menurckgabe unterbinden
)

(DEFUN tend()           ;Zurcksetzen der Systemumgebung
        (SETVAR "ANGDIR" angd)
                        ;ANGDIR zurcksetzen
        (SETVAR "AUNITS" auni)
                        ;AUNITS zurcksetzen
        (SETVAR "ANGBASE" angb)
                        ;ANGBASE zurcksetzen
        (SETVAR "CMDECHO" 1)
                        ;Menurckgabe wieder einschalten
        (SETVAR "BLIPMODE" blip)
                        ;Konstruktionspunktemodus zurcksetzen
        (REDRAW)
                        ;Zeichnung neu aufbauen
        (PRINC)
                        ;unterdrcken der Rckgabe
)

(DEFUN C:KREISTXT(/ txts zxth mp p1 endp wi1 krad tlen widreh angd angb blip auni asatz)        ;Kreistext
        (tstart)
                        ;initialisieren
        (tdia)
                        ;Text abfragen
        (trech)
                        ;Text rechnen
        (tmach)
                        ;Text erstellen
        (PRINC "\n   *** TEXT arranged ***")
                        ;Meldung 'Text angeordnet' zurckgeben
        (tdreh)
                        ;Text drehen
        (tend)
                        ;zurrcksetzen der Systemumgebung
)
