|
@@ -32,22 +32,28 @@ var settings = new SLAcer.Settings({ |
|
|
position : 2
|
|
|
}
|
|
|
},
|
|
|
+ transform: {
|
|
|
+ panel: {
|
|
|
+ collapsed: false,
|
|
|
+ position : 3
|
|
|
+ }
|
|
|
+ },
|
|
|
buildVolume: {
|
|
|
size : { x: 100, y: 100, z: 100 }, // mm
|
|
|
unit : 'mm', // mm or in
|
|
|
color : 0xcccccc,
|
|
|
opacity : 0.1,
|
|
|
panel : {
|
|
|
collapsed: false,
|
|
|
- position : 3
|
|
|
+ position : 4
|
|
|
}
|
|
|
},
|
|
|
resin: {
|
|
|
density : 1.1, // g/cm3
|
|
|
price : 50, // $
|
|
|
panel : {
|
|
|
collapsed: false,
|
|
|
- position : 4
|
|
|
+ position : 5
|
|
|
}
|
|
|
},
|
|
|
screen: {
|
|
@@ -56,15 +62,15 @@ var settings = new SLAcer.Settings({ |
|
|
diagonal : { size: 22, unit: 'in' },
|
|
|
panel : {
|
|
|
collapsed: false,
|
|
|
- position : 5
|
|
|
+ position : 6
|
|
|
}
|
|
|
},
|
|
|
colors: {
|
|
|
mesh : '#555555',
|
|
|
slice: '#88ee11',
|
|
|
panel: {
|
|
|
collapsed: false,
|
|
|
- position : 6
|
|
|
+ position : 7
|
|
|
}
|
|
|
},
|
|
|
viewer3d: {
|
|
@@ -121,6 +127,10 @@ function getSlice(layerNumber) { |
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (transformations.update) {
|
|
|
+ throw 'transformations not applyed...';
|
|
|
+ }
|
|
|
+
|
|
|
// get faces
|
|
|
var layerHeight = settings.get('slicer.layers.height') / 1000;
|
|
|
var zPosition = layerNumber * layerHeight;
|
|
@@ -640,6 +650,110 @@ $sliceColor.colorpicker().on('changeColor.colorpicker', function(e) { |
|
|
}
|
|
|
});
|
|
|
|
|
|
+// Alert
|
|
|
+var $alertPanel = $('#alert');
|
|
|
+var $alertMessage = $alertPanel.find('.message');
|
|
|
+
|
|
|
+// Transform
|
|
|
+var $transformBody = initPanel('transform');
|
|
|
+var $transformAction = $transformBody.find('#transform-action');
|
|
|
+var $transformX = $transformBody.find('#transform-x');
|
|
|
+var $transformY = $transformBody.find('#transform-y');
|
|
|
+var $transformZ = $transformBody.find('#transform-z');
|
|
|
+var $transformButtons = $transformBody.find('button');
|
|
|
+
|
|
|
+var transformAction = 'scale';
|
|
|
+var transformations = {
|
|
|
+ scale : { x:1, y:1 , z:1 },
|
|
|
+ rotate: { x:0, y:0 , z:0 }
|
|
|
+};
|
|
|
+
|
|
|
+function updateTransformAction() {
|
|
|
+ transformAction = $transformAction.val();
|
|
|
+
|
|
|
+ var axis = transformations[transformAction];
|
|
|
+ var min, max, step;
|
|
|
+
|
|
|
+ if (transformAction == 'scale') {
|
|
|
+ min = 0.01;
|
|
|
+ max = 999;
|
|
|
+ step = 0.01;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ min = 0;
|
|
|
+ max = 360;
|
|
|
+ step = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ $transformX.prop('min', min);
|
|
|
+ $transformY.prop('min', min);
|
|
|
+ $transformZ.prop('min', min);
|
|
|
+ $transformX.prop('max', max);
|
|
|
+ $transformY.prop('max', max);
|
|
|
+ $transformZ.prop('max', max);
|
|
|
+ $transformX.prop('step', step);
|
|
|
+ $transformY.prop('step', step);
|
|
|
+ $transformZ.prop('step', step);
|
|
|
+ $transformX.val(axis.x);
|
|
|
+ $transformY.val(axis.y);
|
|
|
+ $transformZ.val(axis.z);
|
|
|
+}
|
|
|
+
|
|
|
+function updateTransformValues() {
|
|
|
+ var input = {
|
|
|
+ x: parseFloat($transformX.val()),
|
|
|
+ y: parseFloat($transformY.val()),
|
|
|
+ z: parseFloat($transformZ.val())
|
|
|
+ };
|
|
|
+
|
|
|
+ var current = transformations[transformAction];
|
|
|
+
|
|
|
+ var offsets = {
|
|
|
+ x: input.x - current.x,
|
|
|
+ y: input.y - current.y,
|
|
|
+ z: input.z - current.z
|
|
|
+ };
|
|
|
+
|
|
|
+ if (transformAction == 'scale') {
|
|
|
+ //console.log(input.x / current.x);
|
|
|
+ slicer.mesh.geometry.scale(
|
|
|
+ input.x / current.x,
|
|
|
+ input.y / current.y,
|
|
|
+ input.z / current.z
|
|
|
+ );
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var deg = Math.PI / 180;
|
|
|
+ slicer.mesh.geometry.rotateX(offsets.x * deg);
|
|
|
+ slicer.mesh.geometry.rotateY(offsets.y * deg);
|
|
|
+ slicer.mesh.geometry.rotateZ(offsets.z * deg);
|
|
|
+ }
|
|
|
+
|
|
|
+ current.x = input.x;
|
|
|
+ current.y = input.y;
|
|
|
+ current.z = input.z;
|
|
|
+
|
|
|
+ //var currentLayer = settings.get('');
|
|
|
+ loadGeometry(slicer.mesh.geometry);
|
|
|
+ getSlice($sliderInput.slider('getValue'));
|
|
|
+ //viewer3d.render();
|
|
|
+}
|
|
|
+
|
|
|
+$transformButtons.on('click', function(e) {
|
|
|
+ var $this = $(this);
|
|
|
+ var axis = $this.data('axis');
|
|
|
+ var action = $this.data('action');
|
|
|
+ var value = transformations[transformAction][axis];
|
|
|
+ var $target = $transformBody.find('#transform-' + axis);
|
|
|
+
|
|
|
+ $target.val(value + (action == '+' ? 1 : -1));
|
|
|
+ updateTransformValues();
|
|
|
+});
|
|
|
+
|
|
|
+$('#transform select').on('change', updateTransformAction);
|
|
|
+$('#transform input').on('input', updateTransformValues);
|
|
|
+updateTransformAction();
|
|
|
+
|
|
|
// UI resize
|
|
|
function resizeUI() {
|
|
|
var width = $main.width();
|
|
@@ -658,8 +772,8 @@ resizeUI(); |
|
|
// Loader instance
|
|
|
var loader = new MeshesJS.STLLoader($main[0]); // drop target
|
|
|
|
|
|
-// On Geometry loaded
|
|
|
-loader.onGeometry = function(geometry) {
|
|
|
+// Load an geometry
|
|
|
+function loadGeometry(geometry) {
|
|
|
try {
|
|
|
// remove old mesh and plane
|
|
|
slicer.mesh && viewer3d.removeObject(slicer.mesh);
|
|
@@ -685,7 +799,10 @@ loader.onGeometry = function(geometry) { |
|
|
catch(e) {
|
|
|
errorHandler(e);
|
|
|
}
|
|
|
-};
|
|
|
+}
|
|
|
+
|
|
|
+// On Geometry loaded
|
|
|
+loader.onGeometry = loadGeometry;
|
|
|
|
|
|
// On loading error
|
|
|
loader.onError = errorHandler;
|
|
|
0 comments on commit
b83228b