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) rootComp = design.rootComponent # Create profile 1 sketchesObj = rootComp.sketches sketch0 = sketchesObj.add(rootComp.xZConstructionPlane) sketchCirclesObj0 = sketch0.sketchCurves.sketchCircles centerPoint = adsk.core.Point3D.create(0, 0, 0) sketchCirclesObj0.addByCenterRadius(centerPoint, 5.0) profile0 = sketch0.profiles.item(0) # Create profile 2 ctorPlanes = rootComp.constructionPlanes ctorPlaneInput1 = ctorPlanes.createInput() offset = adsk.core.ValueInput.createByString("10 cm") ctorPlaneInput1.setByOffset(rootComp.xZConstructionPlane, offset) ctorPlane1 = ctorPlanes.add(ctorPlaneInput1) sketch1 = sketchesObj.add(ctorPlane1) sketchCirclesObj1 = sketch1.sketchCurves.sketchCircles sketchCirclesObj1.addByCenterRadius(centerPoint, 2.0) profile1 = sketch1.profiles.item(0) # Create profile 3 ctorPlaneInput2 = ctorPlanes.createInput() ctorPlaneInput2.setByOffset(ctorPlane1, offset) ctorPlane2 = ctorPlanes.add(ctorPlaneInput2) sketch2 = sketchesObj.add(ctorPlane2) sketchCirclesObj2 = sketch2.sketchCurves.sketchCircles sketchCirclesObj2.addByCenterRadius(centerPoint, 10.0) profile2 = sketch2.profiles.item(0) # Create loft feature input loftFeats = rootComp.features.loftFeatures loftInput = loftFeats.createInput(adsk.fusion.FeatureOperations.NewBodyFeatureOperation) loftSectionsObj = loftInput.loftSections loftSectionsObj.add(profile0) loftSectionsObj.add(profile1) loftSectionsObj.add(profile2) loftInput.isSolid = False loftInput.isClosed = False loftInput.isTangentEdgesMerged = True loftInput.startLoftEdgeAlignment = adsk.fusion.LoftEdgeAlignments.FreeEdgesLoftEdgeAlignment; loftInput.endLoftEdgeAlignment = adsk.fusion.LoftEdgeAlignments.FreeEdgesLoftEdgeAlignment; # Create loft feature loftFeats.add(loftInput) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
#include <Core/Application/Application.h> #include <Core/Application/Document.h> #include <Core/Application/Documents.h> #include <Core/Application/Product.h> #include <Core/Application/ValueInput.h> #include <Core/Geometry/Point3D.h> #include <Core/UserInterface/UserInterface.h> #include <Fusion/Components/Component.h> #include <Fusion/Construction/ConstructionPlanes.h> #include <Fusion/Construction/ConstructionPlane.h> #include <Fusion/Construction/ConstructionPlaneInput.h> #include <Fusion/Features/Features.h> #include <Fusion/Features/LoftFeatures.h> #include <Fusion/Features/LoftFeature.h> #include <Fusion/Features/LoftFeatureInput.h> #include <Fusion/Features/LoftSections.h> #include <Fusion/Features/LoftSection.h> #include <Fusion/Fusion/Design.h> #include <Fusion/Sketch/Profile.h> #include <Fusion/Sketch/Profiles.h> #include <Fusion/Sketch/Sketch.h> #include <Fusion/Sketch/SketchCircles.h> #include <Fusion/Sketch/SketchCurves.h> #include <Fusion/Sketch/Sketches.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> docs = app->documents(); if (!docs) return false; // Create a document. Ptr<Document> doc = docs->add(DocumentTypes::FusionDesignDocumentType); if (!doc) return false; Ptr<Design> design = app->activeProduct(); if (!design) return false; Ptr<Component> rootComp = design->rootComponent(); if (!rootComp) return false; // Create profile 1 Ptr<Sketches> sketchesObj = rootComp->sketches(); if (!sketchesObj) return false; Ptr<Sketch> sketch0 = sketchesObj->add(rootComp->xZConstructionPlane()); if (!sketch0) return false; Ptr<SketchCurves> sketchCurvesObj0 = sketch0->sketchCurves(); if (!sketchCurvesObj0) return false; Ptr<SketchCircles> sketchCirclesObj0 = sketchCurvesObj0->sketchCircles(); if (!sketchCirclesObj0) return false; Ptr<Point3D> centerPoint = adsk::core::Point3D::create(0, 0, 0); if (!centerPoint) return false; sketchCirclesObj0->addByCenterRadius(centerPoint, 5.0); Ptr<Profiles> profilesObj0 = sketch0->profiles(); if (!profilesObj0) return false; Ptr<Profile> profile0 = profilesObj0->item(0); if (!profile0) return false; // Create profile 2 Ptr<ConstructionPlanes> ctorPlanes = rootComp->constructionPlanes(); if (!ctorPlanes) return false; Ptr<ConstructionPlaneInput> ctorPlaneInput1 = ctorPlanes->createInput(); if (!ctorPlaneInput1) return false; Ptr<ValueInput> offset = adsk::core::ValueInput::createByString("10 cm"); if (!offset) return false; bool ret = ctorPlaneInput1->setByOffset(rootComp->xZConstructionPlane(), offset); if (!ret) return false; Ptr<ConstructionPlane> ctorPlane1 = ctorPlanes->add(ctorPlaneInput1); if (!ctorPlane1) return false; Ptr<Sketch> sketch1 = sketchesObj->add(ctorPlane1); if (!sketch1) return false; Ptr<SketchCurves> sketchCurvesObj1 = sketch1->sketchCurves(); if (!sketchCurvesObj1) return false; Ptr<SketchCircles> sketchCirclesObj1 = sketchCurvesObj1->sketchCircles(); if (!sketchCirclesObj1) return false; sketchCirclesObj1->addByCenterRadius(centerPoint, 2.0); Ptr<Profiles> profilesObj1 = sketch1->profiles(); if (!profilesObj1) return false; Ptr<Profile> profile1 = profilesObj1->item(0); if (!profile1) return false; // Create profile 3 Ptr<ConstructionPlaneInput> ctorPlaneInput2 = ctorPlanes->createInput(); if (!ctorPlaneInput2) return false; ret = ctorPlaneInput2->setByOffset(ctorPlane1, offset); if (!ret) return false; Ptr<ConstructionPlane> ctorPlane2 = ctorPlanes->add(ctorPlaneInput2); if (!ctorPlane2) return false; Ptr<Sketch> sketch2 = sketchesObj->add(ctorPlane2); if (!sketch2) return false; Ptr<SketchCurves> sketchCurvesObj2 = sketch2->sketchCurves(); if (!sketchCurvesObj2) return false; Ptr<SketchCircles> sketchCirclesObj2 = sketchCurvesObj2->sketchCircles(); if (!sketchCirclesObj2) return false; sketchCirclesObj2->addByCenterRadius(centerPoint, 10.0); Ptr<Profiles> profilesObj2 = sketch2->profiles(); if (!profilesObj2) return false; Ptr<Profile> profile2 = profilesObj2->item(0); if (!profile2) return false; // Create loft feature input Ptr<Features> feats = rootComp->features(); if (!feats) return false; Ptr<LoftFeatures> loftFeats = feats->loftFeatures(); if (!loftFeats) return false; Ptr<LoftFeatureInput> loftInput = loftFeats->createInput(adsk::fusion::FeatureOperations::NewBodyFeatureOperation); if (!loftInput) return false; Ptr<LoftSections> loftSectionsObj = loftInput->loftSections(); if (!loftSectionsObj) return false; Ptr<LoftSection> loftSection0 = loftSectionsObj->add(profile0); if (!loftSection0) return false; Ptr<LoftSection> loftSection1 = loftSectionsObj->add(profile1); if (!loftSection1) return false; Ptr<LoftSection> loftSection2 = loftSectionsObj->add(profile2); if (!loftSection2) return false; // Set solid, closed, tangent edges merged and alignment options loftInput->isSolid(false); loftInput->isClosed(false); loftInput->isTangentEdgesMerged(true); loftInput->startLoftEdgeAlignment(adsk::fusion::LoftEdgeAlignments::FreeEdgesLoftEdgeAlignment); loftInput->endLoftEdgeAlignment(adsk::fusion::LoftEdgeAlignments::FreeEdgesLoftEdgeAlignment); // Create loft feature Ptr<LoftFeature> loftFeature = loftFeats->add(loftInput); if (!loftFeature) return false; return true; } #ifdef XI_WIN #include <windows.h> BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved) { switch (reason) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } #endif // XI_WIN