changeset 1549:67a282bffab0 measure-maps

vector plugin: redrawShape (update SVG of single shape on layer)
author hertzhaft
date Thu, 27 Oct 2016 16:08:44 +0200
parents bd981744b232
children 5f441a362c8d
files webapp/src/main/webapp/jquery/jquery.digilib.annotator.js webapp/src/main/webapp/jquery/jquery.digilib.vector.js
diffstat 2 files changed, 32 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.annotator.js	Mon Oct 24 08:55:29 2016 +0200
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.annotator.js	Thu Oct 27 16:08:44 2016 +0200
@@ -442,7 +442,7 @@
                   'style': 'pointer-events:all'
                   }
                };
-            console.debug('createshape: '+type, annoShape, shape);
+            // console.debug('createshape: '+type, annoShape, shape);
             shapes.push(shape);
         }
         return shapes;
--- a/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Mon Oct 24 08:55:29 2016 +0200
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.vector.js	Thu Oct 27 16:08:44 2016 +0200
@@ -216,7 +216,8 @@
             svgAttr: svgAttr,
             createScreenCoords: createScreenCoords,
             editShapeBegin: addEditHandles,
-            editShapeEnd: removeEditHandles
+            editShapeEnd: removeEditHandles,
+            redrawShape: redrawShape
             });
     };
 
@@ -558,26 +559,26 @@
         var trafo = data.imgTrafo;
         // type of handle can be stated in layer
         var type = layer.handleType;
-        var newHandle = data.handleFactory[type] || data.handleFactory['square'];
         var handles = [];
-        var createHandle = function (i, item) {
+        var createHandle = data.handleFactory[type] || data.handleFactory['square'];
+        var insertHandle = function (i, item) {
             var p = trafo.transform(geom.position(item));
-            var $handle = newHandle();
+            var $handle = createHandle();
+            $handle.attr('vertex', i);
             $handle.moveTo(p);
             handles.push($handle);
             $svg.append($handle);
             return $handle;
             };
-        var coords = shape.geometry.coordinates;
-        $.each(coords, createHandle);
-        // vertexElems must be defined before calling getVertexDragHandler()
+        $.each(shape.geometry.coordinates, insertHandle);
         shape.$vertexElems = handles;
+        // not needed?
         var done = function (data, shape, evt) {
-            unrenderShape(data, shape);
-            renderShape(data, shape, layer);
-            }
+            redrawShape(data, shape, layer);
+            };
+        // vertexElems must be defined before calling getVertexDragHandler()
         var attachEvent = function (i, item) {
-            item.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, i, done));
+            item.one("mousedown.dlVertexDrag", getVertexDragHandler(data, shape, i));
             };
         $.each(handles, attachEvent);
     };
@@ -635,7 +636,7 @@
         }
         return geom.rectangle(xmin, ymin, xmax-xmin, ymax-ymin);
     };
-    
+
     /**
      * render a shape on screen.
      * 
@@ -659,12 +660,15 @@
         }
         // create the SVG
         var $elem = data.shapeFactory[shapeType].svg(shape);
+        // let shape know where it is rendered
         shape.$elem = $elem;
+        shape.layer = layer;
         // place the SVG on screen
         createScreenCoords(data, shape);
         $elem.place();
         // render the SVG
         $(layer.svgElem).append($elem);
+        // add adjustment handles
         if (shape.properties.editable) {
             addEditHandles(data, shape, layer);
         }
@@ -689,6 +693,20 @@
     };
 
     /**
+     * re-render a shape.
+     * 
+     * Removes the SVG element from layer and renders the (updated) shape again.
+     * 
+     * @param data
+     * @param shape
+     * @param layer
+     */
+    var redrawShape = function (data, shape, layer) {
+        unrenderShape(data, shape);
+        renderShape(data, shape, layer || shape.layer);
+    };
+
+    /**
      * return a vertexDragHandler function.
      * 
      * @param data
@@ -859,9 +877,8 @@
                             rerender = true;
 	            		}
 	            		if (rerender) {
-	            		    unrenderShape(data, shape);
 	            		    shape.properties.vtx = vtx;
-	            		    renderShape(data, shape, layer);
+	            		    redrawShape(data, shape, layer);
 	            		}
             		} else {
             			console.error("unknown event type!");