| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| Virtual T-Days 2024: Neuerungen Creo Elements/Direct 20.7, neue Modeling-Apps, Zukunft von PDM/PLM, ein Webinar am 19.11.2024
|
Autor
|
Thema: Texterzeugung per Makro (2109 mal gelesen)
|
stere0 Mitglied
Beiträge: 50 Registriert: 29.11.2012 Win10 CED V20.5 Windchill 12.0.2.6 PEX Solid Power Creo 8.0.0.0
|
erstellt am: 10. Okt. 2014 13:24 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe mir ein kleines Makro geschrieben um mein Schriftfeld auszufüllen. Hierzu werden erst alle Daten in eine Maske eingegeben und dann als einzelne Textfelder auf der Zeichnung platziert. Das ganze klappt soweit auch ganz gut, zumindest auf meinem "Test-System" zu Hause. Starte ich jetzt das Makro auf der Arbeit kann ich die Daten zwar eingeben, bekomme aber beim starten des Platzierens sofort beim ersten Textelement einen Fehler und das Makro bricht mit der Fehlermeldung "Zeichenfolge "DerEingegebeneText" entspricht nicht dem Element des gewünschten Typs" ab. In dem unten stehenden Code schein ihm schon was nicht zu schmecken. Das Textelement erstellt er noch und fügt es auch der Skizze zu, allerdings als leeres Textelement ohne den zuvor eingegeben Text. Danach kommt der Abbruch bzw. die Felhlermeldung.
Code: (am_create_text (format nil "~a" bg_txt_bez1) : owner (format nil "/~a/~a" csn bg_sketch_SF) :size 3.5 :color 16776960 : done :ratio 0.8 :adjust 2 (gpnt2d (+(gpnt2d_x bg_pos_bg_bez1) (gpnt2d_x bg_ppnt_SF)) (+(gpnt2d_y bg_pos_bg_bez1) (gpnt2d_y bg_ppnt_SF))) )
Achtung enthält Leerzeichen hinter Doppelpunkten zur Smiley Abwehr... Bei meiner Fehlersuche auf der Arbeit bin ich zumindest soweit gekommen das es an unseren Anpassungen liegen muss. Starte ich Modeling & Anno nämlich ohne Anpassungen funktioniert das Makro auch auf der Arbeit. Nur das weglassen unserer Anpassungen ist nicht die Lösung des Problems... Als Anpassungen haben wir die "Power Extensions" sowie "Solid Power" am laufen. Hat einer ne Idee woran das liegen kann?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stere0 Mitglied
Beiträge: 50 Registriert: 29.11.2012 Win10 CED V20.5 Windchill 12.0.2.6 PEX Solid Power Creo 8.0.0.0
|
erstellt am: 15. Okt. 2014 10:17 <-- editieren / zitieren --> Unities abgeben:
|
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000
|
erstellt am: 15. Okt. 2014 16:55 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Zitat: Original erstellt von stere0: Bisher keine eine Idee..?
...doch! Nochdem ich folgendes hinzugefügt habe ist es bei mir gelaufen: Code:
(AM_CREATE_TEXT : docu-text (format nil ...
--> Leerzeichen vor docu-text muss raus!!
------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stere0 Mitglied
Beiträge: 50 Registriert: 29.11.2012 Win10 CED V20.5 Windchill 12.0.2.6 PEX Solid Power Creo 8.0.0.0
|
erstellt am: 16. Okt. 2014 21:54 <-- editieren / zitieren --> Unities abgeben:
Hey Stephan, danke dir! Funktioniert jetzt auch hier, zumindest größtenteils... Beim ersten mal läufts durch, beim zweiten (und weiteren) ausführen bekomme ich noch einene Fehlermeldung die ich aber wegklicken kann, danach läufts auch weiter und erstellt alle Texte. Meldung muss ich morgen noch mal auf der Arbeit schauen. Hab jetzt auch endlich die Online Reference gefunden. Hab mich schon immer gefragt wo die am_... Befehle beschrieben sind. Ich hab auch gleich noch ne Fragen... *DUCK* Du hast in dem von dir geposteten Code am Ende ein Trace eingefügt und auskommentiert. Was muss ich noch machen damit die Funktion in der Console angezeigt wird wenn ich es wieder reinnehme? Werde aus dem was im IKIT steht und hier im Forum finde nicht schlau. Danke im Vorraus..! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000
|
erstellt am: 17. Okt. 2014 07:37 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Guten Morgen, Um eine Funktion zu Tracen muss diese global definiert werden. Mit local-functions geht das nicht! Ich hatte das angedacht war dann aber zu bequem die ganzen Variablen zu handeln... Letzendlich verstehe ich nicht viel von der Sache, habe aber einfach mal "AM_CREATE_TEXT" in das Suchfeld der Hilfe eingegeben und den Syntax mit Deinem Code verglichen. ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
seistandhaft Mitglied Zeichner, Konstr., Admin.
Beiträge: 197 Registriert: 20.08.2004 Direct Drafting 20.1 Direct Modeling 20.1 ModelManager 20.1 SimufactForming
|
erstellt am: 27. Okt. 2014 13:20 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Hallo, ich habe mir obiges Macro kopiert und versucht es für meine Zwecke anzupassen. Ich kenne mich zwar mit ME10-Macros und VBA aus, aber von LISP habe ich bisher noch keine Ahnung. Was mir in dem Macro fehlt, ist eine WENN-Abfrage: WENN Form = "Fl." dann bg_rohmass = Fl. Breite * Höhe * Länge WENN Form = "Rd." oder "4kt." dann bg_rohmass = Rd. Breite * Länge Ein Problem habe ich auch mit dem Verknüpfen von Texten. Habe schon stundenlang gegockelt und bin auf "strcat" "concat" und "concatinate" gestoßen. Konnte damit aber noch keine Ergebnisse erzielen. Für Tipps wäre ich sehr dankbar. Gruß Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 27. Okt. 2014 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Zitat: Original erstellt von seistandhaft:
Was mir in dem Macro fehlt, ist eine WENN-Abfrage: WENN Form = "Fl." dann bg_rohmass = Fl. Breite * Höhe * Länge WENN Form = "Rd." oder "4kt." dann bg_rohmass = Rd. Breite * Länge
Eine schlanke Lösung: Code:
(case Form ("Fl." (setf bg_rohmass (* Fl.Breite Höhe Länge))) ("Rd." (setf bg_rohmass (* Rd.Breite Höhe Länge))) ("4kt." (setf bg_rohmass (* Rd.Breite Höhe Länge))) (t nil) ;; falsche Angaben ignorieren )
Zitat:
Ein Problem habe ich auch mit dem Verknüpfen von Texten.
Die passende Funktion hast du eigentlich schon gefunden (format) Sieht z.B. so aus: Code:
(setf textA "blau") (setf textB "rund") (setf ausgabetext (format nil "Das Ergebnis ist ~a und ~a" textA textB)
=> Das Ergebnis ist blau und rund
------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 27. Okt. 2014 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Andere Bedingungen: Code:
(cond ((sd-string= Form "Fl.") (setf bg_rohmass (* Fl.Breite Höhe Länge))) ((or (sd-string= Form "Rd.")(sd-string= Form "4kt."))(setf bg_rohmass (* Rd.Breite Höhe Länge))) (t nil) ;; falsche Angaben ignorieren )
Code:
(when (sd-string= Form "Fl.") (setf bg_rohmass (* Fl.Breite Höhe Länge))) (when (or (sd-string= Form "Rd.")(sd-string= Form "4kt."))(setf bg_rohmass (* Rd.Breite Höhe Länge)))
quick and dirty:
Code:
(if (sd-string= Form "Fl.") (setf bg_rohmass (* Fl.Breite Höhe Länge)) (setf bg_rohmass (* Rd.Breite Höhe Länge))) )
------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000
|
erstellt am: 27. Okt. 2014 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
|
seistandhaft Mitglied Zeichner, Konstr., Admin.
Beiträge: 197 Registriert: 20.08.2004 Direct Drafting 20.1 Direct Modeling 20.1 ModelManager 20.1 SimufactForming
|
erstellt am: 27. Okt. 2014 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Hallo Walter, habe deinen Vorschlag so eingefügt: (if (sd-string= bg_stl_form "Fl.") (setf bg_rohmass (format nil "~a " " ~a " * " ~a " * " ~a" bg_stl_form bg_stl_breite bg_stl_hoehe bg_stl_laenge)) (setf bg_rohmass (format nil "~a " " ~a " * " ~a" bg_stl_form bg_stl_breite bg_stl_laenge)) ) Erhalte aber jetzt folgende Fehlermeldung: The function GPNTDOCU is undefined. Was bedeutet diese Meldung? Gruß Jörg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000
|
erstellt am: 27. Okt. 2014 15:22 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
...lass mal die viele Gänsefüsschen weg Code:
(if (sd-string= bg_stl_form "Fl.") (setf bg_rohmass (format nil "~a ~a * ~a * ~a" bg_stl_form bg_stl_breite bg_stl_hoehe bg_stl_laenge)) (setf bg_rohmass (format nil "~a ~a * ~a" bg_stl_form bg_stl_breite bg_stl_laenge)) )
------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
seistandhaft Mitglied Zeichner, Konstr., Admin.
Beiträge: 197 Registriert: 20.08.2004 Direct Drafting 20.1 Direct Modeling 20.1 ModelManager 20.1 SimufactForming
|
erstellt am: 28. Okt. 2014 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Hallo nochmal, ich bekomme es nicht ans laufen. Ich habe die Abfrage an verschiedene Positionen geschrieben, aber entweder werden die Werte nicht an das FORM gehängt (Fl. * *) oder ich erhalte schon beim Laden eine Fehlermeldungen wie: Odd length of keyword-value pair list in BG_TXT_FORM: (VALUE-TYPE.. Wie schon geschrieben habe ich von LISP keine Ahnung. Kann einer von euch vielleicht mal einen Blick werfen? Danke Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 28. Okt. 2014 10:48 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Zitat: Original erstellt von seistandhaft: Wie schon geschrieben habe ich von LISP keine Ahnung.
Nicht die allerbeste Vorraussetzung. ;) Welchen Editor benutzt du denn? Notepad++ kann LISP und zeigt Klammerpaare interaktiv an. Die von dir beschriebebenen Effekte tauchen gern bei Klammerfehlern auf. Zumindest einen hab ich gleich mal gefunden: Code:
... (bg_txt_form :value-type :string :title "Form" :range ((" ")("Fl.")("Rd.")("4kt.")) :initial-value bg_stl_form :size :half (progn (if (sd-string= bg_stl_form "Fl.") (setf bg_rohmass (format nil "~a ~a * ~a * ~a" bg_stl_form bg_stl_breite bg_stl_hoehe bg_stl_laenge)) (setf bg_rohmass (format nil "~a ~a * ~a" bg_stl_form bg_stl_breite bg_stl_laenge)) ));;<<<<< Die da!!!! ) ...
Du schliesst zwar das (If) aber (progn) bleibt offen; im Endeffekt aber sucht sich der Interpreter nach Möglichkeit die nächste Klammer und macht letztendlich Unsinn draus ------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
seistandhaft Mitglied Zeichner, Konstr., Admin.
Beiträge: 197 Registriert: 20.08.2004
|
erstellt am: 28. Okt. 2014 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für stere0
Ja, ich benutze Notepad++. Klammerfehler habe ich behoben. Die o.a. genannte Fehlermeldung kommt aber immer noch, wenn ich das Makro ins Anno-Fenster ziehe. Bei ME10-Macros oder Excel-VBA ist die Fehlersuche doch etwas leichter als bei LISP. Gruß Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |