#1 Tue 18 August 2009 16:50
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
[openlayers] override de fonction
bonjour,
Openlayers possede t il des fonctionnalités permettant de faire des overrides de fonctions en GARDANT les code initiaux de la fonction
par exemple:
en C# (asp.net) ce mecanisme d'héritage et override de fonction s'exprime ainsi :
Code:
protected override void OnLoad(EventArgs e) { base.OnLoad(e); //<-------- héritage /* ajout de code propre à ma classe fille...... */ }
le code ci dessous permet de redefinir la fonction collectRadiusHandle de ma classe OpenLayers.Control.ModifyFeature , ici en fait je garde le code tel quel de base et je me contente juste
de rajouter en fin un alert('pouet ') ;
Code:
OpenLayers.Control.ModifyFeature.prototype.collectRadiusHandle = function() { var geometry = this.feature.geometry; var bounds = geometry.getBounds(); var center = bounds.getCenterLonLat(); var originGeometry = new OpenLayers.Geometry.Point( center.lon, center.lat ); var radiusGeometry = new OpenLayers.Geometry.Point( bounds.right, bounds.bottom ); var radius = new OpenLayers.Feature.Vector(radiusGeometry); var resize = (this.mode & OpenLayers.Control.ModifyFeature.RESIZE); var reshape = (this.mode & OpenLayers.Control.ModifyFeature.RESHAPE); var rotate = (this.mode & OpenLayers.Control.ModifyFeature.ROTATE); radiusGeometry.move = function(x, y) { OpenLayers.Geometry.Point.prototype.move.call(this, x, y); var dx1 = this.x - originGeometry.x; var dy1 = this.y - originGeometry.y; var dx0 = dx1 - x; var dy0 = dy1 - y; if(rotate) { var a0 = Math.atan2(dy0, dx0); var a1 = Math.atan2(dy1, dx1); var angle = a1 - a0; angle *= 180 / Math.PI; geometry.rotate(angle, originGeometry); } if(resize) { var scale, ratio; // 'resize' together with 'reshape' implies that the aspect // ratio of the geometry will not be preserved whilst resizing if (reshape) { scale = dy1 / dy0; ratio = (dx1 / dx0) / scale; } else { var l0 = Math.sqrt((dx0 * dx0) + (dy0 * dy0)); var l1 = Math.sqrt((dx1 * dx1) + (dy1 * dy1)); scale = l1 / l0; } geometry.resize(scale, originGeometry, ratio); } }; radius._sketch = true; this.radiusHandle = radius; this.layer.addFeatures([this.radiusHandle], {silent: true}); alert("pouet"); };
merci d'avance
Dernière modification par icadedt (Tue 18 August 2009 16:54)
Hors ligne
#2 Tue 18 August 2009 16:52
Re: [openlayers] override de fonction
Oui, comme ceci :
Code:
var nouvelleClass = Class.create(); Object.extend(nouvelleClass.prototype, OpenLayers.Strategy.Cluster.prototype); Object.extend(nouvelleClass.prototype, { }
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Tue 18 August 2009 17:10
- icadedt
- Participant assidu
- Lieu: ici et là
- Date d'inscription: 21 Jul 2006
- Messages: 478
Re: [openlayers] override de fonction
Yves a écrit:
Oui, comme ceci :
Code:
var nouvelleClass = Class.create(); Object.extend(nouvelleClass.prototype, OpenLayers.Strategy.Cluster.prototype); Object.extend(nouvelleClass.prototype, { }Y.
donc Openlayers ne possede pas cette fonctionnalité en "natif" mais plutot l'API "prototype"
Hors ligne