Zum Hauptinhalt springen
Featured image for iLogic: Referenzierte Dokumente in Baugruppen

iLogic: Referenzierte Dokumente in Baugruppen

·667 Wörter·4 min·
Inhaltsverzeichnis
Artikelserie: Inventor iLogic
Teil 23 - iLogic: Referenzierte Dokumente in Baugruppen

Die Inventor API erlaubt es mit einfachen Mitteln über verbaute Komponenten in Baugruppen zu iterieren. Dies kann nützlich sein, wenn eine Konstruktion finalisiert wird und man bspw. Prüfen möchte, ob alle verbauten Komponenten sauber gepflegte Properties, Stücklistenoptionen, etc. gesetzt haben.

Autodesk hat eine ausführliche Hilfeseite, die sich dem Thema widmet und das programmspezifische Wording erläutert: File and Document References

Grundsätzlich wird unterschieden zwischen File Obejects und Document Objects. Ersteres behandelt die referenzierten Komponenten auf Datei- und Arbeitsspeicherebene, zweiteres auf Dokumentenebene. In diesem Post werden die Document Objects genutzt, genauer gesagt die Properties:

Tabelle mit API Endpunkten für das Document Object

Zusätzlich gibt es noch das Konzept der Occurrences, das Inventor unter der Component Definition eines Baugruppendokuments bereit stellt. Die Properties AllReferencedDocuments und ReferencedDocuments liefern immer eine eindeutige Liste mit referenzierten Dokumenten, können aber keine Auskunft darüber geben, wie oft eine Komponente verbaut ist. Dies kann für die erste Baugruppenebene über die Occurrences erfolgen.

Beispielbaugruppe

Für die folgenden drei Code-Beispiele wird die Beispielhafte Baugruppe Nested Assembly.iam mit insgesamt 3 verschachtelten Baugruppenebenen und 7 einzigarten Komponenten verwendet.

Ansicht Model Browser einer Beispielbaugruppe in Inventor

Der strukturelle Baugruppenaufbau als Tree Diagram:

Nested Assembly.iam
├── Welded Assembly.iam
│   ├── SheetMetalPart.ipt
│   ├── RevolvedPart.ipt
│   └── Alphabet.iam
│       ├── A.ipt
│       └── B.ipt
├── LST_Bender.ipt
├── LST_Bender.ipt
├── SheetMetalPart.ipt
└── RevolvedPart.ipt

Code-Beispiele

Die folgenden drei Beispiele zeigen sowohl die Methodik mittels AllReferencedDocuments, ReferencedDocuments und Occurrences. Es gilt zu beachten, wie alle drei Methoden eine unterschiedliche Anzahl an referenzierten Dokumenten im Property Count zurückliefern.

Zum besseren Verständnis werden für alle drei Methoden identischer Code demonstriert, der für jedes referenzierte Dokument den Dateinamen im iLogic Logger ausgibt.

AllReferencedDocuments

Diese Methode nutzt das DocumentsEnumerator Object, um über alle referenzierten Dokumente zu iterieren:

API für den Endpoint AllReferencedDocuments
Dim oDoc As Document = ThisDoc.Document
Dim oAllRefDocs As DocumentsEnumerator = oDoc.AllReferencedDocuments

For Each oRefDoc As Object In oAllRefDocs
    Dim sFileName As String = System.IO.Path.GetFileName(oRefDoc.FullFileName)
    Logger.Info("Filename: {0}", sFileName)
Next

Es werden alle 7 Dokumente, über alle Baugruppenebenen, in einer Liste mit eindeutigen Werten zurückgeliefert:

Logger Output für AllReferencedDocuments Property

Die Methode eignet sich hervorragend, wenn man alle verbauten Komponenten, über alle Baugruppenebenen, auf bestimmte Bedingungen prüfen möchte.

ReferencedDocuments

Diese Methode nutzt ebenfalls das DocumentsEnumerator Object, um über alle referenzierten Dokumente der ersten Baugruppenebene zu iterieren:

API für den Endpoint ReferencedDocuments
Dim oDoc As Document = ThisDoc.Document
Dim oRefDocs As DocumentsEnumerator = oDoc.ReferencedDocuments

For Each oRefDoc As Object In oRefDocs
    Dim sFileName As String = System.IO.Path.GetFileName(oRefDoc.FullFileName)
    Logger.Info("Filename: {0}", sFileName)
Next

Es werden lediglich 4 Dokumente in einer Liste mit eindeutigen Werten zurückgeliefert, die identisch mit den verbauten Komponenten auf der ersten Baugruppenebene ist. Untergeordnete Bauteile und weitere verschachtelte Baugruppen, abseits der ersten Baugruppenebene, werden nicht berücksichtigt:

Logger Output für ReferencedDocuments Property

Occurrences

Occurrences sind, wie bereits erwähnt, ein Sonderfall, da sie keine eindeutige Liste zurückliefern, sondern auch Auskunft über die Anzahl der verbauten Komponenten auf der ersten Baugruppenebene geben können.

API für den Endpoint Occurrences
Dim oDoc As Document = ThisDoc.Document
Dim oOccurences As ComponentOccurrences = oDoc.ComponentDefinition.Occurrences

For Each oOccurrence As ComponentOccurrence In oOccurences
    Dim sFileName As String = System.IO.Path.GetFileName(oOccurrence.Definition.Document.FullFileName)
    Logger.Info("Filename: {0}", sFileName)
Next

Es werden 5 Dokumente zurückgeliefert, das das Bauteil LST_Bender.ipt auf der ersten Baugruppenebene zweimal platziert wurde:

Logger Output für Occurrences Property

Anwendungsfall

Möchte man bspw. herausfinden, ob eine der verbauten Komponenten ein bestimmtes Property nicht gepflegt hat, kann man dafür das AllReferencedDocuments Property nutzen. Zum besseren Verständnis von Inventors Property Sets sei an dieser Stelle der Post iLogic: Propertysets empfohlen.

Als Beispiel werden alle Bauteile gelistet, die keinen Eintrag im Project Property Part Number besitzen. Exemplarisch haben alle Dokumente einen gepflegten Wert im Property Part Number bis auf das Bauteil LST_Bender.ipt:

Fehlender Eintrag im Property Part Number

Für die Abfrage werden zwei kombinierte Methoden aus dem Namespace System.String verwendet. IsNullOrWhiteSpace() prüft ob ein Wert vorhanden ist und ob dieser ein Leerzeichen ist und IsNullOrEmpty() prüft ob ein Wert vorhanden ist und dieser gar kein hinterlegtes Zeichen besitzt:

Dim oDoc As Document = ThisDoc.Document
Dim oAllRefDocs As DocumentsEnumerator = oDoc.AllReferencedDocuments

For Each oRefDoc As Object In oAllRefDocs
    Dim sFileName As String = System.IO.Path.GetFileName(oRefDoc.FullFileName)
    Dim sPartNumber As String = oRefDoc.PropertySets.Item("Design Tracking Properties").Item("Part Number").Value

    If (System.String.IsNullOrWhiteSpace(sPartNumber) Or System.String.IsNullOrEmpty(sPartNumber)) Then
        Logger.Info("Filename: {0} hat keinen Eintrag im Property 'Part Number'.", sFileName)
    End If
Next

Resultat:

Logger Output für alle Komponenten ohne gepglegtes Property Part Number
Artikelserie: Inventor iLogic
Teil 23 - iLogic: Referenzierte Dokumente in Baugruppen