Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  PTC Creo Elements/Programmierung
  Lisp vs. Makro

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
  
Windows Server 2025 - Was ist neu im Microsoft Server-Betriebssystem, eine Pressemitteilung
Autor Thema:  Lisp vs. Makro (2437 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: 18. Nov. 2015 12:36    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 würde mich jetzt mal als Programmieranfänger bezeichnen. Wobei mir die Makroprogrammierung in Drafting etwas vertrauter ist. Hätte mal ein paar grundlegenden Fragen.

Kann man jeden Befehl im Drafting mit "(sd-execute-annotator-command :cmd...." auch im Annotation verwenden?
Wann genau brauche ich den das "(sd-execute-annotator-command :cmd...."?
Wenn ich im Drafting die beiden äusseren Punkte eines Rahmens auslesen möchte, geht das mit
edit_part "Rahmen"
inq_env 7
display (inq 101)
display (inq 102)

Wie würde sowas im Lisp aussehen oder das ich das im Annotation verwenden kann.

Vielleicht kann mir jemand da mal helfen oder gibt es vielleicht etwas in deutsch wo man sich mal einlesen kann?

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

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

Walter Geppert
Moderator
Frank und Frei




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

Beiträge: 2166
Registriert: 12.12.2000

erstellt am: 18. Nov. 2015 14:00    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

Du schon wieder, das hab ich kommen sehen 

Auf deutsch gibts leider nix zum IKit und auf englisch ist die Info auch eher mager, was ME10 in LISP so kann. Versteckt sich in der Hilfe unter "Dokumentation für fortgeschrittene Benutzer" im Kapitel "The ME Macro Programmer's Introduction to Lisp"

Konkret brauchst du ein Makro so in der Art:

Code:

DEFINE IWG_frage_rahmen

  PARAMETER Uname
  LOCAL Cname
  LOCAL Br
  LOCAL Ho
  LOCAL Rstr
  LOCAL Lispstring

  INQ_ENV 7
  LET Cname ('~'+(INQ 302))
  EDIT_PART  Uname
  INQ_ENV 7
  LET Br (STR (ABS((X_OF (INQ 101))-(X_OF (INQ 102)))))
  LET Ho (STR (ABS((Y_OF (INQ 101))-(Y_OF (INQ 102)))))
  LET Rstr (Br+'_'+Ho)
  EDIT_PART Cname

  LET Lispstring (DOCU_CSTRING_TO_LSTRING Rstr)
  LET isopen (DOCU_OPEN_CONNECTION_TO_SD)
  LET done (DOCU_ADD_LINE_TO_SD Lispstring)
  LET isclosed (DOCU_CLOSE_CONNECTION_TO_SD)

END_DEFINE


Das muss mit einem Befehl wie

Code:

(sd-execute-annotator-command :cmd (format nil "INPUT '~a/meinmakro.mac'" mein-me10-verzeichnis))

geladen sein

In LISP geht das dann so:

Code:

(setf br_h (sd-execute-annotator-function :fnc (format nil "IWG_frage_rahmen ~a" rahmenname)))
(setf breit (sd-read-from-string (first (sd-string-split br_h "_"))))
(setf hoch (sd-read-from-string (second (sd-string-split br_h "_"))))


Man kann leider immer nur einen Wert aus ME10 "zurückholen", mehrere muss man vorher verketten und nachher wieder zerschnipseln wie oben gezeigt

ME10-Code ist sehr gefährlich, weil man damit die von Annotation benutzte Teilestruktur beschädigen kann, also Obacht!

------------------
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




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

Beiträge: 2166
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: 18. Nov. 2015 14: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 Greskamp 10 Unities + Antwort hilfreich

Noch ein Nachtrag: Ich verwende bei solchen Operationen zum blattweisen Drucken oder Exportieren von Zeichnungen lieber das Blatt und den Blattnamen, die sind in jeder Zeichnung eindeutig und es gibt keine unliebsamen Überraschungen. Es darf nur nix aus den Rahmen rausstehen

Den Blattnamen erhält man mit:

Code:

(setf shname (sd-am-sheet-struct-name shstruct))

------------------
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

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: 18. Nov. 2015 14:36    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 Walter,

wieso bin ich nicht überrascht wieder von dir zu lesen... 
Wenn ich das lese, glaube ich lasse ich das lieber mit dem programmieren.. Wie soll man denn da jemals durchsteigen.
Jetzt hast du das ja mit Makro und Lisp gemacht. Rein auf Lisp-Basis kommt man da nicht dran? Weil du schreibst das ME10-Code sehr gefährlich ist.

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

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

PeterO
Mitglied
Admin


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

Beiträge: 101
Registriert: 14.01.2003

Windows XP
Modeling 15.50A
Drafting 15.50A UI3
ModelManager 15.50A

erstellt am: 18. Nov. 2015 16:38    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

Hallo Peter,

so kann man die Eckpunkte in Annotation abfragen:
(display (oli::sd-am-sheet-struct-corners (oli::sd-am-inq-sheet (oli::sd-am-inq-curr-sheet))))


Auszug aus dem IKIT
SD-AM-SHEET-STRUCT  [structure]

(sd-am-sheet-struct-p        sd-am-sheet-struct)
(sd-am-sheet-struct-name    sd-am-sheet-struct)
(sd-am-sheet-struct-frame    sd-am-sheet-struct)
(sd-am-sheet-struct-views    sd-am-sheet-struct)
(sd-am-sheet-struct-flats    sd-am-sheet-struct)
(sd-am-sheet-struct-sketches sd-am-sheet-struct)
(sd-am-sheet-struct-scale    sd-am-sheet-struct)
(sd-am-sheet-struct-corners  sd-am-sheet-struct)
Description:
Contains the data that can be inquired from a sheet.
Slots:
name {STRING} - The name of the sheet.
frame {SEL_ITEM} - The sheet frame.
views {LIST of SEL_ITEMs} - The list of views contained in the sheet.
flats {LIST of SEL_ITEMs} - The list of flats contained in the sheet.
sketches {LIST of SEL_ITEMs} - The list of sketches contained in the sheet.
scale {LONG-FLOAT} - The sheet scale.
corners {LIST of GPNT2D} - The lower left and upper right corner of all elements belonging to the frame of the sheet.
See Also:
SD-AM-INQ-SHEET [function]

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

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: 03. Dez. 2015 07:58    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,
würde das Thema Lisp und ME-Macro gerne noch mal aufnehmen. Ich habe ein Marco was einen vorhandenen Text in einen anderen tauscht. Im Drafting klappt das auch.
Wenn ich das aber mit:
(sd-execute-annotator-command :cmd (format nil "INPUT '~A/Drafting/Text_tauschen.m'" (oli::sd-sys-getenv "WERKZEUGKISTE")))
ins Annotation lade, und mit :
(sd-execute-annotator-command :cmd (format nil "~a" "Txt_tauschen"))
aufrufen möchte klappt das nicht.
Ist es so das nicht alle Befehle dann verwendet werden können.
Das Makro für den Text tauschen sieht so aus:

DEFINE Txt_tauschen
  LOCAL tauschtxt
  LOCAL getauschttxt
  LOCAL Lesetxt
  LOCAL Zaeler
 
  LET Zaeler 0
  (*LET tauschtxt '0300'*)
  READ STRING 'Text eingeben (mit Anfuehrungszeichen) der getauscht werden soll' tauschtxt
  READ STRING 'Text eingeben (mit Anfuehrungszeichen) in den getauscht werden soll' getauschttxt
  INQ_SELECTED_ELEM SELECT GLOBAL BLUE AND GLOBAL TEXTS ALL CONFIRM
  IF (INQ 14>0)
    LOOP
    EXIT_IF (INQ 14=0)
      LET Lesetxt (INQ 902)
    IF (LeseTxt = tauschtxt)
    LET Zaeler (Zaeler +1)
CHANGE_TEXT getauschttxt GLOBAL POINTER (INQ 332) END
  END_IF
  INQ_NEXT_ELEM
    END_LOOP
DISPLAY ('Text: "'+tauschtxt+'" in Zeichnung '+(STR Zaeler)+' mal getauscht')
  ELSE
    DISPLAY 'Kein Text in der Zeichnung getauscht'
  END_IF
  EDIT_PART TOP
END_DEFINE

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

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

Walter Geppert
Moderator
Frank und Frei




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

Beiträge: 2166
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: 03. Dez. 2015 08: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 Nur für Greskamp 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Greskamp:

Ist es so das nicht alle Befehle dann verwendet werden können.


Nein, alle Befehle, die eine Interaktion mit dem User benötigen, können nicht verwendet werden.
Du brauchst einen Dialog im Annotation, der die Werte abfragt und dann als Parameter ans ME10-Makro übergibt

------------------
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

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: 03. Dez. 2015 12:51    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 Walter,

kannst du mir sagen was dieses Makro überhaupt macht?


DEFINE IWG_frage_rahmen

  PARAMETER Uname
  LOCAL Cname
  LOCAL Br
  LOCAL Ho
  LOCAL Rstr
  LOCAL Lispstring

  INQ_ENV 7
  LET Cname ('~'+(INQ 302))
  EDIT_PART  Uname
  INQ_ENV 7
  LET Br (STR (ABS((X_OF (INQ 101))-(X_OF (INQ 102)))))
  LET Ho (STR (ABS((Y_OF (INQ 101))-(Y_OF (INQ 102)))))
  LET Rstr (Br+'_'+Ho)
  EDIT_PART Cname

  LET Lispstring (DOCU_CSTRING_TO_LSTRING Rstr)
  LET isopen (DOCU_OPEN_CONNECTION_TO_SD)
  LET done (DOCU_ADD_LINE_TO_SD Lispstring)
  LET isclosed (DOCU_CLOSE_CONNECTION_TO_SD)

END_DEFINE

Kann ich da auch noch ein "display" einfügen damit ich erkenne das es läuft?

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

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: 03. Dez. 2015 14: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

Du kannst Annotation ein TRACE-Kommando schicken, ganz ähnlich wie beim ME10. Zum Beispiel:

Code:

(oli:sd-execute-annotator-command :cmd "trace del_old 'C:/temp/anno.txt'")

Damit bekommst Du dann ein Protokoll der ausgeführten ME10-Makros.

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

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: 03. Dez. 2015 15:24    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

gibt es dazu dann auch einen trace off?

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

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

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

erstellt am: 03. Dez. 2015 15:52    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

Gut, ist wahrscheinlich.
(oli:sd-execute-annotator-command :cmd "trace off")

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

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

Walter Geppert
Moderator
Frank und Frei




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

Beiträge: 2166
Registriert: 12.12.2000

erstellt am: 03. Dez. 2015 22:28    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

Noch mal ganz allgemein zu dem Thema:
In den Tiefen der Hilfe zum IKit gibts ein Kapitel The ME Macro Programmer's Introduction to Lisp und im Reference Manual gibts eine Menge unter Concepts and Tutorials zum Thema Annotation.
So richtig befriedigend find ichs immer noch nicht, aber schon wesentlich ausführlicher als in den Anfangszeiten. Besonderes Augenmerk möchte ich auf das Kapitel Modeling/Annotator Communication: Not to break Associativity lenken, man kann wirklich eine Menge falsch machen mit Makros, die die ME10-Teilestruktur angreifen oder ME10-INFOs modifizieren.
Es ist fein, dass uns die Entwickler so tief ins System reinlassen, aber der Preis ist in Form von absoluter Sorgfalt zu entrichten!

------------------
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




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

Beiträge: 2166
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: 03. Dez. 2015 22:30    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

Wers trotzdem unbedingt wissen will, findet hier einige Beispiele

------------------
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

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)2025 CAD.de | Impressum | Datenschutz