(defun C:GKK () (setvar "DIMZIN" 0) ; Nullen nach dem Komma werden angezeigt (defun acos (y) ; Definieren des Arcuscosinus als Funktion (atan (sqrt (- 1 (* y y))) y) ; ) ; (defun @str2list (str pat / i j n lst) ; Definieren einer Funktion um eine Liste aus Text zu erzeugen (cond ; um Koordinaten aus Textdatei verwertbar zu machen ((/= (type str)(type pat) 'STR)) ; | ((= str pat)'("")) ; | (T ; | (setq i 0 n (strlen pat)) ; | (while (setq j (vl-string-search pat str i)) ; | (setq lst (cons (substr str (1+ i)(- j i)) lst) ; | i (+ j n) ; | ) ; | ) ; | (reverse (cons (substr str (1+ i)) lst)) ; | ) ; | ) ; | ) ; V (command "_ucs" "_w") ; BKS auf Welt setzen (setq ; Auslesen des Zeichnungspfades und Generieren des Pfades für die Textdatei path (vl-string-right-trim "\\" (getvar 'dwgprefix)) ; | path (substr path 1 (vl-string-position (ascii "\\") path 0 T)) ; | path (substr path 1 (vl-string-position (ascii "\\") path 0 T)) ; | path (strcat path "\\offset.txt") ; | ) ; V (setq file (open (findfile (strcat path)) "r")) ; Auslesen der Koordinaten aus der Textdatei (setq row (read-line file)) ; | (close file) ; | (setq row (@str2list row ";")) ; | (setq ; | Verschiebung_Rechtswert (atof (car row)) ; | Verschiebung_Hochwert (atof (cadr row)) ; | Verschiebung_Hoehe (atof (caddr row)) ; | Verdrehung (* (atof (cadddr row)) (/ pi 180)) ; | ) ; V (command "_.mspace") ; Wechselt zum Koordinaten abfragen in den Modellbereich (setq Punkt (getpoint "\nZu bemaßenden Punkt wählen: ")) ; Auswahl des Punktes, der mit GK bemaßt werden soll (command "_.pspace") ; Wechselt wieder in den Papierbereich (setq ; Bestimmung der umzurechnenden Modellkoordinate Punkt_x (car Punkt) ; | Punkt_y (cadr Punkt) ; | Punkt_z (caddr Punkt) ; | ) ; V (setq Radius_Punkt (sqrt (+ (expt Punkt_x 2) (expt Punkt_y 2)))) ; Umrechnung des gewählten Punktes in Polarkoordinaten: Hier wird der Radius berechnet (cond ; Umrechnung des gewählten Punktes in Polarkoordinaten: Hier wird der Winkel in Abhängigkeit von y berechnet ((< Punkt_y 0) ; | (setq Winkel_Punkt ; | (- ; | (* 2 pi) ; | (acos (/ Punkt_x Radius_Punkt)) ; | ) ; | ) ; | ) ; | ((>= Punkt_y 0) ; | (setq Winkel_Punkt ; | (acos (/ Punkt_x Radius_Punkt)) ; | ) ; | ) ; | ) ; V (setq Winkel_neu (+ Winkel_Punkt Verdrehung)) ; Berechnung der Verdrehung (setq ; Berechnung der Zwischenwerte fuer Hoch- und Rechtswert aus der Verdrehung Rechtswert_zwischen (* (cos Winkel_neu) Radius_Punkt) ; | Hochwert_zwischen (* (sin Winkel_neu) Radius_Punkt) ; | ) ; V (setq ; Verschiebung auf Gauss-Krueger-Koordinaten Rechtswert (+ (/ Rechtswert_zwischen 1000) Verschiebung_Rechtswert) ; | Hochwert (+ (/ Hochwert_zwischen 1000) Verschiebung_Hochwert) ; | Hoehe (+ (/ Punkt_z 1000) Verschiebung_Hoehe) ; | ) ; V (setq ; Umwandeln der Werte in Text mit 3 Nachkommastellen Rechtswert (rtos Rechtswert 2 3) ; | Hochwert (rtos Hochwert 2 3) ; | Hoehe (rtos Hoehe 2 3) ; | ) ; V (setq Ausgabe (strcat "RW " Rechtswert "\nHW " Hochwert "\nEL +" Hoehe)) ; Zusammenstellung des Ausgabetextes (command "_mleader" ; Setzen einer Führungslinie mit Ausgabetext (getpoint "\n") ; | (getpoint "\n") ; | Ausgabe ; | ) ; V )