#Author-
#Description-
import adsk.core, adsk.fusion, traceback
def run(context):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
# Create a document.
doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
product = app.activeProduct
design = adsk.fusion.Design.cast(product)
# Get the root component of the active design.
rootComp = design.rootComponent
# Create sub occurrence
occurrences = rootComp.occurrences
subOcc = occurrences.addNewComponent(adsk.core.Matrix3D.create())
# Get features from sub component
subComponent = subOcc.component
features = subComponent.features
# Create sketch circle on the xz plane.
sketches = subComponent.sketches
sketch = sketches.add(subComponent.xZConstructionPlane)
sketchCircles = sketch.sketchCurves.sketchCircles
centerPoint = adsk.core.Point3D.create(0, 0, 0)
sketchCircles.addByCenterRadius(centerPoint, 10)
# Create a collection of entities for extrude
entities0 = adsk.core.ObjectCollection.create()
entities0.add(sketch.profiles.item(0))
# Create a cylinder with ExtrudeFeature using the profile above.
extrudeFeats = features.extrudeFeatures
extrudeFeatureInput = extrudeFeats.createInput(entities0, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
extrudeFeatureInput.isSolid = True
extrudeFeatureInput.setDistanceExtent(False, adsk.core.ValueInput.createByReal(2.5))
extrudeFeature = extrudeFeats.add(extrudeFeatureInput)
# Get physical properties from body
body = extrudeFeature.bodies[0]
physicalProperties = body.physicalProperties
# Get physical properties from occurrence
physicalProperties = subOcc.physicalProperties
# Get physical properties from occurrence (low accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.LowCalculationAccuracy);
# Get physical properties from occurrence (medium accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.MediumCalculationAccuracy);
# Get physical properties from occurrence (high accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy);
# Get physical properties from occurrence (very high accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.VeryHighCalculationAccuracy);
# Get physical properties from component
physicalProperties = subComponent.physicalProperties
# Get physical properties from component (low accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.LowCalculationAccuracy);
# Get physical properties from component (medium accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.MediumCalculationAccuracy);
# Get physical properties from component (high accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy);
# Get physical properties from component (very high accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.VeryHighCalculationAccuracy);
# Get data from physical properties
area = physicalProperties.area
density = physicalProperties.density
mass = physicalProperties.mass
volume = physicalProperties.volume
# Get accuracy from physical properties
accuracy = physicalProperties.accuracy
# Get center of mass from physical properties
cog = physicalProperties.centerOfMass
# Get principal axes from physical properties
(retVal, xAxis0, yAxis0, zAxis0) = physicalProperties.getPrincipalAxes()
# Get the moments of inertia about the principal axes. Unit for returned values is kg/cm^2.
(retVal,i1,i2,i3) = physicalProperties.getPrincipalMomentsOfInertia()
# Get the radius of gyration about the principal axes. Unit for returned values is cm.
(retVal, kx, ky, kz) = physicalProperties.getRadiusOfGyration()
# Get the rotation from the world coordinate system of the target to the principal coordinate system.
(retVal, rx, ry, rz) = physicalProperties.getRotationToPrincipal()
# Get the moment of inertia about the world coordinate system.
(retVal, xx, yy, zz, xy, yz, xz) = physicalProperties.getXYZMomentsOfInertia()
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
#include <Core/Application/Application.h>
#include <Core/Application/Documents.h>
#include <Core/Application/Document.h>
#include <Core/Application/Product.h>
#include <Core/Application/ObjectCollection.h>
#include <Core/Application/ValueInput.h>
#include <Core/Geometry/Point3D.h>
#include <Core/Geometry/Matrix3D.h>
#include <Core/UserInterface/UserInterface.h>
#include <Fusion/Sketch/SketchCircle.h>
#include <Fusion/Fusion/Design.h>
#include <Fusion/Fusion/PhysicalProperties.h>
#include <Fusion/Components/Component.h>
#include <Fusion/Components/Occurrence.h>
#include <Fusion/Components/Occurrences.h>
#include <Fusion/Construction/ConstructionPlane.h>
#include <Fusion/Features/Features.h>
#include <Fusion/Features/ExtrudeFeature.h>
#include <Fusion/Features/ExtrudeFeatures.h>
#include <Fusion/Features/ExtrudeFeatureInput.h>
#include <Fusion/BRep/BRepBodies.h>
#include <Fusion/BRep/BRepBody.h>
#include <Fusion/Sketch/Profile.h>
#include <Fusion/Sketch/Profiles.h>
#include <Fusion/Sketch/Sketch.h>
#include <Fusion/Sketch/Sketches.h>
#include <Fusion/Sketch/SketchCurves.h>
#include <Fusion/Sketch/SketchCircles.h>
#include <Fusion/Sketch/SketchPoint.h>
#include <Fusion/Sketch/SketchPoints.h>
using namespace adsk::core;
using namespace adsk::fusion;
Ptr<UserInterface> ui;
extern "C" XI_EXPORT bool run(const char* context)
{
Ptr<Application> app = Application::get();
if (!app)
return false;
ui = app->userInterface();
if (!ui)
return false;
Ptr<Documents> documents = app->documents();
if (!documents)
return false;
Ptr<Document> doc = documents->add(DocumentTypes::FusionDesignDocumentType);
if (!doc)
return false;
Ptr<Product> product = app->activeProduct();
if (!product)
return false;
Ptr<Design> design = product;
if (!design)
return false;
// Get the root component of the active design
Ptr<Component> rootComp = design->rootComponent();
if (!rootComp)
return false;
// Create sub occurrence
Ptr<Occurrences> occurrences = rootComp->occurrences();
if (!occurrences)
return false;
Ptr<Occurrence> subOcc = occurrences->addNewComponent(Matrix3D::create());
if (!subOcc)
return false;
// Get features from sub component
Ptr<Component> subComponent = subOcc->component();
if (!subComponent)
return false;
Ptr<Features> features = subComponent->features();
if (!features)
return false;
// Create sketch circle on the xz plane.
Ptr<Sketches> sketches = subComponent->sketches();
if (!sketches)
return false;
Ptr<Sketch> sketch = sketches->add(subComponent->xZConstructionPlane());
if (!sketch)
return false;
Ptr<SketchCurves> sketchCurves = sketch->sketchCurves();
if (!sketchCurves)
return false;
Ptr<SketchCircles> sketchCirles = sketchCurves->sketchCircles();
if (!sketchCirles)
return false;
Ptr<Point3D> centerPoint = Point3D::create(0, 0, 0);
if (!centerPoint)
return false;
Ptr<SketchCircle> sketchCircle = sketchCirles->addByCenterRadius(centerPoint, 10);
if (!sketchCircle)
return false;
// Create a collection of entities for extrude
Ptr<ObjectCollection> entities0 = ObjectCollection::create();
if (!entities0)
return false;
Ptr<Profiles> sketchProfiles = sketch->profiles();
if (!sketchProfiles)
return false;
Ptr<Profile> sketchProfile = sketchProfiles->item(0);
if (!sketchProfile)
return false;
entities0->add(sketchProfile);
// Create a cylinder with ExtrudeFeature using the profile above.
Ptr<ExtrudeFeatures> extrudeFeats = features->extrudeFeatures();
if (!extrudeFeats)
return false;
Ptr<ExtrudeFeatureInput> extrudeFeatureInput =
extrudeFeats->createInput(entities0, adsk::fusion::FeatureOperations::NewBodyFeatureOperation);
if (!extrudeFeatureInput)
return false;
Ptr<ValueInput> distance = adsk::core::ValueInput::createByReal(2.0);
if (!distance)
return false;
extrudeFeatureInput->isSolid(true);
extrudeFeatureInput->setDistanceExtent(false, distance);
Ptr<ExtrudeFeature> extrudeFeature = extrudeFeats->add(extrudeFeatureInput);
if (!extrudeFeature)
return false;
// Get physical properties from body
Ptr<BRepBodies> bodies = extrudeFeature->bodies();
if (!bodies)
return false;
Ptr<BRepBody> body = bodies->item(0);
Ptr<PhysicalProperties> physicalProperties = body->physicalProperties();
// Get physical properties from occurrence
physicalProperties = subOcc->physicalProperties();
// Get physical properties from occurrence (low accuracy)
physicalProperties = subOcc->getPhysicalProperties(LowCalculationAccuracy);
// Get physical properties from occurrence (medium accuracy)
physicalProperties = subOcc->getPhysicalProperties(MediumCalculationAccuracy);
// Get physical properties from occurrence (high accuracy)
physicalProperties = subOcc->getPhysicalProperties(HighCalculationAccuracy);
// Get physical properties from occurrence (very high accuracy)
physicalProperties = subOcc->getPhysicalProperties(VeryHighCalculationAccuracy);
// Get physical properties from component
physicalProperties = subComponent->physicalProperties();
// Get physical properties from component (low accuracy)
physicalProperties = subComponent->getPhysicalProperties(CalculationAccuracy::LowCalculationAccuracy);
// Get physical properties from component (medium accuracy)
physicalProperties = subComponent->getPhysicalProperties(CalculationAccuracy::MediumCalculationAccuracy);
// Get physical properties from component (high accuracy)
physicalProperties = subComponent->getPhysicalProperties(CalculationAccuracy::HighCalculationAccuracy);
// Get physical properties from component (very high accuracy)
physicalProperties = subComponent->getPhysicalProperties(CalculationAccuracy::VeryHighCalculationAccuracy);
if (!physicalProperties)
return false;
// Get data from physical properties
double area = physicalProperties->area();
double density = physicalProperties->density();
double mass = physicalProperties->mass();
double volume = physicalProperties->volume();
// Get accuracy from physical properties
CalculationAccuracy accuracy = physicalProperties->accuracy();
// Get center of mass from physical properties
Ptr<Point3D> cog = physicalProperties->centerOfMass();
// Get principal axes from physical properties
Ptr<Vector3D> xAxis;
Ptr<Vector3D> yAxis;
Ptr<Vector3D> zAxis;
physicalProperties->getPrincipalAxes(xAxis, yAxis, zAxis);
// Get the moments of inertia about the principal axes. Unit for returned values is kg/cm^2.
double i1 = 0, i2 = 0, i3 = 0;
physicalProperties->getPrincipalMomentsOfInertia(i1, i2, i3);
// Get the radius of gyration about the principal axes. Unit for returned values is cm.
double kx = 0, ky = 0, kz = 0;
physicalProperties->getRadiusOfGyration(kx, ky, kz);
// Get the rotation from the world coordinate system of the target to the principal coordinate system.
double rx = 0, ry = 0, rz = 0;
physicalProperties->getRotationToPrincipal(rx, ry, rz);
// Get the moment of inertia about the world coordinate system.
double xx = 0, yy = 0, zz = 0, xy = 0, yz = 0, xz = 0;
physicalProperties->getXYZMomentsOfInertia(xx, yy, zz, xy, yz, xz);
return true;
}
/**
* Get Physical Properties API Sample
* Script that demonstrates getting physical properties using the API. When this script is run it will create a new document, build a simple model, and get the various physical properties from the model.
*/
import { adsk } from "@adsk/fusion";
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 sub occurrence
const occurrences = rootComp.occurrences
const subOcc = occurrences.addNewComponent(adsk.core.Matrix3D.create())
// Get features from sub component
const subComponent = subOcc.component
const features = subComponent.features
// Create sketch circle on the xz plane.
const sketches = subComponent.sketches
const sketch = sketches.add(subComponent.xZConstructionPlane)
const sketchCircles = sketch.sketchCurves.sketchCircles
const centerPoint = adsk.core.Point3D.create(0, 0, 0)
sketchCircles.addByCenterRadius(centerPoint, 10)
// Create a collection of entities for extrude
const entities0 = adsk.core.ObjectCollection.create()
entities0.add(sketch.profiles.item(0))
// Create a cylinder with ExtrudeFeature using the profile above.
const extrudeFeats = features.extrudeFeatures
const extrudeFeatureInput = extrudeFeats.createInput(entities0, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
extrudeFeatureInput.isSolid = true
// Define that the extent is a distance extent of 2.5 cm
const distance = adsk.core.ValueInput.createByReal(2.5)
// Set the distance extent
const distanceExtentDef = adsk.fusion.DistanceExtentDefinition.create(distance)
extrudeFeatureInput.setOneSideExtent(distanceExtentDef, adsk.fusion.ExtentDirections.PositiveExtentDirection)
const extrudeFeature = extrudeFeats.add(extrudeFeatureInput)
// Get physical properties from body
const body: adsk.fusion.BRepBody = extrudeFeature.bodies.item(0)
let physicalProperties = body.physicalProperties
// Get physical properties from occurrence
physicalProperties = subOcc.physicalProperties
// Get physical properties from occurrence(low accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.LowCalculationAccuracy)
// Get physical properties from occurrence(medium accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.MediumCalculationAccuracy)
// Get physical properties from occurrence(high accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)
// Get physical properties from occurrence(very high accuracy)
physicalProperties = subOcc.getPhysicalProperties(adsk.fusion.CalculationAccuracy.VeryHighCalculationAccuracy)
// Get physical properties from component
physicalProperties = subComponent.physicalProperties
// Get physical properties from component(low accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.LowCalculationAccuracy)
//Get physical properties from component(medium accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.MediumCalculationAccuracy)
//Get physical properties from component(high accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.HighCalculationAccuracy)
// Get physical properties from component(very high accuracy)
physicalProperties = subComponent.getPhysicalProperties(adsk.fusion.CalculationAccuracy.VeryHighCalculationAccuracy)
// Get data from physical properties
const area = physicalProperties.area
const density = physicalProperties.density
const mass = physicalProperties.mass
const volume = physicalProperties.volume
// Get accuracy from physical properties
const accuracy = physicalProperties.accuracy
// Get center of mass from physical properties
const cog = physicalProperties.centerOfMass
// Get principal axes from physical properties
const [axesOk, xAxis, yAxis, zAxis] = physicalProperties.getPrincipalAxes()
if (!axesOk) throw Error("getPrincipalAxes failed")
// Get the moments of inertia about the principal axes. Unit for returned values is kg/cm^2.
const [momentsOk, i1, i2, i3] = physicalProperties.getPrincipalMomentsOfInertia()
if (!momentsOk) throw Error("getPrincipalMomentsOfInertia failed")
// Get the radius of gyration about the principal axes. Unit for returned values is cm.
const [gyrationOk, kx, ky, kz] = physicalProperties.getRadiusOfGyration()
if (!gyrationOk) throw Error("getRadiusOfGyration failed")
// Get the rotation from the world coordinate system of the target to the principal coordinate system.
const [rotationOk, rx, ry, rz] = physicalProperties.getRotationToPrincipal()
if (!rotationOk) throw Error("getRotationToPrincipal failed")
// Get the moment of inertia about the world coordinate system.
const [xyzOk, xx, yy, zz, xy, yz, xz] = physicalProperties.getXYZMomentsOfInertia()
if (!xyzOk) throw Error("getXYZMomentsOfInertia failed")
}
run();