Hi,

I want to be able to prevent a user from adding a new vertex to a line sketch tool if I determine the location is invalid. So for example in http://openlayers.org/dev/examples/editingtoolbar.html I may want to prevent a user from clicking on the sea (the code to work out if a point is valid or not is fine).

My draw feature tool calls a pointHandler function correctly, but there seems no way to cancel the addition of a new point.

var myControl = OpenLayers.Control.DrawFeature(myLayer, OpenLayers.Handler.Path, {
                    callbacks: {
                        point: pointHandler
                    });

    function pointHandler = function(newPoint){
        if(!_isValidPoint){
            //none of the following work...
            //myControl.handler.destroyFeature();
            //myControl.removePoint();
            //newPoint= null;
        }
    }


Looking at the source code for at http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js, the callback occurs after the new geometry is added but before it is drawn.

127 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L127> this.line.geometry.addComponent( 128 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L128> this.point.geometry, this.line.geometry.components.length 129 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L129> ); 130 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L130> this.callback("point", [this.point.geometry, this.getGeometry()]); 131 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L131> this.callback("modify", [this.point.geometry, this.getSketch()]); 132 <http://trac.osgeo.org/openlayers/browser/trunk/openlayers/lib/OpenLayers/Handler/Path.js#L132> this.drawFeature();



I also tried a custom OpenLayers.Control.Click with stopSingle set to true, but new points are added on the "mousedown" event, and so the click control is called afterwards.

Are there any ways to achieve this, or will it involve overriding browser events?
Apologies if this is in the wrong mailing list.
Thanks for any help,

Seth G.
_______________________________________________
Dev mailing list
d...@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/openlayers-dev

Reply via email to