Forum:Lisp
Thema:Daneben ist nicht Enter - grread
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge bearbeiten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Servus

Code:
(defun c:# ()
  (while
    (or (= 5 (setq #tmp (car (grread (setq #obj (entsel "\nObjekte wählen: <Ende> ")) 2 2))))
        (= 3 #tmp)
    );or
    (while (= 3 #tmp)
      (setq #tmp (car (grread (setq #obj (entsel "\nDaneben - nochmal wählen: <Ende> ")))))
    );while
    #obj
  )
)

Obiger Code sollte entweder "#obj" liefern oder nil, falls der User mit rechter MT beendet.
Bei einem Fehlklick mit der (linken) Picktaste soll die Abfrage wiederholt werden.

Das ganze funktioniert auch, allerdings ist bei einem "Fehlschuss" ein weiterer Linksklick notwendig, weil das Programm bei
"Objekte wählen: <Ende>" wartet.

Weiß jemand, wie man (grread) auch ohne diesen zusätzlichen Klick zum weiterlaufen überreden kann?

------------------
Schöne Grüße
Ernst

www.geopaint.at

marc.scherer

Beiträge: 2448 / 7

Windows 7 Professional 64bit
AutoCAD Architecture 2011/2015 (deu/eng)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung

Hi Geos,

warum grread?

Ich hab' das in dieser Art gelöst:

Code:

;; Funktion gibt nil zurück, wenn nicht gewählt oder aber
;; mehr als einer gewählt wurde (Implizit)
;; Oder 'STR bei Rechtsklick
;; Oder Ename, wenn Objekt geklickt
(defun IMPLIZIT-ENTSEL (QUESTION / SGET)
  (if (not (setq SGET (ssget "I"))) ;_ Implizite Objektwahl!
    (progn
      (initget " ")
      (if (= (type (setq SGET (entsel (strcat "\n" QUESTION)))) 'STR)
        (setq SGET 'STR)
        (if sget
          (setq SGET (car SGET))
          )
      )
    )
    (progn
      (if (not (> (sslength SGET) 1))
        (setq SGET (ssname SGET 0))
        (setq SGET NIL)
      )
      (sssetfirst NIL NIL)
    )
  )
  SGET
)


(defun C:# (QUESTION / ENAME)
  (while (not ENAME)
    (setq ENAME (IMPLIZIT-ENTSEL QUESTION))
    (cond
      ((not ENAME)
       (setq QUESTION "NICHTS gewählt, neuer Versuch. Rechtsklick beendet die Objektwahl: "
       )
      )
      ((= ENAME 'STR)
       (princ "\nRechtsklick. Objektwahl wurde beendet.")
      )
    )
  )
  (if (not (= ENAME 'STR))
    ENAME
  )
)


Beispielaufruf:

Code:
(setq xx (C:# "Objekt wählen:"))

...

------------------
Ciao,
Marc
    

[Diese Nachricht wurde von marc.scherer am 07. Sep. 2009 editiert.]

Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Hallo Marc

Danke für Deinen Lösungsvorschlag.
Bei (grread) bin ich gelandet, weil ich für die weitere Verarbeitung auch den Pickpunkt - also die Rückgabe von (entsel) brauche/möchte.
Mir schwebt da sowas wie fortlaufendes abrunden/verschneiden vor, aber ohne mehrfach zu verwendende Linien vorher aufbrechen zu müssen.

------------------
Schöne Grüße
Ernst

www.geopaint.at

Dorfy

Beiträge: 892 / 251

AutoCad2007, ProE, HiCad

Hi Ernst,
Zitat:
Original erstellt von Geos:

Obiger Code sollte entweder "#obj" liefern oder nil, falls der User mit rechter MT beendet.
Bei einem Fehlklick mit der (linken) Picktaste soll die Abfrage wiederholt werden.

und wenn du mit mouse-reactor arbeitest!?

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

marc.scherer

Beiträge: 2448 / 7

Windows 7 Professional 64bit
AutoCAD Architecture 2011/2015 (deu/eng)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung

Zitat:
Original erstellt von Geos:
Bei (grread) bin ich gelandet, weil ich für die weitere Verarbeitung auch den Pickpunkt - also die Rückgabe von (entsel) brauche/möchte.

Hi Geos,

aber entsel gibt doch den Punkt bereits zurück!? Warum nimmst Du nicht den entsel Punkt?
Guckst Du hier:

Code:

(defun ## (QUESTION / LST-ENTSEL)
  (while (not LST-ENTSEL)
    (initget " ")
    (if
      (= (type (setq LST-ENTSEL (entsel (strcat "\n" QUESTION))))
'STR
      )
      (setq LST-ENTSEL 'STR)
    )
    (cond
      ((not LST-ENTSEL)
      (setq QUESTION
      "NICHTS gewählt, neuer Versuch. Rechtsklick beendet die Objektwahl: "
      )
      )
      ((= LST-ENTSEL 'STR)
      (princ "\nRechtsklick. Objektwahl wurde beendet.")
      )
    )
  )
  (if (= LST-ENTSEL 'STR)
    (setq LST-ENTSEL NIL)
  )
  LST-ENTSEL
)

Anwendung:

Code:
(setq xx (## "Objekt wählen: "))

...

------------------
Ciao,
Marc

wronzky

Beiträge: 2154 / 30

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

Hallo Ernst,
ich hätt's so ähnlich wie Marc gemacht:
Code:
(defun c:# ( / #obj)
  (while (not #obj)
    (initget "Ende ,_Quit")
    (setq #obj (entsel "\nObjekt wählen: <Ende> "))
  )
  (if (member #obj '("" "Quit")) (setq #obj nil) #obj)
)

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

wronzky

Beiträge: 2154 / 30

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

Hallo,
eine Weitere Möglichkeit wäre die Auswertung der Sysvar "ERRNO":
Code:
(defun c:## ( / #obj)
  (setvar "errno" 0)
  (while (and (not #obj) (not (= (getvar "errno") 52)))
    (setq #obj (entsel "\nObjekt wählen:"))
  )
  #obj
)
Allerdings kann der User dort NICHT "Ende" eingeben.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Hallo

Hatte vorhin nicht soviel Zeit
- daher Marc's ersten Code überflogen
- (ssget "I") entdeckt (mit ssget hatte ich angefangen, bis ich drauf gekommen bin, dass ich ja den PPunkt brauche)
- Hirn hat "Punkt fehlt" gesendet
- Code ins ACAD kopiert und ausprobiert
- hat ename geliefert
- Anwort geschrieben

Jetzt hab ich genauer geschaut und festgestellt, dass ich offensichtlich nicht alle Möglichkeiten von initget kenne.

Was ich nicht durchschaue:

Code:
(setq xxx (entsel))
liefert sowohl bei Enter als auch bei einem Klick ins Leere nil,
und
Code:
(type nil)
ergibt auch nil ,
wie wird xxx also zu einem String oder kriegt "" bzw. "Quit" zugewiesen?

------------------
Schöne Grüße
Ernst

www.geopaint.at

Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Schon wieder eine Antwort ...

Servus Henning

Das Beenden mit der rechten MT reicht völlig.
Wo gibts denn die Fehlercodes für errno?
Wieder was gelernt!

------------------
Schöne Grüße
Ernst

www.geopaint.at

wronzky

Beiträge: 2154 / 30

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

Hallo Ernst,
Zitat:
wie wird xxx also zu einem String oder kriegt "" bzw. "Quit" zugewiesen?
über initget (F1!)
(initget " ");Leerzeichen=Optionstrenner
oder
(initget ","); Komma=Abkürzungstrenner
geben einen Leerstring zurück bei Enter oder RMT

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

wronzky

Beiträge: 2154 / 30

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

Zitat:
Wo gibts denn die Fehlercodes für errno?

in Vlisp unter F1 > AutoLISP Developer's Guide > Appendixes >  AutoLISP Error Codes >

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Danke Henning

Meine F1 redet nur Englisch mit mir, deshalb nehme ich meistens mein altes "Handbuch für Benutzeranpassungen" aus ACAD 13 her.
Dort hab ich jetzt auch die Fehlercodes gefunden nicht aber Leerzeichen=Optionstrenner oder Komma=Abkürzungstrenner bei initget (gabs vielleicht damals noch nicht).
Muss mich wohl öfter durch die englische Hilfe quälen.

------------------
Schöne Grüße
Ernst

www.geopaint.at

fuchsi

Beiträge: 1201 / 10

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

siehe meine Antwort in diesem Thread
http://ww3.cad.de/foren/ubb/Forum145/HTML/000263.shtml
Geos

Beiträge: 1017 / 2

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

Hallo Anton

- wäre auch eine Möglichkeit, allerdings signalisiert das Fadenkreuz eine Punktwahl.
- würde auf den "Objektwahlcursor" (Pickbox, Kasterl) nur ungern verzichten ...

Trotzdem danke

------------------
Schöne Grüße
Ernst

www.geopaint.at