| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Referenz entfernen (2578 mal gelesen)
|
Michi2 Mitglied Softwareentwickler
Beiträge: 2 Registriert: 09.11.2010
|
erstellt am: 09. Nov. 2010 16:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, aktuell versuche ich eine Lösung zu finden um nicht aufgelöste Referenzen innerhalb einer Baugrupper per API zu entfernen. Mein Ansatz bisher ist, das ich im AssemblyDocument in einer ForEach Schleife alle Objekte vom Typ 'ComponentOccurrence' durchlaufe. Wenn ein Eintrag gefunden wird mit ResolvedReferenced = False, dann versuche ich per ComponentOccurrences.Delete() den Eintrag zu löschen. Beim Delete kommt eine E_INVALIDARGS Exception? Bin mir nicht sicher ob mein Ansatz falsch ist, oder ob die Baugruppe bzw. die Referenz Probleme macht? In den SDK Sampels und in der API Hilfe finde ich nur wie man eine ComponentOccurrences hinzufügt aber leider kein Beispiel zum löschen. Es geht hier nur um Referenzen die in der Baugruppe als 'Leichen' existieren und physikalisch nicht mehr in der vorhandenen Verzeichnisstruktur vorhanden sind. Schönen Gruß Michael [Diese Nachricht wurde von Michi2 am 09. Nov. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 09. Nov. 2010 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für Michi2
Hallo Versuchst du wirklich ComponentOccurrences.Delete? Wo befindet sich ResolvedReference im Objektbaum? Ich konnte es auf die Schnelle nicht finden. Bei mir läuft das problemlos durch: Code: Public Sub DelOcc() ' Set a reference to the assembly document. ' This assumes an assembly document is active. Dim oDoc As AssemblyDocument Set oDoc = ThisApplication.ActiveDocument Dim oOcc As ComponentOccurrence For Each oOcc In oDoc.ComponentDefinition.Occurrences oOcc.Delete Next End Sub
Eventuell mal den Codeabschnitt posten. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Michi2 Mitglied Softwareentwickler
Beiträge: 2 Registriert: 09.11.2010
|
erstellt am: 09. Nov. 2010 22:37 <-- editieren / zitieren --> Unities abgeben:
Hi, Sorry ich meinte nicht ResolvedReference sondern ComponentOccurrence.ReferencedDocumentDescriptor.ReferenceMissing. Ist hier 'True' versuche ich per ComponentOccurrence.Delete() den Eintrag zu entfernen. Hm, das ganze verhält sich höchst merkwürdig, wenn ich versuche Die Eintäge einfach alle zu löschen (Ählich Beispiel) klappt immer der 1. Delete beim 2. kommt dan der Fehler, und das Dokument speichern geht auch nicht, bzw. kommt spätestens hier der Fehler. Muss noch ergänzen, das ich das ganze nicht aus Inventor heraus aufrufe sonder als 'Standalone' Applikation ausführe. Der Inventor wird unsichtbar geöffnet sowie die Baugruppen auch. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BernhardU Mitglied Techniker / Konstrukteur / Student
Beiträge: 328 Registriert: 17.08.2005 Windows XP SP3 AIP 2011 VS 2005
|
erstellt am: 10. Nov. 2010 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für Michi2
Hi! Verwendest du wirklich die ForEach Schleife? Dann kann das schon der Fehler sein! Du löscht aus einer Auflistung Einträge die dann beim Druchlaufen der Schleife einen Fehler auslösen!! LG Bernhard Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 10. Nov. 2010 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für Michi2
Hallo Guter Einwand, mein Testobjekt gestern hatte nur eine Occurrence. For Each kann man schon nehmen, muß es aber erweitern um ein umschließendes While. Zum Beispiel: Code: Public Sub DelOcc() ' Set a reference to the assembly document. ' This assumes an assembly document is active. Dim oDoc As AssemblyDocument Set oDoc = ThisApplication.ActiveDocument Dim bNewRun As Boolean bNewRun = True Dim oOcc As ComponentOccurrenceDo While bNewRun = True For Each oOcc In oDoc.ComponentDefinition.Occurrences If oOcc.ReferencedDocumentDescriptor.ReferenceMissing = True Then oOcc.Delete bNewRun = True Exit For Else bNewRun = False End If Next Loop End Sub
Für SubOccurences sollte man vielleicht über eine Rekursion nachdenken. ------------------ MfG RK [Diese Nachricht wurde von rkauskh am 10. Nov. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |