MACRO LIBRARY

Get body bounding box using IFace2::GetTessTriangles

Free public access. No account or subscription required.

Files

Get body bounding box using IFace2::GetTessTriangles

Code

Module:

'Demonstrates how to get the minimum bounding box (within the X-Y-Z coord system) _
    of a body using tessellation triangles.
    
'Preconditions: Body is selected.
'Results: See immediate window.
    
'Written by Keith Rice and Rajat Jain
'CADSharp LLC
'www.cadsharp.com
    
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swBody As SldWorks.Body2
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swBody = swSelMgr.GetSelectedObject6(1, -1)
    
    Dim myMinBB As clsMinBoundingBox
    Set myMinBB = New clsMinBoundingBox
    myMinBB.GetMinimumBoundingBox swBody
    
    Debug.Print "X max: " & Round(myMinBB.X_max, 8)
    Debug.Print "X min: " & Round(myMinBB.X_min, 8)
    Debug.Print "X distance: " & Round(Abs(myMinBB.X_max - myMinBB.X_min), 8)
    Debug.Print "Y max: " & Round(myMinBB.Y_max, 8)
    Debug.Print "Y min: " & Round(myMinBB.Y_min, 8)
    Debug.Print "Y distance: " & Round(Abs(myMinBB.Y_max - myMinBB.Y_min), 8)
    Debug.Print "Z max: " & Round(myMinBB.Z_max, 8)
    Debug.Print "Z min: " & Round(myMinBB.Z_min, 8)
    Debug.Print "Z distance: " & Round(Abs(myMinBB.Z_max - myMinBB.Z_min), 8)
    
    Dim dblPts(5) As Variant
    dblPts(0) = myMinBB.X_max
    dblPts(1) = myMinBB.Y_max
    dblPts(2) = myMinBB.Z_max
    dblPts(3) = myMinBB.X_min
    dblPts(4) = myMinBB.Y_min
    dblPts(5) = myMinBB.Z_min
    
    SketchBodyBox swModel, dblPts
End Sub
    
'Points array must be in this order: X_max, Y_max, Z_max, X_min, Y_min, Z_min
Private Sub SketchBodyBox(swModel As SldWorks.ModelDoc2, vPts As Variant)
    swModel.SketchManager.Insert3DSketch Empty
    
    swModel.SetDisplayWhenAdded False
    swModel.SetAddToDB True
    
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(2), vPts(0), vPts(1), vPts(5)
    swModel.SketchManager.CreateLine vPts(0), vPts(4), vPts(2), vPts(0), vPts(4), vPts(5)
    swModel.SketchManager.CreateLine vPts(3), vPts(1), vPts(2), vPts(3), vPts(1), vPts(5)
    swModel.SketchManager.CreateLine vPts(3), vPts(4), vPts(2), vPts(3), vPts(4), vPts(5)
    
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(2), vPts(3), vPts(1), vPts(2)
    swModel.SketchManager.CreateLine vPts(0), vPts(4), vPts(2), vPts(3), vPts(4), vPts(2)
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(5), vPts(3), vPts(1), vPts(5)
    swModel.SketchManager.CreateLine vPts(0), vPts(4), vPts(5), vPts(3), vPts(4), vPts(5)
    
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(2), vPts(3), vPts(1), vPts(2)
    swModel.SketchManager.CreateLine vPts(0), vPts(4), vPts(2), vPts(3), vPts(4), vPts(2)
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(5), vPts(3), vPts(1), vPts(5)
    swModel.SketchManager.CreateLine vPts(0), vPts(4), vPts(5), vPts(3), vPts(4), vPts(5)
    
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(2), vPts(0), vPts(4), vPts(2)
    swModel.SketchManager.CreateLine vPts(0), vPts(1), vPts(5), vPts(0), vPts(4), vPts(5)
    swModel.SketchManager.CreateLine vPts(3), vPts(1), vPts(2), vPts(3), vPts(4), vPts(2)
    swModel.SketchManager.CreateLine vPts(3), vPts(1), vPts(5), vPts(3), vPts(4), vPts(5)
    
    swModel.SetDisplayWhenAdded True
    swModel.SetAddToDB False
    
    swModel.SketchManager.Insert3DSketch Empty
    
    swModel.EditRebuild3
End Sub