Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  ssget oder getreal, optionale Abfrage

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
Autor Thema:   ssget oder getreal, optionale Abfrage (164 mal gelesen)
CADuceus
Mitglied
Projektleiter Energienetze


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

Beiträge: 271
Registriert: 20.01.2005

AutoCAD Map 3D 2017 (D)
Win7 64bit / IE 11
Intel® Core™ i7-4790 3.6GHz / 8GB
Nvidia Quadro K2000 2GB
HP DesignJet T7100

erstellt am: 06. Jul. 2018 14:23    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 geschätztes Forum

Während mich mein Lisp nach "erste Ecke angeben" (getcorner) oder "Objekte wählen" (ssget) fragt, möchte ich gerne ein keyword eingeben können, dass mich an ein getreal führt um eine Variabel zu ändern.
Aber Wörter führen ja bei diesen Abfragen zu einer Fehlermeldung (ungültiger Punkt / ungültige Auswahl).

Kann ich das trotzdem irgenwie reinbasteln?
In der Eingabe Zeile sollte dann etwa stehen:
"Objekte Wählen oder [VARiable ändern]:"
bzw.
"erste Ecke angeben oder [EINstellungen]:"

Ziel ist es, dass die Variable nicht jedes mal eingegeben bzw. die Vorgabe nicht jedes mal mit Enter bestätigt werden muss.

------------------
Du kannst in anderen nur entzünden,
was in Dir selber brennt! 

Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren.

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: 18327
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 06. Jul. 2018 14:33    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 CADuceus 10 Unities + Antwort hilfreich

Das Beispiel zeigt zwar nichtr die richtige Syntax ein Acad-Abfrage, aber es ist ja die Technik welche du suchst..
http://www.cadmaro.de/index.php/autolisp/58-benutzereingaben-pfiffiger-gestalten

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: 1622
Registriert: 11.10.2004

erstellt am: 06. Jul. 2018 14:53    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 CADuceus 10 Unities + Antwort hilfreich

Hallo CADuceus,
anbei ein kleines Beispiel, da kannst Du mit SSGET einen Auswahlsatz füllen, bei ENTER wird aber immer in eine GETINT-Abfrage geleitet.
Vielleicht kannst Du für das für Deine Zwecke anpassen.

Code:

(defun c:test ( / AWS DO EINGABE WERT)
  (setq wert 1)
  (setq Do 'T)
  (while DO
    (princ
      (strcat
        "\nObjekte wählen oder ENTER für Zahlerwert eingeben <"
        (itoa wert)
        ">:"))
    (if (setq aws (ssget))
      (setq Do nil)
      (if (setq Eingabe
                (getint
                  (strcat
                    "\nZahlenwert eingeben <"
                    (itoa wert)
                    ">")))
        (setq wert Eingabe)))
    )
  (list aws wert))

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

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

Attribute freistellen Youtube

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

CADuceus
Mitglied
Projektleiter Energienetze


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

Beiträge: 271
Registriert: 20.01.2005

AutoCAD Map 3D 2017 (D)
Win7 64bit / IE 11
Intel® Core™ i7-4790 3.6GHz / 8GB
Nvidia Quadro K2000 2GB
HP DesignJet T7100

erstellt am: 10. Jul. 2018 11: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

Danke für den Link.
Habe alles gelesen, ausprobiert und es hat sogar geklappt.

------------------
Du kannst in anderen nur entzünden,
was in Dir selber brennt! 

Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren.

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

CADuceus
Mitglied
Projektleiter Energienetze


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

Beiträge: 271
Registriert: 20.01.2005

AutoCAD Map 3D 2017 (D)
Win7 64bit / IE 11
Intel® Core™ i7-4790 3.6GHz / 8GB
Nvidia Quadro K2000 2GB
HP DesignJet T7100

erstellt am: 10. Jul. 2018 11:37    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

Auch Dir Jörn vielen Dank.

Habe jetzt was ähnliches aber während einer getpoint-Abfrage.

Eine Frage habe ich allerdings noch. Ich habe mein Enter natürlich in Eckigen Klammern geschrieben.

Code:
(strcat
        "\nPunkt wählen oder [ENTER] für Zahlenwert eingeben <"
        (itoa wert)
        ">:"))

Wenn mal allerdings in der Eingabezeile oder per Rechtsklick-Menü auf das Wort "Enter" draufklickt kommt eine Fehlermeldung (logisch, ich gebe ja auch nicht ENTER als Wort ein).

Kann man das auch als richtiges "Enter" schreiben?

------------------
Du kannst in anderen nur entzünden,
was in Dir selber brennt! 

Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren.

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: 18327
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 10. Jul. 2018 12:21    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 CADuceus 10 Unities + Antwort hilfreich

