<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to get a OrientedBoundingBox3D from more faces? in Fusion API and Scripts Forum</title>
    <link>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13607030#M79</link>
    <description>&lt;P&gt;Thank you very much. This is very helpfull.&lt;BR /&gt;Best regards&lt;BR /&gt;Maurizio&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 30 Apr 2025 07:08:24 GMT</pubDate>
    <dc:creator>maurizio_manzi</dc:creator>
    <dc:date>2025-04-30T07:08:24Z</dc:date>
    <item>
      <title>How to get a OrientedBoundingBox3D from more faces?</title>
      <link>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13605432#M77</link>
      <description>&lt;P&gt;Hello,&lt;BR /&gt;with this code I get the&amp;nbsp;&lt;SPAN&gt;OrientedBoundingBox3D of the first selected face (item 0).&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;But how can I get the&amp;nbsp;OrientedBoundingBox3D of ALL the selected faces?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Best regards&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Maurizio&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;brep_face &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; adsk.fusion.BRepFace.cast(ui.activeSelections.item(&lt;/SPAN&gt;&lt;SPAN&gt;0&lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;).entity)&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;# Vector acquisition from eye direction. Just for test&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; camera: core.Camera = app.activeViewport.camera&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecLength: core.Vector3D = camera.eye.vectorTo(&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; camera.target&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecLength.normalize()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecWidth: core.Vector3D = vecLength.crossProduct(&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; camera.upVector&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecWidth.normalize()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;measMgr: core.MeasureManager &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; app.measureManager&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; orientedBBox: core.OrientedBoundingBox3D &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; measMgr.getOrientedBoundingBox(&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; brep_face,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecLength,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; vecWidth,&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Tue, 29 Apr 2025 11:08:04 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13605432#M77</guid>
      <dc:creator>maurizio_manzi</dc:creator>
      <dc:date>2025-04-29T11:08:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to get a OrientedBoundingBox3D from more faces?</title>
      <link>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13605793#M78</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://forums.autodesk.com/t5/user/viewprofilepage/user-id/4693021"&gt;@maurizio_manzi&lt;/a&gt;&amp;nbsp;-san.&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;I created a temporary UnionBody.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;# Fusion360API Python script

import traceback
import adsk.core as core
import adsk.fusion as fusion

def run(context):
    ui: core.UserInterface = None
    try:
        app: core.Application = core.Application.get()
        ui = app.userInterface
        des: fusion.Design = app.activeProduct
        root: fusion.Component = des.rootComponent

        body: fusion.BRepBody = root.bRepBodies[0]

        # target faces
        faces = list(body.faces)[0:3]

        # Vector acquisition from eye direction.
        camera: core.Camera = app.activeViewport.camera

        vecLength: core.Vector3D = camera.eye.vectorTo(
            camera.target
        )
        vecLength.normalize()

        vecWidth: core.Vector3D = vecLength.crossProduct(
            camera.upVector
        )

        # OrientedBoundingBox
        measMgr: core.MeasureManager = app.measureManager
        orientedBBox: core.OrientedBoundingBox3D = measMgr.getOrientedBoundingBox(
            create_union_body(faces),
            vecLength,
            vecWidth,
        )

        # dump
        app.log("*********")
        app.log(f"CenterPoint:{orientedBBox.centerPoint.asArray()}")
        app.log(f"LengthDirection:{orientedBBox.lengthDirection.asArray()}")
        app.log(f"Length:{orientedBBox.length}")
        app.log(f"WidthDirection:{orientedBBox.widthDirection.asArray()}")
        app.log(f"Width:{orientedBBox.width}")
        app.log(f"HeightDirection:{orientedBBox.heightDirection.asArray()}")
        app.log(f"Height:{orientedBBox.height}")

        DumpBoundingBox(orientedBBox)
        ui.activeSelections.clear()
        [ui.activeSelections.add(f) for f in faces]

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))


def create_union_body(faces: list) -&amp;gt; fusion.BRepBody:
    if len(faces) &amp;lt; 1:
        return None
    
    tmpMgr: fusion.TemporaryBRepManager = fusion.TemporaryBRepManager.get()
    tmpBody: fusion.BRepBody = tmpMgr.copy(faces[0])

    if len(faces) &amp;lt; 2:
        return tmpBody

    for face in faces[1:]:
        tmpMgr.booleanOperation(
            tmpBody,
            tmpMgr.copy(face),
            fusion.BooleanTypes.UnionBooleanType,
        )

    return tmpBody


def DumpBoundingBox(bBox: core.OrientedBoundingBox3D):
    tmpMgr: fusion.TemporaryBRepManager = fusion.TemporaryBRepManager.get()
    tmpBody: fusion.BRepBody = tmpMgr.createBox(bBox)

    app: core.Application = core.Application.get()
    des: fusion.Design = app.activeProduct
    root: fusion.Component = des.rootComponent

    baseFeat: fusion.BaseFeature = None
    if des.designType == fusion.DesignTypes.ParametricDesignType:
        baseFeat = root.features.baseFeatures.add()

    bodies: fusion.BRepBodies = root.bRepBodies
    resBody: fusion.BRepBody = None
    if baseFeat:
        baseFeat.startEdit()
        try:
            bodies.add(tmpBody, baseFeat)
        except:
            pass
        finally:
            baseFeat.finishEdit()
            resBody = baseFeat.bodies[0]
    else:
        resBody = bodies.add(tmpBody)

    resBody.opacity = 0.5&lt;/LI-CODE&gt;</description>
      <pubDate>Tue, 29 Apr 2025 14:39:28 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13605793#M78</guid>
      <dc:creator>kandennti</dc:creator>
      <dc:date>2025-04-29T14:39:28Z</dc:date>
    </item>
    <item>
      <title>Re: How to get a OrientedBoundingBox3D from more faces?</title>
      <link>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13607030#M79</link>
      <description>&lt;P&gt;Thank you very much. This is very helpfull.&lt;BR /&gt;Best regards&lt;BR /&gt;Maurizio&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 30 Apr 2025 07:08:24 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/fusion-api-and-scripts-forum/how-to-get-a-orientedboundingbox3d-from-more-faces/m-p/13607030#M79</guid>
      <dc:creator>maurizio_manzi</dc:creator>
      <dc:date>2025-04-30T07:08:24Z</dc:date>
    </item>
  </channel>
</rss>

