Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extExpressionField / src / com / iver / cit / gvsig / project / documents / table / GraphicOperator.java @ 27752

History | View | Annotate | Download (2.96 KB)

1
package com.iver.cit.gvsig.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.util.Converter;
8
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
9

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

    
28
        //double[] aux = new double[6];
29
        PathIterator theIterator;
30
        int theType;
31
        int numParts = 0;
32
        theIterator = geometry.getPathIterator(null,Converter.FLATNESS); //, flatness);
33
        boolean isClosed = false;
34
        while (!theIterator.isDone()) {
35
            theType = theIterator.currentSegment(theData);
36

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

    
73
            theIterator.next();
74
        } //end while loop
75

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

    
88
    }
89

    
90
}