Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  wenn entsel leer

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:  wenn entsel leer (357 / mal gelesen)
Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



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

Beiträge: 3367
Registriert: 07.06.2001

W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365

erstellt am: 08. Mai. 2023 11:18    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

Servus, hab mir eine LSP zusammengestrickt das anhand von Texten einen neuen Block erstellt. (Schachttexte abgreifen und Schachtblock erstellen)

Das Problem wenn die Info fehlt und ich keinen Text wähle bricht das LSP ab. Soll aber wenn kein Objekt gewählt ist auf "0" gesetzt werden.

Code:
(defun c:Schacht( / sb textw1 textw2 textw3 )
;Zum Abgreifen von Schacht Texten zu Block
  (setq sb(entget(car(entsel"\nAuswählen Bezeichnung:")))
        textw1(cdr(assoc 1 sb)))
    (setq sb(entget(car(entsel"\nAuswählen DOK:")))
        textw2(cdr(assoc 1 sb)))
(setq sb(entget(car(entsel"\nAuswählen SOHLE:")))
        textw3(cdr(assoc 1 sb)))
(princ textw1)(princ textw2)(princ textw3)
(command "_insert" "1schacht" (getpoint) "" "" "" textw1 textw2 textw3)
)


------------------
<----- Bitte Systeminfo eintragen, warum siehst du hier. Schöne Grüsse aus der Steiermark  Bernd P.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1389
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 08. Mai. 2023 12:02    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 Bernd P 10 Unities + Antwort hilfreich

Hallo Bernd,
das (car(entsel"\nAuswählen DOK:")) funktioniert noch wenn du nichts wählst aber das entget mag das nicht.

Also:

Code:
(if (setq dummy (car (entsel "\nAuswählen DOK:")))
  (entget dummy)
  (print "nichts gewählt")
)

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



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

Beiträge: 3367
Registriert: 07.06.2001

W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365

erstellt am: 08. Mai. 2023 13:24    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

Danke!

(if (setq dummy (car (entsel "\nAuswählen Bezeichnung:"))) (setq sb (entget dummy) textw1(cdr(assoc 1 sb)))(setq textw1 0))

------------------
<----- Bitte Systeminfo eintragen, warum siehst du hier. Schöne Grüsse aus der Steiermark  Bernd P.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1740
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 08. Mai. 2023 22:34    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 Bernd P 10 Unities + Antwort hilfreich

Noch ein kleine Ergänzung zu Andreas seiner Antwort. Ich finde, solche Abfragen sind immer gut geeignet, um mit AND und OR alles zu verbinden.
Dadurch kann z.B. ganz einfach gleich eine Alert-Meldung zu zu einem fehlerhaften Wert ausgegeben werden.
Code:

