Demonstrates B-rep wire-related API functions.
Before running: No open document is required; the script creates a new design (or additional documents) as it runs.
import adsk.core, adsk.fusion, adsk.cam, traceback
def CreateWireBody():
# Get temproray brep manager
tempBrepMrg = adsk.fusion.TemporaryBRepManager.get()
conter = adsk.core.Point3D.create(10.0, 0.0, 5.0)
normal = adsk.core.Vector3D.create(0.0, 0.0, 1.0)
circle1 = adsk.core.Circle3D.createByCenter(conter, normal, 3.0)
circle2 = adsk.core.Circle3D.createByCenter(conter, normal, 2.0)
curves = []
curves.append(circle1)
curves.append(circle2)
# Create wire from curves
wireBody, edgeMap = tempBrepMrg.createWireFromCurves(curves)
return wireBody
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
# Create a new document
doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
product = app.activeProduct
design = adsk.fusion.Design.cast(product)
# Set the design is a direct modelling design
design.designType = adsk.fusion.DesignTypes.DirectDesignType
#Get the root component
rootComp = design.rootComponent
# Create a sub component under root component
occs = rootComp.occurrences
transform = adsk.core.Matrix3D.create()
subOcc = occs.addNewComponent(transform)
subComp = subOcc.component
# Create temproray wire body
wireBody = CreateWireBody()
# Add wireBody to sub-component
bodies = subComp.bRepBodies
bodies.add(wireBody)
# Get the brep wire body
brepWireBody = bodies.item(0)
# Get brep wires
brepWires = brepWireBody.wires
# Get brep wires count
count = brepWires.count
print("BrepWires count is {}".format(count))
# Get brep wire
brepWire = brepWires.item(0)
# Get brep edges from brepWire
brepEdges = brepWire.edges
# Get vertices from brepWire
vertices = brepWire.vertices
# Get brep coEdges from brepWire
coEdges = brepWire.coEdges
# Get the brep wire is planar or not
isPlanar = brepWire.isPlanar
print("Is the brep wire planar? {}".format(isPlanar))
# Get wire's parent brep body
parent = brepWire.parent
# offse the planar brep wire
offsetType = adsk.fusion.OffsetCornerTypes.LinearOffsetCornerType
planeNormal = adsk.core.Vector3D.create(0.0, 0.0, 1.0)
offsetBody = brepWire.offsetPlanarWire(planeNormal, 3.0, offsetType)
# Create brep wire proxy
wireProxy = brepWire.createForAssemblyContext(subOcc)
# Get native brep wire
nativeBrepWire = wireProxy.nativeObject
# Get the assembly occurrence
occurence = wireProxy.assemblyContext
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
#include <Core/Application/Application.h>
#include <Core/UserInterface/UserInterface.h>
#include <Core/Application/Document.h>
#include <Core/Application/Documents.h>
#include <Fusion/Components/Component.h>
#include <Fusion/Fusion/Design.h>
#include <Fusion/BRep/BRepBodies.h>
#include <Fusion/BRep/BRepBody.h>
#include <Fusion/BRep/BRepWires.h>
#include <Fusion/BRep/BRepWire.h>
#include <Fusion/BRep/BRepCoEdges.h>
#include <Fusion/BRep/BRepEdges.h>
#include <Fusion/BRep/BRepVertices.h>
#include <Core/Geometry/Matrix3D.h>
#include <Core/Geometry/Circle3D.h>
#include <Core/Geometry/Point3D.h>
#include <Core/Geometry/Vector3D.h>
#include <Fusion/Components/Occurrences.h>
#include <Fusion/Components/Occurrence.h>
#include <Fusion/Components/Component.h>
#include <Fusion/BRep/TemporaryBRepManager.h>
using namespace adsk::core;
using namespace adsk::fusion;
Ptr<Application> app;
Ptr<UserInterface> ui;
Ptr<BRepBody> CreateWireBody(std::vector<Ptr<BRepEdge>>& edgeMap)
{
// Get TemporaryBRepManager
Ptr<TemporaryBRepManager> tempBRepMgr = TemporaryBRepManager::get();
if (!tempBRepMgr)
return nullptr;
Ptr<Point3D> center = Point3D::create(10.0, 0.0, 5.0);
Ptr<Vector3D> normal = Vector3D::create(0.0, 0.0, 1.0);
Ptr<Circle3D> circle1 = Circle3D::createByCenter(center, normal, 3.0);
Ptr<Circle3D> circle2 = Circle3D::createByCenter(center, normal, 2.0);
std::vector<Ptr<Curve3D>> curves;
curves.push_back(circle1);
curves.push_back(circle2);
// Create wire from curves
Ptr<BRepBody> wireBody = tempBRepMgr->createWireFromCurves(curves, edgeMap);
return wireBody;
}
extern "C" XI_EXPORT bool run(const char* context)
{
app = Application::get();
if (!app)
return false;
ui = app->userInterface();
if (!ui)
return false;
// Create a new document
Ptr<Documents> docs = app->documents();
if (!docs)
return false;
Ptr<Document> doc = docs->add(DocumentTypes::FusionDesignDocumentType);
if (!doc)
return false;
Ptr<Design> design = app->activeProduct();
if (!design)
return false;
// Set the design is a direct modelling design
design->designType(adsk::fusion::DirectDesignType);
// Get the root component of active design
Ptr<Component> rootComp = design->rootComponent();
if (!rootComp)
return false;
// Create a sub component under root component
Ptr<Occurrences> occs = rootComp->occurrences();
if (!occs)
return false;
Ptr<Matrix3D> transform = Matrix3D::create();
if (!transform)
return false;
Ptr<Occurrence> subOcc = occs->addNewComponent(transform);
if (!subOcc)
return false;
Ptr<Component> subComp = subOcc->component();
if (!subComp)
return false;
// Create temproray wire body
std::vector<Ptr<BRepEdge>> edgeMap;
Ptr<BRepBody> wireBody = CreateWireBody(edgeMap);
if (!wireBody)
return false;
// Add wireBody to sub - component
Ptr<BRepBodies> bodies = subComp->bRepBodies();
if (!bodies)
return false;
bodies->add(wireBody);
// Get the brep wire body
Ptr<BRepBody> brepWireBody = bodies->item(0);
if (!brepWireBody)
return false;
// Get brep wires
Ptr<BRepWires> brepWires = brepWireBody->wires();
if (!brepWires)
return false;
// Get brep wires count
size_t count = brepWires->count();
// Get brep wire
Ptr<BRepWire> brepWire = brepWires->item(0);
if (!brepWire)
return false;
// Get brep edges from brepWire
Ptr<BRepEdges> brepEdges = brepWire->edges();
if (!brepEdges)
return false;
// Get vertices from brepWire
Ptr<BRepVertices> vertices = brepWire->vertices();
if (!vertices)
return false;
// Get brep coEdges from brepWire
Ptr<BRepCoEdges> coEdges = brepWire->coEdges();
// ON_ERROR_RETURN(coEdges);
// if (!coEdges)
// return false;
// Get the brep wire is planar or not
bool isPlanar = brepWire->isPlanar();
// Get wire's parent brep body
Ptr<BRepBody> parent = brepWire->parent();
if (!parent)
return false;
// offse the planar brep wire
Ptr<Vector3D> planeNormal = Vector3D::create(0.0, 0.0, 1.0);
Ptr<BRepBody> offsetBody = brepWire->offsetPlanarWire(planeNormal, 3.0, OffsetCornerTypes::LinearOffsetCornerType);
if (!offsetBody)
return false;
// Create brep wire proxy
Ptr<BRepWire> wireProxy = brepWire->createForAssemblyContext(subOcc);
if (!wireProxy)
return false;
// Get native brep wire
Ptr<BRepWire> nativeBrepWire = wireProxy->nativeObject();
if (!nativeBrepWire)
return false;
// Get the assembly occurrence
Ptr<Occurrence> occurence = wireProxy->assemblyContext();
if (!occurence)
return false;
return true;
}
/** * BrepWire Sample * BrepWires and BrepWire related functions */ import { adsk } from '@adsk/fusion'; function printPropertiesOfObject(obj: any): void { for (const key in obj) { if (obj.hasOwnProperty(key)) { console.log(`${key}: ${obj[key]}`) } } } function CreateWireBody(): adsk.fusion.BRepBody { // Get temporary brep manager const tempBrepMrg = adsk.fusion.TemporaryBRepManager.get() const center = adsk.core.Point3D.create(10.0, 0.0, 5.0) const normal = adsk.core.Vector3D.create(0.0, 0.0, 1.0) const circle1 = adsk.core.Circle3D.createByCenter(center, normal, 3.0) const circle2 = adsk.core.Circle3D.createByCenter(center, normal, 2.0) const curves: adsk.core.Curve3D[] = [] curves.push(circle1) curves.push(circle2) // Create wire from curves const edgeMap = tempBrepMrg.createWireFromCurves(curves) const wireBody = edgeMap[0] // Currently not implemented in the API - FUS-199789 printPropertiesOfObject(wireBody[0]) // return wireBody } function run() { // Get the Fusion API's application object const app = adsk.core.Application.get(); if (!app) throw Error("No adsk.core.Application."); // Create a document. const doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType) // Create a document. const design = app.activeProduct as adsk.fusion.Design // Get the root component of the active design. const rootComp = design.rootComponent // Create a sub component under root component const occs = rootComp.occurrences const transform = adsk.core.Matrix3D.create() const subOcc = occs.addNewComponent(transform) const subComp = subOcc.component // Create temproray wire body CreateWireBody() //Add wireBody to sub - component const bodies = subComp.bRepBodies bodies.add(wireBody) // Get the brep wire body const brepWireBody = bodies.item(0) // Get brep wires const brepWires = brepWireBody.wires //Get brep wires count const count = brepWires.count adsk.log(`BrepWires count is ${count}`) // Get brep wire const brepWire = brepWires.item(0) // Get brep edges from brepWire const brepEdges = brepWire.edges // Get vertices from brepWire const vertices = brepWire.vertices // Get brep coEdges from brepWire const coEdges = brepWire.coEdges // Get the brep wire is planar or not const isPlanar = brepWire.isPlanar; console.log(`Is the brep wire planar? ${isPlanar}`) // Get wire's parent brep body const parent = brepWire.parent // Offset the planar brep wire const offsetType = adsk.fusion.OffsetCornerTypes.LinearOffsetCornerType const planeNormal = adsk.core.Vector3D.create(0.0, 0.0, 1.0) const offsetBody = brepWire.offsetPlanarWire(planeNormal, 3.0, offsetType) // Create brep wire proxy const wireProxy = brepWire.createForAssemblyContext(subOcc) // Get native brep wire const nativeBrepWire = wireProxy.nativeObject // Get the assembly occurrence const occurrence = wireProxy.assemblyContext } run();