Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Rückgabe von entsel steuern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von hanns-g an!   Senden Sie eine Private Message an hanns-g  Schreiben Sie einen Gästebucheintrag für hanns-g

Beiträge: 54
Registriert: 14.10.2015

Win10
Bricscad V21
Vestra INFRAVISION Build60

erstellt am: 30. Okt. 2023 17:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hanns-g 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21876
Registriert: 03.06.2002

Alles

erstellt am: 30. Okt. 2023 23:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hanns-g 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von hanns-g an!   Senden Sie eine Private Message an hanns-g  Schreiben Sie einen Gästebucheintrag für hanns-g

Beiträge: 54
Registriert: 14.10.2015

Win10
Bricscad V21
Vestra INFRAVISION Build60

erstellt am: 02. Nov. 2023 11:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von mcap an!   Senden Sie eine Private Message an mcap  Schreiben Sie einen Gästebucheintrag für mcap

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hanns-g 10 Unities + Antwort hilfreich

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21876
Registriert: 03.06.2002

Alles

erstellt am: 05. Nov. 2023 22:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für hanns-g 10 Unities + Antwort hilfreich

Also grread gibt die NÄCHSTE Anwendereingabe aus
die 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz