| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO | | |  | Optimieren Sie Ihr Rechenzentrumsn, eine Pressemitteilung
|
Autor
|
Thema: Info zuweisen (1702 mal gelesen)
|
Tom R Mitglied Technischer Zeichner
 
 Beiträge: 275 Registriert: 02.11.2003
|
erstellt am: 26. Apr. 2007 15:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen! Besonders beliebt sind ja Fehler, die auftreten, nachdem das Makro seit zwei Jahren (wahrscheinlich zufällig) fehlerfrei funktionierte. Ich habe seinerzeit mit meinen bescheidenen Programmierkenntnissen und eurer gezielten Hilfe ein Makro geschrieben, mit dem man die Befehle "Strecken 1 Element" (TRIM_ONE) und "Mitte raus" (CUT_MIDDLE) auch mit Elementen von inaktiven Teilen ausführen kann. Dazu klickt man das zu trimmende (aktive) Element an und danach auf die Grenze (die eben auch inaktiv sein kann). Dieses Element, das die Grenze bildet, wird dann ins aktive Teil kopiert und mit einem Info ("Temp") versehen. Danach wird mit dem normalen Trim-Befehl die Aktion ausgeführt und zuletzt noch mittels "DELETE_GLOBAL_INFOS" die Kopie gelöscht. Das hat bisher auch wunderbar geklappt. Jetzt ist es aber in wenigen Wochen zum zweiten Mal passiert, dass am Ende statt des kopierten Grenzelementes das inaktive Teil gelöscht wurde. Und ich denke, ich habe jetzt herausgefunden, woran es liegt: Das tritt nur auf, wenn a) das inaktive Teil ein Subpart des aktiven ist und b) das Grenzelement eine Ellipse. Ich verwende den Punkt, der angeklickt wurde, immer wieder, um die verschiedenen Aktionen durchzuführen. Nun scheint es so zu sein, dass beim Befehl "ADD_ELEM_INFO" diese Punktangabe nicht das kopierte Teil ergibt, sondern das Subpart. Vermutlich durch Ungenauigkeiten bei der Ellipsenberechnung? Hat da jemand eine sinnvollere Idee? So, 2 Unities gibt's erst mal für die, die bis hier gelesen haben und 5 weitere für die, die das Problem verstanden haben. *ggg* Als Hilfe kopiere ich mal auszugsweise mein Makro hier rein. LOOP LET Status (0) READ PNT 'Schnittelement ?' P0 TRAP_ERROR edit_part P0 IF (NOT CHECK_ERROR) INQ_ENV 7 LET Teilfrage ("~"+(STR(INQ 302))) EDIT_PART Teilaktiv IF (Teilfrage <> Teilaktiv) WUI_INCLUDE_ELEMENT 1 P0 P0 P0 ADD_ELEM_INFO 'Temp' P0 END_IF LET Status (1) END_IF EXIT_IF ((Status = 1) AND ((INQ 403) <> C_LINE)) BEEP END_LOOP TRIM_ONE P2 P0 DELETE GLOBAL INFOS 'Temp' END Viele warme Aprilgrüße Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tobi79 Mitglied Projektleiter / CAD-Administrator
 
 Beiträge: 422 Registriert: 22.02.2002 OSD 15.50B Drawingmanager
|
erstellt am: 26. Apr. 2007 16:13 <-- editieren / zitieren --> Unities abgeben:          Nur für Tom R
|
Tom R Mitglied Technischer Zeichner
 
 Beiträge: 275 Registriert: 02.11.2003
|
erstellt am: 27. Apr. 2007 07:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Tobi! Soll ich's gleich überweisen oder meinst du, du kriegst das mit den weiteren 5 U's auch noch hin?  Gut, in der Hoffnung, dass es hilft, hier mal das Ganze (hoffentlich ist da noch was zu retten *gg*): DEFINE linie_stutzen {Linien an inaktivem Teil stutzen/dehnen} LOCAL P0 LOCAL P1 LOCAL P2 LOCAL Teilaktiv {aktives Teil} LOCAL Teilfrage {gewähltes Teil} LOCAL Status INQ_ENV 7 LET Teilaktiv ("~"+(STR(INQ 302))) LOOP LOOP LET Status (0) READ PNT 'Element angeben, das gestutzt wird ?' P2 TRAP_ERROR edit_part P2 IF (NOT CHECK_ERROR) INQ_ENV 7 LET Teilfrage ("~"+(STR(INQ 302))) EDIT_PART Teilaktiv LET Status (1) END_IF INQ_SELECTED_ELEM EXIT_IF ((Status = 1) AND (Teilaktiv=Teilfrage) AND ((INQ 403) <> C_LINE)) BEEP END_LOOP LOOP LET Status (0) READ PNT 'Schnittelement ?' P0 TRAP_ERROR edit_part P0 IF (NOT CHECK_ERROR) INQ_ENV 7 LET Teilfrage ("~"+(STR(INQ 302))) EDIT_PART Teilaktiv IF (Teilfrage <> Teilaktiv) WUI_INCLUDE_ELEMENT 1 P0 P0 P0 ADD_ELEM_INFO 'Temp' P0 END_IF LET Status (1) END_IF EXIT_IF ((Status = 1) AND ((INQ 403) <> C_LINE)) BEEP END_LOOP TRIM_ONE P2 P0 DELETE GLOBAL INFOS 'Temp' END WINDOW AS_DISPLAYED END_LOOP END_DEFINE Viele Grüße Tom P.S.: Für den anderen Befehl, CUT_MIDDLE, gibt's ein eigenes, ähnliches Makro. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tobi79 Mitglied Projektleiter / CAD-Administrator
 
 Beiträge: 422 Registriert: 22.02.2002 OSD 15.50B Drawingmanager
