Hallo!
Das folgende Lisp-Modul soll Messpunkte aus einer *.txt lesen und auswerten.
Dabei sollen Attribute eines Blocks mit den Einzelinformationen
Punktnummer, x-Wert, y-Wert,z-Wert,bestückt werden.
Wenn z.B. "pkt-re (atof (substr zeile 14 11))" an den Block übergeben wird,
dann habe ich zu viele sichtbare Nachkommastellen in den Attributen eingetragen.
=> mein Versuch mit "(setq pkt-re (rtos (atof (substr zeile 14 11)) 2 3))"
führt zwar zu dem gewünschten Format, jedoch scheint rtos hier falsch umzurechnen!
Jedenfalls entsprechen die angezeigten Koordinaten nicht mehr dem Blockbasispunkt.
Wird die rtos-Funktion deaktiviert, sind die Koordinaten wieder richtig.
(Dimzin = 1 oder = 0 wurde ausprobiert)
Wäre schön, wenn jemand auf meinen ersten Beitrag im Forum zu einer Lösung beitragen könnte.
;--------------------------------------------------------------------------------
;TopIn-Modul: Erzeugt französische Toppunkte als Block mit XYZ und PNr-Attributen
;--------------------------------------------------------------------------------
(defun einzelpunkt ( / )
(command "-layer" "se" layer "")
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;(setq pkt-re (rtos (atof (substr zeile 14 11)) 2 3) ;wenn dieser Bereich aktiviert ist,
; pkt-ho (rtos (atof (substr zeile 26 11)) 2 3) ;werden die Variablen mit falschen
; pkt-z (rtos (atof (substr zeile 38 9)) 2 3) ) ;Werten belegt
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(command "_-insert" blockname pkt-3d "1" "1" "0" pktnum pkt-re pkt-ho pkt-z)
); end einzelpunkt
(defun C:tinf ( / ) (command "cmdecho" "0" "setvar" "dimzin" "1")
(command "ofang" "kei" "bks" "w" "-layer" "ei" "*" "tauen" "*" "")
(setq zaehler 0)
(setq dat (open "Z:\_TopImport\Top.txt" "r"))
(cond
((/= dat "nil") ;wenn Datei vorhanden...
(setq zeile (read-line dat)) ;1.Zeile lesen aus Datei
(while (/= zeile nil) ;solange Zeile nicht leer...
(setq pktart (substr zeile 3 1) ;lese Punktart aus 3.Zeilenspalte
idcode (atoi (substr zeile 4 3)) ;lese id-Code aus 4. bis 6. Spalte
pktnum (itoa (atoi (substr zeile 7 6))) ;lese Punktnummer aus 7. bis 12. Spalte
pkt-re (atof (substr zeile 14 11)) ;lese Rechtswert aus 16. bis 27. Spalte
pkt-ho (atof (substr zeile 26 11)) ;lese Hochwert aus 28. bis 39. Spalte
pkt-z (atof (substr zeile 38 9)) ;lese Z-Höhe aus 40. bis 49. Spalte
pkt-2d (list pkt-re pkt-ho) ;bilde 2D-Punkt
pkt-3d (list pkt-re pkt-ho pkt-z) ;bilde 3D-Punkt
wsv-code (substr zeile 53 3) ;lese Punkt-Code aus 53. bis 55. Spalte
zeile (read-line dat) ;lese nächste Zeile komplett
blockname "47"
layer "WS-M-Topo"
); setq
(cond
((= pktart "0") (einzelpunkt) ) ;Einzelpunkt erkannt
((= pktart "1") ) ;Startpunkt einer Plinie
((= pktart "2") ) ;Zwischenpunkt einer Plinie
((= pktart "3") ) ;Endpunkt einer Plinie
); end 2.cond
(setq pkt-3d-vor pkt-3d zaehler (+ zaehler 1))
); end while
); end Datei-Bedingung
(T (Prompt "\nDie Eingabedatei wurde im Standardpfad nicht gefunden!"))
); Ende cond
(close dat)
; (princ)
); tin
(princ "\nTopIN-Modul-> erfolgreich geladen \nStart mit <tinf> in der AutoCAD-Befehlszeile")
;-------------------------------------------------------------------------------;
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP