| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: ME10-Skript in Annotation ausführen (587 / mal gelesen)
|
darkfrei Mitglied Maschinenbauingenieur
Beiträge: 4 Registriert: 04.11.2015 PTC Creo Elements/Direct Modeling x64 Rev. 19.0 (2015) Windows 7 Pro x64 SP1 (2009) Intel Xeon W3565 (2009)
|
erstellt am: 02. Feb. 2024 09:45 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Vorher hatte ich ein Skript für ME10, aber jetzt möchte ich es in Lisp ausführen. Der Code ändert die Farben und die Größe des gesamten Textes in der angegebenen Layer in der Zeichnung:
Code: { define layer } DEFINE I_select_layer_DE NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 510') END_DEFINE{ define function } DEFINE disable_DE_layer CHANGE_COLOR BLACK SELECT TEXTS GLOBAL I_select_layer_DE CONFIRM END CHANGE_TEXT_SIZE 0.01 SELECT GLOBAL I_select_layer_DE CONFIRM END END_DEFINE
Es ist sehr einfach es als LISP in der Konsole ausführen:
Code: (OLI::SD-EXECUTE-ANNOTATOR-COMMAND :CMD " DEFINE I_select_layer_DE NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 510') END_DEFINE CHANGE_COLOR BLACK SELECT TEXTS GLOBAL I_select_layer_DE CONFIRM END CHANGE_TEXT_SIZE 0.01 SELECT GLOBAL I_select_layer_DE CONFIRM END ")
Dieses Skript funktioniert ohne Probleme! :D Aber bei dem Skript macht es die Fehlermeldung:
Code: (disable-DE-layer () (sd-execute-annotator-command :cmd (" DEFINE I_select_layer_DE NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 510') END_DEFINE CHANGE_COLOR BLACK SELECT TEXTS GLOBAL I_select_layer_DE CONFIRM END CHANGE_TEXT_SIZE 0.01 SELECT GLOBAL I_select_layer_DE CONFIRM END ")))
Warum passiert das? Kommentar für Code-Snippet aktualisiert: [CODE][(sd-execute-annotator-command :cmd (format nil "INPUT '~a'" file))/CODE]
[Diese Nachricht wurde von darkfrei am 02. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MiBr Mitglied Konstrukteur
Beiträge: 564 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 02. Feb. 2024 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für darkfrei
Hallo, ich kenne mich mit der 'sd-execute-annotator-command' nicht wirklich gut aus! Aber ich vermute da fehlt ein 'Format' hinter der Klammer!
Code: (disable-DE-layer () (sd-execute-annotator-command :cmd (format nil " DEFINE I_select_layer_DE NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 510') END_DEFINE CHANGE_COLOR BLACK SELECT TEXTS GLOBAL I_select_layer_DE CONFIRM END CHANGE_TEXT_SIZE 0.01 SELECT GLOBAL I_select_layer_DE CONFIRM END ")))
Vieleicht hilft auch ein Code Schnipsel aus dem Forum:
Code: (sd-execute-annotator-command :cmd (format nil "~a~a~a~a~a~a~a~a~a~a~a~a" "DEFINE SW_send_teile_id_of_geo_objekt" " PARAMETER Pn {*Pointernummer*}" " LOCAL Pid" " LOCAL I" " LOCAL D" " LOCAL C" " INQ_SELECTED_ELEM SELECT GLOBAL POINTER Pn CONFIRM END" " LET Pid (DOCU_CSTRING_TO_LSTRING (INQ 309))" " LET I (DOCU_OPEN_CONNECTION_TO_SD)" " LET D (DOCU_ADD_LINE_TO_SD Pid)" " LET C (DOCU_CLOSE_CONNECTION_TO_SD)" "END_DEFINE" ))
Hier fügt 'Format' die einzelen zeilen hinterienander. Für jede Zeile "Text" steht dort ein ~a! Ist evtl. übersichtlicher! Gruß Michael [Diese Nachricht wurde von MiBr am 02. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2157 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19045.3996 ● Drafting V20.1-6 ● Modeling V20.1-6
|
erstellt am: 02. Feb. 2024 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für darkfrei
Zitat: Original erstellt von MiBr: Aber ich vermute da fehlt ein 'Format' hinter der Klammer!
Ja das ist ein Workarround. Aber hinter dem :cmd kommt ein String, ein String! ein String!! Zitat: Original erstellt von darkfrei: Aber bei dem Skript macht es die Fehlermeldung: ... Warum passiert das?
Code: (disable-DE-layer () (sd-execute-annotator-command :cmd (" ...
Weil du hinter :cmd eine KLAMMER AUF geschrieben hast. Also erwartet LISP hier einen Funktionsaufruf. Wie ja auch die Fehlermeldung sagt "is invalid as a function" .. Letztlich hast du in der 2. local-function ein KlammerPAAR zuviel. (ganz einfach mit dem anderem vergleichen)
Code: (disable-DE-layer () (sd-execute-annotator-command :cmd "DEFINE ... END_DEFINE"))
………………………………………………………………………………………………………………………………………………………………………………………… Wenn Du öfter mit ME10-Makros hantierst, würde ich dir empfehlen diese in einer my_macro.m Datei zu belassen. Dann funktioniert auch das Syntax Highlighting im Notepad++ weiter hin. In deiner Lisp Datei my_macro.lsp kannst du dann (beim laden der Datei/oder in :Precondition / :after-initialization) den Macro Code in den Annotator laden.
Code: ;; wenn LSP und Makro Datei nur unterschiedliche Dateinamenserweiterung haben: (sd-execute-annotator-command :cmd (format nil "input '~A' end" (sd-string-replace (namestring *load-truename*) ".lsp" ".m")));; wenn LSP und Makro Datei unterschiedliche Namen haben, aber in der selben directory: (sd-execute-annotator-command :cmd (format nil "input '~A/ThisMacro.m' end " (directory-namestring *load-truename*)))
Wenn du Deine ME10 Makros in einer externen Makro Datei belässt hast du auch nur EINE Quelle zu Code-Pflege für ME10 und Annotator. Der Aufruf der Makros erfolgt dann via sd-execute-annotator-command :cmd [EDIT]wie darkfrei richtig erkannt hat, war da ein ".m" zu viel - ich hab's hier direkt korrigiert.[/EDIT] ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 06. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
darkfrei Mitglied Maschinenbauingenieur
Beiträge: 4 Registriert: 04.11.2015 PTC Creo Elements/Direct Modeling x64 Rev. 19.0 (2015) Windows 7 Pro x64 SP1 (2009) Intel Xeon W3565 (2009)
|
erstellt am: 06. Feb. 2024 16:59 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank für deine Mühe! Etwas geht hier nicht:
Code: (display(format nil "input '~A.m' end" (sd-string-replace (namestring *load-truename*) ".lsp" ".m"))); input '<path>/ANNOTATION/anpassungen/multiaufkleber.m.m' end
Ich glaube, dass ein ".m" zu viel ist. Es funktioniert:
Code:
(sd-execute-annotator-command :cmd (format nil "input '~A' end" (sd-string-replace (namestring *load-truename*) ".lsp" ".m")))(sd-defdialog 'multiaufkleber :Dialog-title "Multiaufkleber" :variables '( (set_layer_DE :title "DE" :tongue:ush-action (sd-execute-annotator-command :cmd "DE") :toggle-type :left-toggle) (set_layer_GB :title "GB" :tongue:ush-action (sd-execute-annotator-command :cmd "GB") :toggle-type :left-toggle) (set_layer_FR :title "FR" :tongue:ush-action (sd-execute-annotator-command :cmd "FR") :toggle-type :left-toggle) (set_layer_NL :title "NL" :tongue:ush-action (sd-execute-annotator-command :cmd "NL") :toggle-type :left-toggle) (set_layer_IT :title "IT" :tongue:ush-action (sd-execute-annotator-command :cmd "IT") :toggle-type :left-toggle) (set_layer_PT :title "PT" :tongue:ush-action (sd-execute-annotator-command :cmd "PT") :toggle-type :left-toggle) ; --------------------------------------- (clear_dwg_id :title "clear dwg id" :tongue:ush-action (clear-dwg-id) :toggle-type :wide-toggle) ) :local-functions '( (clear-dwg-id (layer-number) (sd-execute-annotator-command :cmd "Awmc_m_clear_dwg_id CONFIRM") ) ) ) (sd-define-available-command "Annotation" "Bearbeiten" "Multiaufkleber" :commandTitle "Multiaufkleber" :action "multiaufkleber" )
[Diese Nachricht wurde von darkfrei am 16. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
darkfrei Mitglied Maschinenbauingenieur
Beiträge: 4 Registriert: 04.11.2015 PTC Creo Elements/Direct Modeling x64 Rev. 19.0 (2015) Windows 7 Pro x64 SP1 (2009) Intel Xeon W3565 (2009)
|
erstellt am: 13. Feb. 2024 11:20 <-- editieren / zitieren --> Unities abgeben:
Hier ist Beispiel wie man die Layers verwenden kann:
Code: { ME10 Macros } DEFINE I_select_layer_DE NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 510') END_DEFINEDEFINE I_select_layer_GB NAMESPACE_INFOS 'SYS:LAYER_SCOPE' ('LAYER: 515') END_DEFINE DEFINE DE change_color cyan select global I_select_layer_DE confirm end change_color black select global I_select_layer_GB confirm end CHANGE_TEXT_SIZE 2.000 select global I_select_layer_DE confirm end CHANGE_TEXT_SIZE 0.001 select global I_select_layer_GB confirm end END_DEFINE DEFINE GB change_color black select global I_select_layer_DE confirm end change_color cyan select global I_select_layer_GB confirm end CHANGE_TEXT_SIZE 0.001 select global I_select_layer_DE confirm end CHANGE_TEXT_SIZE 2.000 select global I_select_layer_GB confirm end END_DEFINE
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MiBr Mitglied Konstrukteur
Beiträge: 564 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 13. Feb. 2024 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für darkfrei
Sorry hatte dein letzten Betrag nicht gesehen, verstehe es trotdem nicht, sry Hallo,
ich glaube die Fragestellung ist echt knapp! Was ist den in '(namestring *load-truename*)' drin? Wie ist die Fehlermeldung , ... und ... . Zitat: Etwas geht hier nicht: Code:(display(format nil "input '~A.m' end" (sd-string-replace (namestring *load-truename*) ".lsp" ".m"))) ; input '<path>/ANNOTATION/anpassungen/multiaufkleber.m.m' endIch glaube, dass ein ".m" zu viel ist.
Dann lass doch mal ein ".m" weg ?!? Gruß Michael [Diese Nachricht wurde von MiBr am 13. Feb. 2024 editiert.] [Diese Nachricht wurde von MiBr am 13. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2157 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19045.3996 ● Drafting V20.1-6 ● Modeling V20.1-6
|
erstellt am: 13. Feb. 2024 17:42 <-- editieren / zitieren --> Unities abgeben: Nur für darkfrei
Zitat: Original erstellt von MiBr: verstehe es trotdem nicht, sry
Ich musste auch etwas die GlasKugel beweihräuchern befragen... ----------------------- Es gibt also Texte in der MI-Datei (, die an der gleichen Position stehen?). Textinhalte sind sprachabhängig und tragen je nach Sprache unterschiedliche Infotexte:
- LAYER: 500
- LAYER: 510
- LAYER: 515
- LAYER: 520
- LAYER: 525
- LAYER: 530
- LAYER: 535
Mit den Makros, die über den Dialog ausgelöst werden, soll jeweils (nur?) eine Sprache sichtbar gemacht werden. Derzeit VERÄNDERST(!) Du alle zu "verbergenden" Texte auf die Farbe Schwarz und machst sie winzig klein (1 µm). Damit ÄNDERST Du aber die MI-Daten und erhältst ein Diskettensymbol an der Zeichnung. Eigentlich geht es doch nur um die Sichtbarkeit, oder? Dafür kennt ME10/Annotator.exe den Befehl "SHOW" file:///C:/Program%20Files/PTC/Creo%20Elements/Direct%20Drafting%2020.6.1.0/locale/en/me_help/me_helps.htm#SHOW Code: SHOW <selection> ON/OFF
Das sollte doch reichen? Nebeneffekt du änderst die Zeichnung nicht! BTW: du vermischst Portugiesisch und Spanisch (zumindest in der Beispiel MI Datei) Anbei lsp und m Datei.
Bezüglich FehlerFindung, insbeondere bei (ME10-)Makros, empfehle ich die (wiederholte) Ausführung von Code: (display (oli::sd-am-errors))
Das ist ne dokumentierte Integration Kit Funktion. Und Makros nur mit 2 Buchstaben zu definieren ist immer (falsch|schlecht|ungeschickt|nichtempfehlenswert|schlechtwartbar|fehleranfellich|ungesund) [such dir mindestens eins aus! 😏 ) [edit]dat mit den Anhänge hat nicht so janz geklappert[/edit]siehe: * https://ww3.cad.de/foren/ubb/uploads/der_Wolfgang/cadde-29-004945.lsp und * https://ww3.cad.de/foren/ubb/uploads/der_Wolfgang/cadde-29-004945.m.txt ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 13. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
darkfrei Mitglied Maschinenbauingenieur
Beiträge: 4 Registriert: 04.11.2015 PTC Creo Elements/Direct Modeling x64 Rev. 19.0 (2015) Windows 7 Pro x64 SP1 (2009) Intel Xeon W3565 (2009)
|
erstellt am: 16. Feb. 2024 17:34 <-- editieren / zitieren --> Unities abgeben:
MiBr, der_Wolfgang vielen Dank! Ich habe alles geändert, aber ich habe keine Erfahrung mit SHOW 8selection) ON/OFF. Ich habe noch ein Button erstellt: Code: (sd-fluentui-add-ribbon-group "Bemass" :tongue:arent "Firma" :annotationRibbon t :title "Bemaß" )(sd-fluentui-add-ribbon-button :label "Durchmesser T" :tongue:arent '("Firma" "Bemass") :annotationRibbon t :tongue:ushAction "am_create_dim_diamtr :tan_mode :redface:n" :Description "Bemass Durchmess, Tangentialmodus" )
Dieses Code erstellt noch ein Button um Durchmesser im Tangentialmodus einschalten. Ist es OK die Skripts mit dem pushAction ausführen? Und noch ein Skript:
Code: (use-package :nobiggrin :redface:CU)(defun set-BOM-defaults (arg1 arg2) (docu::nobiggrin :redface:CU-set-current-bom-flag-layout "Firma") ; works (docu::DOCU-SET-CURRENT-BOM-SKETCH-LAYOUT "FirmaNoHead") ; works ) (sd-subscribe-event *SD-SWITCH-APPLICATION-EVENT* 'set-BOM-defaults)
Ich kann leider default Stückliste-Layout nicht fest setzen, ich brauche es am Switch-Application-Event es wieder ausführen, im "am_customize" macht es leider nichts. [Diese Nachricht wurde von darkfrei am 22. Feb. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2157 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19045.3996 ● Drafting V20.1-6 ● Modeling V20.1-6
|
erstellt am: 17. Feb. 2024 11:59 <-- editieren / zitieren --> Unities abgeben: Nur für darkfrei
Zitat: Original erstellt von darkfrei: MiBr, der_Wolfgang vielen Dank!
Gerne.. Zitat: keine Erfahrung mit SHOW (selection) ON/OFF.
Kein Problem, diese Variante war ja in meinem Beitrag vom 13. Feb. 2024 17:42 bereits enthalten. ………………………………………………………………………………………………………………………………………………………………………………… Jetzt eine Bitte: Tue (uns) allen bitte den Gefallen und vermische mehrere Fragestellungen nicht in einem Forum "Thema" / Thread / Topic. Hier geht es um die Wiederauffindbarkeit. Jemand der nach BOM sucht, wird nicht nach dem Thema ME10-Skript gucken. Also bitte die Themen trennen. Wenn Du mal aktiver in einem Forum bist, wirst du die Thementrennung zu schätzen wissen. Also in Zukunft 😉 ...... bitte. ………………………………………………………………………………………………………………………………………………………………………………… Da der Stein jetzt eh schon in den Brunnen gefallen ist 😀 , kurze Antworten hier:
Zitat: noch ein Button erstellt:.... Ist es OK ....
Ja kann man so machen. Langfristig empfehlenswerter / geschickter / wartbarer ist es, du erstellst ein sog. available command und verweist in sd-fluentui-add-ribbon-button nur auf jenes. Dann wird alles vom avail-cmd übernommen und mit sd-fluentui-add-ribbon-button bestimmst du nur noch WO es im UI auftaucht. Auch kann ein Anwender so ein avail-cmd nach Gusto dann selber wo platzieren. Datei technisch findest du das cmd in am_avail_cmds.cmd, sowohl in Deiner User Cust Dir (wenn du es im UI zusammen klickst) als auch im Installationsverzeichnis. In letzterer findest Du auch eine Vorlage (Stichwort image + enable), wie du dein eigenes Cmd noch etwas pimpen kannst. ... Zitat: Und noch ein Skript: ....default Stückliste-Layout
Mir fällt jetzt kein Grund ein warum das in am_customize nicht funktionieren sollte. Aber du hast dir zu helfen gewusst! 👍 Siehe auch das Beispiel von Tom in https://community.ptc.com/t5/Modeling/Saving-BOM-table-for-future-use/td-p/695880 . Du hast in deiner am_customize zuerst das BomLayout definiert und danach current gesetzt? ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |