I'm sorry that I was late.
It may lack functionality, but it imports multiple DXF files, performs an extrusion,
and saves them under the same name as the DXF file.
The save destination is in the "importDXF" project.
(The account to which the "importDXF" project is logged in
If it does not exist, create it. )
#Fusion360API Python script
#Description-importDXF & Extend test
import adsk.core, adsk.fusion, traceback
from pathlib import Path
_app = adsk.core.Application.cast(None)
_ui = adsk.core.UserInterface.cast(None)
_prj = adsk.core.DataProject.cast(None)
# saving project name
_PROJECT_NAME = 'importDxf'
# Extend Distance(unit Cm)
_EXTENDDISTANCE = 10.0
def run(context):
try:
global _app, _ui
_app = adsk.core.Application.get()
_ui = _app.userInterface
# select dxf files
paths = getFilePaths()
if len(paths) < 1: return
# create document
global _EXTENDDISTANCE
results = [initFusionDoc(path, _EXTENDDISTANCE) for path in paths]
# finish
_ui.messageBox('\n'.join(results))
except:
if _ui:
_ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
def setDataProject():
global _app, _PROJECT_NAME, _prj
prj = adsk.core.DataProject.cast(None)
for prj in _app.data.dataProjects:
if prj.name == _PROJECT_NAME:
_prj = prj
return
_prj = _app.data.dataProjects.add(_PROJECT_NAME)
def initFusionDoc(
path :str,
length :float
) -> str:
pathObj = Path(path)
adsk.doEvents()
try:
global _app
typeFuDoc = adsk.core.DocumentTypes.FusionDesignDocumentType
doc = _app.documents.add(typeFuDoc)
des = adsk.fusion.Design.cast(_app.activeProduct)
root = des.rootComponent
# dxf import
iptMng = _app.importManager
dxfOpt = iptMng.createDXF2DImportOptions(path, root.xZConstructionPlane)
dxfOpt.isViewFit = False
skts = iptMng.importToTarget2(dxfOpt, root)
# profile
profs = adsk.core.ObjectCollection.create()
for skt in skts:
for prof in skt.profiles:
profs.add(prof)
# pad
exts = root.features.extrudeFeatures
newBodyOpe = adsk.fusion.FeatureOperations.NewBodyFeatureOperation
dist = adsk.core.ValueInput.createByReal(length)
exts.addSimple(profs, dist, newBodyOpe)
# save
global _prj
if not _prj:
setDataProject()
doc.saveAs(pathObj.stem, _prj.rootFolder, '', '')
return pathObj.stem + ' : OK'
except:
return pathObj.stem + ' : NG'
def getFilePaths() -> list:
global _ui
dlog :adsk.core.FileDialog = _ui.createFileDialog()
dlog.isMultiSelectEnabled = True
dlog.title = "Select Open DXF Files"
dlog.filter = 'DXF files (*.dxf)'
dlog.filterIndex = 0
res = dlog.showOpen()
if res == adsk.core.DialogResults.DialogOK:
return dlog.filenames
else:
return []