| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| | |
 | Wichtige Änderung bei Lizenzverlängerungen von PTC, eine Pressemitteilung
|
|
Autor
|
Thema: Drafting: Element über ID selektieren? (406 / mal gelesen)
|
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 26. Nov. 2025 07:36 <-- editieren / zitieren --> Unities abgeben:         
Ich mal wieder... Eines meiner Makros editiert die Bemaßungs-Prefixe. Code:
INQ_SELECTED_ELEM GLOBAL DIMENSIONS ALL LOOP EXIT_IF ((INQ 14) = 0) { verbleibende Bemaßungen} { INQ 39 = Element-ID INQ 309 = Part-ID INQ 902 = Prefix Text INQ 904 = Postfix Text } IF ((LEN (INQ 902)) AND ((INQ 902) <> "END-OF-LIST")) LET C (UCHR 57393) { <Diameter> -> "ø" UCHR(248) oder "Ø" -> UCHR(216) } LET T (INQ 902) LET P (POS T C) IF (P>0) EDIT_PART (INQ 309) LET Tnew ((SUBSTR T 1 (P-1)) + (UCHR 216) + (SUBSTR T (P+1) 80)) EDIT_DIM_PREFIX PICK_VP_PNT 1 (INQ 101) Tnew END END_IF END_IF INQ_NEXT_ELEM END_LOOP
Das funktioniert fast immer. Nur bei einer Bemaßung kommt mir ein trap token error. trace:
Code:
INQ_SELECTED_ELEM GLOBAL DIMENSIONS ALL LOOP EXIT_IF ( ( INQ 14 ) = 0 ) 0 IF ( ( LEN ( INQ 902 ) ) AND ( ( INQ 902 ) <> 'END-OF-LIST' ) ) 1 LET C ( UCHR 57393 ) '' LET T ( INQ 902 ) ' ' LET P ( POS T ' ' C '' ) 2 IF ( P 2 > 0 ) 1 LET Cnt ( Cnt 0 + 1 ) 1 EDIT_PART ( INQ 309 ) '~26' LET Tnew ( ( SUBSTR T ' ' 1 ( P 2 -1 ) ) + ( UCHR 216 ) + ( SUBSTR T ' ' ( P 2 + 1 ) 80 ) ) ' Ø' EDIT_DIM_PREFIX PICK_VP_PNT 1 ( INQ 101 ) -402.479368338531,-8.26140561111269 { trapped token error occurred } Tnew ' Ø' { trapped token error occurred } END END_IF END_IF INQ_NEXT_ELEM END_LOOP weitere Änderungen laufen problemlos durch: EDIT_DIM_PREFIX PICK_VP_PNT 1 ( INQ 101 ) -224.539987097415,101.052014913183 Tnew ' Ø' END EDIT_DIM_PREFIX PICK_VP_PNT 1 ( INQ 101 ) -208.811594399194,127.372303128114 Tnew ' Ø' END etc...
Es ist zufälligerweise die erste Bemaßung in der Liste, aber daran liegts nicht - wenn ich bei der ersten im Loop kein EDIT_DIM_PREFIX mache läuft es bei der nächsten (welche dann die erste editierte ist) wie gehabt problemlos. Ich vermute daß das PICK_VP_PNT nichts findet. Der Maßtext ist zur Seite gezogen. Wenn ich aber in der Befehlszeile
Code:
INQ_ELEM -> Klick auf Bemaßung und dann EDIT_DIM_PREFIX PICK_VP_PNT 1 (INQ 101)
eingebe wird mir das Prefix zur manuellen Änderung vorgeschlagen... Seltsam? Kann ich eine Bemaßung auch über die Element ID (INQ 39) statt über PICKVP_PNT (INQ 101) selektieren? Oder auf anderem Weg? So long, Martin
------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2399 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build10.0.19045.6466 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 26. Nov. 2025 20:08 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Gutjahr
Zitat: Original erstellt von Martin Gutjahr: Kann ich eine Bemaßung auch über die Element ID (INQ 39) statt über PICKVP_PNT (INQ 101) selektieren?
PICKVP_PNT war das erste was mir in dem Code.. <räusper> Ich räuber aber am liebsten erst in den Annotation Macros. 😉
Es gibt da aber paar Zeilen, die auch den Pointer mit Bemassungen einsetzen:
Code: DA_STYLE_GET POINTER (INQ 332) Also ggf. EDIT_DIM_PREFIX GLOBAL POINTER (INQ 332) Tnew END
39? 332? Das eine war nen String, das andere 'n Integer. Kam durch die 64bit Version vom Drafting. Mit GLOBAL POINTER brauchst du dann auch den EDIT_PART nimmer, und, Nebeneffekt: Teile könnten skaliert sein. Da wäre dann auch ein umrechnen nicht mehr nötig. ------------------ ● 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 |
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 26. Nov. 2025 22:18 <-- editieren / zitieren --> Unities abgeben:         
Zitat: <räusper>
Nicht dran verschlucken! EDIT_DIM_TEXT funktioniert mit POINTER. EDIT_DIM_PREFIX nicht. getraced aus der Befehlszeile sieht das so aus:
Code:
INQ_ELEM PICK_VP_PNT 1 -213.79740688525,-28.248553834509 LET Ptr ( INQ 332 ) '76352032' EDIT_DIM_TEXT POINTER Ptr '76352032' 'ABC' END EDIT_DIM_PREFIX POINTER { untrapped token error occurred }
------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2399 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build10.0.19045.6466 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 26. Nov. 2025 22:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Gutjahr
|
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 26. Nov. 2025 23:03 <-- editieren / zitieren --> Unities abgeben:         
EDIT_DIM_PREFIX SELECT mit POINTER klappt leider auch nicht. PRESELECT POINTER Ptr CONFIRM - ok, Bemaßung ist selektiert. EDIT_DIM_TEXT "ABC" END - klappt. EDIT_DIM_PREFIX "D" END dann wieder nicht. Ich schlaf jetzt ne Nacht drüber. ------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! [Diese Nachricht wurde von Martin Gutjahr am 26. Nov. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 26. Nov. 2025 23:34 <-- editieren / zitieren --> Unities abgeben:         
In den Anno-Makros bin ich über ein Konstrukt Code: EDIT_DIM_TEXT (Dim_midpoint/Dim_scale) ...
gestolpert. Damit kann es zu tun haben! Die Ansicht mit dem nicht erkannten Maß hat Maßstab 2:1. Aber warum fängt mein Script 2 von 3 Maßen und eins nur wenn ich mit Dim_scale 2 rechne? Muß ich die Tage mal drüberschauen... Danke fürs Mitleiden. ------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 27. Nov. 2025 08:36 <-- editieren / zitieren --> Unities abgeben:         
Das Rätsel und meine Eingangsfrage ist gelöst! Danke Wolfgang für den Tip mit POINTER (das war meine Frage) und ich werde das in Zukunft gerne verwenden. Aber funktioniert halt leider nicht mit EDIT_DIM_PREFIX. Nun zur Sache warum die ERSTE Bemaßung im Teil nicht mit INQ 101 gefunden wird:
INQ_SELECTED_ELEM GLOBAL DIMENSIONS läuft im TOP. Also ist das erste INQ 101 ein globaler 2D-Punkt. Ich wechsle dann mit EDIT_PART ins Teil, das hat Maßstab 2:1 und damit eine eigene Skalierung. INQ 101 von zuvor bleibt aber unverändert. Deshalb wird das erste Maß nicht gefunden und die Selektion wirft einen Fehler. Beim folgenden INQ_NEXT_ELEM bin ich noch in der maßstäblichen Ansicht. Damit ist dessen INQ 101 dann lokal aus der Ansicht und deren weitere Dimensions dort können mit INQ 101 selektiert werden. Deshalb wurde immer die erste Bemaßung der Ansicht nicht getroffen und hat einen Fehler geworfen. Ich ermittle jetzt den Teile-Maßstab mit GET_PART_SCALE (INQ 309) und vor jedem INQ_NEXT_ELEM steht EDIT_PART TOP damit die INQ 101 immer aus demselben Koordinatensystem kommen. Damit klappts auch mit der ersten Bemaßung! Funktionierender Code
Code:
EDIT_PART TOP INQ_SELECTED_ELEM GLOBAL DIMENSIONS ALLLOOP EXIT_IF ((INQ 14) = 0) { verbleibende Bemaßungen} { INQ 39 = Element-ID (Integer) INQ 332 = Pointer (String) INQ 101 = Bemaßungstext Position PNT_XY (global) INQ 309 = Part-ID INQ 902 = Prefix Text INQ 904 = Postfix Text } LET Dim__midpoint (INQ 101) LET Dim__scale (GET_PART_SCALE (INQ 309)) IF ((LEN (INQ 902)) AND ((INQ 902) <> "END-OF-LIST")) LET C (UCHR 57393) { <Diameter> -> "ø" UCHR(248) oder "Ø" -> UCHR(216) } LET T (INQ 902) LET P (POS T C) IF (P>0) EDIT_PART (INQ 309) LET Tnew ((SUBSTR T 1 (P-1)) + (UCHR 216) + (SUBSTR T (P+1) 80)) EDIT_DIM_PREFIX (Dim__midpoint/Dim__scale) Tnew END END_IF END_IF EDIT_PART TOP INQ_NEXT_ELEM END_LOOP
Was für ne Hühnerei. Jetzt weiß ich warum sie sich POINTER entwickelt haben. GET_PART_SCALE ist i.ü. auch nur aus den Anno-Makros ersichtlich. Kein Wörtchen davon in der Doku. ------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2399 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build10.0.19045.6466 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 27. Nov. 2025 18:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Martin Gutjahr
Zitat: Original erstellt von Martin Gutjahr:
Code: EDIT_DIM_TEXT (Dim_midpoint/Dim_scale) ...
gestolpert. Damit kann es zu tun haben! Die Ansicht mit dem nicht erkannten Maß hat Maßstab 2:1.
Zitat: der_Wolfgang schrub: PTR ... Nebeneffekt: Teile könnten skaliert sein. Da wäre dann auch ein umrechnen nicht mehr nötig
Code: PRESELECT POINTER Ptr CONFIRM - ok, Bemaßung ist selektiert. EDIT_DIM_TEXT "ABC" END - klappt. EDIT_DIM_PREFIX "D" END dann wieder nicht.
Preselect ist IMHO nicht das selbe wie SELECT. Aber nach dem EDIT_DIM_TEXT .. END wird die PRESELECTion doch schon leer sein. Dann kann der nächste Befehl, egal welcher, nix mehr bewirken. Aber ich gebe zu: PRESELECT im Makro.. fühlt sich für nicht gut an und ich habe das nie angewandt. Deswegen: 🤷
Zitat: Was für ne Hühnerei
na, wenn du wild durch die Parts springst und den Scale nicht einrechnest... gibt es halt Rührei! Zitat: Jetzt weiß ich warum sie sich POINTER entwickelt haben.
Ja, die slovenischen ME10'ler mussten das für uns Annotöter machen. Zitat: GET_PART_SCALE ...Kein Wörtchen davon in der Doku.
Ja, die slovenischen ME10'ler mussten einiges für uns Annotöter machen. Der prefix DOCU_ deutet auf das Annotation Modul als Initiator hin. Aber einige unsere (damaligen) Anforderungen waren dann doch sehr generisch und auch allgemein so hilfreich das sie es in den puren ME10 geschafft haben. Da wird GET_PART_SCALE nicht das einzige sein. ------------------ ● 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 |
Martin Gutjahr Mitglied Jack of all trades

 Beiträge: 17 Registriert: 03.12.2000 HP Z800,Z2G1i | HP15c Creo Elements/Direct Modeling 20.8, SheetMetal, AdvancedDesign, SolidPower, SolidTube, SolidPipe, PhoenixPDM
|
erstellt am: 27. Nov. 2025 23:05 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Aber nach dem EDIT_DIM_TEXT .. END wird die PRESELECTion doch schon leer sein.
Ist sie auch, die beiden EDIT_DIM in der Cmdline jeweils für sich direkt nach dem PRESELECT haben obige Auswirkung. Ich habs auch nur in der Cmdline verwendet. Zitat: na, wenn du wild durch die Parts springst...
"Der mit den Parts tanzt."  ------------------ Tu nicht so, sonst bekommst Du das doch auch immer hin! [Diese Nachricht wurde von Martin Gutjahr am 27. Nov. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |