Hi @DRoam
Seems like there is no function to create a surfacebody from an oriented box.
I gave it a go to write this function and it seems to work 🙂
Sub Main
Dim app As Inventor.Application = ThisApplication
Dim tg As TransientGeometry = app.TransientGeometry
' Create skewed OrientedBox
Dim boxCorner As Point = tg.CreatePoint(1, 1, 1)
Dim boxDir1 As Vector = tg.CreateVector(1, 0, 1)
Dim boxDir2 As Vector = tg.CreateVector(0, 1, 0)
Dim boxDir3 As Vector = tg.CreateVector(1, 0, -1)
Dim oBox As OrientedBox = tg.CreateOrientedBox(boxCorner, boxDir1, boxDir2, boxDir3)
' Create a surface body of the oriented box.
Dim oBoxSurf As SurfaceBody
Try
oBoxSurf = SurfBodFromOrientedBox(oBox)
Catch ex As Exception
MessageBox.Show("Could not create a surface body from the oriented box. Error message: " & vbCr & vbCr & ex.Message)
Exit Sub
End Try
' Add oriented box to client graphics to display in part.
Dim partDoc As PartDocument = ThisDoc.Document
Dim cGraphics As ClientGraphics = Nothing
Try
cGraphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Add("TestColl")
Catch
cGraphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Item("TestColl")
End Try
Dim gNode As GraphicsNode = Nothing
Try
gNode = cGraphics.AddNode(1)
Catch
gNode = cGraphics.Item(1)
End Try
gNode.AddSurfaceGraphics(oBoxSurf)
End Sub
Function SurfBodFromOrientedBox(ByVal oBox As OrientedBox) As SurfaceBody
Dim oTG As TransientGeometry = ThisApplication.TransientGeometry
Dim oCorner As Point
Dim oV1, oV2, oV3 As Vector
oBox.GetOrientedBoxData(oCorner, oV1, oV2, oV3)
Dim tBRep As TransientBRep = ThisApplication.TransientBRep
Dim bodyDef As SurfaceBodyDefinition = tBRep.CreateSurfaceBodyDefinition
Dim lumpDef As LumpDefinition = bodyDef.LumpDefinitions.Add
Dim shellDef As FaceShellDefinition = lumpDef.FaceShellDefinitions.Add
Dim wireDef As WireDefinition = shellDef.WireDefinitions.Add
Dim opt As Point = oCorner.Copy
Dim v1 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt.TranslateBy(oV1)
Dim v2 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt.TranslateBy(oV2)
Dim v3 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt = oCorner.Copy
opt.TranslateBy(oV2)
Dim v4 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt = v1.Position.Copy
opt.TranslateBy(oV3)
Dim v5 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt = v2.Position.Copy
opt.TranslateBy(oV3)
Dim v6 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt = v3.Position.Copy
opt.TranslateBy(oV3)
Dim v7 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
opt = v4.Position
opt.TranslateBy(oV3)
Dim v8 As VertexDefinition = bodyDef.VertexDefinitions.Add(opt)
v1v2 = bodyDef.EdgeDefinitions.Add(v1, v2, oTG.CreateLineSegment(v1.Position, v2.Position))
v2v3 = bodyDef.EdgeDefinitions.Add(v2, v3, oTG.CreateLineSegment(v2.Position, v3.Position))
v3v4 = bodyDef.EdgeDefinitions.Add(v3, v4, oTG.CreateLineSegment(v3.Position, v4.Position))
v4v1 = bodyDef.EdgeDefinitions.Add(v4, v1, oTG.CreateLineSegment(v4.Position, v1.Position))
v1v5 = bodyDef.EdgeDefinitions.Add(v1, v5, oTG.CreateLineSegment(v1.Position, v5.Position))
v5v6 = bodyDef.EdgeDefinitions.Add(v5, v6, oTG.CreateLineSegment(v5.Position, v6.Position))
v6v7= bodyDef.EdgeDefinitions.Add(v6, v7, oTG.CreateLineSegment(v6.Position, v7.Position))
v7v8 = bodyDef.EdgeDefinitions.Add(v7, v8, oTG.CreateLineSegment(v7.Position, v8.Position))
v8v5 = bodyDef.EdgeDefinitions.Add(v8, v5, oTG.CreateLineSegment(v8.Position, v5.Position))
v2v6 = bodyDef.EdgeDefinitions.Add(v2, v6, oTG.CreateLineSegment(v2.Position, v6.Position))
v3v7 = bodyDef.EdgeDefinitions.Add(v3, v7, oTG.CreateLineSegment(v3.Position, v7.Position))
v4v8 = bodyDef.EdgeDefinitions.Add(v4, v8, oTG.CreateLineSegment(v4.Position, v8.Position))
Dim negV3 As Vector = oV3.Copy
negV3.ScaleBy(-1)
Dim fs1 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v1.Position, negV3), False)
Dim fs1Loop As EdgeLoopDefinition = fs1.EdgeLoopDefinitions.Add
fs1Loop.EdgeUseDefinitions.Add(v1v2, False)
fs1Loop.EdgeUseDefinitions.Add(v2v3, False)
fs1Loop.EdgeUseDefinitions.Add(v3v4, False)
fs1Loop.EdgeUseDefinitions.Add(v4v1, False)
Dim fs2 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v5.Position, oV3), False)
Dim fs2Loop As EdgeLoopDefinition = fs2.EdgeLoopDefinitions.Add
fs2Loop.EdgeUseDefinitions.Add(v5v6, False)
fs2Loop.EdgeUseDefinitions.Add(v6v7, False)
fs2Loop.EdgeUseDefinitions.Add(v7v8, False)
fs2Loop.EdgeUseDefinitions.Add(v8v5, False)
Dim negV2 As Vector = oV2.Copy
negV2.ScaleBy(-1)
Dim fs3 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v1.Position, negV2), False)
Dim fs3Loop As EdgeLoopDefinition = fs3.EdgeLoopDefinitions.Add
fs3Loop.EdgeUseDefinitions.Add(v1v2, False)
fs3Loop.EdgeUseDefinitions.Add(v2v6, False)
fs3Loop.EdgeUseDefinitions.Add(v5v6, True)
fs3Loop.EdgeUseDefinitions.Add(v1v5, True)
Dim fs4 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v2.Position, oV1), False)
Dim fs4Loop As EdgeLoopDefinition = fs4.EdgeLoopDefinitions.Add
fs4Loop.EdgeUseDefinitions.Add(v2v3, False)
fs4Loop.EdgeUseDefinitions.Add(v3v7, False)
fs4Loop.EdgeUseDefinitions.Add(v6v7, True)
fs4Loop.EdgeUseDefinitions.Add(v2v6, True)
Dim fs5 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v3.Position, oV2), False)
Dim fs5Loop As EdgeLoopDefinition = fs5.EdgeLoopDefinitions.Add
fs5Loop.EdgeUseDefinitions.Add(v3v7, False)
fs5Loop.EdgeUseDefinitions.Add(v7v8, False)
fs5Loop.EdgeUseDefinitions.Add(v4v8, True)
fs5Loop.EdgeUseDefinitions.Add(v3v4, True)
Dim negV1 As Vector = oV1.Copy
negV1.ScaleBy(-1)
Dim fs6 = shellDef.FaceDefinitions.Add(oTG.CreatePlane(v1.Position, negV1), False)
Dim fs6Loop As EdgeLoopDefinition = fs6.EdgeLoopDefinitions.Add
fs6Loop.EdgeUseDefinitions.Add(v1v5, False)
fs6Loop.EdgeUseDefinitions.Add(v8v5, True)
fs6Loop.EdgeUseDefinitions.Add(v4v8, True)
fs6Loop.EdgeUseDefinitions.Add(v4v1, False)
Dim errors As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap
Dim body As SurfaceBody = bodyDef.CreateTransientSurfaceBody(errors)
Return body
End Function
