Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Variable für Aufruf optional machen.

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:  Variable für Aufruf optional machen. (460 mal gelesen)
Andreas Widmann
Mitglied
ATHENA Support/Training


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

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 04. Aug. 2009 17: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

Hallo Leute,

ich bin sicher ihr könnt mir schnell helfen.
Habe leider keine Ahnung von Lisp (und vermutlich deshalb auch nichts in der Suche gefunden).

Mein Code ist folgender: (nur die Fett markierten Sachen hab ich reingemacht)

Code:
(defun seLaySchr (sTyp sWi sMSTB sCo /)
  (setvar "cmdecho" 0)
  (if (not (= sCo nil)) (setq previous-color (getvar "cecolor")))
  (if (not (= sCo nil)) (setvar "cecolor" sCo))

  (setq BMSTB (getvar "CANNOSCALEVALUE"))
  (setq inpoint (getpoint "\nPunkt in der Fläche wählen oder [Objektwahl] <Objektwahl>:"))
  (cond
    ((or (= inpoint "o") (= inpoint "O") (= inpoint nil))
      (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a")
    )
    ((/= inpoint nil)
      (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" inpoint)
    )
  ) 
  (setvar "cmdecho" 1)
  (prin1)
)

Aufgerufen wird das ganze so:
- Ohne Farbgebung: (seLaySchr "Plast" 45 1)
- Mit Farbgebung:  (seLaySchr "Plast" 45 1 "RGB:122,122,122")

Der Aufruf ohne Farbgebung verursacht aber einen Fehler: "Zu wenig Argumente"
Kann mir bitte jemand kurz erklären wie ich "sCo" optional mache?

------------------
Gruß Andreas

------------------------------------------------------------------------------------------------------------------------------------
Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste...

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

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

erstellt am: 04. Aug. 2009 18:25    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 Andreas Widmann 10 Unities + Antwort hilfreich

Hallo Andreas,
klare Antwort: geht (mit Lisp) NICHT!
einzige Möglichkeit ist als Argument eine Liste von Argumenten zu übergeben:
Code:
(defun seLaySchr (argliste /)
  (setq sTyp (car argliste) sWi (cadr argliste) sMSTB (caddr argliste) sCo (cadddr argliste))
  ...

ist kein 4. Listenelement vorhanden, dann ist sCo nil.

Grüsse, Henning

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

  http://www.voxelman.de

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

Andreas Widmann
Mitglied
ATHENA Support/Training


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

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 04. Aug. 2009 18:29    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

Ok, schade.

Ich denke nicht dass ich, da der Aufruf in nem Werkzeugleistenbutton steckt, aus ner Werkzeugleiste heraus ne Argumentliste übergeben kann.

Hab mir aber schon was überlegt, ich schreib die anderen Buttons um sodass sie eine Farbe aufrufen, nur eben die Farbe "bylayer".

Dank dir Henning!

------------------
Gruß Andreas

------------------------------------------------------------------------------------------------------------------------------------
Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste...

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

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

erstellt am: 04. Aug. 2009 18: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 Nur für Andreas Widmann 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Andreas Widmann:
Ich denke nicht dass ich, da der Aufruf in nem Werkzeugleistenbutton steckt, aus ner Werkzeugleiste heraus ne Argumentliste übergeben kann.

Warum nicht?
Code:
(seLaySchr (list "Plast" 45 1))

Grüsse, Henning

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

  http://www.voxelman.de

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

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

erstellt am: 04. Aug. 2009 18:57    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 Andreas Widmann 10 Unities + Antwort hilfreich

Du könntest es so machen:
Code:
(seLaySchr "Plast" 45 1 "")

Allerdings müsstest Du die Abfrage
Code:
(if (not (= sCo nil)) (setvar "cecolor" sCo))

auch umbauen:
Code:
(if (/= sCo "") ...

Übrigens
Code:
(if (not (= sCo nil)) ...
=
Code:
(if sCo ...

Und möglicherweise geht auch das:

Code:
(seLaySchr "Plast" 45 1 nil)

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

www.geopaint.at

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: 05. Aug. 2009 09: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 Andreas Widmann 10 Unities + Antwort hilfreich

Ich würde es so machen

Aufgerufen wird das ganze so:
- Ohne Farbgebung: (seLaySchr "Plast" 45 1 nil)
- Mit Farbgebung:  (seLaySchr "Plast" 45 1 "RGB:122,122,122")

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

Andreas Widmann
Mitglied
ATHENA Support/Training


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

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 05. Aug. 2009 10:20    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


Beispiel.JPG

 
Hallo,

@Geos, danke dir, sehr gut erklärt und hat mir sehr geholfen.

Allerdings tritt jetzt ein Phänomen auf das ich mir nicht erklären kann:

Alle Schraffuren die ich ohne Farbe (seLaySchr "Plast" 45 1 "") aufrufe funktionieren einwandfrei. Rufe ich aber mit Farbe auf (seLaySchr "Solid" 0 1 "RGB:245,245,245") und klicke dann in die Kontur, dann wird immer die letzte Kontur (bzw. die der vorher erstellten Schraffur) mit ausgewählt.

Code:
;;; Erzeugt eine Schraffur in den gewählten Bereich 
(defun seLaySchr (sTyp sWi sMSTB sCo /)
  (setq previous-color (getvar "cecolor"))
  (if (/= sCo "") (setvar "cecolor" sCo))
  (setvar "cmdecho" 0)
  ;(command "_undo" "b")
  (setq BMSTB (getvar "CANNOSCALEVALUE"))
  (setq inpoint (getpoint "\nPunkt in der Fläche wählen oder [Objektwahl] <Objektwahl>:"))
  (cond
    ((or (= inpoint "o") (= inpoint "O") (= inpoint nil))
      (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a")
    )
    ((/= inpoint nil)
      (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" inpoint)
    )
  ) 
  ;(command "_undo" "e")
  (setvar "cmdecho" 1)
  (prin1)
)

------------------
Gruß Andreas

------------------------------------------------------------------------------------------------------------------------------------
Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste...

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

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

erstellt am: 05. Aug. 2009 10:29    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 Andreas Widmann 10 Unities + Antwort hilfreich

Bei der Solid-Schraffur gibt es keine Skalierung oder Drehwinkel. Daher läuft Dir die Befehlszeile bei "Solid" aus dem Ruder. Du musst noch unterscheiden:
Code:
(if (= sTyp "SOLID")
  (command ...)
  (command ...)

Grüsse, Henning

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

  http://www.voxelman.de

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

Andreas Widmann
Mitglied
ATHENA Support/Training


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

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 05. Aug. 2009 10: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

Ein Hoch auf Henning!

Das war ja sowas von schnell!

Vielen vielen Dank an alle, habt mir viel geholfen!

Code:
(if (= sTyp "Solid") (command "_-hatch" "e" sTyp "b" "j" "a") (command "_-hatch" "e" sTyp (/ sMSTB BMSTB) sWi "b" "j" "a"))

------------------
Gruß Andreas

------------------------------------------------------------------------------------------------------------------------------------
Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste...

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