#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


