Inventor stellt die Angabe über die Masse der Konstruktion über das MassProperties Object bereit. Die Angabe erfolgt in Gramm.
Dieser Wert kann auch auf Zeichnungen als Textbaustein mittels Physical Properties - Model > MASS genutzt werden:
Der Massenwert, den die API liefert ist trügerisch, denn er stellt nur den letzten Wert dar, der erfolgreich berechnet werden konnte. Wurde bspw. eine Unterkomponente nicht sauber aktualisiert, bescheinigt Inventor dies mit einem Blitz-Icon und liefert in der Application keinen sauberen Massenwert, sondern N/A zurück:
Das Thema wird seit Jahren lang und breit im Inventor-Forum diskutiert und sorgt oftmals für fehlende Masseangaben in Schriftköpfen:
- Doesnt always update Mass on drawing
- Weight/Mass N/A
- Mass property N/A for iAssembly
- Losing Mass property constantly
Autodesk hat dazu ebenfalls ein Support-Dokument veröffentlicht Properties are shown as N/A in Inventor drawing and Vault batch plot und nennt wortkarg folgenden Grund:
Physical properties are not updated in the model and also shown as N/A.
Der Grund liegt, wie bereits erwähnt, in nicht sauber aktualisierten Unterkomponenten. Weist man einer Unterkomponente ein neues Material zu, ändern sich folgerichtig auch die Massenwerte der Komponente. Inventor erfordert nun ein auschecken und eine neue Speicherung der übergeordneten Komponente. Das kann bei kleinen Konstruktionen ein schneller Akt sein, stößt aber bei größeren Designs mit Freigabeprozessen schnell auf langwierige Hürden.
Code Beispiele
Im folgenden sind zwei Methoden aufgelistet, um den Massenwert zu ermitteln, auf drei Nachkommastellen zu runden und in ein Custom Property mit dem Namen Masse zu schreiben. Dieses Property kann dann als dreckiger Workaround bspw. in den Schriftköpfen von Zeichnungen verwendet werden.
iLogic Snippet iProperties.Mass
iLogic hat ein natives Snippet iProperties.Mass, das den Massenwert ermitteln kann. Es hat jedoch einen kritischen Nachteil, denn es liefert den Rückgabewert immer in der Masseneinheit, die in den Document Settings hinterlegt ist:
Möchte man dieses Snippet benutzen, sollte vorher immer sichergestellt sein, dass ein einheitliches Einheitensystem in jedem Bauteil vorhanden ist, um zu verhindern dass Werte mal in Gramm und mal in Kilogramm rausgeschrieben werden. Wie das geht wurde bereits im Post iLogic: Units of Measurement beschrieben. Anschließend kann das Snippet folgendermaßen benutzt werden:
Dim dMass As Double = iProperties.Mass
iProperties.Value("Custom", "Masse") = Round(dMass, 3)
Alternative: Inventor API
Eine alternative Methode besteht darin, dass man den letzten ermittelbaren Wert der Masse über die API ausliest:
Dim oDoc As Document = ThisDoc.Document
Dim UOM As UnitsOfMeasure = oDoc.UnitsOfMeasure
Dim dMass As Double = oDoc.ComponentDefinition.MassProperties.Mass
' Konvertiere Masse in Kilogramm
dMass = UOM.ConvertUnits(dMass, UnitsTypeEnum.kDatabaseMassUnits, UnitsTypeEnum.kKilogramMassUnits)
' Runde Massenwert auf 3 Nachkommastellen
dMass = Round(dMass, 3)
iProperties.Value("Custom", "Masse") = dMass
Logger.Info("Masse: {0} [kg]", dMass)
Der Code liefert verlässlich unabhängig von der Masseneinheit in den Document Settings eine Massenwert in der Einheit kg, der auf drei Nachkommastellen gerundet ist.
Achtung: Sollte die iLogic automatisch mit einem Trigger ausgelöst werden, darf sie nicht einer Zeichnung zugeordnet sein, denn diese haben keinen Massenwert. Alternativ kann man den Code umschreiben und explizit den Dokumententyp abfragen, wie im Post iLogic: Dokumententypen beschrieben.