cam.ops

Contents

cam.ops#

BlenderCAM ‘ops.py’ © 2012 Vilem Novak

Blender Operator definitions are in this file. They mostly call the functions from ‘utils.py’

Classes#

threadCom

PathsBackground

Calculate CAM Paths in Background. File Has to Be Saved Before.

KillPathsBackground

Remove CAM Path Processes in Background.

CalculatePath

Calculate CAM Paths

PathsAll

Calculate All CAM Paths

CamPackObjects

Calculate All CAM Paths

CamSliceObjects

Slice a Mesh Object Horizontally

PathsChain

Calculate a Chain and Export the G-code Alltogether.

PathExportChain

Calculate a Chain and Export the G-code Together.

PathExport

Export G-code. Can Be Used only when the Path Object Is Present

CAMSimulate

Simulate CAM Operation

CAMSimulateChain

Simulate CAM Chain, Compared to Single Op Simulation Just Writes Into One Image and Thus Enables

CamChainAdd

Add New CAM Chain

CamChainRemove

Remove CAM Chain

CamChainOperationAdd

Add Operation to Chain

CamChainOperationUp

Add Operation to Chain

CamChainOperationDown

Add Operation to Chain

CamChainOperationRemove

Remove Operation from Chain

CamOperationAdd

Add New CAM Operation

CamOperationCopy

Copy CAM Operation

CamOperationRemove

Remove CAM Operation

CamOperationMove

Move CAM Operation

CamOrientationAdd

Add Orientation to CAM Operation, for Multiaxis Operations

CamBridgesAdd

Add Bridge Objects to Curve

Functions#

threadread(tcom)

Reads the standard output of a background process in a non-blocking

timer_update(context)

Monitor background processes related to camera path calculations.

_calc_path(operator, context)

Calculate the path for a given operator and context.

getChainOperations(chain)

Return chain operations associated with a given chain object.

fixUnits()

Set up units for BlenderCAM.

Module Contents#

class threadCom(o, proc)[source]#
opname[source]#
outtext = ''[source]#
proc[source]#
lasttext = ''[source]#
threadread(tcom)[source]#

Reads the standard output of a background process in a non-blocking manner.

This function reads a line from the standard output of a background process associated with the provided tcom object. It searches for a specific substring that indicates progress information, and if found, extracts that information and assigns it to the outtext attribute of the tcom object. This allows for real-time monitoring of the background process’s output without blocking the main thread.

Parameters:

tcom (object) – An object that has a proc attribute with a stdout stream from which to read the output.

Returns:

This function does not return a value; it modifies the tcom

object in place.

Return type:

None

timer_update(context)[source]#

Monitor background processes related to camera path calculations.

This function checks the status of background processes that are responsible for calculating camera paths. It retrieves the current processes and monitors their state. If a process has finished, it updates the corresponding camera operation and reloads the necessary paths. If the process is still running, it restarts the associated thread to continue monitoring.

Parameters:

context – The context in which the function is called, typically containing information about the current scene and operations.

class PathsBackground[source]#

Bases: bpy.types.Operator

Calculate CAM Paths in Background. File Has to Be Saved Before.

bl_idname = 'object.calculate_cam_paths_background'[source]#
bl_label = 'Calculate CAM Paths in Background'[source]#
bl_options[source]#
execute(context)[source]#

Execute the camera operation in the background.

This method initiates a background process to perform camera operations based on the current scene and active camera operation. It sets up the necessary paths for the script and starts a subprocess to handle the camera computations. Additionally, it manages threading to ensure that the main thread remains responsive while the background operation is executed.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the completion status of the operation.

Return type:

dict

class KillPathsBackground[source]#

Bases: bpy.types.Operator

Remove CAM Path Processes in Background.

bl_idname = 'object.kill_calculate_cam_paths_background'[source]#
bl_label = 'Kill Background Computation of an Operation'[source]#
bl_options[source]#
execute(context)[source]#

Execute the camera operation in the given context.

This method retrieves the active camera operation from the scene and checks if there are any ongoing processes related to camera path calculations. If such processes exist and match the current operation, they are terminated. The method then marks the operation as not computing and returns a status indicating that the execution has finished.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary with a status key indicating the result of the execution.

Return type:

dict

async _calc_path(operator, context)[source]#

Calculate the path for a given operator and context.

This function processes the current scene’s camera operations based on the specified operator and context. It handles different geometry sources, checks for valid operation parameters, and manages the visibility of objects and collections. The function also retrieves the path using an asynchronous operation and handles any exceptions that may arise during this process. If the operation is invalid or if certain conditions are not met, appropriate error messages are reported to the operator.

Parameters:
  • operator (bpy.types.Operator) – The operator that initiated the path calculation.

  • context (bpy.types.Context) – The context in which the operation is executed.

Returns:

A tuple indicating the status of the operation.

Returns {‘FINISHED’, True} if successful, {‘FINISHED’, False} if there was an error, or {‘CANCELLED’, False} if the operation was cancelled.

Return type:

tuple

class CalculatePath[source]#

Bases: bpy.types.Operator, cam.async_op.AsyncOperatorMixin

Calculate CAM Paths

bl_idname = 'object.calculate_cam_path'[source]#
bl_label = 'Calculate CAM Paths'[source]#
bl_options[source]#
classmethod poll(context)[source]#

Check if the current camera operation is valid.

This method checks the active camera operation in the given context and determines if it is valid. It retrieves the active operation from the scene’s camera operations and validates it using the isValid function. If the operation is valid, it returns True; otherwise, it returns False.

Parameters:

context (Context) – The context containing the scene and camera operations.

Returns:

True if the active camera operation is valid, False otherwise.

Return type:

bool

async execute_async(context)[source]#

Execute an asynchronous calculation of a path.

This method performs an asynchronous operation to calculate a path based on the provided context. It awaits the result of the calculation and prints the success status along with the return value. The return value can be used for further processing or analysis.

Parameters:

context (Any) – The context in which the path calculation is to be executed.

Returns:

The result of the path calculation.

Return type:

Any

class PathsAll[source]#

Bases: bpy.types.Operator

Calculate All CAM Paths

bl_idname = 'object.calculate_cam_paths_all'[source]#
bl_label = 'Calculate All CAM Paths'[source]#
bl_options[source]#
execute(context)[source]#

Execute camera operations in the current Blender context.

This function iterates through the camera operations defined in the current scene and executes the background calculation for each operation. It sets the active camera operation index and prints the name of each operation being processed. This is typically used in a Blender add-on or script to automate camera path calculations.

Parameters:

context (bpy.context) – The current Blender context.

Returns:

A dictionary indicating the completion status of the operation,

typically {‘FINISHED’}.

Return type:

dict

draw(context)[source]#

Draws the user interface elements for the operation selection.

This method utilizes the Blender layout system to create a property search interface for selecting operations related to camera functionalities. It links the current instance’s operation property to the available camera operations defined in the Blender scene.

Parameters:

context (bpy.context) – The context in which the drawing occurs,

class CamPackObjects[source]#

Bases: bpy.types.Operator

Calculate All CAM Paths

bl_idname = 'object.cam_pack_objects'[source]#
bl_label = 'Pack Curves on Sheet'[source]#
bl_options[source]#
execute(context)[source]#

Execute the operation in the given context.

This function sets the Blender object mode to ‘OBJECT’, retrieves the currently selected objects, and calls the packCurves function from the pack module. It is typically used to finalize operations on selected objects in Blender.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the completion status of the operation.

Return type:

dict

draw(context)[source]#
class CamSliceObjects[source]#

Bases: bpy.types.Operator

Slice a Mesh Object Horizontally

bl_idname = 'object.cam_slice_objects'[source]#
bl_label = 'Slice Object - Useful for Lasercut Puzzles etc'[source]#
bl_options[source]#
execute(context)[source]#

Execute the slicing operation on the active Blender object.

This function retrieves the currently active object in the Blender context and performs a slicing operation on it using the sliceObject function from the cam module. The operation is intended to modify the object based on the slicing logic defined in the external module.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the result of the operation,

typically containing the key ‘FINISHED’ upon successful execution.

Return type:

dict

draw(context)[source]#
getChainOperations(chain)[source]#

Return chain operations associated with a given chain object.

This function iterates through the operations of the provided chain object and retrieves the corresponding operations from the current scene’s camera operations in Blender. Due to limitations in Blender, chain objects cannot store operations directly, so this function serves to extract and return the relevant operations for further processing.

Parameters:

chain (object) – The chain object from which to retrieve operations.

Returns:

A list of operations associated with the given chain object.

Return type:

list

class PathsChain[source]#

Bases: bpy.types.Operator, cam.async_op.AsyncOperatorMixin

Calculate a Chain and Export the G-code Alltogether.

bl_idname = 'object.calculate_cam_paths_chain'[source]#
bl_label = 'Calculate CAM Paths in Current Chain and Export Chain G-code'[source]#
bl_options[source]#
classmethod poll(context)[source]#

Check the validity of the active camera chain in the given context.

This method retrieves the active camera chain from the scene and checks its validity using the isChainValid function. It returns a boolean value indicating whether the camera chain is valid or not.

Parameters:

context (Context) – The context containing the scene and camera chain information.

Returns:

True if the active camera chain is valid, False otherwise.

Return type:

bool

async execute_async(context)[source]#

Execute asynchronous operations for camera path calculations.

This method sets the object mode for the Blender scene and processes a series of camera operations defined in the active camera chain. It reports the progress of each operation and handles any exceptions that may occur during the path calculation. After successful calculations, it exports the resulting mesh data to a specified G-code file.

Parameters:

context (bpy.context) – The Blender context containing scene and

Returns:

A dictionary indicating the result of the operation, typically {‘FINISHED’}.

Return type:

dict

class PathExportChain[source]#

Bases: bpy.types.Operator

Calculate a Chain and Export the G-code Together.

bl_idname = 'object.cam_export_paths_chain'[source]#
bl_label = 'Export CAM Paths in Current Chain as G-code'[source]#
bl_options[source]#
classmethod poll(context)[source]#

Check the validity of the active camera chain in the given context.

This method retrieves the currently active camera chain from the scene context and checks its validity using the isChainValid function. It returns a boolean indicating whether the active camera chain is valid or not.

Parameters:

context (object) – The context containing the scene and camera chain information.

Returns:

True if the active camera chain is valid, False otherwise.

Return type:

bool

execute(context)[source]#

Execute the camera path export process.

This function retrieves the active camera chain from the current scene and gathers the mesh data associated with the operations of that chain. It then exports the G-code path using the specified filename and the collected mesh data. The function is designed to be called within the context of a Blender operator.

Parameters:

context (bpy.context) – The context in which the operator is executed.

Returns:

A dictionary indicating the completion status of the operation,

typically {‘FINISHED’}.

Return type:

dict

class PathExport[source]#

Bases: bpy.types.Operator

Export G-code. Can Be Used only when the Path Object Is Present

bl_idname = 'object.cam_export'[source]#
bl_label = 'Export Operation G-code'[source]#
bl_options[source]#
execute(context)[source]#

Execute the camera operation and export the G-code path.

This method retrieves the active camera operation from the current scene and exports the corresponding G-code path to a specified filename. It prints the filename and relevant operation details to the console for debugging purposes. The G-code path is generated based on the camera path data associated with the active operation.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the completion status of the operation,

typically {‘FINISHED’}.

Return type:

dict

class CAMSimulate[source]#

Bases: bpy.types.Operator, cam.async_op.AsyncOperatorMixin

Simulate CAM Operation This Is Performed by: Creating an Image, Painting Z Depth of the Brush Subtractively. Works only for Some Operations, Can Not Be Used for 4-5 Axis.

bl_idname = 'object.cam_simulate'[source]#
bl_label = 'CAM Simulation'[source]#
bl_options[source]#
operation: StringProperty(name='Operation', description='Specify the operation to calculate', default='Operation')[source]#
async execute_async(context)[source]#

Execute an asynchronous simulation operation based on the active camera operation.

This method retrieves the current scene and the active camera operation. It constructs the operation name and checks if the corresponding object exists in the Blender data. If it does, it attempts to run the simulation asynchronously. If the simulation is cancelled, it returns a cancellation status. If the object does not exist, it reports an error and returns a finished status.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the status of the operation, either

{‘CANCELLED’} or {‘FINISHED’}.

Return type:

dict

draw(context)[source]#

Draws the user interface for selecting camera operations.

This method creates a layout element in the user interface that allows users to search and select a specific camera operation from a list of available operations defined in the current scene. It utilizes the Blender Python API to integrate with the UI.

Parameters:

context – The context in which the drawing occurs, typically provided by Blender’s UI system.

class CAMSimulateChain[source]#

Bases: bpy.types.Operator, cam.async_op.AsyncOperatorMixin

Simulate CAM Chain, Compared to Single Op Simulation Just Writes Into One Image and Thus Enables to See how Ops Work Together.

bl_idname = 'object.cam_simulate_chain'[source]#
bl_label = 'CAM Simulation'[source]#
bl_options[source]#
classmethod poll(context)[source]#

Check the validity of the active camera chain in the scene.

This method retrieves the currently active camera chain from the scene’s camera chains and checks its validity using the isChainValid function. It returns a boolean indicating whether the active camera chain is valid.

Parameters:

context (object) – The context containing the scene and its properties.

Returns:

True if the active camera chain is valid, False otherwise.

Return type:

bool

operation: StringProperty(name='Operation', description='Specify the operation to calculate', default='Operation')[source]#
async execute_async(context)[source]#

Execute an asynchronous simulation for a specified camera chain.

This method retrieves the active camera chain from the current Blender scene and determines the operations associated with that chain. It checks if all operations are valid and can be simulated. If valid, it proceeds to execute the simulation asynchronously. If any operation is invalid, it logs a message and returns a finished status without performing the simulation.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the status of the operation, either operation completed successfully.

Return type:

dict

draw(context)[source]#

Draw the user interface for selecting camera operations.

This function creates a user interface element that allows the user to search and select a specific camera operation from a list of available operations in the current scene. It utilizes the Blender Python API to create a property search layout.

Parameters:

context – The context in which the drawing occurs, typically containing information about the current scene and UI elements.

class CamChainAdd[source]#

Bases: bpy.types.Operator

Add New CAM Chain

bl_idname = 'scene.cam_chain_add'[source]#
bl_label = 'Add New CAM Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera chain creation in the given context.

This function adds a new camera chain to the current scene in Blender. It updates the active camera chain index and assigns a name and filename to the newly created chain. The function is intended to be called within a Blender operator context.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the operation’s completion status,

specifically returning {‘FINISHED’} upon successful execution.

Return type:

dict

class CamChainRemove[source]#

Bases: bpy.types.Operator

Remove CAM Chain

bl_idname = 'scene.cam_chain_remove'[source]#
bl_label = 'Remove CAM Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera chain removal process.

This function removes the currently active camera chain from the scene and decrements the active camera chain index if it is greater than zero. It modifies the Blender context to reflect these changes.

Parameters:

context – The context in which the function is executed.

Returns:

A dictionary indicating the status of the operation,

specifically {‘FINISHED’} upon successful execution.

Return type:

dict

class CamChainOperationAdd[source]#

Bases: bpy.types.Operator

Add Operation to Chain

bl_idname = 'scene.cam_chain_operation_add'[source]#
bl_label = 'Add Operation to Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute an operation in the active camera chain.

This function retrieves the active camera chain from the current scene and adds a new operation to it. It increments the active operation index and assigns the name of the currently selected camera operation to the newly added operation. This is typically used in the context of managing camera operations in a 3D environment.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the execution status, typically {‘FINISHED’}.

Return type:

dict

class CamChainOperationUp[source]#

Bases: bpy.types.Operator

Add Operation to Chain

bl_idname = 'scene.cam_chain_operation_up'[source]#
bl_label = 'Add Operation to Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the operation to move the active camera operation in the chain.

This function retrieves the current scene and the active camera chain. If there is an active operation (i.e., its index is greater than 0), it moves the operation one step up in the chain by adjusting the indices accordingly. After moving the operation, it updates the active operation index to reflect the change.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the result of the operation,

specifically returning {‘FINISHED’} upon successful execution.

Return type:

dict

class CamChainOperationDown[source]#

Bases: bpy.types.Operator

Add Operation to Chain

bl_idname = 'scene.cam_chain_operation_down'[source]#
bl_label = 'Add Operation to Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the operation to move the active camera operation in the chain.

This function retrieves the current scene and the active camera chain. It checks if the active operation can be moved down in the list of operations. If so, it moves the active operation one position down and updates the active operation index accordingly.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the result of the operation,

specifically {‘FINISHED’} when the operation completes successfully.

Return type:

dict

class CamChainOperationRemove[source]#

Bases: bpy.types.Operator

Remove Operation from Chain

bl_idname = 'scene.cam_chain_operation_remove'[source]#
bl_label = 'Remove Operation from Chain'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the operation to remove the active operation from the camera chain.

This method accesses the current scene and retrieves the active camera chain. It then removes the currently active operation from that chain and adjusts the index of the active operation accordingly. If the active operation index becomes negative, it resets it to zero to ensure it remains within valid bounds.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the execution status, typically

containing {‘FINISHED’} upon successful completion.

Return type:

dict

fixUnits()[source]#

Set up units for BlenderCAM.

This function configures the unit settings for the current Blender scene. It sets the rotation system to degrees and the scale length to 1.0, ensuring that the units are appropriately configured for use within BlenderCAM.

class CamOperationAdd[source]#

Bases: bpy.types.Operator

Add New CAM Operation

bl_idname = 'scene.cam_operation_add'[source]#
bl_label = 'Add New CAM Operation'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera operation based on the active object in the scene.

This method retrieves the active object from the Blender context and performs operations related to camera settings. It checks if an object is selected and retrieves its bounding box dimensions. If no object is found, it reports an error and cancels the operation. If an object is present, it adds a new camera operation to the scene, sets its properties, and ensures that a machine area object is present.

Parameters:

context – The context in which the operation is executed.

class CamOperationCopy[source]#

Bases: bpy.types.Operator

Copy CAM Operation

bl_idname = 'scene.cam_operation_copy'[source]#
bl_label = 'Copy Active CAM Operation'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera operation in the given context.

This method handles the execution of camera operations within the Blender scene. It first checks if there are any camera operations available. If not, it returns a cancellation status. If there are operations, it copies the active operation, increments the active operation index, and updates the name and filename of the new operation. The function also ensures that the new operation’s name is unique by appending a copy suffix or incrementing a numeric suffix.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the status of the operation,

either {‘CANCELLED’} if no operations are available or {‘FINISHED’} if the operation was successfully executed.

Return type:

dict

class CamOperationRemove[source]#

Bases: bpy.types.Operator

Remove CAM Operation

bl_idname = 'scene.cam_operation_remove'[source]#
bl_label = 'Remove CAM Operation'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera operation in the given context.

This function performs the active camera operation by deleting the associated object from the scene. It checks if there are any camera operations available and handles the deletion of the active operation’s object. If the active operation is removed, it updates the active operation index accordingly. Additionally, it manages a dictionary that tracks hidden objects.

Parameters:

context (bpy.context) – The Blender context containing the scene and operations.

Returns:

A dictionary indicating the result of the operation, either

{‘CANCELLED’} if no operations are available or {‘FINISHED’} if the operation was successfully executed.

Return type:

dict

class CamOperationMove[source]#

Bases: bpy.types.Operator

Move CAM Operation

bl_idname = 'scene.cam_operation_move'[source]#
bl_label = 'Move CAM Operation in List'[source]#
bl_options[source]#
direction: EnumProperty(name='Direction', items='UP', 'Up', '', 'DOWN', 'Down', '', description='Direction', default='DOWN')[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute a camera operation based on the specified direction.

This method modifies the active camera operation in the Blender context based on the direction specified. If the direction is ‘UP’, it moves the active operation up in the list, provided it is not already at the top. Conversely, if the direction is not ‘UP’, it moves the active operation down in the list, as long as it is not at the bottom. The method updates the active operation index accordingly.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the operation has finished, with the key ‘FINISHED’.

Return type:

dict

class CamOrientationAdd[source]#

Bases: bpy.types.Operator

Add Orientation to CAM Operation, for Multiaxis Operations

bl_idname = 'scene.cam_orientation_add'[source]#
bl_label = 'Add Orientation'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera orientation operation in Blender.

This function retrieves the active camera operation from the current scene, creates an empty object to represent the camera orientation, and adds it to a specified group. The empty object is named based on the operation’s name and the current count of objects in the group. The size of the empty object is set to a predefined value for visibility.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the operation’s completion status,

typically {‘FINISHED’}.

Return type:

dict

class CamBridgesAdd[source]#

Bases: bpy.types.Operator

Add Bridge Objects to Curve

bl_idname = 'scene.cam_bridges_add'[source]#
bl_label = 'Add Bridges / Tabs'[source]#
bl_options[source]#
classmethod poll(context)[source]#
execute(context)[source]#

Execute the camera operation in the given context.

This function retrieves the active camera operation from the current scene and adds automatic bridges to it. It is typically called within the context of a Blender operator to perform specific actions related to camera operations.

Parameters:

context – The context in which the operation is executed.

Returns:

A dictionary indicating the result of the operation, typically containing the key ‘FINISHED’ to signify successful completion.

Return type:

dict