|
@@ -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