Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  PTC Creo Elements/Programmierung
  warum wird dieses defun nicht geladen?

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 PTC CREO
Autor Thema:  warum wird dieses defun nicht geladen? (1174 / mal gelesen)
Greskamp
Mitglied
Ingenieur


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

Beiträge: 523
Registriert: 12.03.2003

MS: Windows 10 64bit
OSD: 20.1 M020
ModelManager: 20.1 M020
NX 1899
TC 12.3

erstellt am: 19. Dez. 2017 15:16    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 kanns mir mal wieder nicht erklären.
Ich habe in einer Datei zig defun die alle geladen werden, jedoch dieses nicht.
Hat das was mit der in-package zuweisung zu tun?

Wenn ich den defun Code in die Befehlszeile kopiere, klappt es. Sonst sagt er kann "mitte1_2d_def" nicht finden

Code:
(in-package :greskamp)
(use-package :OLI)

(DEFUN mitte1_2d_def (mitte1)
(If (sd-inq-curr-wp)
(setq mitte1_2d (sd-gpnt3d-to-2d (sd-vec-xform mitte1 :source-space :global :Dest-space (sd-inq-curr-wp))))
(display "keine aktive Arbeitsebene vorhanden")
)
mitte1_2d
)


Oder liegt es daran das ich am Ende die Variable "mitte1_2d" noch mal ausgebe?

------------------
Gruß Peter

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

der_Wolfgang
Ehrenmitglied V.I.P. h.c.
Tastenhauer


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

Beiträge: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 19. Dez. 2017 18: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 Nur für Greskamp 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Greskamp:
ich kanns mir mal wieder nicht erklären.
Ich habe in einer Datei zig defun die alle geladen werden, jedoch dieses nicht.

Wenn ich den defun Code in die Befehlszeile kopiere, klappt es. Sonst sagt er kann "mitte1_2d_def" nicht finden

Oder liegt es daran das ich am Ende die Variable "mitte1_2d" noch mal ausgebe?


Code:
..... )
mitte1_2d
) ;; end defun

Was heisst denn hier "ausgeben" - Du schreibst da nen Variablen Name hin.

Was aber viel "schlimmer" ist: wenn es keine Workplane gibt, gibt es beim ersten Aufruf der Funktion einen LISP fehler (und wie wird der wohl heissen??) 

Du benutzt nemmlich kein (let (...))! Damit ist die Variable mitte1_2d gar nicht definiert (es sei denn Du hast die Funktion schon vorher einmal mit vorhanderen CurrWP aufgerufen).

Zeige-Finger-schwenk!!!!  Variablen deklariert/definiert mann!!!!  (und Frau auch!)

Guck mal so:

Code:
(in-package :greskamp)
(use-package :OLI)

(defun mitte1_2d_def (mitte1)
  (let (mitte1_2d)
    (If (sd-inq-curr-wp)
      (setq mitte1_2d (sd-gpnt3d-to-2d (sd-vec-xform mitte1 :source-space :global :Dest-space (sd-inq-curr-wp))))
      (display "keine aktive Arbeitsebene vorhanden")
    )
    mitte1_2d  ;; return value
  ) ;; end let
) ;; end defun


Das ist (war) einfach unsauber programmiert (JEDE variable ist zu definieren, und damit Pasta!) und ich finds lustig das der Fehler auf so grauslige Art zurueck schlaegt. 


Der NAME der Funktion die, du da definiert hast, laesst mich allerdings unterm Strich schlimmeres vermuten. 


JEDE Variable die du/ihr mit einem setf/setq setzen wollt muss

  • in einem let definiert sein, oder
  • ein Funktions Uebergabe Parameter sein oder
  • via defvar definiert werden oder
  • via defparameter definiert werden oder
  • via multiple-value-bound... oder 

Aber ein (setf ... ) ohne was 'davor' ist immer ein grosses Risiko.  Andere Programmiersprachen schimpfen da ganz heftig. LISP leider nicht. Zumindest nicht bei interpretiertem Lisp code (compile-file zeigt solche eklatanten Fehler an).

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

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

Greskamp
Mitglied
Ingenieur


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

Beiträge: 523
Registriert: 12.03.2003

erstellt am: 19. Dez. 2017 19:01    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 und danke,
soviel Schimpfe noch im alten Jahr. Ich habe mich immer gefragt für was dieses let benutzt wird weil es ja auch ohne geht.
Und laut lisp-foren braucht man das setf auch eher weniger als das setq.

