banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

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

 

Pied de page des forums

Powered by FluxBB