Das ENTER in eckiger Klammer ist eine  OPTION,
das komplette Wort GROSS zu schrieben ist nicht zwingend ein Fehler aber Quatsch, Enter wäre sinnig -
damit würde ein E für Enter ausreichen um die Option bei Tastatureingabe zu wählen.

Der Inhalt der spitzen Klammer ist ein Vorgabewert, drückst der User "Enter"
so sollte dein Programm mit 'wert' weiterarbeiten.

Wenn ich dich recht verstehe möchtest du überhaupt keine Option anbieten sondern lediglich
die Möglichkeit geben einen Vorgabewert per Enter zu übernehmen?

(strcat
        "\nPunkt wählen <"
        (itoa wert)
        ">: "))

So wäre es dann passend, jedoch stolpere ich über den nächsten Fehler (mag sein das dies nur aus Unkenntnis ist).

PUNKT wählen vs. Zahlenwert
Das eine ist eine Koordinate, das andere ist eine Zahl - macht auf den ersten Block keinen Sinn!?
Ausnahme: Durch die Punkteingabe wird automatisch eine Zahl ermittelt, aber dann würde ich den
#Text entsprechend der Situation etwas anders formulieren.
(da ich das drumherum nicht kenne ist mir das jetzt als Vorschlag nicht möglich)

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

CADuceus
Mitglied
Projektleiter Energienetze


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

Beiträge: 271
Registriert: 20.01.2005

AutoCAD Map 3D 2017 (D)
Win7 64bit / IE 11
Intel® Core™ i7-4790 3.6GHz / 8GB
Nvidia Quadro K2000 2GB
HP DesignJet T7100

erstellt am: 10. Jul. 2018 17:11    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

Guten Abend nochmal

Also meine Frage ist beantwortet aber zum Verständnis für alle...

Zitat:
Original erstellt von cadffm:
Wenn ich dich recht verstehe möchtest du überhaupt keine Option anbieten sondern lediglich
die Möglichkeit geben einen Vorgabewert per Enter zu übernehmen?


Doch. Ich möchte eben die Option anbieten...
Zitat:
Original erstellt von cadffm:
PUNKT wählen vs. Zahlenwert
Das eine ist eine Koordinate, das andere ist eine Zahl - macht auf den ersten Block keinen Sinn!?


...einen Zahlenwert zu verändern, der erst später im Programm benötigt wird.
Das Eine hat mit dem Anderen gar nichts zu tun.

Es geht mir eben darum, keine weitere Abfrage zu generieren falls man den Wert nicht verändern will.
Ansonsten müsste ich die Frage fast immer mit Enter überspringen.

Mein Lisp benötigt nur zwei Eingaben: Eine Auswahl und eine Koordinate.
Eine Zahl ist vorgegeben, soll aber auf Wunsch auch verändert werden können (aber nicht jedesmal abgefragt werden).
Daher soll diese innerhalb von ssget (wie es Jörn gelöst hat) oder innerhalb der getpoint angeboten werden.

Ausserdem habe ich das Prinzip für das Forum etwas vereinfacht um die Frage einfacher zu gestallten. In Wirklichkeit frage ich einen Bereich mit getcorner ab, darin wiederum benötige ich zusätzlich einen getpoint, darin wiederum eine getdist.

In meinem Lisp sieht es dann 1:1 so aus:

Code:
(setq Y-Untergrenze
      (cadr (getcorner
      (while (not Nullpunkt3D)
(cond
  ((setq Nullpunkt3D
  (getpoint "\nPunkt für erstes Profil wählen oder [Eingabe] um Profilabstand zu ändern:")
  )
    Nullpunkt3D
    )
  ((not Nullpunkt3D)
    (setq Aussparung
  (getdist
    (strcat "\nAbstand <" (rtos Aussparung) "> eingeben oder mittels zwei Punkte wählen:")
    )
  )
    )
  )
) ;_ Ende von while
      "\nUntergrenze des Zielbereichs angeben: "
      )
    )
      )
;; davon brauche ich dann...   
    (setq Y-Obergrenze (cadr Nullpunkt3D))
    (setq Maximalhöhe (- Y-Obergrenze Y-Untergrenze))

So funtioniert es bei mir und so soll es sein.
Sollte jemand noch einen groben Fehler sehen bin natürlich dankbar.

------------------
Du kannst in anderen nur entzünden,
was in Dir selber brennt! 

Wollte noch ein File anhängen, aber habe die Kiste schon heruntergefahren.

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)2018 CAD.de | Impressum | Datenschutz