Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / operations / strategies / ShpStrategy.java @ 610

History | View | Annotate | Download (5.84 KB)

1
/* Generated by Together */
2

    
3
package com.iver.cit.gvsig.fmap.operations.strategies;
4

    
5
import java.awt.Graphics2D;
6
import java.awt.geom.AffineTransform;
7
import java.awt.geom.Point2D;
8
import java.awt.geom.Rectangle2D;
9
import java.awt.image.BufferedImage;
10
import java.io.IOException;
11

    
12
import org.apache.log4j.Logger;
13
import org.geotools.resources.geometry.XRectangle2D;
14

    
15
import com.hardcode.driverManager.DriverLoadException;
16
import com.hardcode.gdbms.engine.data.DriverException;
17
import com.iver.cit.gvsig.fmap.ViewPort;
18
import com.iver.cit.gvsig.fmap.core.FShape;
19
import com.iver.cit.gvsig.fmap.core.IGeometry;
20
import com.iver.cit.gvsig.fmap.core.v02.FSymbol;
21
import com.iver.cit.gvsig.fmap.drivers.BoundedShapes;
22
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
23
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
24
import com.iver.cit.gvsig.fmap.layers.FLayer;
25
import com.iver.cit.gvsig.fmap.layers.VectorialAdapter;
26
import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
27
import com.iver.cit.gvsig.fmap.layers.layerOperations.ClassifiableVectorial;
28
import com.iver.cit.gvsig.fmap.layers.layerOperations.Selectable;
29
import com.iver.cit.gvsig.fmap.layers.layerOperations.SingleLayer;
30
import com.iver.cit.gvsig.fmap.operations.Cancellable;
31
import com.iver.cit.gvsig.fmap.rendering.ClassifiedLegendInfo;
32
import com.iver.cit.gvsig.fmap.rendering.VectorialLegend;
33
import com.iver.cit.gvsig.fmap.rendering.styling.FStyle2D;
34

    
35

    
36
/**
37
 * Esta clase definir? las operaciones de la interfaz FLyrVect de la manera m?s ?ptima para los ficheros shp. 
38
 */
39
public class ShpStrategy extends DefaultStrategy {
40
        private static Logger logger = Logger.getLogger(ShpStrategy.class.getName());
41
        /**
42
         * @param capa
43
         */
44
        public ShpStrategy(FLayer capa) {
45
                super(capa);
46
        }
47
        /**
48
         * @throws DriverLoadException
49
         * @see com.iver.cit.gvsig.fmap.operations.LayerOperations#draw(java.awt.image.BufferedImage, java.awt.Graphics2D, FStyle2D)
50
         */
51
        public void draw(BufferedImage image, Graphics2D g, ViewPort viewPort, Cancellable cancel)
52
                        throws DriverIOException, DriverLoadException {
53
                VectorialAdapter adapter = ((SingleLayer)getCapa()).getSource();
54
                BoundedShapes shapeBounds = (BoundedShapes) adapter.getDriver();
55
                VectorialFileDriver driver = (VectorialFileDriver) adapter.getDriver();
56
                logger.debug("adapter.start()");
57
                adapter.start();
58
                
59
                IGeometry geom = adapter.getShape(0);
60
                VectorialLegend l = (VectorialLegend) ((ClassifiableVectorial)getCapa()).getLegend();
61
                if (l instanceof ClassifiedLegendInfo)
62
                {
63
                        ClassifiedLegendInfo clsfLegend = (ClassifiedLegendInfo) l;
64
                        FSymbol[] symbs = clsfLegend.getSymbols();
65
                        double rSym=0, maxRSym = -1;
66
                        for (int i=0; i < symbs.length; i++)
67
                        {
68
                                // TODO: REVISAR LOS SIMBOLOS Y SUS TAMA?OS
69
                                /* Style2D pointSymbol = symbs[i].getPointStyle2D(); 
70
                                if (pointSymbol instanceof MarkStyle2D)
71
                                {
72
                                        MarkStyle2D mrk2D = (MarkStyle2D) pointSymbol;
73
                                        rSym = viewPort.toMapDistance(mrk2D.getSize());
74
                                        if (maxRSym < rSym)
75
                                                maxRSym = rSym;
76
                                }*/
77
                                
78
                        }
79
                }
80
                Rectangle2D extent = viewPort.getAdjustedExtent();
81
                AffineTransform at = viewPort.getAffineTransform();
82
                
83
                int sc;
84
                
85
                Rectangle2D bounds;
86

    
87
                sc = adapter.getShapeCount();
88
                long t1 = System.currentTimeMillis();
89
                //Prueba query
90
                ///BitSet bitset=this.queryByPoint((QueriedPoint)new QueriedPoint(904561,4712059),200000);
91
                ///BitSet bitset=this.queryByRect(new Rectangle2D.Double(304561,3712059,500000,500000));
92
                // BitSet bitset=this.queryByShape((IGeometry)new com.iver.cit.gvsig.fmap.core.Point2D(642561,4397059),1);
93
                try {
94
                        // g.setTransform(viewPort.getAffineTransform());
95
                        logger.debug("getCapa().getRecordset().start()");
96
                        ((AlphanumericData)getCapa()).getRecordset().start();
97
                        for (int i = 0; i < sc; i++){
98
                                // Salimos si alguien cancela
99
                                if (cancel.isCanceled()) break;
100
                                
101
                                bounds = shapeBounds.getShapeBounds(i);
102
                                if (XRectangle2D.intersectInclusive(extent, bounds))
103
                                {
104
//                                        Prueba query
105
                                        /* if (bitset.get(i)){
106
                                                g.setPaint(Color.yellow);
107
                                        }else{
108
                                                g.setPaint(Color.black);
109
                                        } */
110
                                        
111
                                        FSymbol symbol = l.getSymbol(i); // Cambiar esto
112
                                        boolean bPoint = (shapeBounds.getShapeType(i) == FShape.POINT);
113
                                        if (bPoint || ((bounds.getHeight() > viewPort.getDist1pixel()) ||
114
                                       (bounds.getWidth() > viewPort.getDist1pixel())))
115
                            {        
116
                                    geom = driver.getShape(i);
117
                                    if (((Selectable)getCapa()).isSelected(i)){
118
                                            
119
                                    }else{
120
                                            geom.draw(g, viewPort, symbol);
121
                                    }
122
                            }
123
                        else
124
                        {
125
                            Point2D.Double pOrig = new Point2D.Double(bounds.getMinX(),
126
                                            bounds.getMinY());
127
                            Point2D pDest;
128

    
129
                            pDest = viewPort.getAffineTransform().transform(pOrig, null);
130

    
131
                            int pixX = (int) pDest.getX();
132
                            int pixY = (int) pDest.getY();
133

    
134
                            if ((pixX > 0) && (pixX < image.getWidth())) {
135
                                if ((pixY > 0) && (pixY < image.getHeight())) {
136
                                    image.setRGB(pixX, pixY,
137
                                        symbol.getRgb());
138
                                }
139
                            }
140
                        }          
141
                                        
142
                                        
143
                                        
144
                                        
145
                                }
146
                        }
147
                        logger.debug("getCapa().getRecordset().stop()");
148
                        ((AlphanumericData)getCapa()).getRecordset().stop();
149
                } catch(IOException e) {
150
                        throw new DriverIOException(e);
151
                } catch (DriverException e) {
152
                        throw new DriverIOException(e);
153
                }
154

    
155
                
156
                long t2 = System.currentTimeMillis();
157
                logger.debug("adapter.stop()");
158
                adapter.stop();
159
                
160
                System.out.println(t2 - t1);
161
        }
162
        public void print(Graphics2D g, ViewPort viewPort, Cancellable cancel) throws DriverIOException, DriverLoadException, DriverException {
163
                super.draw(null, g, viewPort, cancel);  // Quiero ejecutar el draw del padre, que es el que va sin acelaraci?n!!
164
                
165
        }
166
        
167
}