Create Automatic Drawing Sample

Description

Demonstrates how to use the DrawingManager to automatically create a drawing from an existing Fusion 360 design. Configures sheet standard, units, size, and content options, then starts the background drawing creation process using createAutomaticDrawing.

Code Samples

import adsk.core, adsk.drawing, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui = app.userInterface

        # The active document must be a saved Fusion 360 design.
        doc = app.activeDocument
        if not doc:
            ui.messageBox('No active document. Please open a Fusion 360 design and try again.')
            return

        designDataFile = doc.dataFile
        if not designDataFile:
            ui.messageBox('The active design must be saved to the cloud before a drawing can be created.\nPlease save the document and try again.')
            return

        # Get the application-level DrawingManager.
        drawingMgr = adsk.drawing.DrawingManager.get()
        if not drawingMgr:
            ui.messageBox('Failed to get the DrawingManager.')
            return

        # Create the input and specify AutomaticDrawingCreationMode at construction time.
        drawingInput = drawingMgr.createDrawingInput(
            designDataFile,
            adsk.drawing.DrawingCreationModes.AutomaticDrawingCreationMode
        )
        if not drawingInput:
            ui.messageBox('Failed to create the drawing input.')
            return

        # ── CreateDrawingInput ────────────────────────────────────────────────
        drawingInput.baseDocumentType  = adsk.drawing.BaseDocumentTypes.FromScratchBaseDocumentType
        drawingInput.standard          = adsk.drawing.DrawingStandardTypes.ASMEDrawingStandardType
        drawingInput.units             = adsk.drawing.DrawingUnitTypes.InchDrawingUnitType
        drawingInput.sheetSize         = adsk.drawing.SheetSizes.BASMESheetSize
        drawingInput.orientationType   = adsk.drawing.SheetOrientationTypes.LandscapeSheetOrientationType
        drawingInput.sheetCreationType = adsk.drawing.SheetCreationTypes.AllLevelsSheetCreationType

        # ── AutomationPreferences ─────────────────────────────────────────────
        autoPrefs = drawingInput.automationPreferences

        # GlobalPreferences — sheet-generation toggles and auto-dimension master switch
        gp = autoPrefs.globalPreferences
        gp.omitComponentsWithKeywords  = 'Bolt,Screw,Nut,Washer'
        gp.isDetectAndOmitFasteners    = True
        gp.isMainAssemblySheetGenerated = True
        gp.isSubAssemblySheetGenerated  = True
        gp.isAnimationSheetGenerated    = False
        gp.isComponentSheetGenerated    = True
        gp.isFoldedModelSheetGenerated  = True
        gp.isFlatPatternSheetGenerated  = True
        gp.isAutoDimensionEnabled       = True

        # AssemblyPreferences (main assembly)
        mainAsm = autoPrefs.mainAssemblyPreferences
        # AssemblySheetPreferences — ISO view sheet
        mainAsm.isoViewSheetPreferences.isSheetCreated      = True
        mainAsm.isoViewSheetPreferences.isPartsListIncluded = True
        mainAsm.isoViewSheetPreferences.partsListLocationType = adsk.drawing.TableLocationTypes.TopRightTableLocationType
        # AssemblySheetPreferences — orthogonal view sheet
        mainAsm.orthogonalViewSheetPreferences.isSheetCreated      = True
        mainAsm.orthogonalViewSheetPreferences.isPartsListIncluded = False
        # AutoDimensionBasePreferences
        mainAsm.autoDimensionPreferences.isAutoDimensionEnabled  = True
        mainAsm.autoDimensionPreferences.dimensionStrategyType   = adsk.drawing.DimensionStrategyTypes.OverallDimensionStrategyType
        mainAsm.autoDimensionPreferences.holePreferencesType     = adsk.drawing.HolePreferencesTypes.HoleAndThreadNoteHolePreferencesType
        # DrawingViewPreferences
        mainAsm.drawingViewPreferences.style               = adsk.drawing.DrawingViewStyleTypes.VisibleEdgesDrawingViewStyleType
        mainAsm.drawingViewPreferences.tangentEdgesType    = adsk.drawing.TangentEdgeDisplayTypes.OffTangentEdgeDisplayType
        mainAsm.drawingViewPreferences.isShowInterferenceEdges = True
        mainAsm.drawingViewPreferences.isShowThreadEdges   = True
        mainAsm.drawingViewPreferences.centerMarkType      = adsk.drawing.CenterMarkDisplayTypes.AllHolesCenterMarkDisplayType
        mainAsm.drawingViewPreferences.centerLineType      = adsk.drawing.CenterLineDisplayTypes.AllHolesCenterLineDisplayType

        # AssemblyPreferences (sub-assembly)
        subAsm = autoPrefs.subAssemblyPreferences
        subAsm.isoViewSheetPreferences.isSheetCreated        = True
        subAsm.isoViewSheetPreferences.isPartsListIncluded   = True
        subAsm.orthogonalViewSheetPreferences.isSheetCreated = True
        subAsm.autoDimensionPreferences.dimensionStrategyType = adsk.drawing.DimensionStrategyTypes.OverallDimensionStrategyType
        subAsm.autoDimensionPreferences.holePreferencesType  = adsk.drawing.HolePreferencesTypes.HoleAndThreadNoteHolePreferencesType
        subAsm.drawingViewPreferences.style                  = adsk.drawing.DrawingViewStyleTypes.VisibleEdgesDrawingViewStyleType
        subAsm.drawingViewPreferences.centerLineType         = adsk.drawing.CenterLineDisplayTypes.AllHolesCenterLineDisplayType

        # AnimationPreferences — DrawingViewPreferences
        animPrefs = autoPrefs.animationPreferences
        animPrefs.drawingViewPreferences.style            = adsk.drawing.DrawingViewStyleTypes.ShadedWithVisibleEdgesDrawingViewStyleType
        animPrefs.drawingViewPreferences.tangentEdgesType = adsk.drawing.TangentEdgeDisplayTypes.OffTangentEdgeDisplayType

        # ComponentPreferences
        compPrefs = autoPrefs.componentPreferences
        # ComponentSheetViewPreferences
        compPrefs.sheetViewPreferences.isOrthogonalViewAdded = True
        compPrefs.sheetViewPreferences.isIsometricViewAdded  = True
        # AutoDimensionComponentPreferences (extends AutoDimensionBasePreferences)
        compPrefs.autoDimensionPreferences.isAutoDimensionEnabled          = True
        compPrefs.autoDimensionPreferences.dimensionStrategyType           = adsk.drawing.DimensionStrategyTypes.AutomaticDimensionStrategyType
        compPrefs.autoDimensionPreferences.holePreferencesType             = adsk.drawing.HolePreferencesTypes.HoleAndThreadNoteHolePreferencesType
        compPrefs.autoDimensionPreferences.defaultOriginType               = adsk.drawing.DefaultOriginTypes.BottomLeftDefaultOriginType
        compPrefs.autoDimensionPreferences.isCircularPatternDimensionsIncluded = True
        # DrawingViewPreferences
        compPrefs.drawingViewPreferences.style            = adsk.drawing.DrawingViewStyleTypes.VisibleEdgesDrawingViewStyleType
        compPrefs.drawingViewPreferences.tangentEdgesType = adsk.drawing.TangentEdgeDisplayTypes.OffTangentEdgeDisplayType
        compPrefs.drawingViewPreferences.centerMarkType   = adsk.drawing.CenterMarkDisplayTypes.AllHolesCenterMarkDisplayType
        compPrefs.drawingViewPreferences.centerLineType   = adsk.drawing.CenterLineDisplayTypes.AllHolesCenterLineDisplayType

        # FoldedModelPreferences (sheet metal — formed state)
        foldedPrefs = autoPrefs.foldedModelPreferences
        # ComponentSheetViewPreferences
        foldedPrefs.sheetViewPreferences.isOrthogonalViewAdded = True
        foldedPrefs.sheetViewPreferences.isIsometricViewAdded  = True
        # AutoDimensionComponentPreferences
        foldedPrefs.autoDimensionPreferences.isAutoDimensionEnabled = True
        foldedPrefs.autoDimensionPreferences.dimensionStrategyType  = adsk.drawing.DimensionStrategyTypes.OverallDimensionStrategyType
        foldedPrefs.autoDimensionPreferences.defaultOriginType      = adsk.drawing.DefaultOriginTypes.ModelOriginDefaultOriginType
        foldedPrefs.autoDimensionPreferences.isCircularPatternDimensionsIncluded = True
        # DrawingViewPreferences
        foldedPrefs.drawingViewPreferences.style          = adsk.drawing.DrawingViewStyleTypes.VisibleAndHiddenEdgesDrawingViewStyleType
        foldedPrefs.drawingViewPreferences.centerMarkType = adsk.drawing.CenterMarkDisplayTypes.AllHolesCenterMarkDisplayType
        foldedPrefs.drawingViewPreferences.centerLineType = adsk.drawing.CenterLineDisplayTypes.AllHolesCenterLineDisplayType

        # FlatPatternPreferences (sheet metal — unfolded state)
        flatPrefs = autoPrefs.flatPatternPreferences
        # FlatPatternOrthogonalViewPreferences
        flatPrefs.orthogonalViewSheetPreferences.isFoldedModelIsometricViewAdded = True
        flatPrefs.orthogonalViewSheetPreferences.isBendTableIncluded = True
        flatPrefs.orthogonalViewSheetPreferences.bendTableLocation   = adsk.drawing.TableLocationTypes.TopLeftTableLocationType
        # AutoDimensionComponentPreferences
        flatPrefs.autoDimensionPreferences.isAutoDimensionEnabled              = True
        flatPrefs.autoDimensionPreferences.dimensionStrategyType               = adsk.drawing.DimensionStrategyTypes.OverallDimensionStrategyType
        flatPrefs.autoDimensionPreferences.defaultOriginType                   = adsk.drawing.DefaultOriginTypes.BottomLeftDefaultOriginType
        flatPrefs.autoDimensionPreferences.isCircularPatternDimensionsIncluded = True
        # DrawingViewFlatPatternPreferences (extends DrawingViewPreferences)
        flatPrefs.drawingViewPreferences.style               = adsk.drawing.DrawingViewStyleTypes.VisibleAndHiddenEdgesDrawingViewStyleType
        flatPrefs.drawingViewPreferences.centerLineType      = adsk.drawing.CenterLineDisplayTypes.AllHolesCenterLineDisplayType
        flatPrefs.drawingViewPreferences.isShowBendExtents   = True

        # Create the drawing. Returns the cloud DataFile when complete.
        drawingDataFile = drawingMgr.createDrawing(drawingInput)

        if drawingDataFile:
            # Open the newly created drawing document.
            app.documents.open(drawingDataFile)
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))