| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: LISP: Höhenkoten platzieren (1654 mal gelesen)
|
Lina265 Mitglied Vermessung
Beiträge: 13 Registriert: 05.07.2018 AutoCAD 2018
|
erstellt am: 03. Aug. 2018 10:30 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich habe ein LISP, mit welchem ich Punkte aus einem Aufnahmefile absetzen möchte. Die Punkte sind codiert (Spalte 4 im TXT - File) Bei denjenigen Punkten, mit Code 140 und 150 möchte ich die Beschriftung des Z - Wertes hinzufügen. Stand jetzt ist so, dass das Programm nach der 1. eingefügten Nummer abbricht.... Fehler: Datenfolge ist geschlossen: #<FILE internal> (Im LISP ist nur das Absetzen der Beschriftung, der Rest hat geklappt)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 03. Aug. 2018 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für Lina265
Wenn du ZTW immer an den Text-Befehl übergibst, dann muß ZTW auch immer existieren (einen Textwert haben). Also ändere den Code dahingehen das ZTW immer einen Wert hat, ab und an den Z-Wert aus der Punktliste, oder eben einfach nur "" Da der Text aber nur sinnvoll ist wenn ein Z-Wert dargestellt werden soll, packst du den Command-Text Teil mit in die IF funktion, denn ohne Z-Wert braucht es auch kein Textobjekt. PS: Wenn man den TEXT-Befehl nutzt sollte man sicherstellen das der genutzte Texstil (k)eine feste Höhe hat, davon hängt der Befehlsablauf ab. Oder man erstellt zwei verschiedene Command-Text Varianten und je nach aktuellem Textstil (Feste Höhe oder nicht), nimmt man die eine oder die andere Variante. Und zum Schluß: Warum bitte schön TEXT unabhängig des Höhenkotenobjektes? Erstelle dir doch einen BLOCK mit ATTRIBUTEN, bei der Attributabfrage gibst du dann entweder "" oder den Z-Wert an, hast "Punkt" und Text in einem Objekt, kannst diese Exportieren, Importieren und nach belieben bearbeiten. BLOCK ATTDEF ATTREQ ATTDIA
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lina265 Mitglied Vermessung
Beiträge: 13 Registriert: 05.07.2018 AutoCAD 2018
|
erstellt am: 03. Aug. 2018 11:07 <-- editieren / zitieren --> Unities abgeben:
Beim 1. Abschnitt blicke ich nicht ganz durch... also du meinst für den Fall, falls ich eine 0 - Höhe in meinem Aufnahmefile habe? Den Block mit Attribut erstelle ich nicht, weil ich die Textbeschriftung unabhängig vom Punktsymbol ein- und ausblenden möchte... (das geht im Block nicht, oder? )Zudem habe ich zum Punkt auch noch das Attribut der Punktnummer, welches ich auch einlese... Habe die command Zeile in die IF - Funktion gepackt.. mir ist aber nicht ganz klar, warum der Befehl nicht durchläuft..? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 207 Registriert: 24.05.2005 Windows 10 BricsCAD V22
|
erstellt am: 03. Aug. 2018 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für Lina265
Hallo, Erstens: Dein Befehl bricht nach dem ersten Punkt ab, weil du die geöffnete Datei in der while-Schleife (beim ersten Durchgang) wieder schließt und er dann nicht weiter lesen kann. Zweitens: Du kannst die Blöcke so definieren, dass die Symbole und die Attribut(-definitionen) auf unterschiedlichen Layern liegen und diese dann auch unabhängig voneinander Aus- und Einschalten. Gruß Stefan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 03. Aug. 2018 11:45 <-- editieren / zitieren --> Unities abgeben: Nur für Lina265
Also zusammengefasst: Läuft nicht durch weil, siehe Stefan, du schließt die Punktdatei wieder. Das Close-Statement gehört hinter die While-Schleife, nicht in die While-Schleife. Verschiedene Layer in einem Block nutzen für Text sichtbar/unsichtbar ist auch schon angesprochen worden. Angenommen die Punkte landen alle auf Layer "PUNKTE", dann würde ich für den Z-Wert eine Attributdefinition auf Layer "PUNKT_Z-WERT" legen. Möchte man diese nicht sehen schaltet man den Layer aus, Möcht eman die Punkte mit allem drum und dran nicht sehen, friert men den Layer "Punkte", möchte man Punkte+Z-Wert sehen, taut und schaltet beide Layer ein. Und was ich im ersten Teil meinte: Nehmen wir dein gepostetes Beispiel, die erste Zeile ist zufällig ein 140er Fall.. (if (or (= (nth 3 LISTE) 140) (= (nth 3 LISTE) 150) ) ;or (progn (setq zw (nth 6 LISTE)) (setq ztw (strcat (rtos zw 2 2))) ) ;progn (print "\n Keine Höhenbeschriftung" ) ) ;if ZTW wird also gesetzt und der Text wird ordentlich erstellt. Wenn in Zeile 1 aber ein 142er Fall stehen würde, was wäre dann? Crash Oder in Zeile eins 140 und in der nächsten Zeile ein 142er! Dann würde es in Zeile 2 den gleichen Z-Wert sichtbar geben wie in Zeile 1., da ZTW noch immer den Wert aus Zeile 1 enthält. Von daher: Code: ... (if (or (= (nth 3 LISTE) 140) (= (nth 3 LISTE) 150) ) ;or (progn (setq ztw (strcat (rtos (nth 6 LISTE) 2 2))) (command "Text" (list (nth 4 LISTE) (nth 5 LISTE) (nth 6 LISTE) ) "" ; >= Funktioniert wenn der Textstil keine feste Texthöhe hat. "" ztw ) ) ;progn ) ;if ) ;while ) ;progn (alert "Keine Datei gewählt!") )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lina265 Mitglied Vermessung
Beiträge: 13 Registriert: 05.07.2018 AutoCAD 2018
|
erstellt am: 03. Aug. 2018 13:33 <-- editieren / zitieren --> Unities abgeben:
Danke Dir! klappt alles Noch eine Frage... wenn ich die Punkt importiere und mit dem Zoom relativ weit aussen bin, dann schnappt's mir die vorigen Koordinaten, nicht die eingegebenen... wenn ich jedoch in dem Moment, in dem ich den Befehl start, sehr nah rangezoomt habe, kommt alles dorthin, wo es sollte. Weisst du, an welcher Einstellung das liegen kann? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 03. Aug. 2018 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für Lina265
Ja, ich habe dafür auch zwei Antworten: 1. Weil du nicht nicht konkret genug wirst mit deinem "Programm" was die Positionsangabe angeht. (wenn man explizit keinen Objektfang berücksichtigen möchte, dann sollte man das AutoCAD mitteilen) Man könnte also ganz einfach den Befehlsmodifizierer "_non" vor den Koordinaten in die Befehlszeile schicken. "_non" oder "keiner" steht dann für "für die nächste Eingabe keinen Objektfang berücksichtigen" 2. In AutoCAD gibt es die Sysvar OSNAPCOORD (welche bei mir in jedem Profil in jeder Version von 2 auf 1 gestellt wird) Schau dir hier die FAQ: OSNAPCOORD an <KLICK!> Aktuell steht die bei dir auf 2, was bedeutet: Handeingabe= kein OFang, Eingabe per Macro Script oder (send)command= berücksichtige den Ofang.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|