Revision 767

View differences:

2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/extrusion/DefaultVectorExtrusionLineRenderableLayer.java
5 5
import java.util.List;
6 6

  
7 7
import org.apache.commons.lang3.StringUtils;
8
import org.cresques.cts.ICoordTrans;
9
import org.cresques.cts.IProjection;
8 10

  
11
import org.gvsig.fmap.crs.CRSFactory;
9 12
import org.gvsig.fmap.dal.exception.DataException;
10 13
import org.gvsig.fmap.dal.feature.Feature;
11 14
import org.gvsig.fmap.dal.feature.FeatureQuery;
......
16 19
import org.gvsig.fmap.geom.primitive.Curve;
17 20
import org.gvsig.fmap.geom.primitive.Line;
18 21
import org.gvsig.fmap.geom.primitive.Point;
22
import org.gvsig.fmap.mapcontext.layers.FLayer;
19 23
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
20 24
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
21 25
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
......
41 45
    }
42 46

  
43 47
    @Override
44
    protected List<Renderable> getRenderable(Feature feature) {
48
    protected List<Renderable> getRenderables(Feature feature) {
45 49

  
46 50
        double heightFieldValue = 0;
47 51
        String heightField = ((VectorExtrusionLoaderParameters) parameters).getHeightField();
......
83 87

  
84 88
        h += heightFieldValue;
85 89
        h *= ((VectorExtrusionLoaderParameters) parameters).getVerticalExaggeration();
86
        List<Position> verticesList = new ArrayList<>(curve.getNumVertices());
87
        for (int i = 0; i < curve.getNumVertices(); i++) {
88
            Point vertex = curve.getVertex(i);
89
            if (hasZ) {
90
                double z = vertex.getCoordinateAt(2);
91
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), z + h));
92
            } else {
93
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), h));
94
            }
95
        }
90
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
91
        List<Position> verticesList = getVertices(curve, h, hasZ, coordTrans);
96 92
        Path path = new Path(verticesList);
97 93
        path.setAltitudeMode(getAltitudeMode(this.parameters.getVectorElevationMode()));
98 94
        path.setAttributes(normalShapeAttributes);
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/extrusion/DefaultVectorExtrusionPolygonRenderableLayer.java
5 5
import java.util.List;
6 6

  
7 7
import org.apache.commons.lang3.StringUtils;
8
import org.cresques.cts.ICoordTrans;
8 9

  
9 10
import org.gvsig.fmap.dal.exception.DataException;
10 11
import org.gvsig.fmap.dal.feature.Feature;
......
16 17
import org.gvsig.fmap.geom.primitive.Point;
17 18
import org.gvsig.fmap.geom.primitive.Polygon;
18 19
import org.gvsig.fmap.geom.primitive.Ring;
20
import org.gvsig.fmap.mapcontext.layers.FLayer;
19 21
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
20 22
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
21 23
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
......
44 46
    }
45 47

  
46 48
    @Override
47
    protected List<Renderable> getRenderable(Feature feature) {
49
    protected List<Renderable> getRenderables(Feature feature) {
48 50

  
49 51
        double heightFieldValue = 0;
50 52
        String heightField = ((VectorExtrusionLoaderParameters) parameters).getHeightField();
......
100 102
        h += heightFieldValue;
101 103
        h *= ((VectorExtrusionLoaderParameters) parameters).getVerticalExaggeration();
102 104

  
103
        List<Position> verticesList = new ArrayList<>(polygon.getNumVertices());
104
        for (int i = 0; i < polygon.getNumVertices(); i++) {
105
            Point vertex = polygon.getVertex(i);
106
            if (hasZ) {
107
                double z = vertex.getCoordinateAt(2);
108
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), z + h));
109
            } else {
110
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), h));
111
            }
112
        }
105
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
106
        List<Position> verticesList = getVertices(polygon, h, hasZ, coordTrans);
113 107
        renderable.setOuterBoundary(verticesList);
108
        
114 109
        int numInteriorRings = polygon.getNumInteriorRings();
115 110
        for (int i = 0; i < numInteriorRings; i++) {
116 111
            renderable.addInnerBoundary(getInteriorRing(polygon.getInteriorRing(i), hasZ, h));
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/extrusion/DefaultVectorExtrusionPointRenderableLayer.java
5 5
import java.util.List;
6 6

  
7 7
import org.apache.commons.lang3.StringUtils;
8
import org.cresques.cts.ICoordTrans;
8 9

  
9 10
import org.gvsig.fmap.dal.exception.DataException;
10 11
import org.gvsig.fmap.dal.feature.Feature;
......
39 40
    }
40 41

  
41 42
    @Override
42
    protected List<Renderable> getRenderable(Feature feature) {
43
    protected List<Renderable> getRenderables(Feature feature) {
43 44

  
44 45
        double heightFieldValue = 0;
45 46
        String heightField = ((VectorExtrusionLoaderParameters) parameters).getHeightField();
......
63 64
    private PointPlacemark getRenderable(Point point, double heightFieldValue) {
64 65
        boolean hasZ = point.getDimension() > 2;
65 66
        double h = 0.0;
67
        
68
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
69
        if(coordTrans != null) {
70
            point.reProject(coordTrans);
71
        }
72
        
66 73
        double y = point.getY();
67 74
        double x = point.getX();
68 75
        
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/vector/DefaultVectorLineRenderableLayer.java
4 4
import java.util.ArrayList;
5 5
import java.util.List;
6 6

  
7
import org.cresques.cts.ICoordTrans;
8

  
7 9
import org.gvsig.fmap.dal.feature.Feature;
8 10
import org.gvsig.fmap.dal.feature.FeatureStore;
9 11
import org.gvsig.fmap.geom.Geometry;
......
12 14
import org.gvsig.fmap.geom.primitive.Curve;
13 15
import org.gvsig.fmap.geom.primitive.Line;
14 16
import org.gvsig.fmap.geom.primitive.Point;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
15 18
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
16 19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17 20
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
......
36 39
    }
37 40

  
38 41
    @Override
39
    protected List<Renderable> getRenderable(Feature feature) {
42
    protected List<Renderable> getRenderables(Feature feature) {
40 43
        Geometry geom = feature.getDefaultGeometry();
41 44
        List<Renderable> renderables = new ArrayList<>();
42 45
        if (geom.getGeometryType().isTypeOf(TYPES.MULTILINE)) {
......
69 72
            }
70 73
        }
71 74

  
72
        List<Position> verticesList = new ArrayList<>(curve.getNumVertices());
73
        for (int i = 0; i < curve.getNumVertices(); i++) {
74
            Point vertex = curve.getVertex(i);
75
            if (hasZ) {
76
                double z = vertex.getCoordinateAt(2);
77
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), z + h));
78
            } else {
79
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), h));
80
            }
81
        }
75
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
76
        List<Position> verticesList = getVertices(curve, h, hasZ, coordTrans);
82 77
        Path path = new Path(verticesList);
83 78
        path.setAltitudeMode(getAltitudeMode(this.parameters.getVectorElevationMode()));
84 79
        path.setAttributes(normalShapeAttributes);
......
110 105
        normalShapeAttributes.setOutlineOpacity(outlineOpacity);
111 106
        return normalShapeAttributes;
112 107
    }
113

  
114
    /**
115
     * Slightly darken the supplied color.
116
     * 
117
     * @param color
118
     *            the color to make darker.
119
     * @return the darker color.
120
     */
121

  
122
    private Color darkenColor(Color color) {
123
        float factor = 0.8f;
124
        int r = color.getRed();
125
        int g = color.getGreen();
126
        int b = color.getBlue();
127
        Color sideFillColor = new Color(Math.max((int) (r * factor), 0), Math.max((int) (g * factor), 0),
128
            Math.max((int) (b * factor), 0));
129
        return sideFillColor;
130
    }
131

  
132 108
}
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/vector/DefaultVectorPolygonRenderableLayer.java
4 4
import java.util.ArrayList;
5 5
import java.util.List;
6 6

  
7
import org.cresques.cts.ICoordTrans;
8

  
7 9
import org.gvsig.fmap.dal.feature.Feature;
8 10
import org.gvsig.fmap.dal.feature.FeatureStore;
9 11
import org.gvsig.fmap.geom.Geometry;
......
12 14
import org.gvsig.fmap.geom.primitive.Point;
13 15
import org.gvsig.fmap.geom.primitive.Polygon;
14 16
import org.gvsig.fmap.geom.primitive.Ring;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
15 18
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
16 19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17 20
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
......
36 39
    }
37 40

  
38 41
    @Override
39
    protected List<Renderable> getRenderable(Feature feature) {
42
    protected List<Renderable> getRenderables(Feature feature) {
40 43
        Geometry geom = feature.getDefaultGeometry();
41 44
        List<Renderable> renderables = new ArrayList<>();
42 45
        if (geom.getGeometryType().isTypeOf(TYPES.MULTIPOLYGON)) {
......
71 74
                h = parameters.getConstantHeight();
72 75
            }
73 76
        }
74

  
75
        List<Position> verticesList = new ArrayList<>(polygon.getNumVertices());
76
        for (int i = 0; i < polygon.getNumVertices(); i++) {
77
            Point vertex = polygon.getVertex(i);
78
            if (hasZ) {
79
                double z = vertex.getCoordinateAt(2);
80
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), z + h));
81
            } else {
82
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), h));
83
            }
84
        }
77
        
78
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
79
        List<Position> verticesList = getVertices(polygon, h, hasZ, coordTrans);
85 80
        renderable.setOuterBoundary(verticesList);
81
        
86 82
        int numInteriorRings = polygon.getNumInteriorRings();
