| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: ssget filter_list aus Datei erzeugen (1093 / mal gelesen)
|
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Feb. 2017 10:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, für die Auswahl von verschiedenen Objekten möchte ich eine (Filter)liste für ssget aus einer Datei laden. Die Datei wird in der nachstehenden Form erstellt: ;Loeschen.nfl (0 . "LINE") (-4 . "<OR") (8 . "1") (8 . "2") (-4 . "OR>") Die Grundstruktur ist also enthalten. Für ssget muss liste als Liste vorliegen. ;(setq ss1 '(0 . "LINE")) ;(setq ss2 (ssget "X" (list ss1))) Ich kann liste als String (String kann eine Liste/keine Liste sein?) zusammensetzen. liste wird meiner Ansicht nach als String korrekt erzeugt als (0 . "LINE")(-4 . "<OR")(8 . "1")(8 . "2")(-4 . "OR>") Leider erzeugt die Anwendung der liste in (setq ss2 (ssget "X" (list liste)) einen Fehler: Fehlerhaftes Punktargument Habt ihr einen Tipp für mich? Gruß Archi [Diese Nachricht wurde von archi.archi am 24. Feb. 2017 editiert.] [Diese Nachricht wurde von archi.archi am 24. Feb. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 24. Feb. 2017 11:04 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
hallo archi, du aenders in deiner hauptfunktion den ausdruck (setq ss2 (ssget "X" (list liste))) in (setq ss2 (ssget "X" (read liste)))und du aenders die funktion filterladen so: (defun filterladen ( dname / datei liste zeile ) ;--- Filterliste laden (setq datei (open dname "r")) (setq liste "(") (setq zeile (read-line datei)) ;als string erzeugen (while zeile (if liste (setq liste (strcat liste zeile)) ;anhängen an nichtleere Liste (setq liste zeile) ;leere Liste - Liste erzeugen ) (setq zeile (read-line datei)) ) ;end while (close datei) (setq filterladen (strcat liste ")")) ) gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Feb. 2017 12:01 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Die Endung oder der inhaltliche Aufbau der Filterdatei war aber nur zum Test, oder? Schließlich wird diese Dateiendung bereits vom Programm verwendet und der Syntax einer Filterdefinition ist umfangreicher. Auch wenn die Datei unberücksichtig bleibt vom System (aufgrund des Dateinamens), so ist es doch etwas mehrkwürdig die gleiche Dateiendung für (eigentlich) die gleiche Aufgabe, aber mit anderem bzw. unvollständigem Syntax zu verwenden. Nur aus Interesse da es so merkwürdig anmutet. OBJEKT:LINIE <ODER LAYER:1 LAYER:2 ODER> So hätte ich es schon eher verstanden, weil es für Benutzer einfacher zu schreiben wäre. In dem Fall (Nutzer legt Filterliste an) wäre es aber auch einfacher den User die Liste über den Filterbefehl erstellen zu lassen, komfortabel, kein Klammerwald und funktioniert auuch "manuell". Ich möchte nur erfahren warum man so Wege geht ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Feb. 2017 13:10 <-- editieren / zitieren --> Unities abgeben:
Hallo Marco und cadffm, vielen Dank für die schnellen Infos! Liste ist also doch nur String "in Listenform". Mit "read" wird es dann wohl klappen (komme aber erst Montag dazu). Die Dateiendung werde ich ändern. Die diversen Filterlisten (Löschen, Solids filtern und transparent setzen usw.) werden im Rohzustand mittels Filterbefehl erstellt, gespeichert und dann aus der nfl-Datei herausgeschnitten. Die weitere Bearbeitung/Ergänzung erfolgt im Editor. Das macht ein Sachkundiger. Die Anwendung der hinterlegten Filterlisten (über die definierten Dateinamen "Loeschen" ...) erfolgt durch den unbedarften Anwender. Daher wurde diese Form der Liste gewählt. Gruß und ein windstilles Wochenende Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Feb. 2017 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo marco, deinen Firmenlink habe ich gleich an die weltweit bekannte, örtliche Flughafenerrichtergesellschaft weitergeleitet. An den Softwarekosten hätten sie nicht sparen sollen!? Gruß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 24. Feb. 2017 16:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Marco, es gibt einen teilweisen Erfolg (mit read). Der 1. Block "Loeschen" funktioniert. Die Filterliste wird korrekt erstellt. Im 2. Block "Transparenz 50" wird die Filterliste nicht korrekt erstellt. Leider immer ein Fehler: _erase Objekte wählen: 1 gefunden Objekte wählen: Assoziativität der Schraffurumgrenzung entfernt. Befehl: ; Fehler: Fehlerhafte Funktion: "((0 . \"HATCH\")(2 ... Wenn der erste Block (Loeschen) im Code entfernt wird, funktioniert der nächste Block (Transparenz 50) usw.. Hast du dafür vielleicht eine Erklärung? Gruß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 24. Feb. 2017 18:00 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
|
neurosis Mitglied dipl.ing.
Beiträge: 224 Registriert: 22.08.2006
|
erstellt am: 24. Feb. 2017 18:20 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
du ueberschreibst dir deine funktion "filterladen" am ende selbiger, indem du aus der funktion eine variable machst. aendere die letzte zeile in (strcat liste ")") ;Listenende erzeugen um, und es sollte funktionieren. nochwas: dir fehlen checks, ob es z.b. objekte im auswahlsatz gibt, die geloescht werden koennen, ob die dateien ueberhaupt vorhanden sind usw. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 109 Registriert: 08.10.2010 Windows 11 AutoCAD 2024 Revit 2024
|
erstellt am: 25. Feb. 2017 11:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Marco, "du ueberschreibst dir deine funktion "filterladen" am ende selbiger, indem du aus der funktion eine variable machst." kleine Ursache - große Wirkung! Das kommt wohl davon, wenn man nach 10 Jahren wieder mit LISP anfängt und die Methode der Wertzuweisung in Funktionen über den Namen oder über Parameter verblasst ist! Ein Check für Dateien (if filterliste ) war schon enthalten. Einen Check für Objekte im Auswahlsatz (if liste) eigentlich auch. Vielen Dank für deine Hilfe - ab sofort werden alle externen Referenzen schnell und elegant bearbeitet. Gruß Archi [Diese Nachricht wurde von archi.archi am 25. Feb. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |