Source code for cam

"""BlenderCAM '__init__.py' © 2012 Vilem Novak

Import Modules, Register and Unregister Classes
"""

# Python Standard Library
import subprocess
import sys

# pip Wheels
import shapely
import opencamlib

# Blender Library
import bpy
from bpy.props import (
    CollectionProperty,
    IntProperty,
    PointerProperty,
    StringProperty,
)
from bpy_extras.object_utils import object_data_add

# Relative Imports - from 'cam' module
from . import basrelief
from .autoupdate import (
    UpdateChecker,
    Updater,
    UpdateSourceOperator,
)
from .cam_operation import camOperation
from .chain import (
    camChain,
    opReference,
)
from .curvecamcreate import (
    CamCurveDrawer,
    CamCurveFlatCone,
    CamCurveGear,
    CamCurveHatch,
    CamCurveInterlock,
    CamCurveMortise,
    CamCurvePlate,
    CamCurvePuzzle,
)
from .curvecamequation import (
    CamCustomCurve,
    CamHypotrochoidCurve,
    CamLissajousCurve,
    CamSineCurve,
)
from .curvecamtools import (
    CamCurveBoolean,
    CamCurveConvexHull,
    CamCurveIntarsion,
    CamCurveOvercuts,
    CamCurveOvercutsB,
    CamCurveRemoveDoubles,
    CamMeshGetPockets,
    CamOffsetSilhouete,
    CamObjectSilhouete,
)
from .engine import (
    CNCCAM_ENGINE,
    get_panels,
)
from .machine_settings import machineSettings
from .ops import (
    CalculatePath,
    # bridges related
    CamBridgesAdd,
    CamChainAdd,
    CamChainRemove,
    CamChainOperationAdd,
    CamChainOperationRemove,
    CamChainOperationUp,
    CamChainOperationDown,
    CamOperationAdd,
    CamOperationCopy,
    CamOperationRemove,
    CamOperationMove,
    # 5 axis ops
    CamOrientationAdd,
    # shape packing
    CamPackObjects,
    CamSliceObjects,
    CAMSimulate,
    CAMSimulateChain,
    KillPathsBackground,
    PathsAll,
    PathsBackground,
    PathsChain,
    PathExport,
    PathExportChain,
    timer_update,
)
from .pack import PackObjectsSettings
from .pie_menu.pie_cam import VIEW3D_MT_PIE_CAM
from .pie_menu.pie_chains import VIEW3D_MT_PIE_Chains
from .pie_menu.pie_curvecreators import VIEW3D_MT_PIE_CurveCreators
from .pie_menu.pie_curvetools import VIEW3D_MT_PIE_CurveTools
from .pie_menu.pie_info import VIEW3D_MT_PIE_Info
from .pie_menu.pie_machine import VIEW3D_MT_PIE_Machine
from .pie_menu.pie_material import VIEW3D_MT_PIE_Material
from .pie_menu.pie_pack_slice_relief import VIEW3D_MT_PIE_PackSliceRelief
from .pie_menu.active_op.pie_area import VIEW3D_MT_PIE_Area
from .pie_menu.active_op.pie_cutter import VIEW3D_MT_PIE_Cutter
from .pie_menu.active_op.pie_feedrate import VIEW3D_MT_PIE_Feedrate
from .pie_menu.active_op.pie_gcode import VIEW3D_MT_PIE_Gcode
from .pie_menu.active_op.pie_movement import VIEW3D_MT_PIE_Movement
from .pie_menu.active_op.pie_operation import VIEW3D_MT_PIE_Operation
from .pie_menu.active_op.pie_optimisation import VIEW3D_MT_PIE_Optimisation
from .pie_menu.active_op.pie_setup import VIEW3D_MT_PIE_Setup
from .preferences import CamAddonPreferences
from .preset_managers import (
    AddPresetCamCutter,
    AddPresetCamMachine,
    AddPresetCamOperation,
    CAM_CUTTER_MT_presets,
    CAM_MACHINE_MT_presets,
    CAM_OPERATION_MT_presets,
)
from .slice import SliceObjectsSettings
from .ui import (
    CustomPanel,
    import_settings,
    VIEW3D_PT_tools_curvetools,
    VIEW3D_PT_tools_create,
    WM_OT_gcode_import,
)
from .ui_panels.area import CAM_AREA_Panel
from .ui_panels.chains import (
    CAM_CHAINS_Panel,
    CAM_UL_chains,
    CAM_UL_operations,
)
from .ui_panels.cutter import CAM_CUTTER_Panel
from .ui_panels.feedrate import CAM_FEEDRATE_Panel
from .ui_panels.gcode import CAM_GCODE_Panel
from .ui_panels.info import (
    CAM_INFO_Panel,
    CAM_INFO_Properties,
)
from .ui_panels.interface import (
    CAM_INTERFACE_Panel,
    CAM_INTERFACE_Properties,
)
from .ui_panels.machine import CAM_MACHINE_Panel
from .ui_panels.material import (
    CAM_MATERIAL_Panel,
    CAM_MATERIAL_PositionObject,
    CAM_MATERIAL_Properties,
)
from .ui_panels.movement import (
    CAM_MOVEMENT_Panel,
    CAM_MOVEMENT_Properties,
)
from .ui_panels.op_properties import CAM_OPERATION_PROPERTIES_Panel
from .ui_panels.operations import CAM_OPERATIONS_Panel
from .ui_panels.optimisation import (
    CAM_OPTIMISATION_Panel,
    CAM_OPTIMISATION_Properties,
)
from .ui_panels.pack import CAM_PACK_Panel
from .ui_panels.slice import CAM_SLICE_Panel
from .utils import (
    check_operations_on_load,
    updateOperation,
)


[docs] classes = [ # CamBackgroundMonitor # .autoupdate UpdateSourceOperator, Updater, UpdateChecker, # .chain opReference, camChain, # .curvecamcreate CamCurveDrawer, CamCurveFlatCone, CamCurveGear, CamCurveHatch, CamCurveInterlock, CamCurveMortise, CamCurvePlate, CamCurvePuzzle, # .curvecamequation CamCustomCurve, CamHypotrochoidCurve, CamLissajousCurve, CamSineCurve, # .curvecamtools CamCurveBoolean, CamCurveConvexHull, CamCurveIntarsion, CamCurveOvercuts, CamCurveOvercutsB, CamCurveRemoveDoubles, CamMeshGetPockets, CamOffsetSilhouete, CamObjectSilhouete, # .engine CNCCAM_ENGINE, # .machine_settings machineSettings, # .ops CalculatePath, # bridges related CamBridgesAdd, CamChainAdd, CamChainRemove, CamChainOperationAdd, CamChainOperationRemove, CamChainOperationUp, CamChainOperationDown, CamOperationAdd, CamOperationCopy, CamOperationRemove, CamOperationMove, # 5 axis ops CamOrientationAdd, # shape packing CamPackObjects, CamSliceObjects, CAMSimulate, CAMSimulateChain, KillPathsBackground, PathsAll, PathsBackground, PathsChain, PathExport, PathExportChain, # .pack PackObjectsSettings, # .preferences CamAddonPreferences, # .preset_managers CAM_CUTTER_MT_presets, CAM_OPERATION_MT_presets, CAM_MACHINE_MT_presets, AddPresetCamCutter, AddPresetCamOperation, AddPresetCamMachine, # .slice SliceObjectsSettings, # .ui and .ui_panels - the order will affect the layout import_settings, CAM_UL_operations, CAM_UL_chains, CAM_INTERFACE_Panel, CAM_INTERFACE_Properties, CAM_CHAINS_Panel, CAM_OPERATIONS_Panel, CAM_INFO_Properties, CAM_INFO_Panel, CAM_MATERIAL_Panel, CAM_MATERIAL_Properties, CAM_MATERIAL_PositionObject, CAM_OPERATION_PROPERTIES_Panel, CAM_OPTIMISATION_Panel, CAM_OPTIMISATION_Properties, CAM_AREA_Panel, CAM_MOVEMENT_Panel, CAM_MOVEMENT_Properties, CAM_FEEDRATE_Panel, CAM_CUTTER_Panel, CAM_GCODE_Panel, CAM_MACHINE_Panel, CAM_PACK_Panel, CAM_SLICE_Panel, VIEW3D_PT_tools_curvetools, VIEW3D_PT_tools_create, CustomPanel, WM_OT_gcode_import, # .pie_menu and .pie_menu.active_op - placed after .ui in case inheritance is possible VIEW3D_MT_PIE_CAM, VIEW3D_MT_PIE_Machine, VIEW3D_MT_PIE_Material, VIEW3D_MT_PIE_Operation, VIEW3D_MT_PIE_Chains, VIEW3D_MT_PIE_Setup, VIEW3D_MT_PIE_Optimisation, VIEW3D_MT_PIE_Area, VIEW3D_MT_PIE_Movement, VIEW3D_MT_PIE_Feedrate, VIEW3D_MT_PIE_Cutter, VIEW3D_MT_PIE_Gcode, VIEW3D_MT_PIE_Info, VIEW3D_MT_PIE_PackSliceRelief, VIEW3D_MT_PIE_CurveCreators, VIEW3D_MT_PIE_CurveTools, # .cam_operation - last to allow dependencies to register before it camOperation, ]
[docs] def register() -> None: for cls in classes: bpy.utils.register_class(cls) basrelief.register() bpy.app.handlers.frame_change_pre.append(timer_update) bpy.app.handlers.load_post.append(check_operations_on_load) # bpy.types.INFO_HT_header.append(header_info) scene = bpy.types.Scene scene.cam_active_chain = IntProperty( name="CAM Active Chain", description="The selected chain", ) scene.cam_active_operation = IntProperty( name="CAM Active Operation", description="The selected operation", update=updateOperation, ) scene.cam_chains = CollectionProperty( type=camChain, ) scene.cam_import_gcode = PointerProperty( type=import_settings, ) scene.cam_machine = PointerProperty( type=machineSettings, ) scene.cam_operations = CollectionProperty( type=camOperation, ) scene.cam_pack = PointerProperty( type=PackObjectsSettings, ) scene.cam_slice = PointerProperty( type=SliceObjectsSettings, ) scene.cam_text = StringProperty() scene.interface = PointerProperty( type=CAM_INTERFACE_Properties, ) for panel in get_panels(): panel.COMPAT_ENGINES.add("CNCCAM_RENDER") wm = bpy.context.window_manager addon_kc = wm.keyconfigs.addon km = addon_kc.keymaps.new(name='Object Mode') kmi = km.keymap_items.new( "wm.call_menu_pie", 'C', 'PRESS', alt=True, ) kmi.properties.name = 'VIEW3D_MT_PIE_CAM' kmi.active = True
[docs] def unregister() -> None: for cls in classes: bpy.utils.unregister_class(cls) basrelief.unregister() scene = bpy.types.Scene # cam chains are defined hardly now. del scene.cam_chains del scene.cam_active_chain del scene.cam_operations del scene.cam_active_operation del scene.cam_machine del scene.cam_import_gcode del scene.cam_text del scene.cam_pack del scene.cam_slice for panel in get_panels(): if 'CNCCAM_RENDER' in panel.COMPAT_ENGINES: panel.COMPAT_ENGINES.remove('CNCCAM_RENDER') wm = bpy.context.window_manager active_kc = wm.keyconfigs.active for key in active_kc.keymaps['Object Mode'].keymap_items: if (key.idname == 'wm.call_menu' and key.properties.name == 'VIEW3D_MT_PIE_CAM'): active_kc.keymaps['Object Mode'].keymap_items.remove(key)