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