| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Koordinaten von Bezugslinien in Annotation (2122 mal gelesen)
|
M.Smarslik Mitglied
Beiträge: 57 Registriert: 22.09.2004 OSD 11.60C HP-UX
|
erstellt am: 22. Sep. 2004 10:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich brauche für ein Macro im Annotation, von einer Referenzlinie (Bezugslinie) die Koordinaten von dem Punkt, an dem die Referenzlinie auf die Geometrielinie zeigt. Die Referenzlinie kann ich ermitteln aber den Start- und Endpunkt habe ich weder mit Lisp noch mit ME10 Befehlen erhalten. Weiß irgendwer, wie ich die Koordinaten von diesem Punkt trotzdem bekommen kann.
[Diese Nachricht wurde von M.Smarslik am 22. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 22. Sep. 2004 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
@M.Smarslik Wenn du die LEADER_LINE meinst, dann ist in der Hilfe bei: INQ_ELEM "Wenn Elementtyp = LEADER_LINE (Hinweislinie)" dazu ja nichts dokumentiert. Probier mal den Anfangspunkt mit (INQ 101) und den Endpunkt mit (INQ 102) so wie bei einer normalen Linie zu ermitteln! Bei mir klappt das zumindest ... Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Smarslik Mitglied
Beiträge: 57 Registriert: 22.09.2004 OSD 11.60C HP-UX
|
erstellt am: 22. Sep. 2004 12:07 <-- editieren / zitieren --> Unities abgeben:
Hallo RainerH., der Linientyp meiner Linien ist REFLINE. Dieser Typ wird verwendet, wenn z.B. ein Text mit einer Linie einem Teil zugeordnet wird. Da funktioniert (INQ 101) und (INQ 102) leider nicht. Im Annotation (LISP) wird die Linie mit *sd-anno-reftextline-seltype* abgefragt. Gruß M.Smarslik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Michael Kahle Mitglied Programmierer
Beiträge: 75 Registriert: 10.05.2002
|
erstellt am: 22. Sep. 2004 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Hier die zum Teil nicht dokumentierte (und damit unsupportete) Befehlsfolge zum Inquiren allerlei Refline-Punkte... Manches INQuiry funktioniert aber erst in neueren Versionen! INQ_SELECTED_ELEM GLOBAL <Refline> LET Begpnt (INQ 101) LET Endpnt (INQ 102) LET Begtouchpnt (INQ 103) LET End-touch-pnt (INQ 104) LET Bpnt (INQ 1100) WHILE (Bpnt <> 0,0) LET Epnt (INQ 1102) LET Bpnt (INQ 1101) END_WHILE Gruss, Michael ------------------ Viele Gruesse, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Smarslik Mitglied
Beiträge: 57 Registriert: 22.09.2004 OSD 11.60C HP-UX
|
erstellt am: 27. Sep. 2004 09:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, ab welcher Version funktionieren den die INQuirys. Ich habe SolidDesigner 11.60C Ich habe versucht, mit der folgenden Funktion den Endpunkt der REFLINIE zu bekommen, hatte aber keinen Erfolg. (defun end-reflinie (TX_POS TY_POS) (setq me10-function (format nil "~A ~F,~F ~A ~A ~A ~A ~A" "INQ_SELECTED_ELEM GLOBAL" TX_POS TY_POS "let pid (INQ 102)" "let pid_s (DOCU_CSTRING_TO_LSTRING pid)" "let isopen (DOCU_OPEN_CONNECTION_TO_SD)" "let done (DOCU_ADD_LINE_TO_SD pid_s)" "let isclosed (DOCU_CLOSE_CONNECTION_TO_SD)" ) ;; end format ) ;; end setq (setf ergebnis (sd-execute-annotator-function :fnc me10-function)) ) TX_POS und TY_POS sind die Koordinaten vom Startpunkt der REFLINIE Was muß/kann ich da anders machen? Bei einer neuen ME10 Version hatte ich mit (INQ 102) Erfolg mit (INQ 1102) aber nicht. Gruß Martin Smarslik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
M.Smarslik Mitglied
Beiträge: 57 Registriert: 22.09.2004 OSD 11.60C HP-UX
|
erstellt am: 28. Sep. 2004 15:55 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank, ich konnte mein Problem lösen. (INQ 102) funktioniert auch in meiner Version. Die anderen Probleme hatten ihre Ursache in meinen geringen Kentnissen über die Einbindung von ME10 Befehlen in LISP. Gruß Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2.1.0 Creo Elements / Direct Model Manager 20.2.1.0 Creo 5.0.2.0 Simulate <P>Notepad++ Win 10
|
erstellt am: 09. Mai. 2017 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Hallo Martin! Ist zwar schon eine Ewigkeit her, aber ich suche im Moment gerade nach der Lösung zu diesem Problem. Mit dieser Funktion bekomme ich nur "NIL" als Ausgabe zurück Das "obj" ist eine Bezugslinie in Anno
Code: (setq anno-fnc (format nil "~A ~A ~A ~A ~A ~A ~A" "INQ_SELECTED_ELEM GLOBAL" (sd-get-annotator-position bject obj) "let pid (INQ 102)" "let pid_s (DOCU_CSTRING_TO_LSTRING pid)" "let isopen (DOCU_OPEN_CONNECTION_TO_SD)" "let done (DOCU_ADD_LINE_TO_SD pid_s)" "let isclosed (DOCU_CLOSE_CONNECTION_TO_SD)" ) ;; end format ) ;; end setq (setq bezugspunkt (sd-execute-annotator-function :fnc anno-fnc)) (display bezugspunkt)
------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 09. Mai. 2017 15:42 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
|
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2.1.0 Creo Elements / Direct Model Manager 20.2.1.0 Creo 5.0.2.0 Simulate <P>Notepad++ Win 10
|
erstellt am: 09. Mai. 2017 15:55 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Hallo! Habe nun durch mühsames Testen herausgefunden, dass es schlicht und einfach daran lag, dass
Code: CSTRING_TO_LSTRING
einen String erwartet, aber nur einen Koordinatenpunkt erhalten hat. Somit war das Ergebnis immer "nil" Durch voranstellen des Befehls "str" hat es dann problemlos funktioniert. Code: (setq anno-fnc (format nil "~A ~A ~A ~A ~A ~A ~A" "INQ_SELECTED_ELEM GLOBAL" (sd-get-annotator-position bject obj) "let pid (inq 102)" "let pid_s (DOCU_CSTRING_TO_LSTRING str pid)" "let isopen (DOCU_OPEN_CONNECTION_TO_SD)" "let done (DOCU_ADD_LINE_TO_SD pid_s)" "let isclosed (DOCU_CLOSE_CONNECTION_TO_SD)" ) ;; end format ) ;; end setq
Dein Hinweis mit dem Trace hätte mich vermutlich deutlich schneller ans Ziel geführt. Wieder etwas gelernt. Danke! ------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 09. Mai. 2017 17:10 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
========================== L I S P / ME10-Macro Technik ========================== Es ist schoen das es funktioniert, Felix. Der Ansatz fuer den einfachen INQ ist etwas weit gegriffen. Wir inq ja nur einen Punkt. Warum ist in dem Code schnipsel dann "Stringbehandlung" eingebaut? (ja ja , copy and paste) Ich lass da mal die unnoetige Luft raus: aus: Code: (setq anno-fnc (format nil "~A ~A ~A ~A ~A ~A ~A" "INQ_SELECTED_ELEM GLOBAL" (sd-get-annotator-position :Object obj) "let pid (inq 102)" "let pid_s (DOCU_CSTRING_TO_LSTRING str pid)" "let isopen (DOCU_OPEN_CONNECTION_TO_SD)" "let done (DOCU_ADD_LINE_TO_SD pid_s)" "let isclosed (DOCU_CLOSE_CONNECTION_TO_SD)" ) ;; end format ) ;; end setq (setq bezugspunkt (sd-execute-annotator-function :fnc anno-fnc)) (display bezugspunkt)
wird Code: (setq bezugspunkt (sd-execute-annotator-function :fnc (format nil "INQ_SELECTED_ELEM GLOBAL POINTER '~A' END DOCU_WRITE_LINE_TO_SD (str(inq 102))" (sd-get-annotator-reference :Object obj))))
das ist alles. PUNKT. Analyse (von hinten nach vorne) ● Die Punkte 1 bis 3 machen die Sache etwas uebersichtlicher und lesbarer. Und man kann es sich auch merken (nach dem 20. Mal). ● Punkt 4 ist eine Sache der sicheren Handhabung / Reproduzierbarkeit. ____________________________________________________________________ Und wenn man mal mehr als einen Punkt braucht? ●●
Code: (setq bezugspunkte (sd-execute-annotator-function :fnc (format nil "INQ_SELECTED_ELEM GLOBAL POINTER '~A' END ~A" (sd-get-annotator-reference :Object obj) "DOCU_WRITE_LINE_TO_SD ('(list '+(STR(INQ 102))+' '+(STR(INQ 103))+' )' )")))
Erklaerung: WRITE_LINE erhaelt als einzigen Parameter einen STRING der syntaktisch einer LISTE in LISP syntax entspricht. Diese LISP-liste enthaelt nun zwei 2D Punkte, die man dann auf OSD Seite z.B. mit (car bezugspunkte) und (cadr bezugspunkte) einzeln erhaelt. [EDIT:] 2 Punkte Abfrage hinzugefuegt ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 10. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2.1.0 Creo Elements / Direct Model Manager 20.2.1.0 Creo 5.0.2.0 Simulate <P>Notepad++ Win 10
|
erstellt am: 10. Mai. 2017 07:11 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Guten Morgen! Wunderbar erklärt, da wird mir wieder bewusst wie wenig ich eigentlich von der ME10 Makro-Sprache weiß. Ich habe deinen Code gleich eingebaut, bekomme jetzt allerdings keinen Bezugspunkt mehr zurückgemeldet. Der Punkt wird zwar korrekt ermittelt, aber bei der Übertragung scheint noch etwas nicht zu funktionieren. Trace-Meldung: Code:
INQ_SELECTED_ELEM GLOBAL POINTER '200029136' END DOCU_WRITE_LINE_TO_SD { untrapped token error occurred } ( INQ 102 ) 522.634167255195,239.198000403675 { untrapped token error occurred } TRACE
Kannst da mir der Meldung etwas anfangen? ------------------ Viele Grüße Felix [Diese Nachricht wurde von lix b am 10. Mai. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Ehrenmitglied V.I.P. h.c. Tastenhauer
Beiträge: 2017 Registriert: 3.20. ● PE6+8@home ● W10 Pro Build19044.2364 ● Drafting V20.1+4 ● Modeling V20.1+4
|
erstellt am: 10. Mai. 2017 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
|
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2.1.0 Creo Elements / Direct Model Manager 20.2.1.0 Creo 5.0.2.0 Simulate <P>Notepad++ Win 10
|
erstellt am: 10. Mai. 2017 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Funktioniert leider immer noch nicht Code: (setq bezugspunkt (sd-execute-annotator-function :fnc (format nil "trace del_old 'c:/temp/wasgehtab2.log' INQ_SELECTED_ELEM GLOBAL POINTER '~A' END DOCU_WRITE_LINE_TO_SD (str(inq 102)) trace off" (sd-get-annotator-reference :Object obj))))
Code:
INQ_SELECTED_ELEM GLOBAL POINTER '200213584' END DOCU_WRITE_LINE_TO_SD { untrapped token error occurred } ( STR ( INQ 102 ) ) '522.634167255195,239.198000403675' { untrapped token error occurred } TRACE (setq bezugspunkt (sd-execute-annotator-function :fnc (format nil "trace del_old 'c:/temp/wasgehtab2.log' INQ_SELECTED_ELEM GLOBAL POINTER '~A' END DOCU_WRITE_LINE_TO_SD (str(inq 102)) trace off" (sd-get-annotator-reference :Object obj))))
------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2.1.0 Creo Elements / Direct Model Manager 20.2.1.0 Creo 5.0.2.0 Simulate <P>Notepad++ Win 10
|
erstellt am: 10. Mai. 2017 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für M.Smarslik
Habe jetzt eine Lösung gefunden, die deine Verbesserungsvorschläge umsetzt und auch wieder das gewünschte Ergebnis liefert. Code: (setq anno-fnc (format nil "~A ~A ~A ~A" "INQ_SELECTED_ELEM GLOBAL POINTER" (sd-get-annotator-reference :Object obj) "let bezugspunkt (inq 102)" "let done (DOCU_WRITE_LINE_TO_SD str bezugspunkt)" ) ;; end format ) ;; end setq (setq bezugspunkt (sd-execute-annotator-function :fnc anno-fnc))
------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |