Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extExpressionField / src / org / gvsig / expressionfield / project / documents / table / GraphicOperator.java @ 38564

History | View | Annotate | Download (3.1 KB)

1
package org.gvsig.expressionfield.project.documents.table;
2

    
3
import java.awt.geom.PathIterator;
4
import java.util.ArrayList;
5

    
6
import org.gvsig.fmap.geom.Geometry;
7
import org.gvsig.fmap.geom.GeometryLocator;
8
import org.gvsig.fmap.geom.GeometryManager;
9
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
10

    
11
/**
12
 * @author Vicente Caballero Navarro
13
 */
14
public abstract class GraphicOperator extends AbstractOperator{
15
        private FLyrVect lv=null;
16
        private static GeometryManager geomManager = GeometryLocator.getGeometryManager();
17
        
18
        public void setLayer(FLyrVect lv) {
19
                this.lv=lv;
20
        }
21
        public FLyrVect getLayer() {
22
                return lv;
23
        }
24
        public abstract double process(org.gvsig.fmap.dal.feature.Feature feature);
25
        protected ArrayList getXY(Geometry geometry) {
26
        ArrayList xs = new ArrayList();
27
        ArrayList ys = new ArrayList();
28
        ArrayList parts=new ArrayList();
29
        double[] theData = new double[6];
30

    
31
        //double[] aux = new double[6];
32
        PathIterator theIterator;
33
        int theType;
34
        int numParts = 0;
35
        theIterator = geometry.getPathIterator(null, geomManager.getFlatness()); //, flatness);
36
        boolean isClosed = false;
37
        while (!theIterator.isDone()) {
38
            theType = theIterator.currentSegment(theData);
39

    
40
            switch (theType) {
41
            case PathIterator.SEG_MOVETO:
42
                            if (numParts==0){
43
                                    xs.add(new Double(theData[0]));
44
                                    ys.add(new Double(theData[1]));
45
                            }else{
46
                                    if (!isClosed){
47
                                            Double[] x = (Double[]) xs.toArray(new Double[0]);
48
                                            Double[] y = (Double[]) ys.toArray(new Double[0]);
49
                                            parts.add(new Double[][] { x, y });
50
                                            xs.clear();
51
                                            ys.clear();
52
                                    }
53
                                    xs.add(new Double(theData[0]));
54
                                    ys.add(new Double(theData[1]));
55
                            }
56
                numParts++;
57
                isClosed = false;
58
                break;
59
            case PathIterator.SEG_LINETO:
60
                    isClosed=false;
61
                xs.add(new Double(theData[0]));
62
                ys.add(new Double(theData[1]));
63
                break;
64
            case PathIterator.SEG_CLOSE:
65
                    isClosed=true;
66
                xs.add(new Double(theData[0]));
67
                ys.add(new Double(theData[1]));
68
                Double[] x = (Double[]) xs.toArray(new Double[0]);
69
                Double[] y = (Double[]) ys.toArray(new Double[0]);
70
                parts.add(new Double[][] { x, y });
71
                xs.clear();
72
                ys.clear();
73
                break;
74
            } //end switch
75

    
76
            theIterator.next();
77
        } //end while loop
78

    
79
        if (!isClosed){
80
                isClosed=true;
81
                xs.add(new Double(theData[0]));
82
            ys.add(new Double(theData[1]));
83
            Double[] x = (Double[]) xs.toArray(new Double[0]);
84
            Double[] y = (Double[]) ys.toArray(new Double[0]);
85
            parts.add(new Double[][] { x, y });
86
            xs.clear();
87
            ys.clear();
88
        }
89
        return parts;
90

    
91
    }
92

    
93
}