# HG changeset patch
# User hertzhaft
# Date 1422350526 -3600
# Node ID f50d5517ea523f341a818d7d41f894da44a62d27
# Parent 08fffd540a75cac0de87e4006ccfe7cb30d20136
another try to restore
diff -r 08fffd540a75 -r f50d5517ea52 webapp/src/main/webapp/jquery/jquery.digilib.measure.js
--- a/webapp/src/main/webapp/jquery/jquery.digilib.measure.js Mon Jan 26 19:23:27 2015 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.measure.js Tue Jan 27 10:22:06 2015 +0100
@@ -701,21 +701,25 @@
drawColor : 'green',
// color of selected objects
selectColor : 'red',
- // drawing shape types
- shapeTypes : [
- { name : 'line', type : 'Line' },
- { name : 'linestring', type : 'LineString' },
- { name : 'rectangle', type : 'Rectangle' },
- { name : 'square', type : 'Square' },
- { name : 'polygon', type : 'Polygon' },
- { name : 'circle', type : 'Circle' },
- { name : 'arch', type : 'Arch' },
- { name : 'ratio', type : 'Ratio' },
- { name : 'intercolumnium', type : 'InterCol' },
- { name : 'line grid', type : 'Grid' }
- ],
- // index of default shape
- selectedShape : 0,
+ // implemented measuring shape types, for select widget
+ implementedShapes : ['Line', 'LineString', 'Rectangle', 'Polygon'],
+ // all measuring shape types
+ shapeTypes : {
+ Line : { name : 'line' },
+ LineString : { name : 'linestring' },
+ Rectangle : { name : 'rectangle' },
+ Square : { name : 'square' },
+ Polygon : { name : 'polygon' },
+ Circle : { name : 'circle' },
+ Arch : { name : 'arch' },
+ Ratio : { name : 'ratio' },
+ InterCol : { name : 'intercolumnium' },
+ Grid : { name : 'linegrid' }
+ },
+ // most recently selected shape
+ activeShapeType : 'Line',
+ // last measured distance
+ lastMeasuredDistance : 0,
// measuring unit (index into unit list)
unitFrom : 17,
// converted unit (index into unit list)
@@ -759,7 +763,7 @@
var actions = {
measurebar : function(data) {
var $measureBar = data.$measureBar;
- if (!$measureBar) {
+ if ($measureBar == null) {
$measureBar = setupMeasureBar(data);
};
$measureBar.toggle();
@@ -767,19 +771,13 @@
return;
},
drawshape : function(data) {
- var shape = getSelectedShape(data);
- data.measureWidgets.startb.addClass('dl-drawing');
+ var shape = newShape(data);
+ $(data).trigger('createShape', shape);
digilib.actions.addShape(data, shape, shapeCompleted);
console.debug('measure: action drawshape', shape);
}
};
-
- // round to 4 decimal places after point
- var mRound = function (num) {
- return Math.round(num * 10000 + 0.00001) / 10000
- };
-
// callback for vector.drawshape
var shapeCompleted = function(data, shape) {
console.debug('measure: shapeCompleted', shape);
@@ -791,12 +789,19 @@
return false;
};
+ // callback for vector.drawshape
+ var onCreateShape = function(event, shape) {
+ var data = this;
+ data.measureWidgets.startb.addClass('dl-drawing');
+ console.debug('measure: onCreateShape', shape);
+ };
+
// event handler for changeShape
var onChangeShape = function(event, shape) {
var data = this;
+ updateInfo(data, shape);
console.debug('measure: onChangeShape', data, shape);
- updateInfo(data, shape);
- };
+ };
// event handler for renderShape
var onRenderShape = function(event, shape) {
@@ -810,6 +815,11 @@
console.debug('measure: onRenderShape', data, shape);
};
+ // round to 4 decimal places after point
+ var mRound = function (num) {
+ return Math.round(num * 10000 + 0.00001) / 10000
+ };
+
// calculate the distance of the first 2 points of a shape (rectified digilib coords)
var rectifiedDist = function(data, shape) {
var coords = shape.geometry.coordinates;
@@ -846,7 +856,7 @@
var u1 = parseFloat(widgets.unit1.val());
var u2 = parseFloat(widgets.unit2.val());
return val * u1 / u2;
- }
+ };
// convert area to second unit
var convertArea = function(data, val) {
@@ -854,39 +864,37 @@
var u1 = parseFloat(widgets.unit1.val());
var u2 = parseFloat(widgets.unit2.val());
return val * u1 * u1 / (u2 * u2);
- }
+ };
// recalculate factor after entering a new value in input element "value1"
- var updateFactor = function(data) {
+ var changeFactor = function(data) {
var widgets = data.measureWidgets;
var val = parseFloat(widgets.value1.val());
var dist = data.lastMeasuredDistance;
var fac = val / dist;
+ data.measureFactor = fac;
// widgets.fac.text(fn.cropFloatStr(fac));
var conv = convertLength(data, val);
widgets.value2.text(fn.cropFloatStr(mRound(conv)));
- data.lastMeasureFactor = fac;
- data.lastMeasuredValue = val;
};
// info window for line
var infoLine = function(data, shape) {
var dist = rectifiedDist(data, shape);
- var fac = data.lastMeasureFactor;
+ var fac = data.measureFactor;
var val = dist * fac;
var conv = convertLength(data, val);
var widgets = data.measureWidgets;
widgets.value1.val(fn.cropFloatStr(mRound(val)));
widgets.value2.text(fn.cropFloatStr(mRound(conv)));
widgets.info.text('length');
- data.lastMeasuredValue = val;
data.lastMeasuredDistance = dist;
};
// info window for polygon
var infoPolygon = function(data, shape) {
var area = rectifiedArea(data, shape);
- var fac = data.lastMeasureFactor;
+ var fac = data.measureFactor;
var val = area * fac * fac;
var conv = convertArea(data, val);
var widgets = data.measureWidgets;
@@ -904,10 +912,9 @@
// recalculate after measuring
var updateInfo = function(data, shape) {
- setSelectedShape(data, shape);
var type = shape.geometry.type;
- console.debug('measure: updateInfo', type);
- if (type === 'Line') {
+ data.measureWidgets.shape.val(type);
+ if (type === 'Line') {
return infoLine(data, shape);
}
if (type === 'LineString') {
@@ -921,40 +928,38 @@
}
};
+ // recalculate after unit change
+ var updateConversion = function(data) {
+ }
// return a shape of the currently selected shape type
- var getSelectedShape = function(data) {
- var selection = getSelectedShapeType(data);
- var stroke = getSelectedStroke(data);
- var shape = {
+ var newShape = function(data) {
+ return {
geometry : {
- type : selection.type
+ type : getSelectedShapeType(data)
},
properties : {
- stroke : stroke,
+ stroke : getSelectedStroke(data),
editable : true,
cssclass : 'dl-measure-item'
}
};
- return shape;
+ };
+
+ // return the currently selected shape type
+ var getSelectedShapeType = function(data) {
+ return data.settings.activeShapeType;
};
- // return a shape of the currently selected shape type
- var setSelectedShape = function(data, shape) {
- var type = shape.geometry.type;
- var types = data.settings.shapeTypes;
- for (var i = 0; i < types.length; i++) {
- if (types[i].type === type) break;
- }
- if (i === types.length) i = 0;
- data.settings.selectedShape = i;
- data.measureWidgets.shape.val(i);
+ // set the currently selected shape type
+ var setActiveShapeType = function(data) {
+ data.settings.activeShapeType = data.measureWidgets.shape.val();
};
- // return shape type selected by user (on the toolbar)
- var getSelectedShapeType = function(data) {
- var val = data.measureWidgets.shape.val();
- return data.settings.shapeTypes[val];
- };
+ // set the currently selected shape type
+ var changeActiveShapeType = function(data, type) {
+ data.settings.activeShapeType = type;
+ data.measureWidgets.shape.val(type);
+ };
// return line color chosen by user
var getSelectedStroke = function(data) {
@@ -965,11 +970,12 @@
// load shapes into select element
var loadShapeTypes = function(data) {
var $shape = data.measureWidgets.shape;
- $.each(data.settings.shapeTypes, function(index, item) {
- var $opt = $('');
- $shape.append($opt);
- });
- $shape.children(':not(:disabled)')[data.settings.selectedShape].selected = true;
+ var shapeTypes = data.settings.shapeTypes;
+ var addOption = function(index, type) {
+ $shape.append($(''));
+ };
+ $.each(data.settings.implementedShapes, addOption);
+ $shape.children()[0].selected = true;
};
// load units into select elements
@@ -998,7 +1004,7 @@
if ($div == null) return;
var h = geom.rectangle($div).height;
var s = fn.getFullscreenRect(data);
- geom.position(0, s.height - h).adjustDiv($div);
+ geom.position(10, s.height - h).adjustDiv($div);
};
// drag measureBar around
@@ -1038,8 +1044,8 @@
// len : $('0.0'),
info : $('length'),
fac : $(''),
- value1 : $(''),
- value2 : $(''),
+ value1 : $(''),
+ value2 : $(''),
unit1 : $(''),
unit2 : $(''),
angle : $('')
@@ -1050,7 +1056,7 @@
});
data.$elem.append($measureBar);
data.$measureBar = $measureBar;
- widgets.fac.text(fn.cropFloatStr(data.lastMeasureFactor));
+ widgets.fac.text(fn.cropFloatStr(data.measureFactor));
data.measureWidgets = widgets;
loadShapeTypes(data);
@@ -1077,9 +1083,10 @@
$elem.digilib(action);
return false;
});
- widgets.value1.on('change.measure', function(evt) { updateFactor(data) });
- widgets.unit1.on('change.measure', function(evt) { updateInfo(data) }); // TODO: recalculate
- widgets.unit2.on('change.measure', function(evt) { updateInfo(data) }); // TODO: recalculate
+ widgets.shape.on('change.measure', function(evt) { setActiveShapeType(data) });
+ widgets.value1.on('change.measure', function(evt) { changeFactor(data) });
+ widgets.unit1.on('change.measure', function(evt) { updateInfo(data) });
+ widgets.unit2.on('change.measure', function(evt) { updateInfo(data) });
};
// event handler
@@ -1087,9 +1094,8 @@
console.debug("measure: handleSetup");
var data = this;
data.lastMeasuredDistance = 0;
- data.lastMeasuredValue = 0;
data.lastMeasuredAngle = 0;
- data.lastMeasureFactor = 1.0,
+ data.measureFactor = 1.0,
setupMeasureBar(data);
};
@@ -1133,9 +1139,9 @@
var $data = $(data);
$data.on('setup', handleSetup);
$data.on('update', handleUpdate);
+ $data.on('createShape', onCreateShape);
$data.on('renderShape', onRenderShape);
$data.on('changeShape', onChangeShape);
-
};
// plugin object with name and init