Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

23.11.2011

VBA Tool: Kollisionsvolumen als eigenes Bauteil erstellen

Hier ein VBA-Tool, das bei Kollisionen in der Baugruppe ein Bauteil erstellt, das die sich überschneidenden Volumen als Basiskörper enthält.

Hier erst mal das Ergebnis des Kollisionsanalyse:

image

Wenn der VBA-Code in den VBA-Editor eingelesen und ausgeführt wird, entsteht ein neues Bauteil, das das Kollisionsvolumen enthält:

image

Das Ergebnis ist nicht assoziativ zu Baugruppenänderungen!

Anwendung der BAS-Datei:

  1. In Inventor ALT+F11 drücken (VBA-Editor aufrufen)
  2. Menü Datei > Datei importieren > BAS Datei auswählen und mit F5 den Code ausführen

Hier noch der Quelltext:

Public Sub CreateInterferenceResults()
    ' Get the active assembly document.
    Dim oAsmDoc As AssemblyDocument
    Set oAsmDoc = ThisApplication.ActiveDocument
 
    Dim oAsmDef As AssemblyComponentDefinition
    Set oAsmDef = oAsmDoc.ComponentDefinition
  
    ' Create a set containing all of the occurrences.
    Dim oAllOccurrences As ObjectCollection
    Set oAllOccurrences = ThisApplication.TransientObjects.CreateObjectCollection(oAsmDef.Occurrences)
  
    ' Calculate the interference between every part in the assembly.
    Dim oResults As InterferenceResults
    Set oResults = oAsmDef.AnalyzeInterference(oAllOccurrences)
  
    ' Get the result body from each interference.
    Dim oResult As InterferenceResult
    Dim totalBody As SurfaceBody
    For Each oResult In oResults
        If totalBody Is Nothing Then
            ' Save the first body.
            Set totalBody = oResult.InterferenceBody
        Else
            ' Union this body with the existing body.
            Call ThisApplication.TransientBRep.DoBoolean(totalBody, oResult.InterferenceBody, kBooleanTypeUnion)
        End If
    Next
  
    ' Create a new part invisibly to build the result body in.
    Dim resultPart As PartDocument
    Set resultPart = ThisApplication.Documents.Add(kPartDocumentObject, ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject), False)
  
    ' Create a base feature containing the interference result solid.
    Call resultPart.ComponentDefinition.Features.NonParametricBaseFeatures.Add(totalBody)
  
    ' Place the part in the assembly, with no transform.
    Dim trans As Matrix
    Set trans = ThisApplication.TransientGeometry.CreateMatrix
  
    Dim oOcc As ComponentOccurrence
    Set oOcc = oAsmDef.Occurrences.AddByComponentDefinition(resultPart.ComponentDefinition, trans)
    Call oOcc.SetRenderStyle(kOverrideRenderStyle, oAsmDoc.RenderStyles.Item("Red"))
  
    oOcc.Name = "Interference Results"
End Sub

2 Kommentare:

  1. Nettes tool... läuft aber nur auf 2012 und den Style "red" in der letzten Zeile hat auch nicht jeder.
    Die setzt man besser aus... aber dann funzt es! :-)

    AntwortenLöschen
  2. Was muss man den tun, damit es auf 2011 läuft? Muss doch möglich sein, oder?

    AntwortenLöschen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: