Here is my code:
'------------------------start
'Option Explicit
Dim partOccur As Inventor.ComponentOccurrence
Dim tempA As Inventor.ComponentOccurrence
Dim assemblyDoc As Inventor.AssemblyDocument
Dim fileName As String
Dim inventDoc As Inventor.AssemblyDocument
Dim partProxy As Inventor.WorkPointProxy
Dim partProxy2 As Inventor.WorkPointProxy
Dim partParentProxy As Inventor.WorkPointProxy
Dim partParentFatherProxy As Inventor.WorkPointProxy
Dim partParentGrandFatherProxy As Inventor.WorkPointProxy
Dim proxyToUse As Inventor.WorkPointProxy
Sub printPart()
Dim inventDoc As Inventor.AssemblyDocument
Set inventDoc = ThisApplication.ActiveDocument
fileName = inventDoc.DisplayName
For Each partOccur In inventDoc.ComponentDefinition.Occurrences
printPartCoord partOccur, 0, 0, 0 'inventDoc.ComponentDefinition.RangeBox.MinPoint.Z
Next
End Sub
Sub printPartCoord(assemblyObj As Object, xCoord As Double, yCoord As Double, zCoord As Double)
Dim strg As String
'Dim xDelta, yDelta, zCoord2 As Double
Dim partVert1Proxy As Inventor.WorkPointProxy
Dim partVert1 As Inventor.WorkPoint
If TypeName(assemblyObj) = "AssemblyDocument" Then
Set assemblyDoc = assemblyObj
For Each partOccur In assemblyDoc.ComponentDefinition.Occurrences
printPartCoord partOccur, xCoord, _
yCoord, _
zCoord
Next
ElseIf TypeName(assemblyObj) = "ComponentOccurrence" Then
For Each partOccur In assemblyObj.Definition.Occurrences
If partOccur.Definition.SurfaceBodies.Count > 0 Then
Dim deltaX, deltaY, deltaZ, avgX, avgY, avgZ As Double
Dim minRangePoint, maxRangePoint, minRangePoint1, maxRangePoint1 As WorkPoint
Dim partVector As Vector
deltaX = partOccur.RangeBox.MaxPoint.X - _
partOccur.RangeBox.MinPoint.X
avgX = (deltaX / 2)
deltaY = partOccur.RangeBox.MaxPoint.Y - _
partOccur.RangeBox.MinPoint.Y
avgY = (deltaY / 2)
deltaZ = partOccur.RangeBox.MaxPoint.Z - _
partOccur.RangeBox.MinPoint.Z
avgZ = (deltaZ / 2)
If deltaX > deltaY And deltaX > deltaZ Then
Set minRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(0, avgY, avgZ))
Set maxRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(deltaX, avgY, avgZ))
ElseIf deltaY > deltaX And deltaY > deltaZ Then
Set minRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(avgX, 0, avgZ))
Set maxRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(avgX, deltaY, avgZ))
Else
Set minRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(avgX, avgY, 0))
Set maxRangePoint1 = partOccur.Definition.WorkPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(avgX, avgY, deltaZ))
End If
Set partVector = minRangePoint1.Point.VectorTo(maxRangePoint1.Point)
maxRangePoint1.Delete
minRangePoint1.Delete
'Set minRangePoint = partOccur.Definition.WorkPoints.AddFixed(partOccur.RangeBox.MinPoint)
'Set maxRangePoint = partOccur.Definition.WorkPoints.AddFixed(partOccur.RangeBox.MaxPoint)
Set minRangePoint = partOccur.Definition.WorkPoints(1)
'Set maxRangePoint = partOccur.Definition.WorkPoints(2)
Dim oMinWorkPointProxy As Inventor.WorkPointProxy
Dim oMaxWorkPointProxy As Inventor.WorkPointProxy
Dim oMinWorkPointProxy1 As Inventor.WorkPointProxy
Dim oMaxWorkPointProxy1 As Inventor.WorkPointProxy
Dim oMinWorkPointProxy2 As Inventor.WorkPointProxy
Dim oMaxWorkPointProxy2 As Inventor.WorkPointProxy
Dim oMinWorkPointUseProxy As Inventor.WorkPointProxy
Dim oMaxWorkPointUseProxy As Inventor.WorkPointProxy
Dim oMinWorkPointProxy3 As Inventor.WorkPointProxy
Dim oMaxWorkPointProxy3 As Inventor.WorkPointProxy
Dim oMinWorkPointProxy4 As Inventor.WorkPointProxy
Dim oMaxWorkPointProxy4 As Inventor.WorkPointProxy
Set tempA = assemblyObj
Call partOccur.CreateGeometryProxy(minRangePoint, oMinWorkPointProxy)
'Call partOccur.CreateGeometryProxy(maxRangePoint, oMaxWorkPointProxy)
Set oMinWorkPointUseProxy = oMinWorkPointProxy
'Set oMaxWorkPointUseProxy = oMaxWorkPointProxy
Call assemblyObj.CreateGeometryProxy(oMinWorkPointProxy, oMinWorkPointProxy1)
'Call assemblyObj.CreateGeometryProxy(oMaxWorkPointProxy, oMaxWorkPointProxy1)
Set oMinWorkPointUseProxy = oMinWorkPointProxy1
'Set oMaxWorkPointUseProxy = oMaxWorkPointProxy1
If Not (tempA.Parent.ActiveOccurrence Is Nothing) Then
Call tempA.Parent.ActiveOccurrence.CreateGeometryProxy(oMinWorkPointProxy1, oMinWorkPointProxy2)
'Call tempA.Parent.ActiveOccurrence.CreateGeometryProxy(oMaxWorkPointProxy1, oMaxWorkPointProxy2)
Set oMinWorkPointUseProxy = oMinWorkPointProxy2
'Set oMaxWorkPointUseProxy = oMaxWorkPointProxy2
If Not (tempA.Parent.Parent.ActiveOccurrence Is Nothing) Then
Call tempA.Parent.Parent.ActiveOccurrence.CreateGeometryProxy(oMinWorkPointProxy2, oMinWorkPointProxy3)
'Call tempA.Parent.Parent.ActiveOccurrence.CreateGeometryProxy(oMaxWorkPointProxy2, oMaxWorkPointProxy3)
Set oMinWorkPointUseProxy = oMinWorkPointProxy3
'Set oMaxWorkPointUseProxy = oMaxWorkPointProxy3
If Not (tempA.Parent.Parent.Parent.ActiveOccurrence Is Nothing) Then
Call tempA.Parent.Parent.Parent.ActiveOccurrence.CreateGeometryProxy(oMinWorkPointProxy3, oMinWorkPointProxy4)
'Call tempA.Parent.Parent.Parent.ActiveOccurrence.CreateGeometryProxy(oMaxWorkPointProxy3, oMaxWorkPointProxy4)
Set oMinWorkPointUseProxy = oMinWorkPointProxy4
'Set oMaxWorkPointUseProxy = oMaxWorkPointProxy4
End If
End If
End If
Dim xMin As Double
Dim yMin As Double
Dim zMin As Double
Dim xMax As Double
Dim yMax As Double
Dim zMax As Double
xMin = oMinWorkPointUseProxy.Point.X + xCoord
yMin = oMinWorkPointUseProxy.Point.Y + yCoord
zMin = oMinWorkPointUseProxy.Point.Z + zCoord
xMax = oMinWorkPointUseProxy.Point.X + partVector.X + xCoord
yMax = oMinWorkPointUseProxy.Point.Y + partVector.Y + yCoord
zMax = oMinWorkPointUseProxy.Point.Z + partVector.Z + zCoord
strg = partOccur.Name & ";" & xMin & ";" & yMin & ";" & zMin & ";" & partOccur.Name & ";" & xMax & ";" & yMax & ";" & zMax
Open "C:\Temp\" & fileName & ".txt" For Append As #1
Print #1, strg
Close #1
Else
printPartCoord partOccur, xCoord, _
yCoord, _
zCoord
End If
Next
End If
End Sub
'------------------------end
What it is supposed to do it print off (2) points for each part, the beginging of a member and the end of the member.
What would make this REALLY easy is if there is code out there to 'destory' and assembly and 'float' all the parts to the surface (i.e. one level). Heck, I wouldn't even mind if it created a 10 MG file and took 2 days for run time