Ankündigungen

Ab Dezember werden wir Inhalte aus der Community, die 10 Jahre und älter sind, archivieren. Diese FAQ enthält weitere Informationen.

Ilogic Masse =0 Bauteil auf Referenz

Holger_Fen
Enthusiast
Enthusiast

Ilogic Masse =0 Bauteil auf Referenz

Holger_Fen
Enthusiast
Enthusiast

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!!!

0 „Gefällt mir“-Angaben
Antworten
Akzeptierte Lösungen (1)
1.049Aufrufe
8Antworten
Antworten (8)

S_May
Mentor
Mentor

Hi @Holger_Fen 

 

wie kann denn ein Gewicht 0 sein bei einem Bauteil?

0 „Gefällt mir“-Angaben

fullevent
Advisor
Advisor

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,


Aleksandar Krstic
Produkt- und Projektmanager

Holger_Fen
Enthusiast
Enthusiast

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.  

 

0 „Gefällt mir“-Angaben

Holger_Fen
Enthusiast
Enthusiast

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

0 „Gefällt mir“-Angaben

fullevent
Advisor
Advisor

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,


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben

Holger_Fen
Enthusiast
Enthusiast

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 !

0 „Gefällt mir“-Angaben

fullevent
Advisor
Advisor

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.

 


Aleksandar Krstic
Produkt- und Projektmanager

0 „Gefällt mir“-Angaben

Holger_Fen
Enthusiast
Enthusiast
Akzeptierte Lösung

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)