| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | Autodesk Inventor CAM, ein Webinar am 22.08.2025
|
Autor
|
Thema: Komponenten aus Baugruppe löschen (iLogic) (1093 / mal gelesen)
|
OibelTroibel Mitglied Konstrukteur
  
 Beiträge: 602 Registriert: 18.04.2014 ACAD/Inventor 2018-21
|
erstellt am: 08. Mrz. 2023 15:59 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen Ich stehe wieder mal an und bin mir sicher, dass es eine bessere Lösung geben muss. Daher wende ich mich mal wieder an euch Ich habe eine Konfigurator für eine grosse Baugruppe erstellt. Da die Komponenten aus dem Vault kommen, habe ich die Konfiguratorbaugruppe mit allen Komponenten befüllt. Somit werden alle Komponenten automatisch abgerufen, sobald der Konfigurator geöffnet wird. Danach wird über eine Maske die Baugruppe konfiguriert und über ein iLogic-Script generiert. Am Anfang des Scripts werden zuerst alle Komponenten aus der Baugruppe gelöscht und danach die benötigten Komponenten am richtigen Ort platziert. Das funktioniert soweit ganz gut. Jedoch dauert der Löschvorgang aller Komponenten am Anfang sehr lange. Ich mache das ganz einfach mit
Code: oComps = ThisDoc.Document.ComponentDefinition.OccurrencesFor Each oComp In oComps oComp.Delete Next
Wenn ich mit Ctrl+A alle Komponenten auswähle und lösche, geht das ein vielfaches schneller. Gibt es etwas ähnliches in iLogic, um den Löschvorgang aller Komponenten zu beschleunigen? Beste Grüsse Raphael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2825 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 08. Mrz. 2023 16:18 <-- editieren / zitieren --> Unities abgeben:          Nur für OibelTroibel
Moin Mal probiert alle Occurrences in einer ObjectCollection zu sammeln, dann über SelectSet.SelectMultiple(Entities As ObjectCollection) auswählen und mit SelectSet.Remove alle auf einmal löschen? Ich vermute das neu durchrechnen der Abhängigkeiten und des Modelles dauert, da es nach jedem Löschen ausgeführt wird. Dabei werden auch die entsprechenden Events ausgelöst und wenn da z.B. irgendwelche anderen iLogic Regeln oder Addins daran hängen, dauert es noch länger. EDIT: In iLogic sollte es auch möglich sein, BeginManage und EndManage derartige Massenänderungen zu koordinieren. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OibelTroibel Mitglied Konstrukteur
  
 Beiträge: 602 Registriert: 18.04.2014 ACAD/Inventor 2018-21
|
erstellt am: 09. Mrz. 2023 10:08 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ralf Vielen Dank für deine Tipps. Leider bringe ich es nicht auf die Reihe, auch wenn es trivial zu sein scheint. Vielleicht ist es auch einfach nicht mein Tag Wie muss ich da genau vorgehen? Beste Grüsse Raphael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
      

 Beiträge: 2825 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 09. Mrz. 2023 15:25 <-- editieren / zitieren --> Unities abgeben:          Nur für OibelTroibel
Moin Sonderfälle wie iAssemblies oder Ersatzdarstellungen usw. sind nicht getestet. Das Verhalten bei mehreren Modellzuständen hab ich auch nicht ausprobiert. Aber einfache Exemplare und Muster (auch ineinander geschachtelte) sollte man so handhaben können: Code:
Dim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oCompDef As AssemblyComponentDefinition = oAssDoc.ComponentDefinition Dim oObjColl As ObjectCollection = ThisApplication.TransientObjects.CreateObjectCollection Dim oSelSet As SelectSet = oAssDoc.SelectSetDim oTrans As Transaction = ThisApplication.TransactionManager.StartTransaction(oAssDoc,"Alle Komponenten löschen") Try ' Der Teil ist nur relevant, fall Reihenanordnungen existieren ' die werden, falls ineinander geschachtelt, von "innen nach außen" gelöscht ' wenn nicht erforderlich, einfach rauslöschen ' --- Schnipp --- Dim oPattern As OccurrencePattern While oCompDef.OccurrencePatterns.Count>0 For Each oPattern In oCompDef.OccurrencePatterns oObjColl.Add(oPattern) Next oSelSet.SelectMultiple(oObjColl) If oSelSet.Count > 0 Then oSelSet.Delete oObjColl.Clear End While ' --- Schnapp --- Dim oOcc As ComponentOccurrence For Each oOcc In oAssDoc.ComponentDefinition.Occurrences oObjColl.Add(oOcc) Next oSelSet.SelectMultiple(oObjColl) If oSelSet.Count > 0 Then oSelSet.Delete oTrans.End Catch ex As Exception Logger.Debug(ex.Message) oTrans.Abort End Try
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
OibelTroibel Mitglied Konstrukteur
  
 Beiträge: 602 Registriert: 18.04.2014 ACAD/Inventor 2018-21
|
erstellt am: 09. Mrz. 2023 16:48 <-- editieren / zitieren --> Unities abgeben:         
Herzlichen Dank Ralf für dein fertiges Script, das sogar mehr abdeckt als ich benötige Dier Zeitersparnis ist genau so, wie ich es mir erhofft habe. Von ca 2 min auf unter 3 Sekunden Vielen herzlichen Dank nochmals Beste Grüsse Raphael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |