Hallo CAD'ler,
ich bereite meine Frage mal auf wie in der Schule :
Gegeben:
1. Ein Bauteil oder eine Baugruppe, optional abgeleitet.
2. Ein Makro, das dieses Bauteil gemäß einer externen Positionierungstabelle in einem Assembly nacheinander in mehreren tausend Stellungen positioniert.
3. Ein fremder Codeschnippsel, mit dem verschiedene InterferenceBodies aus der Inventor-Kollisionsprüfung zu einer IPT verschmolzen werden können.
Gesucht:
Ein Hüllkörper, der alle möglichen Positionen des Bauteils enthält. Im Idealfall ein Flächenmodell als IPT.
Was ich nicht will:
1. Eine große Datei (Speicherplatz).
2. Eine Datei, die lange zum Öffnen braucht (Performance).
Mein bisheriger Ansatz:
1. Bauteil positionieren und als Flächenmodell (SurfaceBody) intern speichern.
2. Schleife über alle Positionierungen: Bauteil neu positionieren, in neuer Position in Flächenmodell umwandeln und mit dem schon erzeugten Flächenmodell verschmelzen (Merge).
3. Flächenmodell als neue IPT ins Assembly einfügen
Mein Problem:
Ich scheitere an Schritt 2, weil sich die Flächenmodelle (SurfaceBody.NativeBody) nicht verschmelzen lassen. Es bleibt immer ein Basiskörper in der IPT, den ich nicht wegbekomme.
Frage:
Habe ich den richtigen Ansatz gewählt? Wenn ja, warum lassen sich die SurfaceBodies nicht vereinigen wie im Volumenkollisions-Codeschnippsel?
Unten füge ich noch meinen Code ein, in dem einige "Versuchszeilen" auskommentiert sind (work in progress). Bin für jeden Hinweis dankbar!
Grüße Andreas
Code:
Dim oApp As Application
Dim oDoc As AssemblyDocument
Dim oOcc As ComponentOccurrence, oOccNeu As ComponentOccurrence
Dim oSurfBody1 As SurfaceBody, oSurfBody2 As SurfaceBody
Dim oResultPart As PartDocumentSet oApp = ThisApplication
Set oDoc = oApp.ActiveDocument
Set oOcc = oDoc.ComponentDefinition.Occurrences.Item(1) 'Manuell als Flächenmodell abgeleitete Baugruppe
Set oSurfBody1 = oOcc.SurfaceBodies.Item(1).NativeObject
Dim oResultBody As SurfaceBody
Set oResultBody = oSurfBody1
Dim oTransGeom As TransientGeometry
Dim oMatrix As Matrix
Set oTransGeom = oApp.TransientGeometry
Set oMatrix = oTransGeom.CreateMatrix
Set oResultPart = oApp.Documents.Add(kPartDocumentObject, oApp.FileManager.GetTemplateFile(kPartDocumentObject), False)
Set oOccNeu = oDoc.ComponentDefinition.Occurrences.AddByComponentDefinition(oResultPart.ComponentDefinition, oMatrix)
oOccNeu.name = "Zusammenkopiert"
Dim oWP As WorkPoint
Dim oWPProxy As WorkPointProxy
Dim X As Double, Y As Double, Z As Double
Dim gamma As Double, alpha As Double, beta As Double
Dim i As Integer, j As Integer
[...]
Dim oExcel As excel.Application
Dim oWorksheet As excel.WorkSheet
Set oExcel = GetObject(, "Excel.Application")
Set oWorksheet = oExcel.ActiveSheet
Dim lReihe As Long, lLZ As Long
i = 2
With oWorksheet
lLZ = .Range("A1").End(xlDown).Row
For lReihe = 3 To lLZ Step 1000
'Position des Bauteils auslesen:
[...]
'Bauteil anhand Matrix positionieren:
oBauteil.Transformation = oMatrix
' Dim nonParaDef As NonParametricBaseFeatureDefinition
' Set nonParaDef = def.Features.NonParametricBaseFeatures.CreateDefinition
' Dim bodyColl As ObjectCollection
' Set bodyColl = ThisApplication.TransientObjects.CreateObjectCollection
' Call bodyColl.Add(newBody1)
' nonParaDef.BRepEntities = bodyColl
' nonParaDef.OutputType = kSolidOutputType
' Dim non1 As NonParametricBaseFeature
' Set non1 = def.Features.NonParametricBaseFeatures.AddByDefinition(nonParaDef)
' Dim resultBody1 As SurfaceBody
' Set resultBody1 = non1.SurfaceBodies.Item(1)
Set oResultBody = oApp.TransientBRep.Copy(oSurfBody1)
Call oResultPart.ComponentDefinition.Features.NonParametricBaseFeatures.Add(oResultBody, oMatrix)
Call oApp.TransientBRep.DoBoolean(oResultBody, oSurfBody1, kBooleanTypeUnion)
Next lReihe
End With
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP