Hallo an die Ilogic – Profis,
gibt es eine Regel, die in einer Baugruppe alle Bauteile mit dem Gewicht 0 kg ausfiltert, und diese auf Referenz setzt. Ändert sich das Gewicht mehrere Teile oder des Teils von 0 auf X soll die Referenz auf Vorgabe zurückgesetzt werden.
Danke für die Hilfe!!!
Gelöst! Gehe zur Lösung
Gelöst von Holger_Fen. Gehe zur Lösung
Hallo @Holger_Fen,
du musst innerhalb einer Baugruppe alle Komponenten durchlaufen und da bei jedem Bauteil (oder auch Baugruppe??) das Gewicht abfragen.
Wenn Gewicht gleich null -> Stücklistenstruktur auf Referenz
oOccurrence.Definition.BOMStructure = BOMStructureEnum.kReferenceBOMStructure
sonst -> Stücklistenstruktur auf Normal
oOccurrence.Definition.BOMStructure = BOMStructureEnum.kNormalBOMStructure
Sowas lässt sich vergleichsweise leicht realisieren.
Was vermutlich nicht funktioniert ist das automatische triggern der Regel bei einer Änderung der Massen. Das erste was mir einfällt ist ein automatischer Durchlauf beim Speichern.. ABER
Je nachdem wie groß die Baugruppe ist.. 50 Teile, 500 Teile, 5000 Teile??.. wird der Durchlauf entsprechend dauern.. Außerdem ist der Durchlauf wahrscheinlich nicht immer gewünscht.
Dann lieber die Regel in der Baugruppe manuell triggern.. oder als Makro ausführen und als Button ins Menü legen falls es öfter gebraucht wird.
Grüße,
Hallo S_May,
wird in einem Multibody - Bauteil ein Element unterdrückt , so bleibt in der Baugruppe die Ableitung ohne Element , also ein Bauteil ohne Gewicht.
Hallo fullevent,
ich habe den die Regel wie folgt umgesetzt , jedoch wird die Referenz nicht umgeschaltet wenn das Gewicht größer ist als Null .
oCompDef = ThisDoc.Document.ComponentDefinition
For Each oOcc As ComponentOccurrence In oCompDef.Occurrences
If oOcc.MassProperties.Mass >= 0.1 g Then
oOcc.BOMStructure = BOMStructureEnum.kDefaultBOMStructure
Else If oOcc.MassProperties.Mass = 0 g Then
oOcc.BOMStructure = BOMStructureEnum.kReferenceBOMStructure
End If
Next
Hallo @Holger_Fen,
ich habe es gestern zwar in VBA getestet, aber da hat es problemlos funktioniert 🤔
Was mir auffällt ist, dass du die Einheit mit hast. Ich versuche immer mit Inventor internen Einheiten zu arbeiten.
Ich wusste auch gar nicht, dass iLogic die Angabe so akzeptiert und umrechnet?!
Hast du geprüft ob sich das Gewicht des Referenz-Bauteils in der Baugruppe auch wirklich geändert hat?
Das ist im Prinzip was abgefragt wird.
Grüße,
Hallo fullevent,
solange das Bauteil auf Referenz steht wird das Gewicht nicht aktualisiert , siehe Anhang.
Meine Regel schaltet das Bauteil nicht auf Vorgabe zurück ! Wie sieht dein Code aus ?
Vorab aber schon ein Danke für die Hilfe !
Hallo @Holger_Fen,
ich habe das Umschalten der Stücklistenstruktur in Abhängigkeit vom Gewicht getestet. Nicht das Überschreiben oder Aktualisieren des Gewichtes.
Wenn ich dich richtig Verstanden habe, dann ist dein Problem nicht das Umschalten der Stücklistenstruktur sondern das Bauteilgewicht in der Baugruppe. Richtig?
Schalte im ersten Step einfach jede Komponente auf Vorgabe. Anschließend kannst du das Gewicht abfragen und ggf. auf Referenz setzen. Hier mal als VBA..
Private Sub Forum_test()
Dim oCompDef As ComponentDefinition
Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition
Dim oOcc As ComponentOccurrence
For Each oOcc In oCompDef.Occurrences
oOcc.BOMStructure = BOMStructureEnum.kDefaultBOMStructure
If oOcc.MassProperties.Mass = 0 Then oOcc.BOMStructure = BOMStructureEnum.kReferenceBOMStructure
Next
End Sub
Das sollte zum gewünschten Ergebnis führen.
Hallo Aleksander,
danke für den Code , ich habe eine ähnliche Frage im Forum gefunden, und diesen entsprechend abgeändert.
Die Ilogic-Regel wird manuell aufgerufen . Beim Speichern werden die Gewichtswerte aktualisiert und in die Properties der Bauteile geschrieben . Danach werden die Elemente mit Gewicht "0" unsichtbar geschaltet und bekommen die Eigenschaft "Referenz ". Somit kann ich Stutzen ein bzw. ausblenden und die Stückliste passt sich an.
Danke für die Hilfe 👍
Anbei der Code :
Thisdoc.Save Dim assemblyDef As AssemblyComponentDefinition = ThisDoc.Document.ComponentDefinition Dim occ As Inventor.ComponentOccurrence For Each occ In assemblyDef.Occurrences.AllLeafOccurrences Dim refDoc As PartDocument = occ.Definition.Document Dim customPropSet As PropertySet customPropSet = refDoc.PropertySets.Item("Inventor User Defined Properties") Dim weightProp As Inventor.Property weightProp = Nothing Try weightProp = customPropSet.Item("Gewicht") Catch ex As Exception End Try If Not weightProp Is Nothing Then Dim weightVal As Double weightVal = weightProp.Value If weightVal = "0" Then occ.Visible = False occ.BOMStructure = BOMStructureEnum.kReferenceBOMStructure Else occ.Visible = True occ.BOMStructure = BOMStructureEnum.kDefaultBOMStructure End If End If Next InventorVb.DocumentUpdate(True)
Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.