For the setting in tool orientation, I don't think it's a good idea to set toolaxis by sketch itself.
If you tried manually, it's forbidden to select sketch from browser tree.
I would suggest to choose toolaxis by the face, edges. Of course, you could select it by sketch curves.
see the script:
import adsk.core, adsk.fusion, adsk.cam, traceback
def createBox(component😞
size = 4
# Create sketch
sketches = component.sketches
sketch = sketches.add(component.xZConstructionPlane)
lines = sketch.sketchCurves.sketchLines
recLines = lines.addTwoPointRectangle(adsk.core.Point3D.create(0, 0, 0), adsk.core.Point3D.create(size, size, 0))
# Get the profile defined by the circle.
prof = sketch.profiles.item(0)
# Create an extrusion inpu
extrudes = component.features.extrudeFeatures
extInput = extrudes.createInput(prof, adsk.fusion.FeatureOperations.NewBodyFeatureOperation)
distance = adsk.core.ValueInput.createByReal(size)
extInput.setDistanceExtent(False, distance)
# Create the extrusion.
ext = extrudes.add(extInput)
return ext.bodies.item(0)
def createSetup(cam, name, opType, models, machine = None😞
setups = cam.setups
input = setups.createInput(opType)
input.models = models
input.name = name
setups.add(input)
return setups[-1]
def run(context😞
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
design = app.activeProduct
# 1. Create a box.
box = createBox(design.rootComponent)
camWS = ui.workspaces.itemById('CAMEnvironment')
camWS.activate()
cam = adsk.cam.CAM.cast(doc.products.itemByProductType("CAMProductType"))
# 2. Create a setup
opType = adsk.cam.OperationTypes.MillingOperation
setup = createSetup(cam, "Test", opType, [box])
# Create 2D pocket operation.
operationInput = setup.operations.createInput('pocket2d')
camManager = adsk.cam.CAMManager.get()
libraryManager = camManager.libraryManager
toolLibraries = libraryManager.toolLibraries
tools = toolLibraries.toolLibraryAtURL(adsk.core.URL.create('systemlibraryroot://Samples/Milling Tools (Inch).json'))
tool = tools.item(1)
operationInput.tool = tool
# Add Operation
op_2Dpocket = setup.operations.add(operationInput)
cadcontours = op_2Dpocket.parameters.itemByName('pockets').value
selection = cadcontours.getCurveSelections()
# getting sketch
sketch = cam.designRootOccurrence.component.sketches.item(0)
# getting sketch profile.
Geometry = [sketch.sketchCurves.item(0)]
# Use chain selection
chain = selection.createNewChainSelection()
chain.inputGeometry = Geometry
# The default is closed chain,so just apply the chain.
cadcontours.applyCurveSelections(selection)
# define orientation by the face
op_2Dpocket.parameters.itemByName('overrideToolView').expression = 'true'
op_2Dpocket.parameters.itemByName('view_orientation_mode').expression = "'axesZX'"
toolAxis: adsk.cam.CadObjectParameterValue = op_2Dpocket.parameters.itemByName("view_orientation_axisZ").value
toolAxis.value = [box.faces.item(5)]
cam.generateToolpath(op_2Dpocket)
# # define orientation by the sketch. suggest to use sketch curves.
# op_2Dpocket.parameters.itemByName('overrideToolView').expression = 'true'
# op_2Dpocket.parameters.itemByName('view_orientation_mode').expression = "'axesXY'"
# ValueX = op_2Dpocket.parameters.itemByName("view_orientation_axisX").value
# ValueX.value = [sketch.sketchCurves.item(0)]
# op_2Dpocket.parameters.itemByName('view_orientation_flipX').expression = "true"
# ValueY = op_2Dpocket.parameters.itemByName("view_orientation_axisY").value
# ValueY.value = [sketch.sketchCurves.item(1)]
# cam.generateToolpath(op_2Dpocket)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))