|
erstellt am: 27. Apr. 2007 13:22 <-- editieren / zitieren --> Unities abgeben:          Nur für Tom R
Hallo Tom Also bis jetzt schauts nach 5 U's aus. Ich habe das Makro getestet, und es ist genau so wie du es sagst.
Hab dann mal Versucht den Fehler einzukreisen, und habe mich auf de Zeilen (37, 38, 46) zu konzentrieren Code:
WUI_INCLUDE_ELEMENT 1 P0 P0 P0 ADD_ELEM_INFO 'Temp' P0 DELETE GLOBAL INFOS 'Temp'
Habe es "manuell" gemacht, und was mich nun verwundert ist, dass es z.T. funktioniert, z.T aber wieder die U-Baugruppe löschte.
Habe "leider" bald Feierabend, sodass ich nicht mehr weiterforschen kann. Aber eine Idee hätte ich noch, die Du Versuchen solltest:
Befor du dem Element die Info zuweist, könntest Du die inaktiven Teile ausblenden, sodass diese nicht selektiert werden können. Das Problem besteht wohl darin, dass statt der aktiven Elipse die inaktive Elipse mit der Info versehen wird. hoffe das hilft Dir weiter. schönes Wochenende ------------------ Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tom R Mitglied Technischer Zeichner
 
 Beiträge: 275 Registriert: 02.11.2003
|
erstellt am: 27. Apr. 2007 13:39 <-- editieren / zitieren --> Unities abgeben:         
Hallo Tobi! Stimmt, das wäre einen Versuch wert, ich fürchte aber, dass das ein furchtbares Geblinke gibt, wenn all diese Teile erst aus- und dann wieder eingeblendet werden. Ich hatte gerade eine andere Idee: könnte man nicht das Element schon im inaktiven Teil kopieren, dann eines der beiden (nun doppelten) Elemente mit der Info versehen und dann mithilfe des Infos das Element ins aktive Teil verschieben? Aber dafür müsste man wohl auch das inaktive Teil kurz aktiv machen? Müsste man mal probieren. Aber heute nicht mehr. Bis ich die Befehle dafür zusammen habe, ist der Feierabend verpasst. Montag ist auch noch ein Tag... Viele Grüße Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tom R Mitglied Technischer Zeichner
 
 Beiträge: 275 Registriert: 02.11.2003 OSDD 2006 Solid Edge 2020 NX 2212
|
erstellt am: 30. Apr. 2007 15:09 <-- editieren / zitieren --> Unities abgeben:         
Hallo! Aaaaalso, bin bisher keinen Schritt weiter gekommen: Ob das Subpart ein- oder ausgeblendet ist, interessiert das Programm nicht wirklich. Es hängt die Info trotzdem an.  Dann habe ich versucht, wie beschrieben, zuerst das Element zu kopieren. Das ist schon mal gar nicht so einfach. Mit dem normalen Kopierbefehl lässt sich ein Element nicht auf sich selbst kopieren. Mit einem Trick ging's dann doch, aber dann scheiterte die Aktion daran, dass ich die Teile, die mit INCLUDE_ELEMENT kopiert werden sollen, wohl nicht anhand der Info auswählen kann. und sonst fällt mir im Moment dazu nix mehr ein... Viele Grüße Tom
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tobi79 Mitglied Projektleiter / CAD-Administrator
 
 Beiträge: 422 Registriert: 22.02.2002 OSD 15.50B Drawingmanager
|
erstellt am: 02. Mai. 2007 13:23 <-- editieren / zitieren --> Unities abgeben:          Nur für Tom R
Hallo Tom Als letzte Möglichkeit wollte ich Dir eigentlich ein Update vorschlagen. Habe es eben mit V13-15 versucht (arbeite auch noch auf der 12). Da kann mann GLOBAL nachgeben und es werden auch inaktive Teile sowie Hilfsgeomtrie selektiert. Aber: bei dem Versuch habe ich was lästiges festgestellt: Mit dem Befehl CUT_MIDDLE GLOBAL kann man mit einem Klick Global schneiden. Bei TRIM_ONE und TRIM_TWO muss man zuerst den Befehl wählen, die zu stutzende Linie angeben, dann GLOBAL eingeben und erst dann funzt's... fine ich sehr unschön gelöst.... naja... schönen Tag noch
------------------ Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tom R Mitglied Technischer Zeichner
 
 Beiträge: 275 Registriert: 02.11.2003
|
erstellt am: 08. Mai. 2007 08:33 <-- editieren / zitieren --> Unities abgeben:         
Hallo Tobi! Ich bin leider erst jetzt wieder dazu gekommen... Das wusste ich nicht, dass man bei den neueren Versionen die Option GLOBAL einsetzen kann. Trifft sich aber sehr gut, schließlich haben wir hier seit kurzem die 13 im Einsatz.  Ich habe jetzt einfach den Makronamen beibehalten, aber die neue Befehlsform eingesetzt, so dass der Anwender von der Reihenfolge der Parameter nichts mitkriegt. Die Tests jedenfalls haben geklappt. Dank dir nochmal vielmals für deine Hilfe! Viele Grüße Tom Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |