import adsk.core, adsk.fusion, traceback, tempfile def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface design = app.activeProduct # Get the ExportManager from the active design. exportMgr = design.exportManager tmpDir = tempfile.gettempdir() # Create an IgesExportOptions object and do the export. igesOptions = exportMgr.createIGESExportOptions(tmpDir + '/test.igs') res = exportMgr.execute(igesOptions) # Create an STEPExportOptions object and do the export. stepOptions = exportMgr.createSTEPExportOptions(tmpDir+ '/test.step') res = exportMgr.execute(stepOptions) # Create a SATExportOptions object and do the export. satOptions = exportMgr.createSATExportOptions(tmpDir + '/test.sat') res = exportMgr.execute(satOptions) # Create a SMTExportOptions object and do the export. smtOptions = exportMgr.createSMTExportOptions(tmpDir + '/test.smt') res = exportMgr.execute(smtOptions) # Create a FusionArchiveExportOptions object and do the export. fusionArchivevOptions = exportMgr.createFusionArchiveExportOptions(tmpDir + '/test.f3d') res = exportMgr.execute(fusionArchivevOptions) ui.messageBox(f'Design exported to: {tmpDir}') 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/UserInterface/UserInterface.h> #include <Core/Geometry/Point3D.h> #include <Fusion/Fusion/Design.h> #include <Fusion/Components/Component.h> #include <Fusion/Sketch/Sketches.h> #include <Fusion/Sketch/Sketch.h> #include <Fusion/Sketch/SketchCurves.h> #include <Fusion/Sketch/SketchCircles.h> #include <Fusion/Sketch/SketchCircle.h> #include <Fusion/Sketch/Profiles.h> #include <Fusion/Sketch/Profile.h> #include <Fusion/Construction/ConstructionPlane.h> #include <Fusion/Features/Features.h> #include <Fusion/Features/ExtrudeFeatures.h> #include <Fusion/Features/ExtrudeFeature.h> #include <Fusion/Features/ExtrudeFeatureInput.h> #include <Fusion/FusionTypeDefs.h> #include <Fusion/Fusion/ExportManager.h> #include <Fusion/Fusion/ExportOptions.h> #include <Fusion/Fusion/IGESExportOptions.h> #include <Fusion/Fusion/FusionArchiveExportOptions.h> #include <Fusion/Fusion/SATExportOptions.h> #include <Fusion/Fusion/SMTExportOptions.h> #include <Fusion/Fusion/STEPExportOptions.h> #include <Fusion/Fusion/STLExportOptions.h> // startTest #include "../../../TestUtils.h" // endTest using namespace adsk::core; using namespace adsk::fusion; Ptr<UserInterface> ui; std::string getDllPath(); 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; // startTest Ptr<Documents> docs = app->documents(); Ptr<Document> doc = docs->add(FusionDesignDocumentType); // endTest Ptr<Product> product = app->activeProduct(); if (!product) return false; Ptr<Design> design = product; if (!design) return false; // startTest Ptr<Component> rootComp = design->rootComponent(); // Create sketch Ptr<Sketches> sketches = rootComp->sketches(); Ptr<ConstructionPlane> plane = rootComp->xZConstructionPlane(); Ptr<Sketch> sketch = sketches->add(plane); Ptr<SketchCurves> sketchCurves = sketch->sketchCurves(); Ptr<SketchCircles> sketchCircles = sketchCurves->sketchCircles(); Ptr<SketchCircle> sketchCircle = sketchCircles->addByCenterRadius(Point3D::create(0, 0, 0), 3.0); // Get the profile defined by the circle. Ptr<Profiles> profiles = sketch->profiles(); Ptr<Profile> profile = profiles->item(0); // Create an extrusion input Ptr<Features> features = rootComp->features(); Ptr<ExtrudeFeatures> extrudes = features->extrudeFeatures(); Ptr<ExtrudeFeatureInput> input = extrudes->createInput(profile, NewBodyFeatureOperation); // Define that the extent is a distance extent of 5 cm. bool bRet = input->setDistanceExtent(false, ValueInput::createByReal(5)); // Create the extrusion. Ptr<ExtrudeFeature> extrude = extrudes->add(input); // endTest Ptr<ExportManager> exportMgr = design->exportManager(); if (!exportMgr) return false; std::string pathName = getDllPath(); Ptr<IGESExportOptions> igesOptions = exportMgr->createIGESExportOptions(pathName + "/" + "test.igs"); if (!igesOptions) return false; bRet = exportMgr->execute(igesOptions); Ptr<STEPExportOptions> stepOptions = exportMgr->createSTEPExportOptions(pathName + "/" + "test.step"); if (!stepOptions) return false; bRet = exportMgr->execute(stepOptions); Ptr<SATExportOptions> satOptions = exportMgr->createSATExportOptions(pathName + "/" + "test.sat"); if (!satOptions) return false; bRet = exportMgr->execute(satOptions); Ptr<SMTExportOptions> smtOptions = exportMgr->createSMTExportOptions(pathName + "/" + "test.smt"); if (!smtOptions) return false; bRet = exportMgr->execute(smtOptions); Ptr<FusionArchiveExportOptions> fusionArchiveOptions = exportMgr->createFusionArchiveExportOptions(pathName + "/" + "test.f3d"); if (!fusionArchiveOptions) return false; bRet = exportMgr->execute(fusionArchiveOptions); Ptr<STLExportOptions> stlOptions = exportMgr->createSTLExportOptions(rootComp, pathName + "/" + "test.stl"); if (!stlOptions) return false; stlOptions->isBinaryFormat(true); stlOptions->meshRefinement(MeshRefinementHigh); bRet = exportMgr->execute(stlOptions); // startTest doc->close(false); // endTest 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 std::string getDllPath() { #if defined(_WINDOWS) || defined(_WIN32) || defined(_WIN64) HMODULE hModule = NULL; if (!GetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (LPCSTR)&getDllPath, &hModule)) return ""; char winTempPath[2048]; ::GetModuleFileNameA(hModule, winTempPath, 2048); std::string strPath = winTempPath; size_t stPos = strPath.rfind('\\'); return strPath.substr(0, stPos); #else Dl_info info; dladdr((void*)getDllPath, &info); std::string strPath = info.dli_fname; int stPos = (int)strPath.rfind('/'); if (stPos != -1) return strPath.substr(0, stPos); else return ""; ; #endif }