Revision 45242

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2DZ.java
35 35
import org.gvsig.fmap.geom.jts.aggregate.MultiPoint3D;
36 36
import org.gvsig.fmap.geom.jts.aggregate.MultiPolygon3D;
37 37
import org.gvsig.fmap.geom.jts.primitive.curve.line.Line3D;
38
import org.gvsig.fmap.geom.jts.primitive.point.Point2D;
38 39
import org.gvsig.fmap.geom.jts.primitive.point.Point3D;
39 40
import org.gvsig.fmap.geom.jts.primitive.point.PointJTS;
40 41
import org.gvsig.fmap.geom.jts.primitive.surface.polygon.Polygon3D;
......
73 74
    public void setPoints(Point center, double radius, double startAngle, double angleExt) {
74 75
        center = fixPoint(center);
75 76

  
76
        double diameter = radius * 2;
77
        double x;
78
        double y;
79
        double start;
80
        double extent;
81
        double angleOffset;
82
        final double pi2 = Math.PI * 2;
77
        init = new Point3D(
78
                center.getX()+radius*Math.cos(startAngle),
79
                center.getY()+radius*Math.sin(startAngle),
80
                ((Point3D) center).getZ()
81
                );
82
        
83
        double midAngle = startAngle+angleExt/2;
84
        middle = new Point3D(
85
                center.getX()+radius*Math.cos(midAngle),
86
                center.getY()+radius*Math.sin(midAngle),
87
                ((Point3D) center).getZ()
88
                );
89
        
90
        end = new Point3D(
91
                center.getX()+radius*Math.cos(startAngle+angleExt),
92
                center.getY()+radius*Math.sin(startAngle+angleExt),
93
                ((Point3D) center).getZ()
94
                );
83 95

  
84
        angleOffset = 0;
85
        if (angleExt < 0) {
86
            angleOffset = pi2 + angleExt;
87
            angleExt = Math.abs(angleExt);
88
        }
89
        x = center.getX() - radius;
90
        y = center.getY() - radius;
91

  
92
        if (angleExt > 0 && (angleExt % pi2) == 0) {
93
            start = 0;
94
            extent = 360;
95
        } else {
96
            angleExt = angleExt % pi2; // Asumimos que aqui angleExt es siempre
97
                                       // positivo
98
            startAngle = Math.abs(startAngle) % pi2;
99
            start = Math.toDegrees(pi2 - startAngle + angleOffset);
100
            extent = -Math.toDegrees(pi2 - angleExt);
101
        }
102

  
103
        double angleStart = Math.toRadians(-start);
104
        double initX = x + (Math.cos(angleStart) * 0.5 + 0.5) * diameter;
105
        double initY = y + (Math.sin(angleStart) * 0.5 + 0.5) * diameter;
106
        init = new Point3D(initX, initY, ((Point3D) center).getZ());
107

  
108
        double angleEnd = Math.toRadians(-start - extent);
109
        double endX = x + (Math.cos(angleEnd) * 0.5 + 0.5) * diameter;
110
        double endY = y + (Math.sin(angleEnd) * 0.5 + 0.5) * diameter;
111
        end = new Point3D(endX, endY, ((Point3D) center).getZ());
112

  
113
        double angleMiddle = Math.toRadians(-start - extent) / 2;
114
        double middleX = x + (Math.cos(angleMiddle) * 0.5 + 0.5) * diameter;
115
        double middleY = y + (Math.sin(angleMiddle) * 0.5 + 0.5) * diameter;
116
        middle = new Point3D(middleX, middleY, ((Point3D) center).getZ());
117 96
    }
118 97

  
119 98
    /*
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/primitive/curve/arc/Arc2D.java
69 69
     */
70 70
    public void setPoints(Point center, double radius, double startAngle, double angleExt) {
71 71

  
72
        double diameter = radius*2;
73
        double x;
74
        double y;
75
        double start;
76
        double extent;
77
        double angleOffset;
78
        final double pi2 = Math.PI*2;
79

  
80
        angleOffset = 0;
81
        if( angleExt<0 ) {
82
            angleOffset = pi2 + angleExt;
83
            angleExt = Math.abs(angleExt);
84
        }
85
        x = center.getX() - radius;
86
        y = center.getY() - radius;
87

  
88
        if( angleExt > 0 && (angleExt % pi2) == 0  ) {
89
            start = 0;
90
            extent = 360;
91
        } else {
92
            angleExt = angleExt % pi2; //Asumimos que aqui angleExt es siempre positivo
93
            startAngle = Math.abs(startAngle) % pi2;
94
            start = Math.toDegrees( pi2 - startAngle + angleOffset) ;
95
            extent = - Math.toDegrees(pi2 - angleExt);
96
        }
97

  
98

  
99
        double angleStart = Math.toRadians(-start);
100
        double initX = x + (Math.cos(angleStart) * 0.5 + 0.5) * diameter;
101
        double initY = y + (Math.sin(angleStart) * 0.5 + 0.5) * diameter;
102
        init = new Point2D(initX, initY);
103

  
104
        double angleEnd = Math.toRadians(-start - extent);
105
        double endX = x + (Math.cos(angleEnd) * 0.5 + 0.5) * diameter;
106
        double endY = y + (Math.sin(angleEnd) * 0.5 + 0.5) * diameter;
107
        end =  new Point2D(endX, endY);
108

  
109
        double angleMiddle = Math.toRadians(-start - extent)/2;
110
        double middleX = x + (Math.cos(angleMiddle) * 0.5 + 0.5) * diameter;
111
        double middleY = y + (Math.sin(angleMiddle) * 0.5 + 0.5) * diameter;
112
        middle =  new Point2D(middleX, middleY);
72
        init = new Point2D(
73
                center.getX()+radius*Math.cos(startAngle),
74
                center.getY()+radius*Math.sin(startAngle)
75
                );
76
        
77
        double midAngle = startAngle+angleExt/2;
78
        middle = new Point2D(
79
                center.getX()+radius*Math.cos(midAngle),
80
                center.getY()+radius*Math.sin(midAngle)
81
                );
82
        
83
        end = new Point2D(
84
                center.getX()+radius*Math.cos(startAngle+angleExt),
85
                center.getY()+radius*Math.sin(startAngle+angleExt)
86
                );
87
        
88
        
113 89
}
114 90

  
115 91
    /* (non-Javadoc)

Also available in: Unified diff