Und mit ausgeben meine ich das dann der punkt der dort ermittelt wurde auch im CAD genommen wird, sonst hat man ja nur eine Variable definiert. Sorry für mein gebrochenes Programmierdeutsch. Ich habe mir lisp mehr oder weniger selbst beigebracht und da sind ein paar basics unter gegangen.

------------------
Gruß Peter

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

der_Wolfgang
Ehrenmitglied V.I.P. h.c.
Tastenhauer


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

Beiträge: 2017
Registriert: 3.20.

● PE60+80@home
● W10 Pro Build19044.2364
● Drafting V17~V20.5.1
● Modeling V17~V20.5.1

erstellt am: 19. Dez. 2017 19: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 Greskamp 10 Unities + Antwort hilfreich

(setf ..  (setq ...  sind  diesbezeuglich gleichbedeutend.

Wann immer du eine Funktion hast, die ein paar interne Variablen braucht: setze ein (let ... ) ein.

siehe auch: http://ww3.cad.de/foren/ubb/Forum92/HTML/000884.shtml#000001

Oft "geht es gut" ohne let/defvar/defpar (leider!).

Bei Dir hat es 'nur beim Laden' gerumst. Was eigentlich angenehm ist!

Schlimmer sind die Faelle    wo funktion X eine (unbeabsichtig erzeugte) globale variable setzt und..  2 Stunden spaeter ein anderes Tool DIESEN wert dann liest fuer einen voellig andern Zweck und es DANN im system klappert!  DAS kann man dann nemmlich schwer nachvollziehen.    Deswegen warne ich da immer sehr vehement mit der Definition von variablen.

Ein (seq current-wp ... ) ist schnell geschrieben, aber wenn das dann "woanders" abgefragt wird (when current-wp) ..  unter Umstaenden in einem ganz anderem LISP file....

Diese "nicht definierte variable" Warnung ging ja an ALLE, nicht nur an Dich.

------------------
Firefox ESRJava Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en)NotePad++BuFDi

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

clausb
Ehrenmitglied V.I.P. h.c.



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

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 19. Dez. 2017 21: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 Greskamp 10 Unities + Antwort hilfreich

Ich kann das von Greskamp beschriebene Problem nicht nachvollziehen. Der Code lässt sich ohne Fehlermeldungen laden und ausführen. Beispielaufruf:

Code:

(display (greskamp::mitte1_2d_def 0,0,0))

Den Anmerkungen von der_Wolfgang stimme ich unabhängig davon natürlich zu. Siehe zum Beispiel auch die Diskussion unter https://stackoverflow.com/questions/19067632/difference-between-let-and-setq

------------------
CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ - Blog: http://www.clausbrod.de/Blog

[Diese Nachricht wurde von clausb am 19. Dez. 2017 editiert.]

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

Greskamp
Mitglied
Ingenieur


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

Beiträge: 523
Registriert: 12.03.2003

erstellt am: 20. Dez. 2017 10: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

ihr habt irgendwie beide recht.
Ich habe das eben noch mal probiert.
Also ohne das LET geht es auch, es lag daran wie ich den Befehl aufgerufen habe
Zuerst hatte ich mit (mitte1_2d_def greskamp::mitte1) aufgerufen, das ging auch manchmal, zumindest wenn ich das defun in die befehlszeile kopiert hatte.
Aber nachdem ich das ganze mit LET probiert hatte und es immer noch geladen wurde, habe ich jetzt
(greskamp::mitte1_2d_def greskamp::mitte1) probiert, und das scheint zu gehen.

in-package und use-package und das ganze drum rum ist noch was, was ich nur durch ausprobieren hin bekomme.... 

------------------
Gruß Peter

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

AlexG
Mitglied



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

Beiträge: 132
Registriert: 05.04.2013

CP/M; 6510@0,985249 MHz; 64KB RAM; 20KB ROM; MOS 6569

erstellt am: 20. Dez. 2017 10:45    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 Greskamp 10 Unities + Antwort hilfreich

Zitat:
in-package und use-package und das ganze drum rum ist noch was, was ich nur durch ausprobieren hin bekomme....

*WINK* Schau mal hier:

http://www.flownet.com/gat/packages.pdf (The Complete Idiot’s Guide to Common Lisp Packages)

Vielleicht bringt das etwas Licht ins dunkel. 

Gruß,

    Alex

------------------
Computer sind unbrauchbar. Sie können nur Fragen beantworten.
Pablo Picasso, Maler

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