87 83
        for (int i = 0; i < numInteriorRings; i++) {
88 84
            renderable.addInnerBoundary(getInteriorRing(polygon.getInteriorRing(i), hasZ, h));
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/vector/DefaultVectorPointRenderableLayer.java
4 4
import java.util.ArrayList;
5 5
import java.util.List;
6 6

  
7
import org.cresques.cts.ICoordTrans;
8

  
7 9
import org.gvsig.fmap.dal.exception.DataException;
8 10
import org.gvsig.fmap.dal.feature.Feature;
9 11
import org.gvsig.fmap.dal.feature.FeatureQuery;
......
37 39
    }
38 40

  
39 41
    @Override
40
    protected List<Renderable> getRenderable(Feature feature) {
42
    protected List<Renderable> getRenderables(Feature feature) {
41 43
        Geometry geom = feature.getDefaultGeometry();
42 44
        List<Renderable> renderables = new ArrayList<>();
43 45
        if (geom.getGeometryType().isTypeOf(TYPES.MULTIPOINT)) {
......
54 56
    private PointPlacemark getRenderable(Point point) {
55 57
        boolean hasZ = point.getDimension() > 2;
56 58
        double h = 0.0;
59
        
60
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
61
        if(coordTrans != null) {
62
            point.reProject(coordTrans);
63
        }
64
        
57 65
        double y = point.getY();
58 66
        double x = point.getX();
59 67
        
......
68 76
            }
69 77
        }
70 78
        
79
        
71 80
        PointPlacemark marker;
72 81
        if (hasZ) {
73 82
            double z = point.getCoordinateAt(2);
2.1/trunk/org.gvsig.view3d/org.gvsig.view3d.vector/org.gvsig.view3d.vector.lib/org.gvsig.view3d.vector.lib.impl/src/main/java/org/gvsig/view3d/vector/lib/impl/AbstractRenderableLayer.java
1 1
package org.gvsig.view3d.vector.lib.impl;
2 2

  
3
import java.util.ArrayList;
3 4
import java.util.List;
4 5
import java.util.concurrent.ExecutorService;
5 6
import java.util.concurrent.Executors;
6 7

  
8
import org.cresques.cts.ICoordTrans;
9
import org.cresques.cts.IProjection;
7 10
import org.slf4j.Logger;
8 11
import org.slf4j.LoggerFactory;
9 12

  
13
import org.gvsig.fmap.crs.CRSFactory;
10 14
import org.gvsig.fmap.dal.exception.DataException;
11 15
import org.gvsig.fmap.dal.feature.Feature;
12 16
import org.gvsig.fmap.dal.feature.FeatureQuery;
13 17
import org.gvsig.fmap.dal.feature.FeatureSet;
14 18
import org.gvsig.fmap.dal.feature.FeatureStore;
15 19
import org.gvsig.fmap.dal.feature.FeatureType;
20
import org.gvsig.fmap.geom.primitive.OrientablePrimitive;
21
import org.gvsig.fmap.geom.primitive.Point;
16 22
import org.gvsig.tools.dispose.DisposableIterator;
17 23
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
18 24
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
19 25

  
20 26
import gov.nasa.worldwind.WorldWind;
27
import gov.nasa.worldwind.geom.Position;
21 28
import gov.nasa.worldwind.layers.RenderableLayer;
22 29
import gov.nasa.worldwind.render.Renderable;
23 30

  
......
58 65
                    it = featureSet.fastIterator();
59 66
                    while (it.hasNext()) {
60 67
                        Feature feature = (Feature) it.next();
61
                        List<Renderable> renderables = getRenderable(feature);
68
                        List<Renderable> renderables = getRenderables(feature);
62 69
                        for (Renderable renderable : renderables) {
63 70
                            addRenderable(renderable);
64 71
                        }
......
100 107
        featureQuery.addAttributeName(geomAtt);
101 108
        return featureQuery;
102 109
    }
110
    
111
    protected List<Position> getVertices(OrientablePrimitive primitive, double h, boolean hasZ, ICoordTrans coordTrans) {
112
        List<Position> verticesList = new ArrayList<>(primitive.getNumVertices());
113
        for (int i = 0; i < primitive.getNumVertices(); i++) {
114
            Point vertex = primitive.getVertex(i);
115
            
116
            // Reproject point if there is a coordinate transformation
117
            if (coordTrans != null) {
118
                vertex.reProject(coordTrans);
119
            }
120
            
121
            if (hasZ) {
122
                double z = vertex.getCoordinateAt(2);
123
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), z + h));
124
            } else {
125
                verticesList.add(Position.fromDegrees(vertex.getY(), vertex.getX(), h));
126
            }
127
        }
128
        return verticesList;
129
    }
130
    
131
    protected ICoordTrans getCoordTrans(IProjection origProj) {
132
        IProjection destProj = CRSFactory.getCRS("EPSG:4326");
133
        return origProj.getCT(destProj);
134
    }
103 135

  
104
    protected abstract List<Renderable> getRenderable(Feature feature);
136
    protected abstract List<Renderable> getRenderables(Feature feature);
105 137
}

Also available in: Unified diff