Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Rückgabe einer Funktion

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:  Rückgabe einer Funktion (1314 mal gelesen)
s.wickel
Mitglied
Bauingenieur Wasserwirtschaft


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

Beiträge: 422
Registriert: 17.12.2001

Bricscad V7 - V11

erstellt am: 26. Sep. 2005 10:35    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 Forum!

Wahrscheinlich zu simpel für lange Antworten.
Ich habe eine Funktion geschrieben, die überprüft ob ein übergebenener Punkt auch ein 3D-Punkt ist. Wenn nicht wird eine 0 als Z-Koordinate angehängt. Sonst wird einfach der Punkt zurückgegeben.

Code:

(defun 3D (p /)  ;gibt einen Punkt als 3D-Koordinate zurück
  (if (not (zvon p))
    (setq p (list (Xvon p) (Yvon p) 0))
  )
  p
)

Meine Frage:
Den Punkte auf diese Weise zurückgeben funktioniert wunderbar. Aber ist das auch in Ordnung? Kann diese Form zu Problemen führen? Die Funktion soll Teil einer Bibliothek werden und sollte deshalb astrein sein. Sonst muss ich mit ein

Code:
(setq p p)
einfügen. Sieht aber nicht schön aus.

------------------
Nodda,

Stefan 

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 26. Sep. 2005 10:39    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 s.wickel 10 Unities + Antwort hilfreich

es reicht
(defun 3D (p /)  ;gibt einen Punkt als 3D-Koordinate zurück
  (if (not (zvon p))
    (setq p (list (Xvon p) (Yvon p) 0))
    P
  )
)

Rückgabewert einer Funktion ist immer der letzte interne Rückgabewert
Siehe dazu auch mal bei Mapcar

------------------
- Thomas -
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

s.wickel
Mitglied
Bauingenieur Wasserwirtschaft


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

Beiträge: 422
Registriert: 17.12.2001

Bricscad V7 - V11

erstellt am: 26. Sep. 2005 10:43    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 Cadmium für die schnelle Antwort!

Bei Mapcar hatte ich schon geschaut, aber das so direkt nicht gefunden, ob ich eine Variable einfach so aufrufen darf.
10 Punkte!

------------------
Nodda,

Stefan   

[Diese Nachricht wurde von s.wickel am 26. Sep. 2005 editiert.]

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: 26. Sep. 2005 11:05    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 s.wickel 10 Unities + Antwort hilfreich

Hi,

hier noch eine ActiveX-Variante:
Der Funktion (vlax-3d-point) ist es egal, ob sie mit 2d- oder 3d-Koordinaten gefüttert wird, sie bastelt immer 3d-Punkte.
Fehlt die Z-Koordinate oder ist sie nil, wird 0.0 eingesetzt.

Code:

(defun ax-3d (p)
  (vlax-safearray->list
    (vlax-variant-value
      (vlax-3d-point (car p)(cadr p)(caddr p))
      )
    )
  )

Nachteil der AcitveX-Variante: Weil die Funktion den Punkt in einen Variant und wieder zurück konvertiert, wird sie wahrscheinlich ab ein paar tausend Punkten etwas langsamer sein als Deine Lisp-Variante.


Gruß
CADchup

------------------
www.cadditions.de

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

s.wickel
Mitglied
Bauingenieur Wasserwirtschaft


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

Beiträge: 422
Registriert: 17.12.2001

Bricscad V7 - V11

erstellt am: 26. Sep. 2005 11:09    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

Um VL-Funktionen habe ich mich bisher gedrückt. Solange es auch ohne geht mache ich es ohne. Aber Danke.

------------------
Nodda,

Stefan 

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 29. Sep. 2005 23:07    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 s.wickel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von s.wickel:
Sieht aber nicht schön aus.

Öh, warum denn nicht? Genau das ist der korrekte Weg, um eine Rückgabe zu erzwingen, wenn die Evaluation des letzten Ausdrucks nicht das zurückgibt, was man gerne hätte.

Aber etwas anderes am Rande, das wirklich nicht ganz so schön aussieht: AutoLisp verfügt über die beiden Funktionen NOT und NULL, die eigentlich in ihrer Wirkungsweise völlig identisch sind. Dass die Funktion zwei Namen hat, dient dazu, zwei verschiedene Sachverhalte optisch zu trennen: NOT ist die logische NEGATION (true/false), NULL dient der Abfrage aus Vorhandensein(leere Liste, Variable). Beispiele

(if(not(or varA varB)...

(if(null userinput)...

Wenn's also nur um Schönheit geht: Hier wäre NULL statt NOT angesagt, da es nicht um die Negation einer Aussage geht.

@cadchup: Dieses minimale 'Problem' auch noch über die COM-Schnittstelle an das Betriebssystem weiterzureichen, dafür sehe ich aber nun wirklich keinen Anlass.

Dann doch lieber etwas eleganter:

(defun 3D (p /)  ;gibt einen Punkt als 3D-Koordinate zurück
  (list(car p)(cadr p)(if(caddr p)(caddr p)0))
)

Das sollte auch die schnellste Möglichkeit sein.

Gruß, Axel Strube-Zettler


------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

[Diese Nachricht wurde von mapcar am 29. Sep. 2005 editiert.]

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: 29. Sep. 2005 23: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 Nur für s.wickel 10 Unities + Antwort hilfreich

Hi Axel,

Zitat:
Original erstellt von mapcar:
Dieses minimale 'Problem' auch noch über die COM-Schnittstelle an das Betriebssystem weiterzureichen, dafür sehe ich aber nun wirklich keinen Anlass.

Das ist richtig.
Ich wollte mit dem Beitrag nur auf die Möglichkeiten von (vlax-3d-point) hinweisen.
(vlax-3d-point) ist natürlich nur dann sinnvoll, wenn man bei der weiteren Verarbeitung den Punkt nicht als Liste sondern als Variant braucht.


Gruß
CADchup

------------------
www.cadditions.de

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 02. Okt. 2005 00: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 s.wickel 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CADchup:
wenn man bei der weiteren Verarbeitung den Punkt nicht als Liste sondern als Variant braucht.

Zu dieser Annahme bestand aber kein Anlass. Es bringt doch nix, wenn jede kleine und in diesem Fall auch noch präzise gestellte Frage gleich mit einem Wust von anderen Möglichkeiten erschlagen wird, nach denen aber gar nicht gefragt wurde.

Nichts, absolut nichts, deutet im OPost darauf hin, dass es sich um eine COM/COM+-Applikation handelt. Warum sollte man also eine daraus machen wollen? Es ist einfach nicht so, das vla-..-Funktionen eine Erweiterung des Lisp-Sprachschatzes sind (im Unterschied zu den vl-...-Funktionen). Was mit vla- anfängt, tanzt auf einer anderen Hochzeit als Lisp.

Gruß, Axel Strube-Zettler

------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

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