Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Vorgabewerte an Lisp übergeben

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:  Vorgabewerte an Lisp übergeben (2700 mal gelesen)
Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 09. Mai. 2007 18: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

Hallo,

ich habe mir ein Lisp geschrieben für eine Schraffur.
Die Lisp fragt mich mehrere Daten ab (z.b. Schraffurwinkel, Abstand, Schraffurfarbe). Nun möchte ich mir mehrere Werkzeugkästen anlegen welche bereits bestimmte Vorgaben (zb. Schraffurwinkel 0°, 45°, 90° usw. Vorgeben. Das ich nach Defun Variablen deklarieren kann welche ich in der Eingabeaufforderung direkt mit übergeben kann weiss ich. Allerdings brächte ich dann ja einen IF-Befehl für jede Variablenabfrage in der Lisp weil wenn ich z.b. Schraffurwinkel 90° direkt beim Befehlsaufruf mit übergebe soll diese Abfrage in der Lisp ja nicht mehr kommen.
Kann mir jemdan bitte erklären wie so etwas geht?

DANKE vorab

Gruß

Stefan

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

Claudio
Mitglied
Architekt


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

Beiträge: 334
Registriert: 13.04.2002

ACA, Revit, MAX 2020

erstellt am: 09. Mai. 2007 18:46    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 Stefan Michel 10 Unities + Antwort hilfreich

Hallo Stefan!
Variablen werden mit setq definiert. z.B.: (setq HWIN 45) ->
(setq HTYP "ANSI31")
(setq HSCAL 2)
(setq HWIN 45)
und dann die Variablen an den Befehl übergeben->
(command "_hatch" HTYP HSCAL HWIN)

Gruß Claudio

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

Claudio
Mitglied
Architekt


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

Beiträge: 334
Registriert: 13.04.2002

erstellt am: 09. Mai. 2007 18:58    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 Stefan Michel 10 Unities + Antwort hilfreich

Hallo Stafan!
...glaube allerdings, daß das Problem noch etwas anders gelagert ist
(konnte es Deiner Frage nicht genau entnehmen) - vielleicht hängst
Du das Lisp an, dann kann man das Problem besser nachvollziehen.
(..Ablauf beim Buttonaufruf..)
Gruß Claudio

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 09. Mai. 2007 22:14    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 Stefan Michel 10 Unities + Antwort hilfreich

Hi,

wahrscheinlich meinst du etwas in dieser Art:

(defun MeinBefehl (param1 param2 param3 / var1 var2)
  (if (not param1)
    (setq param1 (getreal "\nParameter 1: "))
    )
  (if (not param2)
    ....

Für jeden Parameter, den du nicht mitgeben willst, gibst du der Funktion jetzt ein nil mit:
(MeinBefehl 45.0 nil nil)
Wenn ein Parameter nil ist, fragt die Funktion den Wert ab.


Gruß
CADchup

------------------
CADmaro.de

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

Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 10. Mai. 2007 07:27    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 morgen,

also das was CADchup geschrieben hat schaut schon ganz gut aus.
Nun habe ich aber folgendes Problem an der Sache. ich habe die Variablen die z.b. für den Schraffurabstand zuständig sind Global definiert um beim erneuten Befehlsaufruf immer automatisch den letzteingegebnen Wert als Vorgabe zu haben. Deshalb ist die Variable nie auf nil!

Hier mal mein Lisp zur besseren Nachvollziehbarkeit:


(defun c:hs ( / winkel abstand farbe)

(if (= hs_abstand nil) (setq hs_abstand 10))
(if (= hs_farbe nil) (setq hs_farbe "Grün"))

(setq winkel (+ 90(*(getangle "\nWinkel 90° zur Schraffurrichtung wählen:")(/ 180 pi))))
(setq abstand (getreal (strcat"\nSchraffurabstand eingeben <" (rtos hs_abstand)">:")))
(if (/= abstand nil) (setq hs_abstand abstand))

(command "-schraff" "e" "b" winkel hs_abstand "N" (while (/=(getvar "CMDACTIVE")0)(command pause)))

(initget "g b l")
(setq farbe(getkword (strcat"\nSchraffurfarbe wählen (Grün/Braun/vonLayer) <" hs_farbe">:")))

(if(= farbe "g")  (setq hs_farbe "Grün"))
(if(= farbe "b")  (setq hs_farbe "Braun"))
(if(= farbe "l")  (setq hs_farbe "vonLayer"))

(cond
((= hs_farbe "Grün")  (entmod(append(entget(entlast)) '((62 . 3 )))))
((= hs_farbe "Braun")  (entmod(append(entget(entlast)) '((62 . 40)))))
);end cond

(princ)

);end defun

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

Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 10. Mai. 2007 07: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

Sorry, Gruß vergessen.....

Vielen Dank vorab

Gruß

Stefan

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

Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 10. Mai. 2007 08:36    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,

ich bin gerade selber draufgekommen! ich nehem einfach für die
variablene welche ich direkt an den Befehl übergebe andere namen. dann kann ich mit ner IF-funktion prüfen ob diese übergeben wurden und kann
entweder die globale Variable der übergebenen gleichsetzen oder wenn die übergebene variable nicht existiert die benutzereingabe starten!

vielen Dank für die Denkanstösse

Gruß

Stefan

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 10. Mai. 2007 08:42    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 Stefan Michel 10 Unities + Antwort hilfreich

Ich habe dir hier mal was gemacht - vielleicht kannst es ja nutzen:

Code:
(defun hs ( hs_abstand hs_farbe / winkel abstand farbe)

(if (null hs_abstand)
  (if(null(setq hs_abstand (getreal (strcat"\nSchraffurabstand eingeben <" (rtos 10)">:"))))
  (setq hs_abstand 10))
  )

(setq winkel (+ 90(*(getangle "\nWinkel 90° zur Schraffurrichtung wählen:")(/ 180 pi))))
  (if(null hs_farbe)
  (if(null(setq hs_farbe (acad_colordlg 256)))
    (setq hs_farbe 3)
    )
  )
(command "schraff" "b" winkel hs_abstand "N" (while (/=(getvar "CMDACTIVE")0)(command pause)))
;;;  (if (= hs_farbe nil) (setq hs_farbe "Grün"))

  (entmod(append(entget(entlast)) (list(cons 62 hs_farbe ))))
(princ)
);end defun

(defun c:col ()
  (hs nil nil)
  )

;;; für einen Externen Aufruf per Makro kannst du es auch so nutzen:
;;; ^C^C(hs 0.1 1)
;;; oder
;;; ^C^C(hs nil 11)
;;; oder
;;; oder
;;; oder


------------------
Gruß
CADwiesel
Besucht uns im CHAT

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

Stefan Michel
Mitglied



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

Beiträge: 40
Registriert: 01.06.2006

erstellt am: 10. Mai. 2007 09: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

Hallo CADwiesel,

vielen Dank für die überarbeitung.
Leider ist es bei deiner überarbeiteten Version so, dass z.b. der
Schraffurabstand (bei benutzereingabe) immer als Vorgabe auf 10 gesetzt wird, bei meiner Lisp wurde der letzte eingegebene Wert als Vorgabe gesetzt (also wenn ich quasi beim 1. befehlsaufruf 33 als Abstand eingegeben habe wurde mir beim 2. Befehlsaufruf auch die 33 als Vorgabewert angezeigt und übernommen. Dies sollte auch so bleiben.
Genauso ist es bei der Farbgebung.
Deswegen denke ich, ich muss nochmal neue variablen anlegen für die vorgabewerte damit hier die globalen variablen nicht überschreiben werden! ich werds mal probieren und denke es sollte eigentlich klappen.

Danke an alle

Gruß

Stefan

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

zimcad
Mitglied
Büro für Bauplanung & Bautechnik


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

Beiträge: 49
Registriert: 26.07.2004

aca-2017, win10-64bit

erstellt am: 15. Mai. 2007 19:06    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 Stefan Michel 10 Unities + Antwort hilfreich

habe das gerade mal überflogen. Ohne alles genau gelesen zu haben warum setzt du nicht mittels Lisp über (setvar...) die Systemvariablen HPNAME, HPANG usw. Dann kannst du anschliessend einen Punkt an den Schraffurbefehl übergeben. Wenn die Variablen gesetzt sind, startet Schraff mit diesen als Vorgabe.

------------------
Gruss
A. Zimmermann

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

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

erstellt am: 21. Mai. 2007 12:54    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 Stefan Michel 10 Unities + Antwort hilfreich

Ich mache sowas eigentlich in dieser Art

(defun c:Test (/ a1 )
  (if (not Name) (setq name "keiner"))
  (setq a1 (getstring (strcat "Namen eingeben <" name "> : ")))
  (if (/= a1 "") (setq name a1))
  (alert (strcat "Ihr Name ist " name))
)

in einem Werkzeugkasten kann man dann ganz einfach das Ding so ablegen
^c^cTEST Anton

[Diese Nachricht wurde von fuchsi am 21. Mai. 2007 editiert.]

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