| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten als Variabel (2104 / mal gelesen)
|
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 17. Jun. 2019 08:46 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Also mal vorneweg - ich bin ein absoluter LISP-Anfänger, daher bitte ich jetzt schon um etwas Verständnis für meine Anfänger-Fragen... Ich möchte eine Linie zeichnen, die sich aus Koordinaten zusammenstellt, welche in einer .txt Datei gespeichert sind. Ist es nun möglich dass ich einen ganzen Koordinatensatz (sprich, X, Y und Z - Koordinate) in eine einzige Variabel packen kann? Damit ich nachher den (command "Linie" "A" "B" "") ausführen kann? Vielen Dank jetzt schon für eure Hinweise & Tipps. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 17. Jun. 2019 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Jun. 2019 09:08 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
Als absoluter Lisp-Anfänger solltest du wohl erst mal Syntax und Funktionen lernen, aber die Antwort ist JA, kann man. TXT und Koordiniaten klingt aber mehr danach als ob es davon mehr wie nur 2 gibt, und wenn du einfach nur Linien oder Polylinien erstellen möchtest aus einer ganzen Reihen von Koordinaten, dann formatiere doch einfach die Liste in Excel AutoCAD-Mundgerecht (also 501.4,322.5,200.9 anstatt 501,4 322,5 200,9 und erste ein Script: 501.4,322.5,200.9 >> http://ww3.cad.de/foren/ubb/Forum54/HTML/009421.shtml ) Ansonsten: Schau in der Hilfe nach den Lispfunktionen OPEN READ-LINE SETQ STRCAT SUBSTR vl-string-subst .. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 17. Jun. 2019 13:10 <-- editieren / zitieren --> Unities abgeben:
Erstmal vielen Dank für eure schnellen Antworten! Das verstehe ich grundsätzlich, solange ich die Werte eingeben kann, so wie du's gemacht hast.. Jedoch nicht, wenn ich die Werte in einem File gespeichert habe... meine Idee das umzusetzen.....: (setq file (getfiled "Verzeichnisliste" "" "" 2)) (if file (progn (setq file (open file "r")) (while (setq zeile (read-line file)) (setq LISTE (read(strcat "(" (vl-string-left-trim "0"zeile) ")")))
(setq A '((nth 1 LISTE) (nth 2 LISTE) (nth 3 LISTE)) B '((nth 4 LISTE) (nth 5 LISTE) (nth 6 LISTE)) ); setq (cond ((= (nth 0 LISTE) Punktnummer) (progn (command "_line" A B "") (princ) ) ); progn ) ; cond der will so aber nicht arbeiten.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Jun. 2019 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
Du hast da noch einige Baustellen, aber ohne die "Importdatei" gehe ich nicht weiter darauf ein. Das nachgefragte Thema betreffend: (setq A (list (nth 1 LISTE) (nth 2 LISTE) (nth 3 LISTE)) B (list (nth 4 LISTE) (nth 5 LISTE) (nth 6 LISTE)) ); setq Wobei, wenn du die Koordinaten nur einmalig für den command benötigst, dann muß man diese ja nicht speichern: (command "_line" (list (nth 1 LISTE) (nth 2 LISTE) (nth 3 LISTE)) (list (nth 4 LISTE) (nth 5 LISTE) (nth 6 LISTE))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 17. Jun. 2019 15:58 <-- editieren / zitieren --> Unities abgeben:
den Baustellen bin ich mir total bewusst, als LISP-Anfänger werde ich die wohl nicht so schnell rausbringen.. Vielen Dank für den Tipp, hat soweit mal geklappt. Vielleicht muss ich kurz mein Vorhaben erläutern: Ich möchte Kontrollmessungen einer Verschiebung mit Vektorpfeilen visualisieren. Dazu gibt's verschieden Punkte mit Punktnummern und jeweilige Kontrollmessungen. Da soll jedesmal eine Linie von A nach B gezeichnet werden. Und weil ich jedesmal wieder jede Punktnummer habe, muss ich die Nummer abfragen um die Linie dann dem entsprechenden Layer zuweisen zu können.... Ich bin gerade an einem Punkt angekommen, wo ich mich frage, ob man zwei while-schleifen gleichzeitig laufen lassen kann? ich habe die eine für das Lesen des Files und die Andere möchte ich jetzt, um die Punktnummern aufsteigen zu lassen... ich habe mein LISP mal im Anhang, vielleicht kannst du mir da einen kleinen Tipp geben, wo dass es stockt... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 17. Jun. 2019 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
Hallo Andrina, als Lisp-Anfänger kann ich Dir erstmal das hier zum Durcharbeiten wärmstens ans Herz legen. Zu Deinen Problemen. Ja man kann verschachtelte While-Schleifen laufen lassen. Deine obere While-Schleife wird aber noch gar nicht richtig geschlossen, es fehlt zumindest eine schließende Klammer. Dennoch würde ich das Problem etwas anders angehen, nämlich zuerst einmal alle Datensätze der Datei einlesen und in eine Liste packen und anschließend die Liste durcharbeiten und die Linien zeichnen. Wenn Du uns noch ein paar Zeilen Deiner Datendatei zukommen lässt, können wir auch noch besser helfen, so bleibt es noch ein bisschen Rätselraten. Gruß Thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 17. Jun. 2019 16:34 <-- editieren / zitieren --> Unities abgeben:
Das hab ich bereits mal versucht und schlage dort auch immer wieder nach.. bleibe aber doch des öfteren mal klemmen und finde allein nicht raus.. Die Datei ist im Anhang. Auf einer Zeile befinden sich immer die Koordinaten der 0 - Messung und der 1. Kontrollmessung der gleichen Punktnummer. Ich bin jedoch total flexibel was das File anbelangt, es könnte auch anders formatiert werden... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 17. Jun. 2019 17:03 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
Mal ein paar erste Anmerkungen. Die Datendatei ist ok so. Nun zu Code: Code:
(defun c:V2 (/ file zeile) (setq Kontrollmessung (getint "\n Wievielte Kontrollmessung hat stattgefunden?")) ; brauchst Du das? Verwendest es bisher nicht. (setq P1 (getint "\n Startnummer angeben: ")) ; brauchst Du das? Steht doch in Datei (setq Px (getint "\n Höchste Punktnummer angeben: " )) ; dito (setq Eingabe (- Px P1)) ; kann also wahrscheinlich entfallen (setq file (getfiled "Verzeichnisliste" "" "" 2)) (if file (progn (setq file (open file "r")) (while (setq zeile (read-line file)) ; und jetz alle Daten einlesen (setq Ges_LISTE (cons (read(strcat "(" (vl-string-left-trim "0"zeile) ")")) GES_LISTE)) ) ; while beenden, jetzt hast Du in GES_LISTE alle Datenreihen enthalten (setq LISTE (reverse LISTE)) ; kann aber ggf. auch entfallen, wenn die Daten auch von hinten nach vorne abgearbeitet werden können. ; nun alle LISTE in GES_LISTE abarbeiten: (foreach LISTE GES_LISTE (progn (;nun mit LISTE alles machen, was Du willst,
(car LISTE) liefert Dir Punktnummer (als Zahl), daraus ließe sich der Layername erzeugen und mit "Layer" _make ... aktiv setzen bzw. anlegen. Wenn Du danach die Linie zeichnest, landet sie auch gleich auf diesem Layer und muss nicht nachträglich geändert werden. Lass mal hören, ob Duhiermit weiterkommst. HTH Gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 17. Jun. 2019 17:18 <-- editieren / zitieren --> Unities abgeben:
|
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 19. Jun. 2019 15:19 <-- editieren / zitieren --> Unities abgeben:
Bin dran und denke weiter... Eine kleine Zwischenfrage: Wieso bekomme ich für Hdiff keinen Wert? ich nehme an, es liegt am Typ der Resultate... weiss aber nicht, was ich ändern muss... Es erscheint der Fehler: Fehlerhafter Argumenttyp: stringp 0.022 (setq H1 (nth 3 LISTE) H2 (nth 6 LISTE) Hdiff (atof (- (nth 6 LISTE) (nth 3 LISTE)) ) A '(0 0 0) B '(5 Hdiff 0) Bez_Layer (itoa (car LISTE)) Layername (strcat "ÜW_Nr_"Bez_Layer) ) ; setq Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Jun. 2019 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
EDITIERT Fehlerhafter Argumenttyp: stringp 0.022
Bedeutet: Eine Funktion erwartet einen STRING, erhählt aber 0.022, also REAL Schaue ich dann in deine Zeilen sehe ich als erste Funktion die Strings erwartet ATOF, anstatt eines Strings erhält diese aber die Differenz aus (nth 6 LISTE)und (nth 3 LISTE), ein REAL(0.022). PS: Neuer Account? Oder Firma/Privat? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andrina08 Mitglied Vermessung
Beiträge: 11 Registriert: 17.06.2019 AutoCAD 2020
|
erstellt am: 19. Jun. 2019 15:55 <-- editieren / zitieren --> Unities abgeben:
OK, ich hab kein Plan wieso, aber jetzt hat's geklappt. ich hab nichts geändert, nur nochmal ne neue Zeichnung aufgemacht und den Code nochmal neu geladen. habe aber vorher mehrere Male !Hdiff abgefragt und da kam immer nil raus... naja... Danke Dir auf alle Fälle. Ich bleib dran. sehe schon das nächste Problem aber ich probier mal selber noch ein Weilchen rum... ...mit dem Account einer Kollegin vom Büro / habs dann aber noch gemerkt und für Verständnisgründe geändert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 19. Jun. 2019 16:45 <-- editieren / zitieren --> Unities abgeben: Nur für Andrina08
Zitat: Original erstellt von Andrina08: (setq H1 (nth 3 LISTE) H2 (nth 6 LISTE) Hdiff (atof (- (nth 6 LISTE) (nth 3 LISTE)) ) A '(0 0 0) B '(5 Hdiff 0) Bez_Layer (itoa (car LISTE)) Layername (strcat "ÜW_Nr_"Bez_Layer) ) ; setq
Kleiner Formhinweis: Lisp arbeitet von links nach rechts, wenn Du Hdiff belegst, sind H1 und H2 schon bekannt (und Zahlen). Es sollte also folgendes funktionieren: (setq H1 (nth 3 LISTE) H2 (nth 6 LISTE) Hdiff (- H2 H1) ... ) Gruß Thomas [Diese Nachricht wurde von spider_dd am 19. Jun. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |