grid-apps-cmms/web/kiri/lang/en.js
Stewart Allen e0b1c4e31f CAM routing refactor, area operation, and taper ball tool implementation
Major routing improvements:
- Refactor depth-first routing algorithm for better path optimization
- Reimplemented outline, roughing, pocket, and trace as area operation wrappers
- Add pocket shadow travel routing with optimized descent using travel bounds
- Improve contour routing with arc detection and polyEmit arc strategy
- Add area smoothing and ease-down options
- Fix outline handling with thru holes and surface reversal on tip2tip
- Move widget shadow methods into widget class for faster hole detection
- Better camInnerFirst support and proper feed/plunge defaults

Tool system improvements:
- Implement taper ball tool type with full support
- Add renderTool2() for profile-based visualization
- Convert tool menu to init code with bound vars
- Fix auto tool and auto spindle for prep operations
- Update tool profile generation for taperball geometry
- Add calcTaperBallExtent() for proper ball tangency calculations

Code cleanup:
- Remove duplicated slicer code from specialized slicers
- Asyncify shadowAt operations
- Deprecate pocket engrave operation
- Simplify upNover implementation
- Fix animation with new tool+settings requirements
2025-12-06 00:09:17 -05:00

1003 lines
48 KiB
JavaScript

// English language map. Other localization maps will
// defer to English map for any missing key/value pairs
self.lang['en'] =
self.lang['en-us'] = {
// common keys and menus
animate: "animate", // CAM animate button
arrange: "arrange", // layout workspace objects
axis: "axis", // left object scale pop menu
back: "back",
clear: "clear", // clear workspace (remove all objects)
copy: "copy",
clone: "clone", // create duplicate
delete: "delete",
detail: "detail",
done: "done",
edit: "edit",
enable: "enable",
disable: "disable",
donate: "donate",
export: "export",
files: "files",
filter: "filter",
front: "front",
fullscreen: "fullscreen",
ghost: "ghost", // left render pop menu (wireframe)
help: "help",
hide: "hide", // left render pop menu (invisible)
home: "home",
info: "info", // info menu
import: "import",
install: "install",
language: "language",
left: "left",
machines: "machines", // device or machine
mesh: "mesh", // mesh editing
metric: "metric",
name: "name",
new: "new", // file new
off: "off", // turn something off (like a lightbulb)
on: "on", // turn something on (like a lightbulb)
profs: "profiles", // right menu "profiles"
prefs: "preferences", // right menu "preferences"
preview: "preview",
quit: "quit", // quit/exit the application (electron)
recent: "recent",
rename: "rename",
render: "render", // left render pop menu
reset: "reset",
right: "right",
rotate: "rotate", // left rotate pop menu
save: "save",
scale: "scale", // left object scale pop menu
select: "select",
setup: "setup",
settings: "settings",
size: "size",
slice: "slice",
solid: "solid", // view type pop menu
start: "start",
tool: "tool",
tools: "tools", // CAM tool menu button
top: "top",
type: "type", // CAM tool type
uninstall: "uninstall",
version: "version",
view: "view", // left view pop menu
wire: "wire", // left render pop menu
volume: "volume", // device build area
acct_xpo: ["make a backup of your device","and device profiles with the","option to include workspace","objects and positions"],
// RIGHT-CLICK CONTEXT MENU
rc_clws: "clear workspace",
rc_xpws: "export workspace",
rc_lafl: "lay flat",
rc_mirr: "mirror",
rc_dupl: "duplicate",
rc_focs: "set focus",
rc_heal: "heal meshes",
rc_swap: "replace vertices",
rc_xobj: "export OBJ",
rc_xstl: "export STL",
sb_info: ["print speed","in mm/s"],
rc_merg: "merge object meshes",
rc_splt: "isolate bodies",
// DEVICE MENU and related dialogs
dm_sldt: "select a device type",
dm_stdd: "standard devices",
dm_mydd: "my devices",
dm_seld: "selected device",
dm_rcnt: "recent files",
dm_savs: "settings",
dm_appp: "Application Preferences",
// CAM Tool Dialog
td_tyem: "end", // end mill
td_tybm: "ball", // ball mill
td_tytm: "taper", // taper mill
td_tydr: "drill", // drill
td_tonm: "tool #",
td_shft: "shaft", // endmill shaft specs
td_flut: "flute", // endmill flute specs
td_tapr: "taper", // endmill taper specs
// DEVICE dialog groups
dv_gr_dev: "device",
dv_gr_ext: "extruder",
dv_gr_out: "output",
dv_gr_gco: "gcode macros",
// DEVICE dialog (_s = label, _l = hover help)
dv_name_s: "name",
dv_name_l: "device name",
dv_fila_s: "filament",
dv_fila_l: "diameter in millimeters",
dv_nozl_s: "nozzle",
dv_nozl_l: "diameter in millimeters",
dv_bedw_s: "width",
dv_bedw_l: "workspace units",
dv_bedd_s: "depth",
dv_bedd_l: "workspace units",
dv_bedh_s: "height",
dv_bedh_l: ["max build height","in workspace units"],
dv_rezx_s: "resolution X",
dv_rezx_l: ["x resolution"],
dv_rezy_s: "resolution Y",
dv_rezy_l: ["y resolution"],
dv_zmax_s: "Z axis speed limit",
dv_zmax_l: ["maximum Z axis speed","in millimeters / second","0 to disable"],
dv_time_s: "output time factor",
dv_time_l: ["modifier to print time estimates","in the gcode export dialog.","raise or lower value based on your","predicted vs observed print times"],
dv_spmx_s: "max spindle",
dv_spmx_l: ["max spindle rpm speed","0 to disable"],
dv_xtab_s: "absolute positioning",
dv_xtab_l: "extrusion moves absolute",
dv_orgc_s: "origin center",
dv_orgc_l: "bed origin center",
// dv_orgt_s: "origin top",
// dv_orgt_l: "part z origin top",
dv_bedc_s: "circular bed",
dv_bedc_l: "device bed is circular",
dv_belt_s: "belt bed",
dv_belt_l: "continuous printing bed",
dv_fsrc_s: "filament source",
dv_fsrc_l: ["how filament is fed\ninto the extruder"],
dv_retr_s: "firmware retract",
dv_retr_l: ["device fimware supports G10/G11"],
dv_fanp_s: "cooling",
dv_fanp_l: "set cooling fan power",
dv_feat_s: "feature",
dv_feat_l: "inject code for specified features",
dv_prog_s: "progress",
dv_prog_l: "output on each % progress",
dv_layr_s: "layer",
dv_layr_l: ["output at each","layer change"],
dv_tksp_s: "token spacer",
dv_tksp_l: ["add a space between","gcode axis parameters","G0X0Y0X0","vs","G0 X0 Y0 Z0"],
dv_strc_s: "strip comments",
dv_strc_l: ["strip gcode comments","comments begin with ;"],
dv_fext_s: "file extension",
dv_fext_l: "file name extension",
dv_lazr_s: "enable laser",
dv_lazr_l: ["enable laser operations"],
dv_dwll_s: "dwell",
dv_dwll_l: "gcode dwell script",
dv_tool_s: "tool",
dv_tool_l: "tool change script",
dv_sspd_s: "spindle",
dv_sspd_l: "set spindle speed",
dv_paus_s: "pause",
dv_paus_l: "gcode pause script",
dv_head_s: "header",
dv_head_l: "gcode header script",
dv_foot_s: "footer",
dv_foot_l: "gcode footer script",
dv_pext_s: "exterior",
dv_pext_l: ["gcode script run before","printing exterior lines"],
dv_pint_s: "interior",
dv_pint_l: ["gcode script run before","printing interior lines"],
dv_lzon_s: "laser on",
dv_lzon_l: "gcode laser on script",
dv_lzof_s: "laser off",
dv_lzof_l: "gcode laser off script",
dv_waon_s: "water on",
dv_waon_l: "gcode water pump on script",
dv_waof_s: "water off",
dv_waof_l: "gcode water pump off script",
dv_dkon_s: "knife down",
dv_dkon_l: "gcode knife down script",
dv_dkof_s: "knife up",
dv_dkof_l: "gcode knife up script",
dv_exts_s: "select",
dv_exts_l: "gcode run to enable this extruder",
dv_dext_s: "deselect",
dv_dext_l: "gcode run before enabling another extruder",
dv_extd_s: "deselect",
dv_extd_l: "gcode to deselect this extruder",
dv_exox_s: "offset x",
dv_exox_l: "nozzle offset x",
dv_exoy_s: "offset y",
dv_exoy_l: "nozzle offset y",
dv_paid_s: "printer id",
dv_paid_l: ["unique printer identifier","may be made up"],
dv_paps_s: "ping spacing",
dv_paps_l: ["minimum filament consumption","between pings in millimeters","recommended 500 - 1000","0 = disable pings"],
dv_pafe_s: "feed length",
dv_pafe_l: ["feeder tube length in millimeters","short=570, medium=800, long=1100"],
dv_papl_s: "push length",
dv_papl_l: ["distance between extruder gear","and nozzle tip in millimeters"],
dv_paof_s: "offset length",
dv_paof_l: ["length to add or remove from","the first segment in millimeters","usually 0"],
dv_pahe_s: "heating time",
dv_pahe_l: ["offset from default"],
dv_paco_s: "cooling time",
dv_paco_l: ["offset from default"],
dv_pacm_s: "compression time",
dv_pacm_l: ["offset from default"],
// MODE
mo_menu: "mode",
mo_fdmp: "FDM Print",
mo_slap: "SLA Print",
mo_lazr: "Laser Cut",
mo_cncm: "CNC Mill",
// MODE INFO (right panel)
mi_devi: "Device",
mi_prof: "Profile",
// SETUP
su_menu: "setup",
su_devi: "Devices",
su_tool: "Tools",
su_locl: "Local",
su_xprt: "Export",
su_help: "Help",
// LOAD
fe_menu: "file",
fn_recn: "Recent",
fn_impo: "Import",
// FUNCTION
fn_menu: "action",
fn_arra: "Arrange",
fn_slic: "Slice",
fn_prev: "Preview",
fn_expo: "Export",
// VIEW
vu_menu: "view",
vu_home: "Home",
vu_rset: "Reset",
vu_sptp: "Top",
vu_spfr: "Front",
vu_splt: "Left",
vu_sprt: "Right",
// WORKSPACE
ws_menu: "view",
ws_save: "Save",
ws_cler: "Clear",
// RIGHT PANEL
rp_objs: "objects",
rp_rngs: "ranges",
rp_opls: "operation list",
// OPTIONS
op_menu: "interface",
op_disp: "display",
op_xprt_s: "expert",
op_xprt_l: "show more settings options",
op_decl_s: "show decals",
op_decl_l: "show device decals and logos",
op_shny_s: "detail render",
op_shny_l: "choose a slice render method that is slower and uses specular highlighting. this makes it easier to see detail in some models at the expense of render speed",
op_devl_s: "developer",
op_devl_l: ["show developer options","enable developer debugging"],
op_hopo_s: "hover pop",
op_hopo_l: ["enable menu hover","to activate"],
op_dark_s: "dark mode",
op_dark_l: "dark mode interface",
op_comp_s: "compact ui",
op_comp_l: ["compact user interface","better for small screens","and tablets"],
op_shor_s: "show origin",
op_shor_l: "show device or process origin",
op_shru_s: "show rulers",
op_shru_l: ["show axes rulers","on major gridlines"],
op_sped_s: "show speeds",
op_sped_l: ["show speed to color bar","in preview mode"],
op_auto_s: "auto layout",
op_auto_l: ["automatically layout platform","when new items added"],
op_free_s: "free layout",
op_free_l: ["permit dragable layout","no effect in laser mode"],
op_spcr_s: "spacing",
op_spcr_l: ["spacing between objects","during auto layout","in workspace units","in belt mode, use 0","to auto-space by height"],
op_spoa_s: "edge angle",
op_spoa_l: ["surface angle difference triggering an edge trace"],
op_spcx_s: "random X",
op_spcx_l: ["in belt mode, randomly","layout the part on X","to even belt wear"],
op_orth_s: "orthographic",
op_orth_l: ["orthographic display","requires page refresh"],
op_anta_s: "anti-alias",
op_anta_l: ["smooth display. better but slower","requires a page refresh or reload"],
op_invr_s: "invert zoom",
op_invr_l: ["invert mouse wheel","scroll zoom"],
op_save_s: "auto save",
op_save_l: ["preserve objects in workspace","between application reloads"],
op_line_s: "line type",
op_line_l: ["line style for path rendering","impacts 3d performance","path: 3d best","flat: 2d good","line = 1d fast"],
op_unit_s: "units",
op_unit_l: ["workspace units affects","speeds and distances"],
op_anim_s: "animate",
op_anim_l: ["animation mesh density","higher is more dense","takes more memory","and is slower"],
op_mani_s: "manifold",
op_mani_l: ["in stock indexed mode","use boolean visualiation","this is very expensive","and likely very slow"],
op_exgl_l: ["show Grid:Local devices in export dialog","includes Grid:Bots and OctoPrint plugins"],
op_exgh_l: ["legacy Grid:Host local network support"],
op_exop_l: ["legacy OctoPrint local network support","Grid:Space OctoPrint plugin recommended"],
lo_menu: "layout",
pt_menu: "slicer",
pt_deci_s: "decimate",
pt_deci_l: ["enable or disable point decimation","during port import. for faster slicing","and lower memory usage"],
pt_qual_s: "detail",
pt_qual_l: ["level of detail to retain during slicing operations. lower is faster and uses less memory. large scale models often do no benefit from higher detail. instead it my only result in memory and processing problems. reduce this value if you are getting out of memory errors."],
pt_heal_s: "heal mesh",
pt_heal_l: ["attempt to heal non-manifold meshes during slicing. may increase slicing time. enables a warning when non-manifold geometries are detected."],
pt_thrd_s: "threaded",
pt_thrd_l: ["use parallel processing when browser supports nested workers. may increase memory pressure on larger models. disable if you are getting out of memory errors"],
pt_assy_s: "web asm",
pt_assy_l: ["use web assembly when supported by browser. if you experience artifacts or memory errors, try disabling this."],
pt_wgpu_s: "web gpu",
pt_wgpu_l: ["use web gpu when supported by browser. if you experience artifacts or memory errors, try disabling this."],
xp_menu: "exports",
// SETTINGS
se_menu: "profile",
se_load: "load",
se_save: "save",
// FDM LAYERS
sl_menu: "layers",
sl_angl_s: "slice angle",
sl_angl_l: ["slice angle bias in degrees"],
sl_lahi_s: "layer height",
sl_lahi_l: ["height of each slice","layer in millimeters"],
ad_minl_s: "layer minimum",
ad_minl_l: ["adaptive min layer height","in millimeters","must be non-zero"],
ad_adap_s: "adaptive height",
ad_adap_l: ["use adaptive layer heights","with 'layer height' as max","and 'layer min' as the min"],
sl_ltop_s: "top layers",
sl_ltop_l: ["number of solid layers at the top of the print or on flat areas facing up"],
sl_lsld_s: "solid layers",
sl_lsld_l: ["solid fill areas computed","from bridges and flat areas","detected betwen sliced layers"],
sl_lbot_s: "base layers",
sl_lbot_l: ["number of solid layers at bottom of the print or under bridge spans"],
// FDM WALLS
sw_menu: "shells",
sl_shel_s: "shell count",
sl_shel_l: ["number of perimeter","walls to generate"],
ad_thin_s: "thin walls",
ad_thin_l: ["detect and fill gaps","between shell walls"],
// FDM SHELLS
sl_line_s: "line width",
sl_line_l: ["extrusion width in millimeters","0 = nozzle diameter"],
sl_ordr_s: "shell order",
sl_ordr_l: ["output shell order","inside to outside","or outside to inside","affects surface quality"],
sl_strt_s: "start point",
sl_strt_l: ["layer starting point","last = where last layer ended","center = part center","origin = device origin","random = yolo"],
sl_ofin_s: "shell inner offset",
sl_ofin_l: ["inner hole perimeter offset","in millimeters"],
sl_ofot_s: "shell outer offset",
sl_ofot_l: ["outer wall perimeter offset","in millimeters"],
// FDM SOLID
fs_menu: "solid fill",
fi_over_s: "fill overlap",
fi_over_l: ["overlap between shells and solid or sparse infill. can improve bonding to shells","as fraction of line width","0.0 - 1.0"],
fi_angl_s: "start angle",
fi_angl_l: ["starting angle in degrees","90 degrees added to ","each following layer","applies only to solid layers"],
fi_grow_s: "area expand",
fi_grow_l: ["expand projected solids","can help with solid areas","over sparse infill areas","units in millimeters"],
// FDM FILL
fi_menu: "sparse fill",
fi_type: "fill type",
fi_pcnt_s: "fill amount",
fi_pcnt_l: ["fill density values","0.0 - 1.0"],
fi_rept_s: "fill repeat",
fi_rept_l: ["number of times to repeat","unchanged fill layers"],
// fi_rate_s: "print speed",
fi_rate_l: ["extrusion speed for infill","set to 0 to use default","output print speeds"],
// FDM HEATING
fh_menu: "heating",
// FDM COOLING
fc_menu: "cooling",
// FDM FIRST LAYER
fl_menu: "base",
fl_lahi_s: "layer height",
fl_lahi_l: ["height of each slice","in millimeters","should be >= slice height"],
fl_rate_s: "shell speed",
fl_rate_l: ["shell printing max speed","in millimeters / second"],
fl_frat_s: "fill speed",
fl_frat_l: ["fill printing max speed","in millimeters / second"],
fl_mult_s: "flow factor",
fl_mult_l: ["extrusion multiplier","0.0 - 2.0"],
fl_sfac_s: "width factor",
fl_sfac_l: ["multiplier on nozzle size","changes line spacing"],
fl_skrt_s: "skirt count",
fl_skrt_l: ["number of first-layer offset","brims to generate"],
fl_skro_s: "skirt offset",
fl_skro_l: ["skirt offset from part","in millimeters","when rafts are used","this is the raft offset"],
fl_nozl_s: "nozzle temp",
fl_nozl_l: ["degrees in celsius","output setting used","when this is zero"],
fl_bedd_s: "bed temp",
fl_bedd_l: ["degrees in celsius","output setting used","when this is zero"],
fr_spac_s: "raft gap",
fr_spac_l: ["additional layer spacing","between 1st layer and raft","in millimeters"],
fr_nabl_s: "raft enable",
fr_nabl_l: ["create a raft under the","model for better adhesion","uses skirt offset and","disables skirt output"],
fr_draf_s: "draft shield",
fr_draf_l: ["extend skirt to height of part","which acts as a shield against","drafts and traps hot air"],
// FDM BELT ONLY
fl_zoff_s: "belt offset",
fl_zoff_l: ["height offset from belt","of lowest extrusion","in millimeters"],
fl_flat_s: "flatten",
fl_flat_l: ["flatten to the belt any point","height less than this value","in millimeters"],
fl_brim_s: "brim sides",
fl_brim_l: ["add brim to part perimeter","size is width in millimeters","0 to disable"],
fl_brin_s: "brim interior",
fl_brin_l: ["add brim to part interior","when interior voids exist","size is width in millimeters","0 to disable"],
fl_brmn_s: "brim trigger",
fl_brmn_l: ["add brims only when segment","facing belt is shorter than this","value in millimeters","0 = Infinity"],
fl_brco_s: "brim comb",
fl_brco_l: ["add brim gaps","every n lines","0 to disable"],
fl_brgp_s: "brim gap",
fl_brgp_l: ["spacing between brim and part","in millimeters"],
fl_bled_s: "part anchor",
fl_bled_l: ["belt part anchor","at start of print","in millimeters"],
fl_blmp_s: "anchor bump",
fl_blmp_l: ["add a bump to the start of","an anchor to help it peel","off at the end of the belt","in millimeters"],
// FDM SUPPORT
sp_menu: "support",
sp_detect: "detect",
sp_dens_s: "density",
sp_dens_l: ["fraction 0.0 - 1.0","recommended 0.15","0 to disable"],
sp_size_s: "pillar size",
sp_size_l: ["pillar width in millimeters","smaller values exponentially","increase detection times"],
sp_offs_s: "part offset",
sp_offs_l: ["offset from part","in millimeters"],
sp_gaps_s: "gap layers",
sp_gaps_l: ["number of layers","offset from part"],
sp_span_s: "max span",
sp_span_l: ["unsupported span that causes","a new support to be generated","in millimeters"],
sp_angl_s: "max angle",
sp_angl_l: ["max overhang angle before","supporting pillar is generated","normal values 45-60","belt values 0-10"],
sp_area_s: "min area",
sp_area_l: ["minimum area for","a support column","in millimeters","smaller values will","slow detection"],
sp_xpnd_s: "expand",
sp_xpnd_l: ["expand support area","beyond part boundary","in millimeters"],
sp_grow_s: "grow",
sp_grow_l: ["grow support column to fill small gaps","in millimeters"],
sp_nozl_s: "extruder",
sp_nozl_l: ["in multi-extruder systems","the extruder to use for","support material"],
sp_outl_s: "enclosed",
sp_outl_l: ["enclose support pattern","inside a perimeter shell"],
sp_auto_s: "automatic",
sp_auto_l: ["enable generated supports","using at-slice-time geometry","supports will only appear","after slicing completes"],
// CNC COMMON terms
cc_tool: "tool",
cc_offs_s: "offset",
cc_offs_l: ["offset tool center","from chosen path"],
cc_spnd_s: "spindle rpm",
cc_spnd_l: ["spindle speed in","revolutions / minute"],
cc_sovr_s: "step over",
cc_sovr_l: ["a fraction of tool diameter between 0 and 1. values greater than 0.49 may result in uncut areas or undesirable artifacts."],
cc_sovc_s: "wide steps",
cc_sovc_l: ["number of wide cutout steps"],
cc_sang_s: "step angle",
cc_sang_l: ["rotation in degrees between lathe axial points"],
cc_sdwn_s: "step down",
cc_sdwn_l: ["step down depth","for each pass","in workspace units","0 to disable"],
cc_thru_s: "cut thru",
cc_thru_l: ["additional cut depth below trace bottom"],
cc_offd_s: "offset",
cc_offd_l: ["overrides default offset distance (which is the tool radius) when set to any value but zero"],
cc_feed_s: "feed rate",
cc_feed_l: ["max cutting speed in","workspace units / minute"],
cc_plng_s: "plunge rate",
cc_plng_l: ["max z axis speed in","workspace units / minute"],
cc_sngl_s: "select lines only",
cc_sngl_l: ["select only single edges","instead of connected polylines"],
cc_sele_s: "select",
cc_sele_l: ["select lines for follow","select loops for clear","select surface for pocket"],
// CNC COMMON
cc_menu: "limits",
cc_rapd_s: "feed rate",
cc_rapd_l: ["max xy cutting feedrate","in workspace units / minute"],
cc_rzpd_s: "plunge rate",
cc_rzpd_l: ["max z cutting plunge rate","in workspace units / minute"],
// CNC LEVELING
cc_loff_s: "z offset",
cc_loff_l: ["distance from stock face","in workspace units"],
cc_lxyo_s: "xy offset",
cc_lxyo_l: ["xy offset from part boundary as a fraction of the tool diameter (0 - 1.0)"],
cc_lsto_s: "stock",
cc_lsto_l: ["use stock area instead of part area"],
// CNC ROUGHING
cr_menu: "rough",
cr_lsto_s: "leave stock",
cr_lsto_l: ["horizontal offset from vertical faces","stock to leave for finishing pass","in workspace units"],
cr_lstz_s: "leave stock z",
cr_lstz_l: ["vertical offset for roughing passes in workspace units. best for roughing curved surfaces."],
cr_ease_s: "ease down",
cr_ease_l: ["plunge cuts will","spiral down or ease","along a linear path"],
cr_clst_s: "clear stock",
cr_clst_l: ["in indexed mode, clear entire stock area, not just to part periemter"],
cr_clrt_s: "clear top",
cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"],
cr_olin_s: "inside only",
cr_olin_l: ["limit cutting to","inside part boundaries"],
// CNC OUTLINE
co_menu: "outline",
co_merg_s: "merge overlap",
co_merg_l: ["merge overlapping lines to prevent overcutting into adjacent solids"],
co_dogb_s: "dogbones",
co_dogb_l: ["insert dogbone cuts","into inside corners"],
co_dogr_s: "reverse bones",
co_dogr_l: ["reverse dogbone direction"],
co_wide_s: "wide cutout",
co_wide_l: ["widen outside cutout paths","for deep cuts in hard material"],
co_omit_s: "omit through",
co_omit_l: "eliminate thru holes",
co_olen_s: "enable",
co_olen_l: "enabled outline cutting",
// CNC CONTOUR
cn_menu: "contour",
cf_angl_s: "max angle",
cf_angl_l: ["changes in z that result in angles greater than this are considered vertical and omitted from curves"],
cf_leav_s: "leave stock",
cf_leav_l: ["amount of stock to leave above part surface"],
cf_botm_s: "z bottom",
cf_botm_l: ["obey z bottom limit"],
cf_curv_s: "curves only",
cf_curv_l: ["limit linear cleanup","to curved surfaces"],
cf_olin_s: "inside only",
cf_olin_l: ["limit cutting to","inside part boundaries"],
cf_linx_s: "enable y pass",
cf_linx_l: "linear y-axis finishing",
cf_liny_s: "enable x pass",
cf_liny_l: "linear x-axis finishing",
// CNC TRACE
cu_menu: "trace",
cu_type_s: "type",
cu_type_l: ["clear = clear a closed-line pocket","follow = tool tip follows line","with offset option when closed"],
// CNC POCKET
cp_xpnd_s: "expand",
cp_xpnd_l: ["grow (+) or shrink (-) selected areas","contour uses entire selected area","non-contour defaults to tool radius","in workspace units"],
cp_smoo_s: "smooth",
cp_smoo_l: ["clean up jagged edges caused by angled walls. can speedup and improve pocketing for detailed geometries. recommend starting with values around 1 if slicing takes too long or the contours look jagged"],
cp_foll_s: "selection",
cp_foll_l: ["curvature selection limit in degrees. values closer to 0 will restrict selections to flatter surfaces"],
cp_refi_s: "refine",
cp_refi_l: ["number of refining passes to perform on contoured polylines. meant to address Z delta sawtoothing caused by faced geometries whereas smoothing handles XY. values > 10 work well for gently contoured geometries with significant Z movement."],
cp_cont_s: "contour",
cp_cont_l: ["ignore interior voids and features"],
cp_outl_s: "outline only",
cp_outl_l: ["ignore interior voids and features"],
// CNC DRILLING
cd_menu: "drill",
cd_axis: "axis",
cd_points: "points",
// cd_plpr_s: "plunge per",
// cd_plpr_l: ["max plunge between","dwell periods","in workspace units","0 to disable"],
cd_dwll_s: "dwell time",
cd_dwll_l: ["dwell time","between plunges in","in milliseconds"],
cd_lift_s: "drill lift",
cd_lift_l: ["lift between plunges","after dwell period","in workspace units","0 to disable"],
cd_thru_s: "z extend",
cd_thru_l: ["extend downward cut through stock","in workspace units"],
cd_dtru_s: "drill through",
cd_dtru_l: ["additional drill depth below part bottom","overrides global z thru","0 to disable"],
cd_mark_s: "marking",
cd_mark_l: ["only mark holes, do not drill out","the step down setting is used","to determine how deep to mark"],
cd_ftop_s: "from stock top",
cd_ftop_l: ["drill from stock top","instead of part surface"],
cd_prcn_s: "precision",
cd_prcn_l: ["distance between slices","to search for holes","in workspace units","lower is slower and","uses more memory","0 = only flats"],
cd_seli_l: ["individually select holes","to drill"],
cd_sela_s: "Select Matching Diameter",
cd_sela_l: ["select all holes that", "match selected tool diameter"],
//CNC Registration
cd_regi_s: "register",
cd_regi_l: ["drill registration holes","for double-sided parts","independent of enable","drilling but uses same","tool and settings"],
cd_rego_s: "part offset",
cd_rego_l: ["offset of hole center","from part bounding box","in workspace units"],
// CNC HELICAL tolpath
ch_menu: "helical",
ch_sdwn_s: "step down (pitch)",
ch_sdwn_l: ["z-distance","per revolution","in workspace units","(inverse of threads per unit)", "0 to disable"],
ch_fsta_s: "force start angle",
ch_fsta_l: ["override start angle","defaults to closest point to tool"],
ch_stra_s: "start angle",
ch_stra_l: ["start angle of helix","in degrees ccw of +x axis"],
ch_selc_l: ["select a cylinder face", "inner holes that are too small","will be ignored."],
ch_fini_s: "bottom finish pass",
ch_fini_l: ["trace a circle at bottom of helix","used for hole clearing"],
ch_entr_s: "enter from center",
ch_entr_l: ["start cut from center of cylinder","gently arcing in horisontaly", "instead of plunging"],
ch_ento_s: "center entry offset",
ch_ento_l: ["offset from path for curved entry","usually thread depth if threadmilling","in workspace units","0 for a linear entry"],
ch_rvrs_s: "reverse",
ch_rvrs_l: ["reverse helical z-axis direction","low-Z to high-Z when checked","useful for thread milling","not recomended for other operations"],
ch_clkw_s: "clockwise",
ch_clkw_l: ["reverse helical rotation around cylinder","clockwise when checked"],
// CNC FLIP
cf_menu: "flip",
cf_nvrt_s: "z bottom",
cf_nvrt_l: "invert z bottom setting to follow stock",
// CNC INDEX AXIS
ci_degr_s: "degrees",
ci_degr_l: "degrees to rotate the A (indexed) axis",
ci_abso_s: "absolute",
ci_abso_l: "degree rotation is absolute",
ci_face_s: "face",
ci_face_l: "select face to rotate facing up",
ci_line_s: "linear",
ci_line_l: "make linear passes along X then rotate Y",
ci_laso_s: "offset start",
ci_laso_l: ["x offet from left of part. negative values are outside of the part. in workspace units"],
ci_laeo_s: "offset end",
ci_laeo_l: ["x offet from right of part. negative values are outside of the part. in workspace units"],
// CNC LASER On/Off Operations (Carvera)
cl_powr_s: "power",
cl_powr_l: "laser power from 0 to 1.0",
cl_adap_s: "adaptive",
cl_adap_l: "use adaptive power based on Z height",
cl_adrp_s: "repeating",
cl_adrp_l: "apply a moduluse of Z height using the given band to make repeating patterns",
cl_flat_s: "flatten",
cl_flat_l: "flatten output to a given Z height",
cl_flaz_s: "flat height",
cl_flaz_l: ["flatten output to this Z height", "in workspace units"],
cl_minp_s: "z min power",
cl_minp_l: ["power setting at the lowest part of the Z band. may be higher or lower than the other end of the Z band."],
cl_maxp_s: "z max power",
cl_maxp_l: ["power setting at the highest part of the Z band. may be higher or lower than the other end of the Z band."],
cl_minz_s: "min z height",
cl_minz_l: ["lowest Z band position"],
cl_maxz_s: "max z height",
cl_maxz_l: ["highest Z band position. when set to 0, uses the highest Z point of the workspace"],
// CNC CUTOUT TABS
ct_menu: "tabs",
ct_angl_s: "angle",
ct_angl_l: ["starting angle for tab spacing","in degrees (0-360)"],
ct_numb_s: "count",
ct_numb_l: ["number of tabs to use","will be spaced evenly","around the part"],
ct_wdth_s: "width",
ct_wdth_l: "width in workspace units",
ct_hght_s: "height",
ct_hght_l: "height in workspace units",
ct_dpth_s: "depth",
ct_dpth_l: ["distance in workspace units","that the tab projects from","the part surface"],
ct_midl_s: "midline",
ct_midl_l: ["use midline of tab","instead of z bottom","for double-sided work"],
ct_nabl_s: "auto",
ct_nabl_l: ["auto generate radial tabs","projected from part center","using count and angle offset"],
// OUTPUT
ou_menu: "output",
// LASER SLICING
ls_offs_s: "offset / kerf",
ls_offs_l: ["distance between the center of the cutting","path and the edge of remaining material","in millimeters"],
ls_lahi_s: "slice height",
ls_lahi_l: ["layer height","in millimeters","0 = auto/detect"],
ls_lahm_s: "slice minimum",
ls_lahm_l: ["layer height minimum","will merge auto slices","under this thickness","in millimeters"],
ls_sngl_s: "single slice",
ls_sngl_l: ["perform only one slice","at specified layer height"],
// LASER KNIFE
dk_menu: "drag knife",
dk_dpth_s: "cut depth",
dk_dpth_l: ["final cut depth","in millimeters"],
dk_pass_s: "cut passes",
dk_pass_l: ["number of passes","down to cut depth"],
dk_offs_s: "tip offset",
dk_offs_l: ["distance from blade tip","to center of tool","in millimeters"],
// WIRE EDM
we_omit_s: "omit inner",
we_omit_l: "omit inner polygons",
// LASER OUTPUT
ou_spac_s: "spacing",
ou_spac_l: ["distance between layer output","in millimeters"],
ou_scal_s: "scaling",
ou_scal_l: "multiplier (0.1 to 100)",
ou_powr_s: "power",
ou_powr_l: ["0 - 100","represents %"],
ou_sped_s: "speed",
ou_sped_l: "millimeters / second",
ou_mrgd_s: "merged",
ou_mrgd_l: ["merge all layers using","color coding to denote","stacking depth"],
ou_grpd_s: "grouped",
ou_grpd_l: ["retain each layer as","a unified grouping","instead of separated","polygons"],
ou_layr_s: "layer order",
ou_layr_l: ["output layer order","from top right to","bottom left"],
ou_layo_s: "layer color",
ou_layo_l: ["output layer colors","for each z index","overridden by merged"],
ou_lays_s: "layer marking",
ou_lays_l: ["mark layers for stacking. the layer above will be output in a different color which the laser can mark with a lower power. turns on layer grouping."],
ou_drkn_s: "drag knife",
ou_drkn_l: ["enable drag knife","output in gcode","cut radii are added","to corners with","cut down passes"],
ou_stak_s: "3d stack",
ou_stak_l: ["output is a 3D stack of 2D paths rather than packing layers flat in 2D"],
ou_maxp_s: "max power",
ou_maxp_l: ["max power value in gcode. power % from settings will scale from 0 to this value"],
ou_inch_s: "imperial",
ou_inch_l: ["output values in inches"],
ou_shap_s: "shaper tool",
ou_shap_l: ["annotate SVG with Shaper Tool custom attributes"],
// OUTPUT FDM
ou_nozl_s: "nozzle temp",
ou_nozl_l: "degrees in celsius",
ou_bedd_s: "bed temp",
ou_bedd_l: "degrees in celsius",
ou_feed_s: "print speed",
ou_feed_l: ["max printing speed","set to 0 to use default","millimeters / second"],
ou_fini_s: "finish speed",
ou_fini_l: ["outermost shell speed","bridge/flat solid layers","set to 0 to use default","millimeters / second"],
ou_move_s: "move speed",
ou_move_l: ["non-print move speed","millimeters / second","0 = enable G0 moves"],
ou_shml_s: "shell factor",
ou_flml_s: "solid factor",
ou_spml_s: "infill factor",
ou_exml_l: ["extrusion multiplier","0.0 - 2.0"],
ou_fanl_s: "fan on layer",
ou_fanl_l: ["layer # to turn on fan","layers start at 0"],
ou_fans_s: "fan on speed",
ou_fans_l: "0 - 255",
ou_layt_s: "min layer time",
ou_layt_l: ["minimum allowable layer print time in seconds. printing will be slowed if the layer would outerwise complete in fewer seconds.","0 = disabled"],
// OUTPUT CAM
ou_toll_s: "precision",
ou_toll_l: ["surface precision","in workspace units","lower is slower and","uses more memory","0 = automatic based","on animate preference"],
ou_flat_s: "flatness",
ou_flat_l: ["delta z below which two adjacent points are considered co-linear. 0 = compute using tolerance"],
ou_redu_s: "reduction",
ou_redu_l: ["number of axis steps to skip for each unit of precision. higher precision may require reduction to produce reasonable file sizes. start at 0 and test in increments of 1."],
ou_brdg_s: "bridging",
ou_brdg_l: ["flat distance between curved","areas to bridge with a cut"],
ou_zanc_s: "z anchor",
ou_zanc_l: ["controls the position of the part","when stock Z exceeds part Z"],
ou_ztof_s: "z offset",
ou_ztof_l: ["offset z anchor","in workspace units"],
ou_ztop_s: "z top",
ou_ztop_l: ["offset from stock bottom","to set start of cutting depth","in workspace units","* drill/contour ignore this *"],
ou_zbot_s: "z bottom",
ou_zbot_l: ["offset from stock bottom","to limit cutting depth","in workspace units"],
ou_zclr_s: "z clearance",
ou_zclr_l: ["safe travel offset","from top of part","in workspace units"],
ou_ztru_s: "z thru",
ou_ztru_l: ["extend cutout pass down","in workspace units"],
ou_conv_s: "conventional",
ou_conv_l: ["milling direction","uncheck for 'climb'"],
ou_depf_s: "depth first",
ou_depf_l: ["optimize pocket cuts","with depth priority"],
ou_inrf_s: "inner first",
ou_inrf_l: ["always cut inner to outer"],
ou_toin_s: "tool init",
ou_toin_l: "add tool change with first operation. when disabled, the gcode assumes the first tool is loaded and offset probed",
ou_forz_s: "force z max",
ou_forz_l: "all moves between pockets will go to z max (above stock). this is usually required if you are not performing a roughing operation before pocketing operations.",
ou_z1st_s: "first z max",
ou_z1st_l: "first move in the job will be to Z max (travel distance above stock)",
ou_feng_s: "engage factor",
ou_feng_l: "speed scale (0.1-1) when endmill is fully engaged on a new cut. stepped over cuts when the endmill is less than fully engaged run at a factor of 1 relative to output speed. typically this relates to roughing or any operation with step over.",
ou_eang_s: "ease angle",
ou_eang_l: "descent angle for ease down in degrees",
ou_dire_s: "milling",
ou_dire_l: ["milling direction","climb, conventional, alternating"],
// CAM STOCK
cs_menu: "stock",
cs_wdth_s: "width",
cs_wdth_l: ["width (x) in workspace units","0 defaults to part size"],
cs_dpth_s: "depth",
cs_dpth_l: ["depth (y) in workspace units","0 defaults to part size"],
cs_hght_s: "height",
cs_hght_l: ["height (z) in workspace units","0 defaults to part size"],
cs_offs_s: "offset",
cs_offs_l: ["use width, depth, height","as offsets from max","part size on platform"],
cs_clip_s: "clip to",
cs_clip_l: ["rough and outline","clip cutting paths","to defined stock"],
cs_ishg_s: "show grid",
cs_ishg_l: ["show platform grid in indexed mode"],
cs_indx_s: "indexed",
cs_indx_l: ["stock is mounted to a rotatary indexer"],
cs_offe_s: "enable",
cs_offe_l: "enable milling stock",
// ORIGIN (CAM & LASER)
or_bnds_s: "origin bounds",
or_bnds_l: ["origin is relative to","boundary of all objects"],
or_cntr_s: "origin center",
or_cntr_l: "origin is referenced from the center",
or_topp_s: "origin top",
or_topp_l: "origin is references from the top of objects",
or_offx_s: "origin offset X",
or_offx_l: "origin offset X",
or_offy_s: "origin offset Y",
or_offy_l: "origin offset Y",
// CAM ORIGIN
or_menu: "origin",
co_offx_s: "offset x",
co_offx_l: ["offset origin along x axis","in workspace units"],
co_offy_s: "offset y",
co_offt_l: ["offset origin along y axis","in workspace units"],
co_offz_s: "offset z",
co_offz_l: ["offset origin along z axis","in workspace units"],
// FDM ADVANCED
ad_menu: "expert",
ad_rdst_s: "retract distance",
ad_rdst_l: ["amount to retract filament","for long moves. in millimeters"],
ad_rrat_s: "retract rate",
ad_rrat_l: ["speed of filament","retraction in mm/s"],
ad_rdwl_s: "engage dwell",
ad_wpln_s: "retract wipe",
ad_wpln_l: ["non-printing move","after retraction","in millimeters"],
ad_rdwl_l: ["time between re-engaging","filament and movement","in milliseconds"],
ad_scst_s: "shell coast",
ad_scst_l: ["non-printing end","of perimeter shells","in millimeters"],
ad_msol_s: "area filter",
ad_msol_l: ["minimum area (mm^2)","bridges and flats less than this are culled"],
ad_mins_s: "min speed",
ad_mins_l: ["minimum speed","for short segments"],
ad_maxf_s: "max flowrate",
ad_maxf_l: ["maximum volumetric flowrate supported by this print head and filament","in millimeters^3 / second"],
ad_scar_s: "scarf length",
ad_scar_l: ["ease up length for scarf joint. disables arc detection","0 = disabled"],
ad_spol_s: "short path",
ad_spol_l: ["polygons shorter than this","will have their print speed","scaled down to min speed","in millimeters"],
ad_arct_s: "arc tolerance",
ad_arct_l: ["convert faceted lines to arcs","center point drift tolerance","when matching arc points","consider values around 0.15","value in millimeters","0 or scarf disables this"],
ad_zhop_s: "z hop distance",
ad_zhop_l: ["amount to raise z","on retraction moves","in millimeters","0 to disable"],
ad_abkl_s: "anti-backlash",
ad_abkl_l: ["for better flat surface finish","use micro-movements to cancel","backlash in solid layer output","in millimeters","0 to disable","if your firmware has M425","put that in the gcode header","and leave this as 0"],
ad_lbir_s: "belt first",
ad_lbir_l: ["always print shells touching the belt before any other shells. this is no longer a recommended setting based on extensive testing."],
ad_altr_s: "alternating",
ad_altr_l: ["alternate shell winding order","clockwise / counter-clockwise","may reduce warping in thin areas","and help with belt edge adhesion"],
ad_zint_s: "interleave z",
ad_zint_l: ["interleave Z heights with odd number shells"],
ad_lret_s: "force retract",
ad_lret_l: ["force filament retraction between layers"],
ad_agap_s: "avoid gaps",
ad_agap_l: ["route around gaps rather","than perform a retract","when possible"],
ad_play_s: "polish layers",
ad_play_l: ["polish up to specified","# of layers at a time"],
ad_pspd_s: "polish speed",
ad_pspd_l: ["polishing speed","in millimeters / second"],
ad_purg_s: "purge tower",
ad_purg_l: ["purge tower area in mm^2","for multi extruder setups","0 = disabled"],
// CAM EXPERT
cx_fast_s: "skip shadow",
cx_fast_l: ["disable overhang detection","can be faster and use less","memory with complex models","but fails with overhangs","try enabling if slicing","hangs during shadowing"],
cx_true_s: "true shadow",
cx_true_l: ["computationally correct shadow","will be slower but produce","better cuts for complex parts"],
cx_arce_s: "arc output",
cx_arce_l: ["EXPERIMENTAL: enable path to arc conversion"],
cx_arct_s: "arc tolerance",
cx_arct_l: ["convert cicrular paths to arcs;","center point drift tolerance","when matching arc points","consider values around 0.15","in mm, or 0.006 inches;","High values may cause","unexpected behavior","0 to disable"],
cx_arcr_s: "arc resolution",
cx_arcr_l: ["change in line direction","aceptible in an arc","consider values around 5","High values may cause","unexpected behavior",],
// FDM GCODE
ag_menu: "gcode",
ag_nozl_s: "nozzle",
ag_nozl_l: "select output nozzle or head",
ag_peel_s: "peel guard",
ag_peel_l: ["starting at this belt z position","periodically roll the print off and","back on to the belt to unstick it","and prevent rolling deflection"],
// ag_paws_s: "pause layers",
// ag_paws_l: ["comma-separated list of layers","to inject pause commands before"],
// ag_loop_s: "loop layers",
// ag_loop_l: ["layer ranges to repeat in the format","first-last-count,first-last-count,...","omitted count = 1"],
ag_loop_s: "loop count",
ag_loop_l: ["number of times to repeat","the selected range or the","entire print if no range"],
// SLA MENU
sa_menu: "slicing",
sa_lahe_s: "layer height",
sa_lahe_l: ["layer height","in millimeters"],
sa_shel_s: "hollow shell",
sa_shel_l: ["shell thickness in mm","use multiple of layer height","use 0 for solid (disabled)"],
sa_otop_s: "open top",
sa_otop_l: ["if shell is enabled","results in an open top"],
sa_obas_s: "open base",
sa_obas_l: ["if shell is enabled","results in an open base","disabled with supports"],
sa_layr_m: "layers",
sa_lton_s: "light on time",
sa_lton_l: ["layer light on","time in seconds"],
sa_ltof_s: "light off time",
sa_ltof_l: ["layer light off","time in seconds"],
sa_pldi_s: "peel distance",
sa_pldi_l: ["peel distance","in millimeters"],
sa_pllr_s: "peel lift rate",
sa_pllr_l: ["peel lift speed","in mm/sec"],
sa_pldr_s: "peel drop rate",
sa_pldr_l: ["peel drop speed","in mm/sec"],
sa_base_m: "base",
sa_balc_s: "layer count",
sa_balc_l: ["number of","base layers"],
sa_bltn_l: ["base layer light on","time in seconds"],
sa_bltf_l: ["base layer light off","time in seconds"],
sa_infl_m: "infill",
sa_ifdn_s: "density",
sa_ifdn_l: ["percent infill","requires shell","0 = disabled","valid 0.0 - 1.0"],
sa_iflw_s: "line width",
sa_iflw_l: ["hatch line width","in millimeters"],
sa_supp_m: "support",
sa_slyr_s: "base layers",
sa_slyr_l: ["base support layers","value range 0-10"],
sa_slgp_s: "gap layers",
sa_slgp_l: ["number of layers between","raft and bottom of object"],
sa_sldn_s: "density",
sa_sldn_l: ["used to compute the","number of support pillars","0.0-1.0 (0 = disable)"],
sa_slsz_s: "size",
sa_slsz_l: ["max size of a","support pillar","in millimeters"],
sa_slpt_s: "points",
sa_slpt_l: ["number of points in","each support pillar","in millimeters"],
sl_slen_l: "enable supports",
sa_outp_m: "output",
sa_opzo_s: "z offset",
sa_opzo_l: ["z layer offset","almost always 0.0","0.0-1.0 in millimeters"],
sa_opaa_s: "anti alias",
sa_opaa_l: ["enable anti-aliasing","produces larger files","can blur details"],
// EXPORT DIALOG
ex_job: "job",
ex_fnam: "file name",
ex_fsiz: "file size (bytes)",
ex_time: "time estimate (h:m:s)",
ex_matl: "material",
ex_dens: "filament density (g/cm^3)",
ex_fuse: "filament used (mm)",
ex_wght: "printed weight (g)",
ex_gcpv: "gcode preview",
ex_dwnl: "download",
ex_bamb: "send to bambu",
ex_octo: "octoprint",
ex_host: "host",
ex_akey: "key",
ex_rsnm: "resin used ML",
ex_layr: "layers",
ex_ptim: "print time",
ex_segs: "segments"
};