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
package org.gvsig.view3d.vector.lib.impl.vector;
2

    
3
import java.awt.Color;
4
import java.util.ArrayList;
5
import java.util.List;
6

    
7
import org.cresques.cts.ICoordTrans;
8

    
9
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
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
17
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
18
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
19
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
20
import org.gvsig.view3d.vector.lib.impl.AbstractRenderableLayer;
21

    
22
import gov.nasa.worldwind.geom.Position;
23
import gov.nasa.worldwind.render.Material;
24
import gov.nasa.worldwind.render.PointPlacemark;
25
import gov.nasa.worldwind.render.PointPlacemarkAttributes;
26
import gov.nasa.worldwind.render.Renderable;
27

    
28
public class DefaultVectorPointRenderableLayer extends AbstractRenderableLayer {
29
    
30
    private PointPlacemarkAttributes markAttributes;
31

    
32
    public DefaultVectorPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
33
        IVectorLegend legend) {
34
        super(parameters, featureStore, legend);
35
    }
36

    
37
    @Override
38
    protected List<Renderable> getRenderables(Feature feature) {
39
        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
        
56
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
57
        if(coordTrans != null) {
58
            point.reProject(coordTrans);
59
        }
60
        
61
        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
        
76
        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
        marker.setAttributes(getBasicMarkerAttributes(super.legend));
86
        return marker;
87
    }
88

    
89
    private PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
90

    
91
        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
    @Override
124
    protected void clearRenderAttributes() {
125
        this.markAttributes = null;
126
    }
127

    
128
}