| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Rückgabe von entsel steuern (366 / mal gelesen)
|
hanns-g Mitglied
Beiträge: 54 Registriert: 14.10.2015 Win10 Bricscad V21 Vestra INFRAVISION Build60
|
erstellt am: 30. Okt. 2023 17:56 <-- editieren / zitieren --> Unities abgeben:
Hallo ihr Profis, wenn der Anwender auf mein entsel fälschlicherweise eine Zahl eingibt kommt seltsamerweise entweder nil oder eine Entity, je nachdem welcher Wert eigegeben wird. Ich möchte aber das ein Objekt angeklickt wird. Dies soll nun abgefangen werden. Ist da ein initget die Lösung?
Die Hilfe zu Initget (auf engl.) bring mir keine ausreichende Erklärung, auch nicht mit Übersetzung: http://docs.autodesk.com/ACD/2013/PTB/index.html?url=files/GUID-9ED8841B-5C1D-4B3F-9F3B-84A4408A6BBF.htm,topicNumber=d30e609565 Im AutoCad-Handbuch steht was von „Schlüsselwörtern“? Hier mein bisheriger Code für die Objektauswahl: (while (progn (setvar 'errno 0) (setq OBJ (car(entsel "Polylinie, Linie, Bogen oder Kreis wählen..."))) (cond ((= 52 (getvar 'errno)) (princ "kein enter, probiers nochmal...") ) ((= 7 (getvar 'errno)) (princ "\nda ist nichts, nochmal...") ) ((= 'ename (type OBJ)) (if (and (/= "LINE" (cdr (assoc 0 (entget OBJ)))) (/= "LWPOLYLINE" (cdr (assoc 0 (entget OBJ)))) (/= "ARC" (cdr (assoc 0 (entget OBJ)))) (/= "CIRCLE" (cdr (assoc 0 (entget OBJ)))) ) (princ "\nfalsche Objektart, nochmal...") );end if ) );end cond );end progn );end while Bin für jede Hilfe dankbar.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 58 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Metashape Professional
|
erstellt am: 30. Okt. 2023 19:28 <-- editieren / zitieren --> Unities abgeben: Nur für hanns-g
Hab am Handy keinen Zugriff auf meinen Code, aber du bist schon auf der richtigen Spur. Versuch den Filter mal als while-Abfrage. Ausm Kopf vieleicht so:
Code:
(while (or (not Ent)(not (wcmatch (cdr (assoc 0 (entget Ent))) „*LINE,ARC,CIRCLE“))) (setq Ent (car (entsel „Polylinie, Line, Bogen oder Kreis wählen:“))) );end while
Ungetestet auf Smartphone getippt, prüfe also auch meine Tippfehler 😬 ------------------
Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21876 Registriert: 03.06.2002 Alles
|
erstellt am: 30. Okt. 2023 23:56 <-- editieren / zitieren --> Unities abgeben: Nur für hanns-g
Hi, da Bubi auf die eine Sache nicht eingegangen ist (und die Beispiellösung diesen Aspekt auch nicht ändert): >>"Ist da ein initget die Lösung?" Nein. >>"wenn der Anwender auf mein entsel fälschlicherweise eine Zahl eingibt" Entsel erwartet eine Koordinate oder die Objektwahlmethode Letztes *, dabei ist Entsel völlig egal wie man die Koordinate angibt. >>"kommt seltsamerweise entweder nil oder eine Entity, je nachdem welcher Wert eigegeben wird" Die Punktangabe in AutoCAD, auch für Entsel, darf recht beliebig erfolgen, also durch Maus-Pickpunkt X,Y X,Y,Z usw. oder auch durch Eingabe von Richtung+Abstand, was bei Eingabe einer Zahl der Fall ist. Die Zahl ist der Abstand, die Richtung zeigt der Cursor, ausgehend vom letzten Punkt (lastpoint)
>>"Ich möchte aber das ein Objekt angeklickt wird" Ich würde lieber alles erlauben und gar noch mehr, dafür würde ich dann SSGET verwenden - mit den Methode "_:S+." +ggf. noch mehr, dazu einen Filter für die erlaubten Objekttypen wie zB.'((0 . "ARC")))
Aber wenn soetwas wie Richtung+Abstand oder X,Y usw. "unterbinden" möchtest, dann besteht das Problem weiterhin. Dann müßtest du nachsehen was der Benutzer "eingegeben" hat: Siehe GRREAD * Komplizierte Details der Objektwahl, wie Anzeigereihenfolge und Selectioncycling, mal aussen vor.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hanns-g Mitglied
Beiträge: 54 Registriert: 14.10.2015 Win10 Bricscad V21 Vestra INFRAVISION Build60
|
erstellt am: 02. Nov. 2023 11:03 <-- editieren / zitieren --> Unities abgeben:
Hi, ich hab mal mit grread rumprobiert, und deinen Hinweis: "* Komplizierte Details der Objektwahl, wie Anzeigereihenfolge und Selectioncycling, mal aussen vor." ansatzweise verstanden. Also grread gibt die NÄCHSTE Anwendereingabe aus und das mus ja nicht unbedigt die von mir zu überprüfende sein. Ich denke hier ist für mich Schluss, das lohnt den Aufwand nicht. Das Ursprungsproblem war, das nach Auswahl eines Objekts als nächstes ein Wert eingegeben werden muss und so mancher erst den Wert eingegeben hat und damit trotzdem ein Objekt ausgewählt hatte. Vielen Dank für die Antworten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mcap Mitglied CAD-Supporter
Beiträge: 130 Registriert: 13.11.2014 Lenovo P360 ACAD 2022/24 IV 2022/24 WIN 10/64
|
erstellt am: 05. Nov. 2023 20:38 <-- editieren / zitieren --> Unities abgeben: Nur für hanns-g
Hallo hanns-g Ich denke, mit diesem Code solltest du recht nahe an dem sein, was du willst. So wie cadffm vorgeschlagen hat: ssget "_:S+." mit Filter. So kann (nur) 1 Objekt der angegebenen Typen gewählt werden. Habe den Code beabsichtigt möglichst übersichtlich/nachvollziehbar gehalten.
Code: ... (princ "\nWähle Objekt") (while (or (eq nil ss1) (/= (sslength ss1) 1)) (progn (princ "\nNur Linie/Polylinie oder Kreis/Bogen") (setq ss1 (ssget "_:S+." '((-4 . "<OR") (0 . "LINE") (0 . "*POLYLINE") (0 . "ARC") (0 . "CIRCLE") (-4 . "OR>") ) ) ) ) ) (setq eData (entget (ssname ss1 0))) (princ "Gewählt:\n") (princ eData) (setq ss1 nil) ...
------------------ Gruss Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21876 Registriert: 03.06.2002 Alles
|
erstellt am: 05. Nov. 2023 22:13 <-- editieren / zitieren --> Unities abgeben: Nur für hanns-g
Also grread gibt die NÄCHSTE Anwendereingabe ausdie Nächste und die Nächste und die Nächste...(wenn in einer Schleife abgerufen wird), genau. und das mus ja nicht unbedigt die von mir zu überprüfende sein. Nicht 100%ig, denn der User kann ja eine "1" eingeben und danach [<-] und dann mit der Maus ein Objekt klicken, aber schon bei Eingabe der "1" steht fest: DAS möchtest du nicht.. und dann kannst du darauf schon reagieren! (alert "1 tippen ist blöd, du sollst ein Objekt anklicken!") hier ist für mich Schluss, das lohnt den Aufwand nicht. Okay, ich zB. würde das auch nicht weiter verfolgen, da ja fast ALLE ANDEREN AUTOCAD-BEFEHLE (bzw. die AutoCAD-Objektwahl) auch diese Möglichkeit bieten und dieselbe "Falle" lauert, sofern es nicht bewußt&absichtlich erfolgte.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|