cam.cam_operation

Contents

cam.cam_operation#

BlenderCAM ‘cam_operation.py’

All properties of a single CAM Operation.

Classes#

Module Contents#

class camOperation[source]#

Bases: bpy.types.PropertyGroup

material: PointerProperty(type=CAM_MATERIAL_Properties)[source]#
info: PointerProperty(type=CAM_INFO_Properties)[source]#
optimisation: PointerProperty(type=CAM_OPTIMISATION_Properties)[source]#
movement: PointerProperty(type=CAM_MOVEMENT_Properties)[source]#
name: StringProperty(name='Operation Name', default='Operation', update=updateRest)[source]#
filename: StringProperty(name='File Name', default='Operation', update=updateRest)[source]#
auto_export: BoolProperty(name='Auto Export', description='Export files immediately after path calculation', default=True)[source]#
remove_redundant_points: BoolProperty(name='Simplify G-code', description='Remove redundant points sharing the same angle as the start vector', default=False)[source]#
simplify_tol: IntProperty(name='Tolerance', description='lower number means more precise', default=50, min=1, max=1000)[source]#
hide_all_others: BoolProperty(name='Hide All Others', description='Hide all other tool paths except toolpath associated with selected CAM operation', default=False)[source]#
parent_path_to_object: BoolProperty(name='Parent Path to Object', description='Parent generated CAM path to source object', default=False)[source]#
object_name: StringProperty(name='Object', description='Object handled by this operation', update=updateOperationValid)[source]#
collection_name: StringProperty(name='Collection', description='Object collection handled by this operation', update=updateOperationValid)[source]#
curve_object: StringProperty(name='Curve Source', description='Curve which will be sampled along the 3D object', update=operationValid)[source]#
curve_object1: StringProperty(name='Curve Target', description='Curve which will serve as attractor for the cutter when the cutter follows the curve', update=operationValid)[source]#
source_image_name: StringProperty(name='Image Source', description='image source', update=operationValid)[source]#
geometry_source: EnumProperty(name='Data Source', items='OBJECT', 'Object', 'a', 'COLLECTION', 'Collection of Objects', 'a', 'IMAGE', 'Image', 'a', description='Geometry source', default='OBJECT', update=updateOperationValid)[source]#
cutter_type: EnumProperty(name='Cutter', items='END', 'End', 'End - Flat cutter', 'BALLNOSE', 'Ballnose', 'Ballnose cutter', 'BULLNOSE', 'Bullnose', 'Bullnose cutter ***placeholder **', 'VCARVE', 'V-carve', 'V-carve cutter', 'BALLCONE', 'Ballcone', 'Ball with a Cone for Parallel - X', 'CYLCONE', 'Cylinder cone', 'Cylinder End with a Cone for Parallel - X', 'LASER', 'Laser', 'Laser cutter', 'PLASMA', 'Plasma', 'Plasma cutter', 'CUSTOM', 'Custom-EXPERIMENTAL', 'Modelled cutter - not well tested yet.', description='Type of cutter used', default='END', update=updateZbufferImage)[source]#
cutter_object_name: StringProperty(name='Cutter Object', description='Object used as custom cutter for this operation', update=updateZbufferImage)[source]#
machine_axes: EnumProperty(name='Number of Axes', items='3', '3 axis', 'a', '4', '#4 axis - EXPERIMENTAL', 'a', '5', '#5 axis - EXPERIMENTAL', 'a', description='How many axes will be used for the operation', default='3', update=updateStrategy)[source]#
strategy: EnumProperty(name='Strategy', items=getStrategyList, description='Strategy', update=updateStrategy)[source]#
strategy4axis: EnumProperty(name='4 Axis Strategy', items='PARALLELR', 'Parallel around 1st rotary axis', 'Parallel lines around first rotary axis', 'PARALLEL', 'Parallel along 1st rotary axis', 'Parallel lines along first rotary axis', 'HELIX', 'Helix around 1st rotary axis', 'Helix around rotary axis', 'INDEXED', 'Indexed 3-axis', 'all 3 axis strategies, just applied to the 4th axis', 'CROSS', 'Cross', 'Cross paths', description='#Strategy', default='PARALLEL', update=updateStrategy)[source]#
strategy5axis: EnumProperty(name='Strategy', items='INDEXED', 'Indexed 3-axis', 'All 3 axis strategies, just rotated by 4+5th axes', description='5 axis Strategy', default='INDEXED', update=updateStrategy)[source]#
rotary_axis_1: EnumProperty(name='Rotary Axis', items='X', 'X', '', 'Y', 'Y', '', 'Z', 'Z', '', description='Around which axis rotates the first rotary axis', default='X', update=updateStrategy)[source]#
rotary_axis_2: EnumProperty(name='Rotary Axis 2', items='X', 'X', '', 'Y', 'Y', '', 'Z', 'Z', '', description='Around which axis rotates the second rotary axis', default='Z', update=updateStrategy)[source]#
skin: FloatProperty(name='Skin', description='Material to leave when roughing ', min=0.0, max=1.0, default=0.0, precision=constants.PRECISION, unit='LENGTH', update=updateOffsetImage)[source]#
inverse: BoolProperty(name='Inverse Milling', description='Male to female model conversion', default=False, update=updateOffsetImage)[source]#
array: BoolProperty(name='Use Array', description='Create a repetitive array for producing the same thing many times', default=False, update=updateRest)[source]#
array_x_count: IntProperty(name='X Count', description='X count', default=1, min=1, max=32000, update=updateRest)[source]#
array_y_count: IntProperty(name='Y Count', description='Y count', default=1, min=1, max=32000, update=updateRest)[source]#
array_x_distance: FloatProperty(name='X Distance', description='Distance between operation origins', min=1e-05, max=1.0, default=0.01, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
array_y_distance: FloatProperty(name='Y Distance', description='Distance between operation origins', min=1e-05, max=1.0, default=0.01, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
pocket_option: EnumProperty(name='Start Position', items='INSIDE', 'Inside', 'a', 'OUTSIDE', 'Outside', 'a', description='Pocket starting position', default='INSIDE', update=updateRest)[source]#
pocketToCurve: BoolProperty(name='Pocket to Curve', description='Generates a curve instead of a path', default=False, update=updateRest)[source]#
cut_type: EnumProperty(name='Cut', items='OUTSIDE', 'Outside', 'a', 'INSIDE', 'Inside', 'a', 'ONLINE', 'On Line', 'a', description='Type of cutter used', default='OUTSIDE', update=updateRest)[source]#
outlines_count: IntProperty(name='Outlines Count', description='Outlines count', default=1, min=1, max=32, update=updateCutout)[source]#
straight: BoolProperty(name='Overshoot Style', description='Use overshoot cutout instead of conventional rounded', default=False, update=updateRest)[source]#
cutter_id: IntProperty(name='Tool Number', description='For machines which support tool change based on tool id', min=0, max=10000, default=1, update=updateRest)[source]#
cutter_diameter: FloatProperty(name='Cutter Diameter', description='Cutter diameter = 2x cutter radius', min=1e-06, max=10, default=0.003, precision=constants.PRECISION, unit='LENGTH', update=updateOffsetImage)[source]#
cylcone_diameter: FloatProperty(name='Bottom Diameter', description='Bottom diameter', min=1e-06, max=10, default=0.003, precision=constants.PRECISION, unit='LENGTH', update=updateOffsetImage)[source]#
cutter_length: FloatProperty(name='#Cutter Length', description='#not supported#Cutter length', min=0.0, max=100.0, default=25.0, precision=constants.PRECISION, unit='LENGTH', update=updateOffsetImage)[source]#
cutter_flutes: IntProperty(name='Cutter Flutes', description='Cutter flutes', min=1, max=20, default=2, update=updateChipload)[source]#
cutter_tip_angle: FloatProperty(name='Cutter V-carve Angle', description='Cutter V-carve angle', min=0.0, max=180.0, default=60.0, precision=constants.PRECISION, update=updateOffsetImage)[source]#
ball_radius: FloatProperty(name='Ball Radius', description='Radius of', min=0.0, max=0.035, default=0.001, unit='LENGTH', precision=constants.PRECISION, update=updateOffsetImage)[source]#
bull_corner_radius: FloatProperty(name='Bull Corner Radius', description='Radius tool bit corner', min=0.0, max=0.035, default=0.005, unit='LENGTH', precision=constants.PRECISION, update=updateOffsetImage)[source]#
cutter_description: StringProperty(name='Tool Description', default='', update=updateOffsetImage)[source]#
Laser_on: StringProperty(name='Laser ON String', default='M68 E0 Q100')[source]#
Laser_off: StringProperty(name='Laser OFF String', default='M68 E0 Q0')[source]#
Laser_cmd: StringProperty(name='Laser Command', default='M68 E0 Q')[source]#
Laser_delay: FloatProperty(name='Laser ON Delay', description='Time after fast move to turn on laser and let machine stabilize', default=0.2)[source]#
Plasma_on: StringProperty(name='Plasma ON String', default='M03')[source]#
Plasma_off: StringProperty(name='Plasma OFF String', default='M05')[source]#
Plasma_delay: FloatProperty(name='Plasma ON Delay', description='Time after fast move to turn on Plasma and let machine stabilize', default=0.1)[source]#
Plasma_dwell: FloatProperty(name='Plasma Dwell Time', description='Time to dwell and warm up the torch', default=0.0)[source]#
dist_between_paths: FloatProperty(name='Distance Between Toolpaths', default=0.001, min=1e-05, max=32, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
dist_along_paths: FloatProperty(name='Distance Along Toolpaths', default=0.0002, min=1e-05, max=32, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
parallel_angle: FloatProperty(name='Angle of Paths', default=0, min=-360, max=360, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRest)[source]#
old_rotation_A: FloatProperty(name='A Axis Angle', description='old value of Rotate A axis\nto specified angle', default=0, min=-360, max=360, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRest)[source]#
old_rotation_B: FloatProperty(name='A Axis Angle', description='old value of Rotate A axis\nto specified angle', default=0, min=-360, max=360, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRest)[source]#
rotation_A: FloatProperty(name='A Axis Angle', description='Rotate A axis\nto specified angle', default=0, min=-360, max=360, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRotation)[source]#
enable_A: BoolProperty(name='Enable A Axis', description='Rotate A axis', default=False, update=updateRotation)[source]#
A_along_x: BoolProperty(name='A Along X ', description='A Parallel to X', default=True, update=updateRest)[source]#
rotation_B: FloatProperty(name='B Axis Angle', description='Rotate B axis\nto specified angle', default=0, min=-360, max=360, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRotation)[source]#
enable_B: BoolProperty(name='Enable B Axis', description='Rotate B axis', default=False, update=updateRotation)[source]#
carve_depth: FloatProperty(name='Carve Depth', default=0.001, min=-0.1, max=32, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
drill_type: EnumProperty(name='Holes On', items='MIDDLE_SYMETRIC', 'Middle of Symmetric Curves', 'a', 'MIDDLE_ALL', 'Middle of All Curve Parts', 'a', 'ALL_POINTS', 'All Points in Curve', 'a', description='Strategy to detect holes to drill', default='MIDDLE_SYMETRIC', update=updateRest)[source]#
slice_detail: FloatProperty(name='Distance Between Slices', default=0.001, min=1e-05, max=32, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
waterline_fill: BoolProperty(name='Fill Areas Between Slices', description='Fill areas between slices in waterline mode', default=True, update=updateRest)[source]#
waterline_project: BoolProperty(name='Project Paths - Not Recomended', description='Project paths in areas between slices', default=True, update=updateRest)[source]#
use_layers: BoolProperty(name='Use Layers', description='Use layers for roughing', default=True, update=updateRest)[source]#
stepdown: FloatProperty(name='', description='Layer height', default=0.01, min=1e-05, max=32, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
lead_in: FloatProperty(name='Lead-in Radius', description='Lead in radius for torch or laser to turn off', min=0.0, max=1, default=0.0, precision=constants.PRECISION, unit='LENGTH')[source]#
lead_out: FloatProperty(name='Lead-out Radius', description='Lead out radius for torch or laser to turn off', min=0.0, max=1, default=0.0, precision=constants.PRECISION, unit='LENGTH')[source]#
profile_start: IntProperty(name='Start Point', description='Start point offset', min=0, default=0, update=updateRest)[source]#
minz: FloatProperty(name='Operation Depth End', default=-0.01, min=-3, max=3, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
minz_from: EnumProperty(name='Max Depth From', description='Set maximum operation depth', items='OBJECT', 'Object', 'Set max operation depth from Object', 'MATERIAL', 'Material', 'Set max operation depth from Material', 'CUSTOM', 'Custom', 'Custom max depth', default='OBJECT', update=updateRest)[source]#
start_type: EnumProperty(name='Start Type', items='ZLEVEL', 'Z level', 'Starts on a given Z level', 'OPERATIONRESULT', 'Rest Milling', 'For rest milling, operations have to be put in chain for this to work well.', description='Starting depth', default='ZLEVEL', update=updateStrategy)[source]#
maxz: FloatProperty(name='Operation Depth Start', description='operation starting depth', default=0, min=-3, max=10, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
first_down: BoolProperty(name='First Down', description='First go down on a contour, then go to the next one', default=False, update=update_operation)[source]#
source_image_scale_z: FloatProperty(name='Image Source Depth Scale', default=0.01, min=-1, max=1, precision=constants.PRECISION, unit='LENGTH', update=updateZbufferImage)[source]#
source_image_size_x: FloatProperty(name='Image Source X Size', default=0.1, min=-10, max=10, precision=constants.PRECISION, unit='LENGTH', update=updateZbufferImage)[source]#
source_image_offset: FloatVectorProperty(name='Image Offset', default=0, 0, 0, unit='LENGTH', precision=constants.PRECISION, subtype='XYZ', update=updateZbufferImage)[source]#
source_image_crop: BoolProperty(name='Crop Source Image', description='Crop source image - the position of the sub-rectangle is relative to the whole image, so it can be used for e.g. finishing just a part of an image', default=False, update=updateZbufferImage)[source]#
source_image_crop_start_x: FloatProperty(name='Crop Start X', default=0, min=0, max=100, precision=constants.PRECISION, subtype='PERCENTAGE', update=updateZbufferImage)[source]#
source_image_crop_start_y: FloatProperty(name='Crop Start Y', default=0, min=0, max=100, precision=constants.PRECISION, subtype='PERCENTAGE', update=updateZbufferImage)[source]#
source_image_crop_end_x: FloatProperty(name='Crop End X', default=100, min=0, max=100, precision=constants.PRECISION, subtype='PERCENTAGE', update=updateZbufferImage)[source]#
source_image_crop_end_y: FloatProperty(name='Crop End Y', default=100, min=0, max=100, precision=constants.PRECISION, subtype='PERCENTAGE', update=updateZbufferImage)[source]#
ambient_behaviour: EnumProperty(name='Ambient', items='ALL', 'All', 'a', 'AROUND', 'Around', 'a', description='Handling ambient surfaces', default='ALL', update=updateZbufferImage)[source]#
ambient_radius: FloatProperty(name='Ambient Radius', description='Radius around the part which will be milled if ambient is set to Around', min=0.0, max=100.0, default=0.01, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
use_limit_curve: BoolProperty(name='Use Limit Curve', description='A curve limits the operation area', default=False, update=updateRest)[source]#
ambient_cutter_restrict: BoolProperty(name='Cutter Stays in Ambient Limits', description="Cutter doesn't get out from ambient limits otherwise goes on the border exactly", default=True, update=updateRest)[source]#
limit_curve: StringProperty(name='Limit Curve', description='Curve used to limit the area of the operation', update=updateRest)[source]#
feedrate: FloatProperty(name='Feedrate', description='Feedrate in units per minute', min=5e-05, max=50.0, default=1.0, precision=constants.PRECISION, unit='LENGTH', update=updateChipload)[source]#
plunge_feedrate: FloatProperty(name='Plunge Speed', description='% of feedrate', min=0.1, max=100.0, default=50.0, precision=1, subtype='PERCENTAGE', update=updateRest)[source]#
plunge_angle: FloatProperty(name='Plunge Angle', description='What angle is already considered to plunge', default=pi / 6, min=0, max=pi * 0.5, precision=0, subtype='ANGLE', unit='ROTATION', update=updateRest)[source]#
spindle_rpm: FloatProperty(name='Spindle RPM', description='Spindle speed ', min=0, max=60000, default=12000, update=updateChipload)[source]#
do_simulation_feedrate: BoolProperty(name='Adjust Feedrates with Simulation EXPERIMENTAL', description='Adjust feedrates with simulation', default=False, update=updateRest)[source]#
dont_merge: BoolProperty(name="Don't Merge Outlines when Cutting", description='this is usefull when you want to cut around everything', default=False, update=updateRest)[source]#
pencil_threshold: FloatProperty(name='Pencil Threshold', default=2e-05, min=1e-08, max=1, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
crazy_threshold1: FloatProperty(name='Min Engagement', default=0.02, min=1e-08, max=100, precision=constants.PRECISION, update=updateRest)[source]#
crazy_threshold5: FloatProperty(name='Optimal Engagement', default=0.3, min=1e-08, max=100, precision=constants.PRECISION, update=updateRest)[source]#
crazy_threshold2: FloatProperty(name='Max Engagement', default=0.5, min=1e-08, max=100, precision=constants.PRECISION, update=updateRest)[source]#
crazy_threshold3: FloatProperty(name='Max Angle', default=2, min=1e-08, max=100, precision=constants.PRECISION, update=updateRest)[source]#
crazy_threshold4: FloatProperty(name='Test Angle Step', default=0.05, min=1e-08, max=100, precision=constants.PRECISION, update=updateRest)[source]#
add_pocket_for_medial: BoolProperty(name='Add Pocket Operation', description='Clean unremoved material after medial axis', default=True, update=updateRest)[source]#
add_mesh_for_medial: BoolProperty(name='Add Medial mesh', description='Medial operation returns mesh for editing and further processing', default=False, update=updateRest)[source]#
medial_axis_threshold: FloatProperty(name='Long Vector Threshold', default=0.001, min=1e-08, max=100, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
medial_axis_subdivision: FloatProperty(name='Fine Subdivision', default=0.0002, min=1e-08, max=100, precision=constants.PRECISION, unit='LENGTH', update=updateRest)[source]#
use_bridges: BoolProperty(name='Use Bridges / Tabs', description='Use bridges in cutout', default=False, update=updateBridges)[source]#
bridges_width: FloatProperty(name='Bridge / Tab Width', default=0.002, unit='LENGTH', precision=constants.PRECISION, update=updateBridges)[source]#
bridges_height: FloatProperty(name='Bridge / Tab Height', description='Height from the bottom of the cutting operation', default=0.0005, unit='LENGTH', precision=constants.PRECISION, update=updateBridges)[source]#
bridges_collection_name: StringProperty(name='Bridges / Tabs Collection', description='Collection of curves used as bridges', update=operationValid)[source]#
use_bridge_modifiers: BoolProperty(name='Use Bridge / Tab Modifiers', description='Include bridge curve modifiers using render level when calculating operation, does not effect original bridge data', default=True, update=updateBridges)[source]#
use_modifiers: BoolProperty(name='Use Mesh Modifiers', description='Include mesh modifiers using render level when calculating operation, does not effect original mesh', default=True, update=operationValid)[source]#
min: FloatVectorProperty(name='Operation Minimum', default=0, 0, 0, unit='LENGTH', precision=constants.PRECISION, subtype='XYZ')[source]#
max: FloatVectorProperty(name='Operation Maximum', default=0, 0, 0, unit='LENGTH', precision=constants.PRECISION, subtype='XYZ')[source]#
output_header: BoolProperty(name='Output G-code Header', description='Output user defined G-code command header at start of operation', default=False)[source]#
gcode_header: StringProperty(name='G-code Header', description='G-code commands at start of operation. Use ; for line breaks', default='G53 G0')[source]#
enable_dust: BoolProperty(name='Dust Collector', description='Output user defined g-code command header at start of operation', default=False)[source]#
gcode_start_dust_cmd: StringProperty(name='Start Dust Collector', description='Commands to start dust collection. Use ; for line breaks', default='M100')[source]#
gcode_stop_dust_cmd: StringProperty(name='Stop Dust Collector', description='Command to stop dust collection. Use ; for line breaks', default='M101')[source]#
enable_hold: BoolProperty(name='Hold Down', description='Output hold down command at start of operation', default=False)[source]#
gcode_start_hold_cmd: StringProperty(name='G-code Header', description='G-code commands at start of operation. Use ; for line breaks', default='M102')[source]#
gcode_stop_hold_cmd: StringProperty(name='G-code Header', description='G-code commands at end operation. Use ; for line breaks', default='M103')[source]#
enable_mist: BoolProperty(name='Mist', description='Mist command at start of operation', default=False)[source]#
gcode_start_mist_cmd: StringProperty(name='Start Mist', description='Command to start mist. Use ; for line breaks', default='M104')[source]#
gcode_stop_mist_cmd: StringProperty(name='Stop Mist', description='Command to stop mist. Use ; for line breaks', default='M105')[source]#
output_trailer: BoolProperty(name='Output G-code Trailer', description='Output user defined g-code command trailer at end of operation', default=False)[source]#
gcode_trailer: StringProperty(name='G-code Trailer', description='G-code commands at end of operation. Use ; for line breaks', default='M02')[source]#
offset_image[source]#
zbuffer_image[source]#
silhouete[source]#
ambient[source]#
operation_limit[source]#
borderwidth = 50[source]#
object = None[source]#
path_object_name: StringProperty(name='Path Object', description='Actual CNC path')[source]#
changed: BoolProperty(name='True if any of the Operation Settings has Changed', description='Mark for update', default=False)[source]#
update_zbufferimage_tag: BoolProperty(name='Mark Z-Buffer Image for Update', description='Mark for update', default=True)[source]#
update_offsetimage_tag: BoolProperty(name='Mark Offset Image for Update', description='Mark for update', default=True)[source]#
update_silhouete_tag: BoolProperty(name='Mark Silhouette Image for Update', description='Mark for update', default=True)[source]#
update_ambient_tag: BoolProperty(name='Mark Ambient Polygon for Update', description='Mark for update', default=True)[source]#
update_bullet_collision_tag: BoolProperty(name='Mark Bullet Collision World for Update', description='Mark for update', default=True)[source]#
valid: BoolProperty(name='Valid', description='True if operation is ok for calculation', default=True)[source]#
changedata: StringProperty(name='Changedata', description='change data for checking if stuff changed.')[source]#
computing: BoolProperty(name='Computing Right Now', description='', default=False)[source]#
pid: IntProperty(name='Process Id', description='Background process id', default=-1)[source]#
outtext: StringProperty(name='Outtext', description='outtext', default='')[source]#