kopia lustrzana https://github.com/vilemduha/blendercam
158 wiersze
6.2 KiB
Python
158 wiersze
6.2 KiB
Python
"""Fabex 'machine.py'
|
|
|
|
'CAM Machine' panel in Properties > Render
|
|
"""
|
|
|
|
import bpy
|
|
from bpy.types import Panel
|
|
|
|
from .parent_panel import CAMParentPanel
|
|
|
|
|
|
class CAM_MACHINE_Panel(CAMParentPanel, Panel):
|
|
"""CAM Machine Panel"""
|
|
|
|
bl_space_type = "PROPERTIES"
|
|
bl_region_type = "WINDOW"
|
|
bl_context = "render"
|
|
|
|
bl_label = "[ Machine ]"
|
|
bl_idname = "FABEX_PT_CAM_MACHINE"
|
|
panel_interface_level = 0
|
|
always_show_panel = True
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
Panel.__init__(self, *args, **kwargs)
|
|
CAMParentPanel.__init__(self, *args, **kwargs)
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
layout.use_property_split = True
|
|
layout.use_property_decorate = False
|
|
|
|
# Presets
|
|
if self.level >= 1:
|
|
row = layout.row(align=True)
|
|
row.menu("CAM_MACHINE_MT_presets", text=bpy.types.CAM_MACHINE_MT_presets.bl_label)
|
|
row.operator(
|
|
"render.cam_preset_machine_add",
|
|
text="",
|
|
icon="ADD",
|
|
)
|
|
row.operator(
|
|
"render.cam_preset_machine_add",
|
|
text="",
|
|
icon="REMOVE",
|
|
).remove_active = True
|
|
|
|
box = layout.box()
|
|
col = box.column(align=True)
|
|
col.scale_y = 1.2
|
|
# Post Processor
|
|
col.prop(self.machine, "post_processor")
|
|
# System
|
|
row = col.row(align=True)
|
|
row.prop(context.scene.unit_settings, "system")
|
|
row.prop(context.scene.unit_settings, "length_unit", text="")
|
|
|
|
# Collet Size
|
|
if self.level >= 2:
|
|
box.prop(self.machine, "collet_size")
|
|
|
|
# Working Area
|
|
box.prop(self.machine, "working_area")
|
|
|
|
# Supplemental Axis
|
|
if self.level >= 3:
|
|
row = box.row(align=True)
|
|
row.prop(self.machine, "axis_4")
|
|
row.prop(self.machine, "axis_5")
|
|
|
|
# Position Definitions
|
|
if self.level >= 2:
|
|
header, panel = layout.panel_prop(self.machine, "use_position_definitions")
|
|
header.label(text="Position Definitions")
|
|
if panel:
|
|
panel.prop(self.machine, "starting_position")
|
|
panel.prop(self.machine, "mtc_position")
|
|
panel.prop(self.machine, "ending_position")
|
|
|
|
# Feedrates
|
|
if self.level >= 1:
|
|
header, panel = layout.panel(idname="feedrate", default_closed=True)
|
|
header.label(text="Feedrate (/min)")
|
|
if panel:
|
|
panel.prop(self.machine, "feedrate_default", text="Default")
|
|
col = panel.column(align=True)
|
|
col.prop(self.machine, "feedrate_min", text="Minimum")
|
|
col.prop(self.machine, "feedrate_max", text="Maximum")
|
|
|
|
# Spindle Speeds
|
|
# TODO: spindle default and feedrate default should become part of the cutter definition...
|
|
header, panel = layout.panel(idname="spindle", default_closed=True)
|
|
header.label(text="Spindle Speed (RPM)")
|
|
if panel:
|
|
panel.prop(self.machine, "spindle_default", text="Default")
|
|
col = panel.column(align=True)
|
|
col.prop(self.machine, "spindle_min", text="Minimum")
|
|
col.prop(self.machine, "spindle_max", text="Maximum")
|
|
panel.prop(self.machine, "spindle_start_time", text="Start Delay (seconds)")
|
|
# Spindle Slow Start
|
|
if self.level >= 2:
|
|
subheader, subpanel = panel.panel(idname="slow_start", default_closed=True)
|
|
subheader.label(text="Slow Start (Ramp-Up) (*EXPERIMENTAL, grbl only*)")
|
|
col = subpanel.column(align=True)
|
|
if subpanel:
|
|
subpanel.use_property_split = True
|
|
col.prop(self.machine, "spindle_slow_start_enable", text="Slow Start")
|
|
subcol = col.column(align=True)
|
|
subcol.enabled = self.machine.spindle_slow_start_enable
|
|
subcol.prop(self.machine, "spindle_slow_start_steps", text="Steps")
|
|
subcol.prop(self.machine, "spindle_slow_start_skip_threshold", text="Skip Small Increase (RPM)")
|
|
subcol.prop(self.machine, "spindle_slow_start_total_time", text="Total Time (sec)")
|
|
|
|
|
|
# Gcode Options
|
|
if self.level >= 1:
|
|
header, panel = layout.panel(idname="gcode", default_closed=True)
|
|
header.label(text="Machine G-code")
|
|
if panel:
|
|
panel.use_property_split = False
|
|
col = panel.column()
|
|
# Tool Options
|
|
if self.level >= 2:
|
|
col.prop(self.machine, "output_tool_definitions")
|
|
subheader, subpanel = col.panel(idname="tool_change", default_closed=False)
|
|
subheader.prop(self.machine, "output_tool_change")
|
|
if subpanel:
|
|
subpanel.enabled = self.machine.output_tool_change
|
|
subpanel.prop(self.machine, "output_G43_on_tool_change")
|
|
|
|
# Block Numbers
|
|
if self.level >= 2:
|
|
subheader, subpanel = col.panel(idname="block_numbers", default_closed=True)
|
|
subheader.prop(self.machine, "output_block_numbers")
|
|
if subpanel:
|
|
subpanel.enabled = self.machine.output_block_numbers
|
|
subpanel.use_property_split = True
|
|
column = subpanel.column(align=True)
|
|
column.prop(self.machine, "start_block_number")
|
|
column.prop(self.machine, "block_number_increment")
|
|
|
|
# Split Files
|
|
if self.level >= 2:
|
|
subheader, subpanel = col.panel(idname="split", default_closed=False)
|
|
subheader.prop(self.machine, "eval_splitting")
|
|
if subpanel:
|
|
subpanel.enabled = self.machine.eval_splitting
|
|
subpanel.use_property_split = True
|
|
subpanel.prop(self.machine, "split_limit")
|
|
|
|
# Hourly Rate
|
|
layout.prop(
|
|
self.machine,
|
|
"hourly_rate",
|
|
text="Price ($/hour)",
|
|
)
|