| | | 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: Auswahlsatz (514 / mal gelesen)
|
ReneReichel Mitglied Technischer Projektleiter
Beiträge: 71 Registriert: 07.02.2018 ACAD 2023 Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000
|
erstellt am: 16. Mai. 2024 09:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich brauche mal wieder eure Hilfe. Wie kann ich beim Aufruf einer Routine prüfen, ob bereits Objekte ausgewählt sind und mit diesem dann weiterarbeiten? So in dem Sinne: Wenn Objekte gewählt, dann mach was, wenn nicht, Auswahl mit ssget und dann mach was... Die Lösung ist sicher ganz einfach, ich komm aber nicht drauf... Danke schonmal im Voraus. Grüße René Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3858 Registriert: 15.10.2003
|
erstellt am: 16. Mai. 2024 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
|
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Mai. 2024 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
Man könnte das prüfen, aber das ist für deinen beschriebenen Fall überhaupt nicht notwendig "Wenn Objekte gewählt, dann mach was, wenn nicht, Auswahl mit ssget und dann mach was..." Auswahl mit ssget und dann mach was
läuft
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ReneReichel Mitglied Technischer Projektleiter
Beiträge: 71 Registriert: 07.02.2018 ACAD 2023 Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000
|
erstellt am: 16. Mai. 2024 11:43 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: Man könnte das prüfen, aber das ist für deinen beschriebenen Fall überhaupt nicht notwendig"Wenn Objekte gewählt, dann mach was, wenn nicht, Auswahl mit ssget und dann mach was..." Auswahl mit ssget und dann mach was
läuft
Hallo cadffm, das will ich eben nicht. Wenn der Benutzer vor dem Aufruf der Routine (bspw. automatische Schraffur) schon Objekte gewählt hat, soll er eben nicht gezwungen sein, die Objekte nochmals auszuwählen... Grüße René Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ReneReichel Mitglied Technischer Projektleiter
Beiträge: 71 Registriert: 07.02.2018 ACAD 2023 Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000
|
erstellt am: 16. Mai. 2024 11:56 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Mai. 2024 12:15 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
Zitat: Original erstellt von ReneReichel:das will ich eben nicht"
Ich habe es schon richtig dargestellt, DAS hier willst du nicht >>" soll er eben nicht gezwungen sein, die Objekte nochmals auszuwählen..." Diese Aussage stammt aber von dir und zeigt aber nur das du die Funktionsweise von SSGET überhaupt noch nicht geprüft hast, auch nach meinem Post nicht. (an der Stelle muss ich noch einmal darauf hinweisen dass ich nur auf deine beschriebene Aufgabe antworte, Fakten in Form von konkretem Code liegt uns ja nicht vor) Ich helfe dir mal beim überlegen/testen bzgl. SSGET:
1. Ohne ein Objekt markiert zu haben, gebe einmal ein: (SSGET)<enter> SSGET wird dich zur Objektwahl auffordern 2. Markiere ein Objekt, gebe einmal ein: (SSGET)<enter> SSGET wird dich NICHT zur Objektwahl auffordern, sondern den Auswahlsatz direkt mit den bereits markierten Objekten erstellen. Oder als simple Funktion, für denselben Test
(defun c:TEST nil (alert (itoa(sslength(ssget)))) ) 1. Nichts markieren und TEST<enter> starten 2. Objekt markieren und TEST<enter> starten Wenn das in deinen bisherigen Versuchen nicht funktioniert hat, dann lag es nicht an ssget, sondern an deinem (unbekannten) Cod, oder daran wie du deinen Code ausführst. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ReneReichel Mitglied Technischer Projektleiter
Beiträge: 71 Registriert: 07.02.2018 ACAD 2023 Win10 Enterprise, AMD Ryzen Threadripper 3960X 24-Core, 3.80 GHz, 128 GB RAM, NVIDIA RTX A4000
|
erstellt am: 16. Mai. 2024 12:39 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm:
Ich habe es schon richtig dargestellt, DAS hier willst du nicht >>[i]" soll er eben nicht gezwungen sein, die Objekte nochmals auszuwählen..." Diese Aussage stammt aber von dir und zeigt aber nur das du die Funktionsweise von SSGET überhaupt noch nicht geprüft hast, auch nach meinem Post nicht. (an der Stelle muss ich noch einmal darauf hinweisen dass ich nur auf deine beschriebene Aufgabe antworte, Fakten in Form von konkretem Code liegt uns ja nicht vor) Ich helfe dir mal beim überlegen/testen bzgl. SSGET:
1. Ohne ein Objekt markiert zu haben, gebe einmal ein: (SSGET)<enter> SSGET wird dich zur Objektwahl auffordern 2. Markiere ein Objekt, gebe einmal ein: (SSGET)<enter> SSGET wird dich NICHT zur Objektwahl auffordern, sondern den Auswahlsatz direkt mit den bereits markierten Objekten erstellen. Oder als simple Funktion, für denselben Test
(defun c:TEST nil (alert (itoa(sslength(ssget)))) ) 1. Nichts markieren und TEST<enter> starten 2. Objekt markieren und TEST<enter> starten Wenn das in deinen bisherigen Versuchen nicht funktioniert hat, dann lag es nicht an ssget, sondern an deinem (unbekannten) Cod, oder daran wie du deinen Code ausführst. [/i]
Das ist schon klar. Das Problem ist (dass kannst Du aber nicht wissen, da ich den Code nicht gepostet habe), dass das ssget nicht am Anfang der Routine steht, sondern vorher noch andere Befehle ausgeführt werden. Somit geht die Auswahl (anscheinend) verloren. Daher rührte die Frage, ob man das prüfen kann (habe aber festgestellt, dass ich die Prüfung auch an den Anfang stellen muss...). Danke Dir trotzdem für Deine Mühe. Grüße René Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Mai. 2024 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
>> "Somit geht die Auswahl (anscheinend) verloren."Wenn, dann führst du etwas aus, was die Auswahl aufhebt - die SSGET-Position an sich, ist irrelevant. Und NUR prüfen würde dir auch nicht helfen, man muss schon dafür Sorgen das ein Auswahlsatz gebildet wird und diesen an ein Symbol binden, damit man später auch noch weiß welche Objekte markiert waren, dafür ist dann die Option :i ideal, wobei man auch ssget ohne die Option nutzen könnte. Ein Grund dagegen wären höchstens mögliche unterschiedliche Vorgänge zwischen Objekte vor-gewählt vs- kein e Objekte vor-gewählt. (ssget ist, auch für die Option ":i", Pickfirst abhängig) Und weil hier noch immer kein Code steht, zwei Beispiel, für spätere Mitleser
(defun c:Test1 (/ aws) (setq aws (ssget "_i")) ; [editiert] (irgendetwaswasdieObjektwahlaufhebtundannerzeug) (if (or aws (setq aws (ssget))) (progn (machwasmitaws) ) ) ) (defun c:Test2 (/ aws) (if (setq aws (ssget)) (progn (irgendetwaswasdieObjektwahlaufhebtundannerzeug) (machwasmitaws) ) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 970 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 16. Mai. 2024 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
Zitat: Original erstellt von ReneReichel: Wie kann ich beim Aufruf einer Routine prüfen, ob bereits Objekte ausgewählt sind und mit diesem dann weiterarbeiten?
Zur Ergänzung, weil das noch niemand gesagt hat: es gibt einen Unterschied zwischen (ssget "_i") und (ssget "_:i") Die Variante mit dem Doppelpunkt fordert den Nutzer zur Objektwahl auf, falls kein impliziter Auswahlsatz vorhanden ist. Die Variante ohne Doppelpunkt gibt bei Nichtvorhandenem impliziten Auswahlsatz NIL zurück. Wenn man also nur prüfen möchte, ob schon Objekte in einem impliziten AUswahlsatz "vorab" ausgewählt sind, dann prüft man einfach auf (ssget "_i"). (ssget "_:i") hingegen ist das gleiche wie (or (setq sset (ssget "_i")) (setq sset (ssget)) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Mai. 2024 16:18 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
ähm. 1. Danke, bei mir war es nur ein "Schreibfehler", was ich jetzt oben korrigiert habe. 2. :i oder international _:i gibt es in Autodesks AutoLisp nicht, zumindest nicht als Option von ssget Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22298 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Mai. 2024 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für ReneReichel
>>"Die Variante mit dem Doppelpunkt fordert den Nutzer zur Objektwahl auf, falls kein impliziter Auswahlsatz vorhanden ist. " Dann ist diese Bricscad ssget-option völlig überflüssig, da ssget ohne besondere Methode identisch agiert!? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|