OpenLayers OpenLayers

Changeset 8004

Show
Ignore:
Timestamp:
09/12/08 10:44:40 (3 months ago)
Author:
ahocevar
Message:

use a local coordinate system starting at (0,0) instead of coordinates just derived from the geometries, resetting it every time the resolution changes. r=tschaub (Pullup #1732)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Renderer/VML.js

    r7979 r8004  
    3535 
    3636    /** 
     37     * Property: offset 
     38     * {Object} Hash with "x" and "y" properties 
     39     */ 
     40    offset: null, 
     41     
     42    /** 
    3743     * Constructor: OpenLayers.Renderer.VML 
    3844     * Create a new VML renderer. 
     
    5157                                   "position: absolute; display: inline-block;"); 
    5258        } 
     59         
    5360        OpenLayers.Renderer.Elements.prototype.initialize.apply(this,  
    5461                                                                arguments); 
     62        this.offset = {x: 0, y: 0}; 
    5563    }, 
    5664 
     
    9199        var resolution = this.getResolution(); 
    92100     
    93         var org = extent.left/resolution + " " +  
    94                     (extent.top/resolution - this.size.h); 
     101        var left = extent.left/resolution; 
     102        var top = extent.top/resolution - this.size.h; 
     103        if (resolutionChanged) { 
     104            this.offset = {x: left, y: top}; 
     105            left = 0; 
     106            top = 0; 
     107        } else { 
     108            left = left - this.offset.x; 
     109            top = top - this.offset.y; 
     110        } 
     111         
     112        var org = left + " " + top; 
    95113        this.root.setAttribute("coordorigin", org); 
    96114 
     
    192210                    style.graphicYOffset : -(0.5 * height); 
    193211                 
    194                 node.style.left = ((geometry.x/resolution)+xOffset).toFixed(); 
    195                 node.style.top = ((geometry.y/resolution)-(yOffset+height)).toFixed(); 
     212                node.style.left = ((geometry.x/resolution - this.offset.x)+xOffset).toFixed(); 
     213                node.style.top = ((geometry.y/resolution - this.offset.y)-(yOffset+height)).toFixed(); 
    196214                node.style.width = width + "px"; 
    197215                node.style.height = height + "px"; 
     
    449467         
    450468            var scaledBox =  
    451                 new OpenLayers.Bounds((bbox.left/resolution).toFixed(), 
    452                                       (bbox.bottom/resolution).toFixed(), 
    453                                       (bbox.right/resolution).toFixed(), 
    454                                       (bbox.top/resolution).toFixed()); 
     469                new OpenLayers.Bounds((bbox.left/resolution - this.offset.x).toFixed(), 
     470                                      (bbox.bottom/resolution - this.offset.y).toFixed(), 
     471                                      (bbox.right/resolution - this.offset.x).toFixed(), 
     472                                      (bbox.top/resolution - this.offset.y).toFixed()); 
    455473             
    456474            // Set the internal coordinate system to draw the path 
     
    614632        if(!isNaN(geometry.x)&& !isNaN(geometry.y)) { 
    615633            var resolution = this.getResolution(); 
    616          
    617             node.style.left = ((geometry.x /resolution).toFixed() - radius) + "px"; 
    618             node.style.top = ((geometry.y /resolution).toFixed() - radius) + "px"; 
     634 
     635            node.style.left = ((geometry.x /resolution - this.offset.x).toFixed() - radius) + "px"; 
     636            node.style.top = ((geometry.y /resolution - this.offset.y).toFixed() - radius) + "px"; 
    619637     
    620638            var diameter = radius * 2; 
     
    681699        for (var i = 0; i < numComponents; i++) { 
    682700            comp = geometry.components[i]; 
    683             x = (comp.x/resolution); 
    684             y = (comp.y/resolution); 
     701            x = (comp.x/resolution - this.offset.x); 
     702            y = (comp.y/resolution - this.offset.y); 
    685703            parts[i] = " " + x.toFixed() + "," + y.toFixed() + " l "; 
    686704        } 
     
    714732            for (i=0, ilen=linearRing.components.length; i<ilen; i++) { 
    715733                comp = linearRing.components[i]; 
    716                 x = comp.x / resolution
    717                 y = comp.y / resolution
     734                x = comp.x / resolution - this.offset.x
     735                y = comp.y / resolution - this.offset.y
    718736                path.push(" " + x.toFixed() + "," + y.toFixed()); 
    719737                if (i==0) { 
     
    742760        var resolution = this.getResolution(); 
    743761     
    744         node.style.left = geometry.x/resolution + "px"; 
    745         node.style.top = geometry.y/resolution + "px"; 
     762        node.style.left = (geometry.x/resolution - this.offset.x) + "px"; 
     763        node.style.top = (geometry.y/resolution - this.offset.y) + "px"; 
    746764        node.style.width = geometry.width/resolution + "px"; 
    747765        node.style.height = geometry.height/resolution + "px"; 
     
    770788        for (var i=0, len=geometry.components.length; i<len; i++) { 
    771789            comp = geometry.components[i]; 
    772             x = comp.x / resolution
    773             y = comp.y / resolution
     790            x = comp.x / resolution - this.offset.x
     791            y = comp.y / resolution - this.offset.y
    774792            if ((i%3)==0 && (i/3)==0) { 
    775793                path.push("m");