|
@@ -9,13 +9,6 @@ var settings = new SLAcer.Settings({ |
|
|
position : 0
|
|
|
}
|
|
|
},
|
|
|
- mesh: {
|
|
|
- color: 0x333333,
|
|
|
- panel: {
|
|
|
- collapsed: false,
|
|
|
- position : 1
|
|
|
- }
|
|
|
- },
|
|
|
slicer: {
|
|
|
layers: {
|
|
|
height: 100 // μm
|
|
@@ -24,6 +17,16 @@ var settings = new SLAcer.Settings({ |
|
|
on : 1000,
|
|
|
off: 500
|
|
|
},
|
|
|
+ zip: true,
|
|
|
+ speed: false,
|
|
|
+ speedDelay: 10, // ms
|
|
|
+ panel: {
|
|
|
+ collapsed: false,
|
|
|
+ position : 1
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mesh: {
|
|
|
+ color: 0x333333,
|
|
|
panel: {
|
|
|
collapsed: false,
|
|
|
position : 2
|
|
@@ -142,10 +145,16 @@ function getSlice(layerNumber) { |
|
|
viewer3d.render();
|
|
|
|
|
|
// render 2D view
|
|
|
- if (viewer2dWin) {
|
|
|
- var body = viewer2dWin.document.body;
|
|
|
+ if (zipFolder || viewer2dWin) {
|
|
|
viewer2d.screenshot(function(dataURL) {
|
|
|
- body.style.backgroundImage = 'url(' + dataURL + ')';
|
|
|
+ if (viewer2dWin) {
|
|
|
+ viewer2dWin.document.body.style.backgroundImage = 'url(' + dataURL + ')';
|
|
|
+ }
|
|
|
+ if (zipFolder) {
|
|
|
+ var fileName = layerNumber + '.png';
|
|
|
+ var imgData = dataURL.substr(dataURL.indexOf(',') + 1);
|
|
|
+ zipFolder.file(fileName, imgData, { base64: true });
|
|
|
+ }
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -331,10 +340,18 @@ var $slicerLayersValue = $slicerBody.find('#slicer-layers-value'); |
|
|
var $slicerLayerValue = $slicerBody.find('#slicer-layer-value');
|
|
|
var $slicerLightOff = $slicerBody.find('#slicer-light-off');
|
|
|
var $slicerLightOn = $slicerBody.find('#slicer-light-on');
|
|
|
+var $slicerSpeedYes = $slicerBody.find('#slicer-speed-yes');
|
|
|
+var $slicerSpeedNo = $slicerBody.find('#slicer-speed-no');
|
|
|
+var $slicerSpeedDelay = $slicerBody.find('#slicer-speed-delay');
|
|
|
+var $slicerMakeZipYes = $slicerBody.find('#slicer-make-zip-yes');
|
|
|
+var $slicerMakeZipNo = $slicerBody.find('#slicer-make-zip-no');
|
|
|
var $sliceButton = $sidebar.find('#slice-button');
|
|
|
+var $abortButton = $sidebar.find('#abort-button');
|
|
|
+var $zipButton = $sidebar.find('#zip-button');
|
|
|
|
|
|
function updateSlicerUI() {
|
|
|
var slicer = settings.get('slicer');
|
|
|
+ $slicerSpeedDelay.val(slicer.speedDelay);
|
|
|
$slicerLayerHeight.val(slicer.layers.height);
|
|
|
$slicerLightOff.val(slicer.light.off);
|
|
|
$slicerLightOn.val(slicer.light.on);
|
|
@@ -344,13 +361,20 @@ function updateSlicerSettings() { |
|
|
settings.set('slicer.layers.height', $slicerLayerHeight.val());
|
|
|
settings.set('slicer.light.off', $slicerLightOff.val());
|
|
|
settings.set('slicer.light.on', $slicerLightOn.val());
|
|
|
+
|
|
|
+ settings.set('slicer.zip', $slicerMakeZipYes[0].checked);
|
|
|
+ settings.set('slicer.speed', $slicerSpeedYes[0].checked);
|
|
|
+ settings.set('slicer.speedDelay', $slicerSpeedDelay.val());
|
|
|
+
|
|
|
updateSliderUI();
|
|
|
}
|
|
|
|
|
|
var sliceInterval;
|
|
|
var expectedSliceInterval;
|
|
|
var currentSliceNumber;
|
|
|
var slicesNumber;
|
|
|
+var zipFile;
|
|
|
+var zipFolder;
|
|
|
|
|
|
function slice() {
|
|
|
currentSliceNumber++;
|
|
@@ -365,8 +389,8 @@ function slice() { |
|
|
var time = Date.now();
|
|
|
var diff = time - expectedSliceInterval;
|
|
|
|
|
|
- viewer2dWin && setTimeout(function() {
|
|
|
- viewer2dWin.document.body.style.backgroundImage = 'none';
|
|
|
+ !settings.get('slicer.speed') && viewer2dWin && setTimeout(function() {
|
|
|
+ viewer2dWin && (viewer2dWin.document.body.style.backgroundImage = 'none');
|
|
|
}, settings.get('slicer.light.on'));
|
|
|
|
|
|
expectedSliceInterval += sliceInterval;
|
|
@@ -377,27 +401,62 @@ function endSlicing() { |
|
|
viewer2dWin && (viewer2dWin.document.body.style.backgroundImage = 'none');
|
|
|
$sidebar.find('input, button').prop('disabled', false);
|
|
|
$sliderInput.slider('enable');
|
|
|
+ $abortButton.addClass('hidden');
|
|
|
+ $sliceButton.removeClass('hidden');
|
|
|
+ $zipButton.prop('disabled', !zipFile);
|
|
|
}
|
|
|
|
|
|
function startSlicing() {
|
|
|
- var times = settings.get('slicer.light');
|
|
|
- sliceInterval = parseInt(times.on) + parseInt(times.off);
|
|
|
+ var times = settings.get('slicer.light');
|
|
|
+
|
|
|
+ if (settings.get('slicer.speed')) {
|
|
|
+ sliceInterval = parseInt(settings.get('slicer.speedDelay'));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sliceInterval = parseInt(times.on) + parseInt(times.off);
|
|
|
+ }
|
|
|
+
|
|
|
expectedSliceInterval = Date.now() + sliceInterval;
|
|
|
slicesNumber = parseInt($slicerLayersValue.html());
|
|
|
currentSliceNumber = 0;
|
|
|
|
|
|
+ zipFile = null;
|
|
|
+ zipFolder = null;
|
|
|
+
|
|
|
+ if (settings.get('slicer.zip')) {
|
|
|
+ zipFile = new JSZip();
|
|
|
+ zipFolder = zipFile.folder('slices');
|
|
|
+ zipFile.file("README.txt", 'Generated by SLAcer.js\r\nhttp://lautr3k.github.io/SLAcer.js/\r\n');
|
|
|
+ }
|
|
|
+
|
|
|
slicesNumber && slice();
|
|
|
}
|
|
|
|
|
|
+$zipButton.on('click', function(e) {
|
|
|
+ if (zipFile) {
|
|
|
+ saveAs(zipFile.generate({type: 'blob'}), 'SLAcer.zip');
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
$sliceButton.on('click', function(e) {
|
|
|
$sidebar.find('input, button').prop('disabled', true);
|
|
|
$('.panel-heading button').prop('disabled', false);
|
|
|
$openViewer2D.prop('disabled', false);
|
|
|
$sliderInput.slider('disable');
|
|
|
+ $abortButton.prop('disabled', false);
|
|
|
+ $abortButton.removeClass('hidden');
|
|
|
+ $sliceButton.addClass('hidden');
|
|
|
startSlicing();
|
|
|
});
|
|
|
|
|
|
-$('#slicer input').on('input', updateSlicerSettings);
|
|
|
+$abortButton.on('click', function(e) {
|
|
|
+ currentSliceNumber = slicesNumber + 1;
|
|
|
+ endSlicing();
|
|
|
+});
|
|
|
+
|
|
|
+$('#slicer-make-zip-' + (settings.get('slicer.zip') ? 'yes' : 'no')).prop('checked', true);
|
|
|
+$('#slicer-speed-' + (settings.get('slicer.speed') ? 'yes' : 'no')).prop('checked', true);
|
|
|
+$('#slicer input').on('input, change', updateSlicerSettings);
|
|
|
updateSlicerUI();
|
|
|
|
|
|
// Build volume panel
|
|
|
0 comments on commit
b31c2b9