(if (and (or(= 1 2)
            (alert "Das ist falsch")
            )
         ....)
    (progn ...

Ich habe das für Dein Beispiel mal zusammen getippert, ob's läuft, weiß ich nicht, aber das Prinzip sollte erkennnbar sein.

Code:

(defun c:Schacht (/ sb textw1 textw2 textw3 obj)
;Zum Abgreifen von Schacht Texten zu Block
  (if
    (and
      (or
        (and
          (setq obj (car (entsel "\nAuswählen Bezeichnung:")))
          (setq sb (entget obj))
          (or
            (= "TEXT" (cdr (assoc 0 sb)))
            (alert "Info: das gepickte Objekt war kein Text.")
          )
             (setq textw1 (cdr (assoc 1 sb)))
        )
          (setq textw1 "<Bezeichnung>")
      )
         (or
           (and
             (setq obj (car (entsel "\nAuswählen DOK:")))
             (setq sb (entget obj))
             (or
               (= "TEXT" (cdr (assoc 0 sb)))
               (alert "Info: das gepickte Objekt war kein Text.")
             )
                (setq textw2 (cdr (assoc 1 sb)))
           )
             (setq textw2 "<0.00>")
         )
         (or
           (and
             (setq obj (car (entsel "\nAuswählen SOHLE:")))
             (setq sb (entget obj))
             (or
               (= "TEXT" (cdr (assoc 0 sb)))
               (alert "Info: das gepickte Objekt war kein Text.")
             )
                (setq textw3 (cdr (assoc 1 sb)))
           )
             (setq textw3 "<0.00>")
         )
    )
    (progn
      (princ textw1) (princ textw2) (princ textw3)
      (command "_insert" "1schacht" (getpoint) "" "" "" textw1 textw2 textw3)
    )
  )
)

Ich glaube, wenn die eigentliche Abfrage in einer gesonderte Funktion gepackt wird, dann ist es deutlicher:

Code:

(defun c:Schacht (/  textw1 textw2 textw3 )
;Zum Abgreifen von Schacht Texten zu Block
  (if
    (and
      (setq textw1(Schacht:Abfrage
                    "\nAuswählen Bezeichnung:"
                    "<Bezeichnung>"))
      (setq textw2(Schacht:Abfrage
                    "\nAuswählen DOK:"
                    "<0.00>"))
      (setq textw3(Schacht:Abfrage
                    "\nAuswählen SOHLE:"
                    "<0.00>"))
    )
    (progn
      (princ textw1) (princ textw2) (princ textw3)
      (command "_insert" "1schacht" (getpoint) "" "" "" textw1 textw2 textw3)
    )
  )
)

(defun Schacht:Abfrage (EntselMsg DummyString /  obj sb textw )
  (or
    (and
      (setq obj (car (entsel EntselMsg)))
      (setq sb (entget obj))
      (or
        (= "TEXT" (cdr (assoc 0 sb)))
        (alert "Info: das gepickte Objekt war kein Text.")
      )
        (setq textw (cdr (assoc 1 sb)))
    )
      (setq textw DummyString)
  )
  textw
  )


------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

das Flächenstempel_Tool

[Diese Nachricht wurde von joern bosse am 08. Mai. 2023 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



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

Beiträge: 839
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 09. Mai. 2023 12:47    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 Bernd P 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von  joern bosse:
Noch ein kleine Ergänzung zu Andreas seiner Antwort. Ich finde, solche Abfragen sind immer gut geeignet, um mit AND und OR alles zu verbinden.

Für Fortgeschrittenere: in den meisten Fällen kann man dann auch auf die IF Konstruktion verzichten und erzielt mehr Übersicht im Code und höhere Performance:
Anstelle

Code:

(if (setq en (car (entsel))
  (setq el (entget en))
)

geht auch das:

Code:

(and (setq en (car (entsel))
    (setq el (entget en))
)

Und natürlich geht das auch in weitaus komplexeren Situationen, in denen z.B. eine OR Konstruktion ein komplexes COND ersetzen kann. Hier beispielsweise eine INIT-Abfrage, in der eine globale Variable entweder schon gesetzt ist, oder in der Reihenfolge aus einem Dictionary der DWG gelesen wird, oder aus einem RegDB-Eintrag, oder einer INI-Datei:

Code:

(or
  ::GLOBVAR
  (setq ::GLOBVAR (readfromdictionary "::GLOBVAR"))
  (setq ::GLOBVAR (readfromregdb "::GLOBVAR"))
  (setq ::GLOBVAR (readfrominifile "::GLOBVAR"))
)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


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

Beiträge: 1389
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 09. Mai. 2023 14:31    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 Bernd P 10 Unities + Antwort hilfreich

Ja, herrlich, das sind natürlich Programmkonstruktionen die man am Anfang vielleicht nicht sofort durchschaut.

Sobald bei AND ein Ausdruck nil ist wird nicht weitergemacht.
Sobald bei OR ein Ausdruck nicht nil ist wird nicht weitergemacht.

Bin ich auch drüber gestolpert aber dann hatte ich ja Axels Seiten gefunden 

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

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