Mercurial > hg > digilib
changeset 1303:7b18c8e6ab31 rc_create_polys
clean up.
author | robcast |
---|---|
date | Wed, 21 Jan 2015 10:45:54 +0100 |
parents | fe413f88f3b6 |
children | 94ca844425fe |
files | webapp/src/main/webapp/jquery/jquery.digilib.vector.js |
diffstat | 1 files changed, 36 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.vector.js Tue Jan 20 18:12:21 2015 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.vector.js Wed Jan 21 10:45:54 2015 +0100 @@ -317,7 +317,11 @@ var stroke = props['stroke'] || settings.defaultStroke; var strokeWidth = props['stroke-width'] || settings.defaultStrokeWidth; var fill = props['fill'] || settings.defaultFill; - var coords = shape.geometry.coordinates; + var coords = /** + * @author casties + * + */ + shape.geometry.coordinates; var gt = shape.geometry.type; if (gt === 'Line') { /* @@ -440,6 +444,14 @@ } }; + /** + * remove rendered shape from screen. + * + * Removes the SVG elements from the layer. + * + * @param data + * @param shape + */ var unrenderShape = function (data, shape) { // remove vertex handles if (shape.$vertexElems != null) { @@ -518,11 +530,9 @@ }; var dragEnd = function (evt) { - console.debug("dragend!"); pt = geom.position(evt); if ((pt.distance(pt0) < 5) && evt.type === 'mouseup') { // not drag but click to start - console.debug("dragend - not moved"); return false; } pt.clipTo(imgRect); @@ -587,20 +597,25 @@ $overlayDiv.remove(); return false; } + // save editable state and set to non-editable + var isShapeEditable = false; + if (shape.properties != null) { + isShapeEditable = shape.properties.editable; + shape.properties.editable = false; + } else { + shape.properties = {'editable' : false}; + } // draw shape renderShape(data, shape, layer); // vertex drag end handler var vertexDragDone = function (data, newshape, newevt) { - console.debug("new shape. evtype:", newevt.type, "shape:", newshape); - console.debug("coords", newshape.geometry.coordinates.toString()); + var coords = newshape.geometry.coordinates; if (shapeType === 'LineString' || shapeType === 'Polygon') { if (newevt.type === 'mouseup') { // single click adds line to LineString/Polygon unrenderShape(data, newshape); // copy last vertex as starting point - var vtx = newshape.geometry.coordinates[vtxidx]; - newshape.geometry.coordinates.push(vtx.slice()); - console.debug("new coords", newshape.geometry.coordinates.toString()); + coords.push(coords[vtxidx].slice()); vtxidx += 1; // draw shape renderShape(data, newshape, layer); @@ -608,19 +623,25 @@ getVertexDragHandler(data, newshape, vtxidx, vertexDragDone)(newevt); return false; } else if (newevt.type === 'dblclick') { - // remove last vertex from mouseup - console.debug("dblclick"); - unrenderShape(data, newshape); - newshape.geometry.coordinates.pop(); - console.debug("new coords", newshape.geometry.coordinates.toString()); - renderShape(data, newshape, layer); + // double click ends Linestring/Polygon + if (coords[vtxidx][0] === coords[vtxidx-1][0] && + coords[vtxidx][1] === coords[vtxidx-1][1]) { + unrenderShape(data, newshape); + // remove duplicate last vertex (from mouseup) + coords.pop(); + renderShape(data, newshape, layer); + } } else { console.error("unknown event type!"); return false; } } - console.debug("final shape:", newshape); // dragging vertex done + // re-set editable + unrenderShape(data, newshape); + shape.properties.editable = isShapeEditable; + renderShape(data, newshape, layer); + // save shape data.shapes.push(newshape); $overlayDiv.remove(); if (onComplete != null) {