Im vorherigen Post iLogic: Struktureller Aufbau konnte bereits Bekanntschaft mit zwei unterschiedlichen Dokumententypen gemacht werden: kAssemblyDocumentObject und kDrawingDocumentObject. Doch woher kommen diese Bezeichnungen und wie viele gibt es von ihnen? Dokumentiert sind diese Objekte auf der Autodesk Webseite zur Inventor API.

Documenttypes

Zur Auswahl und Abfrage stehen folgende DocumentTypes. Relevant für die tägliche Arbeit als Konstrukteur sind allerdings nur die ersten drei, nämlich Bauteil, Baugruppe und technische Zeichnung.

Name Value Beschreibung
kPartDocumentObject 12290 Part Document
kAssemblyDocumentObject 12291 Assembly Document
kDrawingDocumentObject 12292 Drawing Document
kDesignElementDocumentObject 12294 Design Element Document
kForeignModelDocumentObject 12295 Foreign Model Document
kNestingDocument 12298 Nesting Document
kNoDocument 12297 No Document
kPresentationDocumentObject 12293 Presentation Document
kSATFileDocumentObject 12296 SAT File Document
kUnknownDocumentObject 12289 Unknown Document

Dem geschulten Auge stellen sich sofort zwei Fragen:

  • Wie unterscheide ich ein Standard-Bauteil von einem Blechbauteil?
  • Wie unterscheide ich eine Standard-Baugruppe von einer Schweißbaugruppe?

Um diese Fragen zu beantworten, stellt die Inventor API ein Property namens DocumentSubType zur Verfügung.

DocumentSubTypes

Sämtliche zur Verfügung stehenden DocumentSubTypes sind auf der Autodesk Webseite gelistet. DocumentSubTypes werden mit Hilfe von GUIDs angegeben. Das steht für Global Unique Identitfier. Diese GUID ist eine Zeichenfolge vom Typ String, die stellvertretend für einen Dokumententyp steht.

Parts

Common Name GUID
Normal Part “4D29B490-49B2-11D0-93C3-7E0706000000”
SheetMetal Part “9C464203-9BAE-11D3-8BAD-0060B0CE6BB4”
Gereric Proxy “92055419-B3FA-11D3-A479-00C04F6B9531”
Compatibility Proxy “9C464204-9BAE-11D3-8BAD-0060B0CE6BB4”
Catalog Proxy “9C88D3AF-C3EB-11D3-B79E-0060B0F159EF”
Molded Part “4D8D80D4-F5B0-4460-8CEA-4CD222684469”

Assemblies

Common Name GUID
Normal Assembly “E60F81E1-49B3-11D0-93C3-7E0706000000”
Welded Assembly “28EC8354-9024-440F-A8A2-0E0E55D635B0”

Drawing

Common Name GUID
Drawing Document “BBF9FDF1-52DC-11D0-8C04-0800090BE8EC”

Design Element

Common Name GUID
Design Element “62FBB030-24C7-11D3-B78D-0060B0F159EF”

Presentations

Common Name GUID
Normal Presentation “76283A80-50DD-11D3-A7E3-00C04F79D7BC”
Composite Presentation “A2B4C17D-F0D2-4C0F-9799-DD5F71DFB291”

Design View Document

Common Name GUID
Design View Document “81B95C5D-8E31-4F65-9790-CCF6ECABD141”

Codebeispiele

Im folgenden ein paar Beispiele, die sowohl den DocumentType abfragen, als auch die GUID nutzen.

Abfragen des DocumentTypes

Wer generell ermitteln möchte, ob es sich bei einem Dokument bspw. um ein Bauteil handelt, kann dies wie im vorangegangenen Post iLogic: Struktureller Aufbau beschrieben folgendermaßen erreichen:

Dim oDoc As Document = ThisDoc.Document

If oDoc.DocumentType = kPartDocumentObject Then
    MsgBox("Das geöffnete Dokument ist ein Bauteil.")
Else
    MsgBox("Das geöffnete Dokument ist kein Bauteil.")
End If

Alternativ kann auch explizit der DocumentTypeEnum bei der Abfrage verwendet werden. Das Ergebnis ist das selbe:

Dim oDoc As Document = ThisDoc.Document

If oDoc.DocumentType = DocumentTypeEnum.kPartDocumentObject Then
    MsgBox("Das geöffnete Dokument ist ein Bauteil.")
Else
    MsgBox("Das geöffnete Dokument ist kein Bauteil.")
End If

Faustformel: Möchte man lediglich grob Ermitteln, ob es sich bei einem Dokument bspw. um ein Bauteil, eine Baugruppe oder eine Zeichnung handelt, reicht eine Abfrage des DocumentType.

Abfragen des DocumentSubTypes

Faustformel: Möchte man eine spezifischere Abfrage tätigen, die nicht nur prüft ob es sich bei einem Dokument bspw. um ein Bauteil, sondern explizit um ein Blechtbauteil handelt, muss der DocumentSubType in Verbindung mit der GUID genutzt werden:

Dim oDoc as Document = ThisDoc.Document
Dim oSubType as String = oDoc.DocumentSubType.DocumentSubTypeID

If oSubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" then
    MessageBox ("Das Bauteil ist ein Blechbauteil.")
Else 
    MessageBox ("Das Bauteil ist kein Blechbauteil.")
End if

Weitergedacht

Im vorherigen Post iLogic: Struktureller Aufbau wurden Funktionen und Subroutinen vorgestellt. Wer häufig eine Unterscheidung zwischen Standard-Bauteilen und Blechbauteilen oder zwischen Standard-Baugruppen und Schweißbaugruppen benötigt, kann eine solche Abfrage auch in einer Funktion abbilden und wiederverwenden. Diese kann dann wiederum mit der Abfrage des DocumentType kombiniert werden:

Sub Main()
    Dim oDoc As Document = ThisDoc.Document

    If oDoc.DocumentType = kPartDocumentObject Then
        If IsSheetMetal() Then
            MsgBox("Das Bauteil ist ein Blechbauteil")
        Else
            MsgBox("Das Bauteil ist zwar ein Bauteil, aber kein Blechbauteil.)
        End If
    End If
End Sub


Private Function IsSheetMetal() As Boolean
    If ThisDoc.Document.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
        Return True
    Else 
        Return False
    End if
End Function