| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SolidEdge |
Autor
|
Thema: Umbiegen von Referenzen über API(VB6) (915 mal gelesen)
|
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 26. Aug. 2005 17:52 <-- editieren / zitieren --> Unities abgeben:
Hallo, habe da mal eine Frage zum Umbiegen von Referenzen. Mit dem RVManager ist das ja grundsätzlich möglich, wobei meinem Kenntnisstand (super wenn dem nicht so wäre) nach dazu der jeweilige Parent in der SE-Sitzung geschlossen sein muss! Das gilt wohl auch für entsprechende Parents im Editmode. Mein Problem ist nun, dass ich das Dokument in SE nicht schließen will und dennoch diverse Links austauschen und in der Sitzung aktualisiert haben möchte. Wenn ich die "native" SE-API verwende, dann kann ich scheinbar die Interpartcopies usw. nicht austauschen (oder gibt es da eine Lösung?). Des weiteren finde ich über die "native" API keine Baugruppen zu Parts, wenn diese auf Dokumentenebene durch beispielsweise einem Multipartcutout verknüpft wurden (aber auch hier will ich einen Austausch erreichen und zwar in beiden Richtungen --> Baugruppe und Part werden umbenannt (Kopie auf Dateiebene) und wieder miteinander verknüpft)! Sollte ich für mein Vorhaben wirklich den RV-Manager verwenden müssen, so wäre es gut, wenn ich wüsste, welche Modelle in der aktuellen SE-Sitzung im Kontext einer Baugruppe geöffnet sind (wie findet man das raus?). Ich hoffe Ihr da draußen könnt mir da weiterhelfen. So ich gehe jetzt aber erst mal ins Wochenende. Bis denne
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Matthias Leemann Mitglied Masch. Ing HTL
Beiträge: 394 Registriert: 03.10.2003 Windows 11 Pro Solid Edge 2022
|
erstellt am: 26. Aug. 2005 18:11 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Hallo Kricher, nach meinem Erkenntnisstand geht das nicht, was du beschrieben hast. Um in einer Assembly im Revision Manager die Dokumente zu verschieben oder umzubenennen darf das Top-Dokument in SE nicht geöffnet sein. Es kommt mir vor, wie wenn du an deinem Fahrzeug bei laufendem Motor einen Kolben wechseln möchtest. Oder irre ich? Schönes Wochenende Matthias ------------------ SE V17 SP2 SePropManager.NET von www.leemann-software.net Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Niesner Mitglied
Beiträge: 505 Registriert: 26.11.2001
|
erstellt am: 29. Aug. 2005 06:58 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Servus Kricher, wie Matthis schon sagte geht Dein Wunsch normalerweise nicht. In gewissen Situationen geht es aber doch. So kann man z.B. im ASM einen Link auf ein ET oder UnterBG schon umbiegen: Wenn neues Ziel nicht vorhanden ist erstellen. Und dann das Occurenc mit "replace" ersetzen. Jürgen ------------------ 54*SEV16SR8, 4*SEV17SR3 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 09:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr, habe ich es mir doch gedacht. Der Hintergrund meiner Frage liegt in der Aufgabe. Das ganze ist im Kontext eines PDM-System zu sehen, wo der Anwender "normal" seine Bearbeitung im SE vornimmt und am Ende die Geschichte wieder in die DB pumpt. Bei diesem Vorgang werden die Dateinamen umgebogen, so dass die Unique-Dateinamen aus der DB kommen. Mit der jetzigen Lösung bin dann aber gezwungen bei solchen Vorgängen die jeweilgen Hauptdokumente zu schließen um die notwendigen Aktionen über den RV-Manager zu realisieren. Am Ende muss ich dann die Baugruppe (oder was auch immer) wieder in SE öffnen (generell schlechte Lösung). Hierbei kann ich dann aber gar nicht die Baugruppe mit der entsprechenden Konfiguration (wie sie zuvor geöffnet war) öffnen (Editmode usw.). Gibt es echt keine andere Lösung??? Bis denne Ihr Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 10:53 <-- editieren / zitieren --> Unities abgeben:
Hallo noch mal, geht das denn mit dem Editmode? Also wenn beispielsweise ein ET im Kontext der BG geöffnet ist. Ich bekomme die Baugruppe über "seapp.ActiveDocument". Aber wie komme ich jetzt an die Dokumente im Editmode? Muss ich jetzt wirklich über alle OCC die Eigenschaft "InPlaceActivated" auf Dokumentenebene prüfen? In diesem Fall müsste ich dann aber ja alle Referenzstrukturen für alle aktiven Dokumente in der Sitzung prüfen, um letztlich festzustellen, welche Dokumente ich schließen muss!!! Das kann doch nicht wirklich die Lösung sein???? Gibt es keine andere Möglichkeit an die im kontext geöffneten Dokumente zu kommen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Matthias Leemann Mitglied Masch. Ing HTL
Beiträge: 394 Registriert: 03.10.2003 Windows 11 Pro Solid Edge 2022
|
erstellt am: 29. Aug. 2005 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Hallo Kricher, mit "seapp.ActiveDocument" kriegst du nicht die ganze Baugruppe, sondern nur das Bauteil, das du gerade aus der Baugruppe editierst. Du kannst das auch Unter Solid Edge / Fenster nachschauen. Dort werden alle geöffneten Dokumente aufgelistet und das aktive mit einem Haken markiert. Bauteile die aus dem Kontext der Baugruppe geöffnet wurden, sind von Solid Edge schreibgeschützt. Da kannst du nichts machen. GRuss Matthias ------------------ SE V17 SP2 SePropManager.NET von www.leemann-software.net [Diese Nachricht wurde von Matthias Leemann am 29. Aug. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 11:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Matthias, dass mit den offenen Dokumenten usw. kenne ich. Aus diesem Grund ja auch meine Alternativlösung alle Strukturen (also auch die Subdokumente) für alle offenen Dokumente zu analysieren und so die Dokumente im Editmode zu ermitteln. Ich denke hier ist dann die API wirklich etwas mager ausgefallen. Zu jeder Window-Instanz gehört meiner Meinung nach auch noch die Eigenschaft "inEditMode" (o.ä.) mit dem betroffenen Dokument (also das im Editmode) als Rückgabe. Ich denke so bleibt mir dann keine Wahl als wirklich alle Strukturen zu analysieren und wenn so ein Dokumente im Editmode geöffnet ist, dieses zu schließen, damit ich über den RV-Manager einen Austausch innerhalb des Dokuments vornehmen kann. Aber vielen Dank für Eure vielen Antworten. Bis denne Kricher Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 29. Aug. 2005 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
|
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 12:38 <-- editieren / zitieren --> Unities abgeben:
Das ist schlecht, weil ich dann ja eine aktive Instanz des Dokuments benötige, die ich gar nicht habe. Ich muss ja den RVManager für die ganzen Austauschfunktionen verwenden (und somit auch für die Traverse), wobei ich dann aber ja keine Instanzen der nativen SE-Dokumente in der Hand habe! Entweder gibt mir SE eine Liste aller Dokumente im Editmode (wie bereits gesagt, sollte meiner Meinung nach eine Eigenschaft von Window sein), oder aber ich müsste über den Dateinamen an die jeweils im Editmode offenen Dokumente kommen. Die Eigenschaft "InPlaceActivated" wollte ich ja sowieso in meinem vorherigen Ansatz verwenden. Ich denke das Problem liegt grundsätzlich im Aufbau der API. Die Native-API kann die Referenzgeschichten nicht richtig (ausreichend) verwalten und der RVManager hat bei weitem zu wenig Informationen über die jeweiligen Dokumente. Letztlich benötigt man beide API, wobei die eine die andere stört (immerhin muss ich sowas "blödes" wie Dokumente öffnen und wieder schließen vornehmen). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 29. Aug. 2005 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
hmm, letzlich faengt der Rev.Manager bei Replace den Open Error ab selbiges macht SE wenn versucht wird eine Datei 2x zu oeffnen Eine von einer Anwendung geoeffnete Datei ist keine Windows Instanz die Anwendung bestimmt IMO beim Open ob mit Lock oder ohne und wenn mit dann wie: Read oder Write oder R/W. Sofern die ASM im Rev.Manager geoeffnet wird (was im uebrigen moeglich ist auch wenn schon in SE geoeffnet) so bekomme ich mindest ueber <objDoc.Occurrences.item(x).Occurrencedocument ein Objekt auf das Teil welches da ersetzt werden soll. Sicher da muss man halt mal durch die ganze Struktur gehen (was der Rev.Manager letzlich fuer die GUI auch macht) und ggf. alles sammeln Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 13:36 <-- editieren / zitieren --> Unities abgeben:
Das stimmt natürlich Modeng, und das entspricht ja auch meiner Beschreibung, wobei das natürlich generell unschön ist, da ich alle offenen Dokumente untersuchen (die gesamte Struktur) und bei Bedarf schließen und am Ende wieder öffnen muss (für mich ein absolutes Manko, da sicherlich bei gr. BG nicht sehr performant). Des weiteren muss man generell die Struktur oder zumindest jedes Dokument einzeln über beide API (und damit 2 mal) durchleuchten, damit man die benötigten Informationen zusammenbekommt. So muss ich beispielsweise spätestens zur Bestimmung der Menge die Struktur über OCC analysieren um eine STL-Ausleitung machen zu können (usw.). Die beste Lösung wäre meiner Meinung nach halt eine STARK erweiterte API über den RV-Manager oder noch besser das ganze in die native-API einarbeiten. Im moment bin ich überhaupt nicht begeistert von den Zwängen. Aber egal, die anderen CAD-Systeme sind hier in der Regel auch nicht besser (teilweise fast schon identische API).
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 29. Aug. 2005 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
[...] Dokument einzeln über beide API (und damit 2 mal) durchleuchten [...] beide ???? es geht doch um Replace per Rev.manager oder? Doch nur um Teile zu ersetzen braucht man den Rev.Manager nicht das geht auch aus der ASM heraus. BTW: der Rev.Manager als GUI Applikation wird (hoffentlich) von UGS bei Releasewechsel oder Patches angepasst nur ob Dein schoenes Programm noch laeuft ist fraglich -- das normale Geschaeft der SE Programmierung ist schon wetterwendisch genug wer weiss welche Struktur sich fuer V18 und folgende ergibt. Ausserdem haengt an dem CAD auch noch eine Fertigung mein Hintergedanke ist immer den Betrieb *mit* Betriebsausweis zu verlassen ..
[Diese Nachricht wurde von modeng am 29. Aug. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 29. Aug. 2005 14:18 <-- editieren / zitieren --> Unities abgeben:
Ja schon, aber ich benötige (PDM mit allem drum und dran) letztlich natürlich noch viele weitere Informationen. Scheinbar kann ich ja auch keinen Referenzwechsel vornehmen, sofern ein entsprechender Parent im Editmode (also im Kontext einer Baugruppe) geöffnet sind. Ich muss also alle betroffenen Parents finden, die entweder in einem eigenen Fenster oder aber indirekt über den Editmode geöffnet sind. In jedem Fall brauche ich nach meinem Kenntnisstand die native-API um überhaupt ermitteln zu können, welche Dokumente geöffnet sind. Den RV-Manager muss ich dann für den späteren eigentlichen Austausch verwenden. Mein Problem nun der Mangel an Möglichkeiten die offenen Dokumente (zumindest im Editmode) direkt zu ermitteln. Also es handelt sich hier um einen Übernahmevorgang in eine PDM-DB mit gleichzeitigen Umbenennen der Dokuemente. In keinem Fall will ich einfach stumpf alle Dokumente (auch die gar nicht betroffenen) in der Sitzung schliessen und später wieder öffnen, nur um meine Übernahme durchführen zu können. Der Vorgang sollte sich immer nur auf die Struktur des aktiven Dokumentes in der Sitzung beziehen. Der Vorgang wird direkt über ein Addin mit Symbolleisten aus der Sitzung heraus gestartet. Mich würde mal interessieren, wie andere in diesem Kontext vorgehen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jürgen Niesner Mitglied
Beiträge: 505 Registriert: 26.11.2001
|
erstellt am: 29. Aug. 2005 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für Kricher
Servus Kricher, um nur zu ermitteln welche Dokumente Du schließen mußt einfach in einer schleife alle Dokumente die in SE offen sind ermitteln und dann im revmanager die Links lesen: (Wie die Befehle in der API genau heißen must Du nachschauen) for each seDok in seApp.documents set revmanDok = RevManager.Doks.Open(sedok.fullname) for each revLink in revmanDok.linkeddocuments if revLink = meineSuche then 'das seDok muss geschlossen werden exit for end if next next Jürgen [Diese Nachricht wurde von Jürgen Niesner am 29. Aug. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kricher Mitglied Entwickler
Beiträge: 270 Registriert: 10.09.2004 Solid Edge (ST6 - SE2020) SolidWorks (2014 - 2020) DraftSight 2016 und 2018 Creo Elements Direct Modeling (SolidDesigner V17, V18, V19, V20) Inventor 2018 ACAD/Mechanical 2018
|
erstellt am: 30. Aug. 2005 08:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Jürgen, danke für Dein Beispiel, aber das reicht scheinbar nicht aus. Tests haben mir gezeigt, dass innerhalb von Dokumenten die INPLACE (also was ich als Editmode bezeichne) geöffnet wurden auch nicht ausgetauscht werden kann. Diese Dokumente finde ich halt mit Deiner Methode nicht. Bislang verwende ich eine ähnliche Variante wie Deine, wobei ich im Moment immer alle Dokumente aus der Sitzung schmeiße, also auch solche, die mit meinem aktuellen Vorgang gar nichts zu tun haben. Irre ich mich evtl. mit dem Editmode (austauschen doch möglich?)? Besteht eigentlich die Möglichkeit ein geöffnetes Hauptdokument nachträglich in der Sitzung readonly zu machen, so dass ich es im RV-Manager nach belieben bearbeiten kann? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |