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:
Wenn der VBA-Code in den VBA-Editor eingelesen und ausgeführt wird, entsteht ein neues Bauteil, das das Kollisionsvolumen enthält:
Das Ergebnis ist nicht assoziativ zu Baugruppenänderungen!
Anwendung der BAS-Datei:
- In Inventor ALT+F11 drücken (VBA-Editor aufrufen)
- 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
Nettes tool... läuft aber nur auf 2012 und den Style "red" in der letzten Zeile hat auch nicht jeder.
AntwortenLöschenDie setzt man besser aus... aber dann funzt es! :-)
Was muss man den tun, damit es auf 2011 läuft? Muss doch möglich sein, oder?
AntwortenLöschen