Statistics
| Revision:

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
}