Skip to content
Permalink
Browse files

auto slice done!

  • Loading branch information...
lautr3k committed Mar 20, 2016
1 parent b9e7aad commit 28b432b7bc5fb6894decdfed228b6bbbe68ff6ca
Showing with 92 additions and 8 deletions.
  1. +18 −1 index.html
  2. +74 −7 js/main.js
@@ -35,7 +35,10 @@

<div class="form-group">
<button id="open-viewer-2d" class="btn btn-primary" type="button">
2D viewer
<span class="glyphicon glyphicon-picture"></span> 2D viewer
</button>
<button id="slice-button" class="btn btn-success" type="button">
<span class="glyphicon glyphicon-align-center"></span> Slice
</button>
</div>

@@ -103,10 +106,24 @@ <h3 class="panel-title">Mesh</h3>
<h3 class="panel-title">Slicer</h3>
</div>
<div id="slicer-body" class="panel-body collapse in">
<div class="info">
<span class="info-label">Layers <small>(current / total)</small></span>
<span class="info-value">
<span id="slicer-layer-value">0</span> / <span id="slicer-layers-value">0</span>
</span>
</div>
<div class="form-group">
<label for="slicer-layers-height">Layers height <small>(μm)</small></label>
<input type="number" id="slicer-layers-height" class="form-control input-sm" placeholder="100" min="1" />
</div>
<div class="form-group">
<label for="slicer-light-on">Light on <small>(ms)</small></label>
<input type="number" id="slicer-light-on" class="form-control input-sm" placeholder="1000" min="1" />
</div>
<div class="form-group">
<label for="slicer-light-off">Light off <small>(ms)</small></label>
<input type="number" id="slicer-light-off" class="form-control input-sm" placeholder="500" min="1" />
</div>
</div>
</div><!-- #slicer -->

@@ -20,6 +20,10 @@ var settings = new SLAcer.Settings({
layers: {
height: 100 // μm
},
light: {
on : 1000,
off: 500
},
panel: {
collapsed: false,
position : 2
@@ -89,11 +93,14 @@ function removeSlices() {
}


function slice(layerNumber) {
function getSlice(layerNumber) {
// remove old shapes
removeSlices();
removeShapes();

// ...
$slicerLayerValue.html(layerNumber);

if (layerNumber < 1) {
viewer2d.render();
viewer3d.render();
@@ -190,7 +197,7 @@ $openViewer2D.click(function(e) {
viewer2dWin = null;
})
.load(function(e) {
slice($sliderInput.slider('getValue'));
getSlice($sliderInput.slider('getValue'));
});
}

@@ -202,7 +209,7 @@ $openViewer2D.click(function(e) {
var $sliderInput = $('#slider input');

$sliderInput.slider({ reversed : true }).on('change', function(e) {
slice(e.value.newValue);
getSlice(e.value.newValue);
});

var $sliderElement = $('#slider .slider');
@@ -214,6 +221,7 @@ function updateSliderUI() {

$sliderInput.slider('setAttribute', 'max', layersNumber);
$sliderMaxValue.html(layersNumber);
$slicerLayersValue.html(layersNumber);
}

// Sidebar
@@ -319,17 +327,76 @@ function updateMeshInfoUI() {
// Slicer panel
var $slicerBody = initPanel('slicer');
var $slicerLayerHeight = $slicerBody.find('#slicer-layers-height');
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 $sliceButton = $sidebar.find('#slice-button');

function updateSlicerUI() {
var layers = settings.get('slicer.layers');
$slicerLayerHeight.val(layers.height);
var slicer = settings.get('slicer');
$slicerLayerHeight.val(slicer.layers.height);
$slicerLightOff.val(slicer.light.off);
$slicerLightOn.val(slicer.light.on);
}

function updateSlicerSettings() {
settings.set('slicer.layers.height', $slicerLayerHeight.val());
settings.set('slicer.light.off', $slicerLightOff.val());
settings.set('slicer.light.on', $slicerLightOn.val());
updateSliderUI();
}

var sliceInterval;
var expectedSliceInterval;
var currentSliceNumber;
var slicesNumber;

function slice() {
currentSliceNumber++;

if (currentSliceNumber > slicesNumber) {
return endSlicing();
}

getSlice(currentSliceNumber);
$sliderInput.slider('setValue', currentSliceNumber);

var time = Date.now();
var diff = time - expectedSliceInterval;

viewer2dWin && setTimeout(function() {
viewer2dWin.document.body.style.backgroundImage = 'none';
}, settings.get('slicer.light.on'));

expectedSliceInterval += sliceInterval;
setTimeout(slice, Math.max(0, sliceInterval - diff));
}

function endSlicing() {
viewer2dWin && (viewer2dWin.document.body.style.backgroundImage = 'none');
$sidebar.find('input, button').prop('disabled', false);
$sliderInput.slider('enable');
}

function startSlicing() {
var times = settings.get('slicer.light');
sliceInterval = parseInt(times.on) + parseInt(times.off);
expectedSliceInterval = Date.now() + sliceInterval;
slicesNumber = parseInt($slicerLayersValue.html());
currentSliceNumber = 0;

slicesNumber && slice();
}

$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');
startSlicing();
});

$('#slicer input').on('input', updateSlicerSettings);
updateSlicerUI();

@@ -384,7 +451,7 @@ function updateBuildVolumeSettings() {
size && updateMeshInfoUI();

updateBuildVolumeSizeStep();
slice($sliderInput.slider('getValue'));
getSlice($sliderInput.slider('getValue'));
}

$('#build-volume-unit-' + settings.get('buildVolume.unit')).prop('checked', true);
@@ -498,7 +565,7 @@ loader.onGeometry = function(geometry) {
updateMeshInfoUI();

// get first slice
//slice(1);
//getSlice(1);
}
catch(e) {
errorHandler(e);

0 comments on commit 28b432b

Please sign in to comment.
You can’t perform that action at this time.