diff --git a/release.md b/release.md index ffaac0fc..0b923c02 100644 --- a/release.md +++ b/release.md @@ -5,6 +5,7 @@ Full docs @ https://docs.grid.space/projects/kiri-moto # Release 3.6 +* update CLI to work in CAM mode and add working samples * improved FDM preview rendering speed and reduced memory usage * threaded task and message passing performance improvements * refactor FDM supports and synthetic widgets to use more common code diff --git a/src/cli/kiri-cam-device.json b/src/cli/kiri-cam-device.json new file mode 100644 index 00000000..c649812b --- /dev/null +++ b/src/cli/kiri-cam-device.json @@ -0,0 +1,26 @@ +{ + "new": false, + "mode": "CAM", + "deviceName": "My Sienci LongMill", + "noclone":false, + "internal": 0, + "bedHeight": 2.5, + "bedWidth": 760, + "bedDepth": 760, + "maxHeight": 300, + "originCenter": false, + "spindleMax": 0, + "gcodeSpace": true, + "gcodeStrip": false, + "gcodePre": [ + "G21 ; set units to MM (required)", + "G90 ; absolute position mode (required)", + "G0 F6000 ; default rapid move speed", + "G1 F1500 ; default cutting speed" + ], + "gcodePost": ["M30 ; program end"], + "gcodeDwell": ["G4 P{time} ; dwell for {time}ms"], + "gcodeSpindle": [], + "gcodeChange": ["M6 T{tool} ; change tool to '{tool_name}'"], + "gcodeFExt": "nc" +} diff --git a/src/cli/kiri-cam-process.json b/src/cli/kiri-cam-process.json new file mode 100644 index 00000000..4a77219a --- /dev/null +++ b/src/cli/kiri-cam-process.json @@ -0,0 +1,119 @@ +{ + "processName": "default", + "camLevelTool": 1000, + "camLevelSpindle": 1000, + "camLevelOver": 0, + "camLevelSpeed": 1000, + "camLevelDown": 1, + "camRoughTool": 1001, + "camRoughSpindle": 1000, + "camRoughDown": 3, + "camRoughOver": 0.5, + "camRoughSpeed": 1000, + "camRoughPlunge": 250, + "camRoughStock": 0, + "camRoughVoid": false, + "camRoughFlat": false, + "camRoughTop": false, + "camRoughIn": true, + "camRoughOn": true, + "camOutlineTool": 1000, + "camOutlineSpindle": 1000, + "camOutlineDown": 1, + "camOutlineOver": 0.4, + "camOutlineSpeed": 800, + "camOutlinePlunge": 250, + "camOutlineWide": false, + "camOutlineDogbone": false, + "camOutlineOmitThru": false, + "camOutlineOut": true, + "camOutlineIn": false, + "camOutlineOn": true, + "camContourTool": 1001, + "camContourSpindle": 1000, + "camContourOver": 0.25, + "camContourSpeed": 1000, + "camContourAngle": 85, + "camContourCurves": true, + "camContourIn": true, + "camContourXOn": true, + "camContourYOn": true, + "camTraceTool": 1000, + "camTraceSpindle": 1000, + "camTraceType": "clear", + "camTraceOver": 0.5, + "camTraceDown": 50, + "camTraceSpeed": 750, + "camTracePlunge": 200, + "camTraceLines": false, + "camDrillTool": 1000, + "camDrillSpindle": 1000, + "camDrillDownSpeed": 250, + "camDrillDown": 2, + "camDrillDwell": 250, + "camDrillLift": 2, + "camDrillingOn": false, + "camRegisterSpeed": 1000, + "camFlipAxis": "X", + "camFlipOther": "", + "camTabsWidth": 20, + "camTabsHeight": 5, + "camTabsDepth": 10, + "camTabsMidline": false, + "camDepthFirst": true, + "camEaseDown": false, + "camOriginTop": true, + "camZAnchor": "middle", + "camZOffset": 0, + "camZBottom": 0, + "camZClearance": 1, + "camZThru": 0, + "camFastFeed": 4000, + "camFastFeedZ": 250, + "camTolerance": 0.03, + "camStockX": 30, + "camStockY": 30, + "camStockZ": 1, + "camStockOffset": true, + "camStockClipTo": false, + "camStockOn": true, + "camConventional": false, + "outputOriginCenter": false, + "outputInvertX": false, + "outputInvertY": false, + "camExpertFast": false, + "ops": [{ + "type": "rough", + "tool": 1001, + "spindle": 1000, + "down": 3, + "step": 0.5, + "rate": 1000, + "plunge": 250, + "leave": 0, + "voids": false, + "flats": false, + "inside": true, + "top": false + }], + "camTrueShadow": false, + "camDrillMark": true, + "camPocketSpindle": 1000, + "camPocketTool": 1665454124874, + "camPocketOver": 0.15, + "camPocketDown": 1, + "camPocketSpeed": 250, + "camPocketPlunge": 200, + "camPocketExpand": 0, + "camContourBottom": false, + "camTraceBottom": false, + "cmaPocketOutline": false, + "camRegisterThru": 5, + "camFlatness": 0, + "camContourBridge": 10, + "camForceZMax": false, + "camPocketSmooth": 0, + "cmaPocketRefine": 20, + "camPocketContour": false, + "camPocketEngrave": false +} diff --git a/src/cli/kiri-cam-tools.json b/src/cli/kiri-cam-tools.json new file mode 100644 index 00000000..69453d8b --- /dev/null +++ b/src/cli/kiri-cam-tools.json @@ -0,0 +1,69 @@ +[ + { + "id": 2000, + "number": 5, + "name": "ball 1/16", + "type": "ballmill", + "shaft_diam": 0.0625, + "shaft_len": 1, + "flute_diam": 0.0625, + "flute_len": 2, + "taper_tip": 0, + "metric": false + }, { + "id": 2001, + "number": 6, + "name": "ball 1/8", + "type": "ballmill", + "shaft_diam": 0.125, + "shaft_len": 1, + "flute_diam": 0.125, + "flute_len": 2, + "taper_tip": 0, + "metric": false + }, { + "id": 2002, + "number": 4, + "name": "ball 1/4", + "type": "ballmill", + "shaft_diam": 0.25, + "shaft_len": 1, + "flute_diam": 0.25, + "flute_len": 2, + "taper_tip": 0, + "metric": false + }, { + "id": 1000, + "number": 3, + "type": "endmill", + "name": "end 1/16", + "metric": false, + "shaft_diam": 0.0625, + "shaft_len": 1, + "flute_diam": 0.0625, + "flute_len": 1.5, + "taper_tip": 0 + }, { + "id": 1001, + "number": 2, + "type": "endmill", + "name": "end 1/8", + "metric": false, + "shaft_diam": 0.125, + "shaft_len": 1, + "flute_diam": 0.125, + "flute_len": 1.5, + "taper_tip": 0 + }, { + "id": 1002, + "number": 1, + "type": "endmill", + "name": "end 1/4", + "metric": false, + "shaft_diam": 0.25, + "shaft_len": 1, + "flute_diam": 0.25, + "flute_len": 2, + "taper_tip": 0 + } +] diff --git a/src/cli/kiri-fdm-device.json b/src/cli/kiri-fdm-device.json index f246ecbf..508a0f62 100644 --- a/src/cli/kiri-fdm-device.json +++ b/src/cli/kiri-fdm-device.json @@ -1,64 +1,62 @@ { - "noclone":false, - "mode":"FDM", - "internal":0, - "imageURL":"", - "imageScale":0.75, - "imageAnchor":0, - "bedHeight":2.5, - "bedWidth":220, - "bedDepth":220, - "bedRound":false, - "bedBelt":false, - "maxHeight":300, - "originCenter":false, - "extrudeAbs":true, - "spindleMax":0, - "gcodeFan":[ "M106 S{fan_speed}" ], - "gcodeTrack":[], - "gcodeLayer":[], + "new": false, + "mode": "FDM", + "deviceName":"Creality.Ender.3", + "noclone": false, + "internal": 0, + "imageURL": "", + "imageScale": 0.75, + "imageAnchor": 0, + "bedHeight": 2.5, + "bedWidth": 220, + "bedDepth": 220, + "bedRound": false, + "bedBelt": false, + "maxHeight": 300, + "originCenter": false, + "extrudeAbs": true, + "spindleMax": 0, + "gcodeFan": ["M106 S{fan_speed}"], + "gcodeTrack": [], + "gcodeLayer": [], "gcodePre":[ - "M107 ; turn off filament cooling fan", - "G90 ; set absolute positioning mode", - "M82 ; set absolute positioning for extruder", - "M104 S{temp} T{tool} ; set extruder temperature", - "M140 S{bed_temp} T{tool} ; set bed temperature", - "G28 ; home axes", - "G92 X0 Y0 Z0 E0 ; reset all axes positions", - "G1 X0 Y0 Z0.25 F180 ; move XY to 0,0 and Z 0.25mm over bed", - "G92 E0 ; zero the extruded", - "M190 S{bed_temp} T{tool} ; wait for bed to reach target temp", - "M109 S{temp} T{tool} ; wait for extruder to reach target temp", - "G92 E0 ; zero the extruded", - "G1 F225 ; set feed speed" + "M107 ; turn off filament cooling fan", + "G90 ; set absolute positioning mode", + "M82 ; set absolute positioning for extruder", + "M104 S{temp} T{tool} ; set extruder temperature", + "M140 S{bed_temp} T{tool} ; set bed temperature", + "G28 ; home axes", + "G92 X0 Y0 Z0 E0 ; reset all axes positions", + "G1 X0 Y0 Z0.25 F180 ; move XY to 0,0 and Z 0.25mm over bed", + "G92 E0 ; zero the extruded", + "M190 S{bed_temp} T{tool} ; wait for bed to reach target temp", + "M109 S{temp} T{tool} ; wait for extruder to reach target temp", + "G92 E0 ; zero the extruded", + "G1 F225 ; set feed speed" + ], + "gcodePost":[ + "M107 ; turn off filament cooling fan", + "M104 S0 T{tool} ; turn off right extruder", + "M140 S0 T{tool} ; turn off bed", + "G1 X0 Y300 F1200 ; end move", + "M84 ; disable stepper motors" ], - "gcodePost":[ - "M107 ; turn off filament cooling fan", - "M104 S0 T{tool} ; turn off right extruder", - "M140 S0 T{tool} ; turn off bed", - "G1 X0 Y300 F1200 ; end move", - "M84 ; disable stepper motors" - ], - "gcodeProc":"", - "gcodePause":[], - "gcodeDwell":[], - "gcodeSpindle":[], - "gcodeChange":[], - "gcodeFExt":"gcode", - "gcodeSpace":true, - "gcodeStrip":false, - "gcodeLaserOn":[], + "gcodeProc": "", + "gcodePause": [], + "gcodeDwell": [], + "gcodeSpindle": [], + "gcodeChange": [], + "gcodeFExt": "gcode", + "gcodeSpace": true, + "gcodeStrip": false, + "gcodeLaserOn": [], "gcodeLaserOff":[], - "extruders":[ - { + "extruders":[ { "extFilament":1.75, "extNozzle":0.4, "extSelect":[ "T0" ], "extDeselect":[], "extOffsetX":0, "extOffsetY":0 - } - ], - "new":false, - "deviceName":"Creality.Ender.3" + } ], } diff --git a/src/cli/kiri-fdm-process.json b/src/cli/kiri-fdm-process.json index 20eb1da9..8bf687c4 100644 --- a/src/cli/kiri-fdm-process.json +++ b/src/cli/kiri-fdm-process.json @@ -1,70 +1,70 @@ { - "sName":"Ender3_test", - "sliceHeight":0.25, - "sliceShells":3, - "sliceShellOrder":"in-out", - "sliceLayerStart":"last", - "sliceFillAngle":45, - "sliceFillOverlap":0.3, - "sliceFillSparse":0.2, - "sliceFillType":"gyroid", - "sliceAdaptive":false, - "sliceMinHeight":0, - "sliceSupportDensity":0.25, - "sliceSupportOffset":0.4, - "sliceSupportGap":1, - "sliceSupportSize":6, - "sliceSupportArea":1, - "sliceSupportExtra":0, - "sliceSupportAngle":50, - "sliceSupportNozzle":0, - "sliceSolidMinArea":1, - "sliceSolidLayers":3, - "sliceBottomLayers":3, - "sliceTopLayers":3, - "firstLayerRate":10, - "firstLayerPrintMult":1.15, - "firstLayerYOffset":0, - "firstLayerBrim":0, - "firstLayerBeltLead":3, - "outputTemp":210, - "outputBedTemp":60, - "outputFeedrate":50, - "outputFinishrate":50, - "outputSeekrate":80, - "outputShellMult":1.25, - "outputFillMult":1.25, - "outputSparseMult":1.25, - "outputRetractDist":4, - "outputRetractSpeed":30, - "outputRetractDwell":30, - "outputShortPoly":100, - "outputMinSpeed":10, - "outputCoastDist":0.1, - "outputLayerRetract":true, - "detectThinWalls":true, - "zHopDistance":0, - "antiBacklash":0, - "outputOriginCenter":false, - "sliceFillRate":0, - "sliceSupportEnable":false, - "firstSliceHeight":0.25, - "firstLayerFillRate":35, - "firstLayerLineMult":1, - "firstLayerNozzleTemp":0, - "firstLayerBedTemp":0, - "firstLayerBrimTrig":0, - "outputRaft":false, - "outputRaftSpacing":0.2, - "outputRetractWipe":0, - "outputBrimCount":2, - "outputBrimOffset":2, - "outputLoopLayers":null, - "outputInvertX":false, - "outputInvertY":false, - "arcTolerance":0, - "gcodePause":"", - "ranges":[], - "firstLayerFanSpeed":0, - "outputFanSpeed":255 + "sName": "Ender3_test", + "arcTolerance": 0, + "antiBacklash": 0, + "sliceHeight": 0.25, + "sliceShells": 3, + "sliceShellOrder": "in-out", + "sliceLayerStart": "last", + "sliceFillAngle": 45, + "sliceFillOverlap": 0.3, + "sliceFillSparse": 0.2, + "sliceFillType": "gyroid", + "sliceAdaptive": false, + "sliceMinHeight": 0, + "sliceSupportDensity": 0.25, + "sliceSupportOffset": 0.4, + "sliceSupportGap": 1, + "sliceSupportSize": 6, + "sliceSupportArea": 1, + "sliceSupportExtra": 0, + "sliceSupportAngle": 50, + "sliceSupportNozzle": 0, + "sliceSolidMinArea": 1, + "sliceSolidLayers": 3, + "sliceBottomLayers": 3, + "sliceTopLayers": 3, + "firstLayerRate": 10, + "firstLayerFanSpeed": 0, + "firstLayerPrintMult": 1.15, + "firstLayerYOffset": 0, + "firstLayerBrim": 0, + "firstLayerBeltLead": 3, + "outputTemp": 210, + "outputBedTemp": 60, + "outputFeedrate": 50, + "outputFinishrate": 50, + "outputSeekrate": 80, + "outputShellMult": 1.25, + "outputFillMult": 1.25, + "outputSparseMult": 1.25, + "outputRetractDist": 4, + "outputRetractSpeed": 30, + "outputRetractDwell": 30, + "outputShortPoly": 100, + "outputMinSpeed": 10, + "outputCoastDist": 0.1, + "outputLayerRetract": true, + "detectThinWalls": true, + "outputOriginCenter": false, + "sliceFillRate": 0, + "sliceSupportEnable": false, + "firstSliceHeight": 0.25, + "firstLayerFillRate": 35, + "firstLayerLineMult": 1, + "firstLayerNozzleTemp": 0, + "firstLayerBedTemp": 0, + "firstLayerBrimTrig": 0, + "outputRaft": false, + "outputRaftSpacing": 0.2, + "outputRetractWipe": 0, + "outputBrimCount": 2, + "outputBrimOffset": 2, + "outputLoopLayers": null, + "outputInvertX": false, + "outputInvertY": false, + "outputFanSpeed": 255, + "gcodePause": "", + "ranges": [], + "zHopDistance": 0 } diff --git a/src/kiri-mode/cam/prepare.js b/src/kiri-mode/cam/prepare.js index ca8c10e7..d1b69ad8 100644 --- a/src/kiri-mode/cam/prepare.js +++ b/src/kiri-mode/cam/prepare.js @@ -42,6 +42,8 @@ CAM.prepare = async function(widgets, settings, update) { }); const output = print.output.filter(level => Array.isArray(level)); + + if (render) // allows it to run from CLI return render.path(output, (progress, layer) => { update(0.75 + progress * 0.25, "render", layer); }, { diff --git a/src/kiri-run/cli.js b/src/kiri-run/cli.js index 0494b506..022e6810 100644 --- a/src/kiri-run/cli.js +++ b/src/kiri-run/cli.js @@ -9,6 +9,7 @@ let opts = { controller: "src/cli/kiri-controller.json", process: "src/cli/kiri-fdm-process.json", device: "src/cli/kiri-fdm-device.json", + tools: "src/cli/kiri-cam-tools.json" }; for (let i=0; i engine.setProcess(process)) .then(() => engine.setDevice(device)) + .then(() => engine.setProcess(process)) + .then(() => { if (device.mode === 'CAM') engine.setTools(tools) }) + .then(() => engine.setMode(device.mode)) .then(eng => eng.slice()) .then(eng => eng.prepare()) .then(eng => engine.export()) diff --git a/src/kiri-run/engine.js b/src/kiri-run/engine.js index ff395742..3949cfa8 100644 --- a/src/kiri-run/engine.js +++ b/src/kiri-run/engine.js @@ -162,8 +162,10 @@ class Engine { return new Promise((accept, reject) => { let output = []; kiri.client.export(this.settings, segment => { - this.listener({export:{segment}}); - output.push(segment); + if (typeof segment === 'string') { + this.listener({export:{segment}}); + output.push(segment); + } }, done => { this.listener({export:{done}}); accept(output.join('\r\n'));