svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / project / documents / table / operators / Perimeter.java @ 10626
History | View | Annotate | Download (2.62 KB)
1 |
package com.iver.cit.gvsig.project.documents.table.operators; |
---|---|
2 |
|
3 |
import java.awt.geom.Point2D; |
4 |
|
5 |
import org.apache.bsf.BSFException; |
6 |
import org.apache.bsf.BSFManager; |
7 |
|
8 |
import com.hardcode.gdbms.driver.exceptions.ReadDriverException; |
9 |
import com.iver.cit.gvsig.ExpresionFieldExtension; |
10 |
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException; |
11 |
import com.iver.cit.gvsig.fmap.MapContext; |
12 |
import com.iver.cit.gvsig.fmap.ViewPort; |
13 |
import com.iver.cit.gvsig.fmap.core.FShape; |
14 |
import com.iver.cit.gvsig.fmap.core.IGeometry; |
15 |
import com.iver.cit.gvsig.fmap.layers.ReadableVectorial; |
16 |
import com.iver.cit.gvsig.project.documents.table.GraphicOperator; |
17 |
import com.iver.cit.gvsig.project.documents.table.IOperator; |
18 |
import com.iver.cit.gvsig.project.documents.table.Index; |
19 |
/**
|
20 |
* @author Vicente Caballero Navarro
|
21 |
*/
|
22 |
public class Perimeter extends GraphicOperator{ |
23 |
|
24 |
public String addText(String s) { |
25 |
return s.concat(toString()+"()"); |
26 |
} |
27 |
public double process(Index index) throws ReadDriverException, ExpansionFileReadException { |
28 |
ReadableVectorial adapter = getLayer().getSource(); |
29 |
IGeometry geom=adapter.getShape(index.get()); |
30 |
Double[][] xsys=getXY(geom); |
31 |
double dist = 0; |
32 |
double distAll = 0; |
33 |
|
34 |
ViewPort vp = getLayer().getMapContext().getViewPort(); |
35 |
for (int i = 0; i < (xsys[0].length - 1); i++) { |
36 |
dist = 0;
|
37 |
|
38 |
Point2D p = new Point2D.Double(xsys[0][i].doubleValue(), xsys[1][i].doubleValue());//vp.toMapPoint(new Point(event.getXs()[i].intValue(), event.getYs()[i].intValue())); |
39 |
Point2D p2 = new Point2D.Double(xsys[0][i + 1].doubleValue(), xsys[1][i + 1].doubleValue());//vp.toMapPoint(new Point(event.getXs()[i + 1].intValue(), event.getYs()[i + 1].intValue())); |
40 |
dist = vp.distanceWorld(p,p2); |
41 |
System.out.println("distancia parcial = "+dist); |
42 |
distAll += dist; |
43 |
} |
44 |
int distanceUnits=vp.getDistanceUnits();
|
45 |
return distAll/MapContext.CHANGEM[distanceUnits];
|
46 |
} |
47 |
public void eval(BSFManager interpreter) throws BSFException { |
48 |
interpreter.declareBean("perimeter",this,Perimeter.class); |
49 |
interpreter.eval(ExpresionFieldExtension.BEANSHELL,null,-1,-1,"double perimeter(){return perimeter.process(indexRow);};"); |
50 |
} |
51 |
public String toString() { |
52 |
return "perimeter"; |
53 |
} |
54 |
public boolean isEnable() { |
55 |
if (getLayer()==null) |
56 |
return false; |
57 |
ReadableVectorial adapter = getLayer().getSource(); |
58 |
int type=FShape.POINT;
|
59 |
try {
|
60 |
type=adapter.getShapeType(); |
61 |
} catch (ReadDriverException e) {
|
62 |
// TODO Auto-generated catch block
|
63 |
e.printStackTrace(); |
64 |
} |
65 |
return (getType()==IOperator.NUMBER && (type==FShape.POLYGON || type==FShape.LINE));
|
66 |
} |
67 |
} |