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 |
} |