Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extCAD / src / com / iver / cit / gvsig / project / documents / table / operators / Perimeter.java @ 10254

History | View | Annotate | Download (2.47 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.iver.cit.gvsig.ExpresionFieldExtension;
9
import com.iver.cit.gvsig.fmap.MapContext;
10
import com.iver.cit.gvsig.fmap.ViewPort;
11
import com.iver.cit.gvsig.fmap.core.FShape;
12
import com.iver.cit.gvsig.fmap.core.IGeometry;
13
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
14
import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
15
import com.iver.cit.gvsig.project.documents.table.GraphicOperator;
16
import com.iver.cit.gvsig.project.documents.table.IOperator;
17
import com.iver.cit.gvsig.project.documents.table.Index;
18
/**
19
 * @author Vicente Caballero Navarro
20
 */
21
public class Perimeter extends GraphicOperator{
22

    
23
        public String addText(String s) {
24
                return s.concat(toString()+"()");
25
        }
26
        public double process(Index index) throws DriverIOException {
27
                ReadableVectorial adapter = getLayer().getSource();
28
                   IGeometry geom=adapter.getShape(index.get());
29
                   Double[][] xsys=getXY(geom);
30
            double dist = 0;
31
        double distAll = 0;
32

    
33
        ViewPort vp = getLayer().getMapContext().getViewPort();
34
        for (int i = 0; i < (xsys[0].length - 1); i++) {
35
            dist = 0;
36

    
37
            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()));
38
            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()));
39
            dist = vp.distanceWorld(p,p2);
40
            System.out.println("distancia parcial = "+dist);
41
            distAll += dist;
42
        }
43
        int distanceUnits=vp.getDistanceUnits();
44
                return distAll/MapContext.CHANGEM[distanceUnits];
45
        }
46
        public void eval(BSFManager interpreter) throws BSFException {
47
                interpreter.declareBean("perimeter",this,Perimeter.class);
48
                interpreter.eval(ExpresionFieldExtension.BEANSHELL,null,-1,-1,"double perimeter(){return perimeter.process(indexRow);};");
49
        }
50
        public String toString() {
51
                return "perimeter";
52
        }
53
        public boolean isEnable() {
54
                if (getLayer()==null)
55
                        return false;
56
                ReadableVectorial adapter = getLayer().getSource();
57
                int type=FShape.POINT;
58
                try {
59
                        type=adapter.getShapeType();
60
                } catch (DriverIOException e) {
61
                        e.printStackTrace();
62
                }
63
                return (getType()==IOperator.NUMBER && (type==FShape.POLYGON || type==FShape.LINE));
64
        }
65
}