Statistics
| Revision:

gvsig-3d / 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 @ 772

History | View | Annotate | Download (4.62 KB)

1 761 llmarques
package org.gvsig.view3d.vector.lib.impl.vector;
2
3 762 llmarques
import java.awt.Color;
4 761 llmarques
import java.util.ArrayList;
5
import java.util.List;
6
7 767 llmarques
import org.cresques.cts.ICoordTrans;
8
9 761 llmarques
import org.gvsig.fmap.dal.feature.Feature;
10
import org.gvsig.fmap.dal.feature.FeatureStore;
11
import org.gvsig.fmap.geom.Geometry;
12
import org.gvsig.fmap.geom.Geometry.TYPES;
13
import org.gvsig.fmap.geom.aggregate.MultiPoint;
14
import org.gvsig.fmap.geom.primitive.Point;
15
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
16 762 llmarques
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
18 761 llmarques
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
19
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
20 762 llmarques
import org.gvsig.view3d.vector.lib.impl.AbstractRenderableLayer;
21 761 llmarques
22
import gov.nasa.worldwind.geom.Position;
23 762 llmarques
import gov.nasa.worldwind.render.Material;
24 761 llmarques
import gov.nasa.worldwind.render.PointPlacemark;
25 762 llmarques
import gov.nasa.worldwind.render.PointPlacemarkAttributes;
26 761 llmarques
import gov.nasa.worldwind.render.Renderable;
27
28 765 llmarques
public class DefaultVectorPointRenderableLayer extends AbstractRenderableLayer {
29 762 llmarques
30
    private PointPlacemarkAttributes markAttributes;
31 761 llmarques
32 765 llmarques
    public DefaultVectorPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
33 761 llmarques
        IVectorLegend legend) {
34 772 llmarques
        super(parameters, featureStore, legend);
35 761 llmarques
    }
36
37
    @Override
38 767 llmarques
    protected List<Renderable> getRenderables(Feature feature) {
39 761 llmarques
        Geometry geom = feature.getDefaultGeometry();
40
        List<Renderable> renderables = new ArrayList<>();
41
        if (geom.getGeometryType().isTypeOf(TYPES.MULTIPOINT)) {
42
            MultiPoint multiPoint = (MultiPoint) geom;
43
            for (int i = 0; i < multiPoint.getPrimitivesNumber(); i++) {
44
                renderables.add(getRenderable(multiPoint.getPointAt(i)));
45
            }
46
        } else {
47
            renderables.add(getRenderable((Point) geom));
48
        }
49
        return renderables;
50
    }
51
52
    private PointPlacemark getRenderable(Point point) {
53
        boolean hasZ = point.getDimension() > 2;
54
        double h = 0.0;
55 767 llmarques
56
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
57
        if(coordTrans != null) {
58
            point.reProject(coordTrans);
59
        }
60
61 761 llmarques
        double y = point.getY();
62
        double x = point.getX();
63
64
        if(VectorElevationMode.CLAMP_TO_GROUND.equals(parameters.getVectorElevationMode())) {
65
            hasZ = false;
66
        } else {
67
            if(VectorElevationMode.RELATIVE_TO_GROUND.equals(parameters.getVectorElevationMode())) {
68
                hasZ = false;
69
            }
70
            if (parameters.getConstantHeight() != null) {
71
                h = parameters.getConstantHeight();
72
            }
73
        }
74
75 767 llmarques
76 761 llmarques
        PointPlacemark marker;
77
        if (hasZ) {
78
            double z = point.getCoordinateAt(2);
79
            marker = new PointPlacemark(Position.fromDegrees(y, x, z + h));
80
        } else {
81
            Position position = Position.fromDegrees(y, x, h);
82
            marker = new PointPlacemark(position);
83
        }
84
        marker.setAltitudeMode(getAltitudeMode(parameters.getVectorElevationMode()));
85 772 llmarques
        marker.setAttributes(getBasicMarkerAttributes(super.legend));
86 761 llmarques
        return marker;
87
    }
88
89 762 llmarques
    private PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
90 761 llmarques
91 762 llmarques
        if (this.markAttributes != null) {
92
            return this.markAttributes;
93
        }
94
95
        double markerSize = 0;
96
        Material fillMaterial = null;
97
98
        if (legend == null) {
99
            fillMaterial = new Material(parameters.getDefaultColor());
100
            markerSize = 0.3;
101
        } else {
102
            ISymbol symbol = legend.getDefaultSymbol();
103
            if (symbol instanceof ISimpleMarkerSymbol) {
104
                ISimpleMarkerSymbol markerSymbol = (ISimpleMarkerSymbol) symbol;
105
                Color fillColor = markerSymbol.getColor();
106
                markerSize = markerSymbol.getSize();
107
                fillMaterial = new Material(fillColor);
108
            } else {
109
                fillMaterial = new Material(parameters.getDefaultColor());
110
                markerSize = 4;
111
            }
112
        }
113
        markAttributes = new PointPlacemarkAttributes();
114
        Color color = fillMaterial.getDiffuse();
115
        markAttributes.setImageColor(color);
116
        markAttributes.setLineMaterial(fillMaterial);
117
        markAttributes.setLineWidth(1d);
118
        markAttributes.setUsePointAsDefaultImage(true);
119
        markAttributes.setScale(markerSize);
120
        return markAttributes;
121
    }
122
123 772 llmarques
    @Override
124
    protected void clearRenderAttributes() {
125
        this.markAttributes = null;
126
    }
127
128 761 llmarques
}