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 @ 767

History | View | Annotate | Download (4.7 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.exception.DataException;
10
import org.gvsig.fmap.dal.feature.Feature;
11
import org.gvsig.fmap.dal.feature.FeatureQuery;
12
import org.gvsig.fmap.dal.feature.FeatureStore;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.fmap.geom.Geometry;
15
import org.gvsig.fmap.geom.Geometry.TYPES;
16
import org.gvsig.fmap.geom.aggregate.MultiPoint;
17
import org.gvsig.fmap.geom.primitive.Point;
18
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
20
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
21
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
22
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
23
import org.gvsig.view3d.vector.lib.impl.AbstractRenderableLayer;
24

    
25
import gov.nasa.worldwind.geom.Position;
26
import gov.nasa.worldwind.render.Material;
27
import gov.nasa.worldwind.render.PointPlacemark;
28
import gov.nasa.worldwind.render.PointPlacemarkAttributes;
29
import gov.nasa.worldwind.render.Renderable;
30

    
31
public class DefaultVectorPointRenderableLayer extends AbstractRenderableLayer {
32
    
33
    private PointPlacemarkAttributes markAttributes;
34

    
35
    public DefaultVectorPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
36
        IVectorLegend legend) {
37
        super(parameters, featureStore);
38
        this.markAttributes = getBasicMarkerAttributes(legend);
39
    }
40

    
41
    @Override
42
    protected List<Renderable> getRenderables(Feature feature) {
43
        Geometry geom = feature.getDefaultGeometry();
44
        List<Renderable> renderables = new ArrayList<>();
45
        if (geom.getGeometryType().isTypeOf(TYPES.MULTIPOINT)) {
46
            MultiPoint multiPoint = (MultiPoint) geom;
47
            for (int i = 0; i < multiPoint.getPrimitivesNumber(); i++) {
48
                renderables.add(getRenderable(multiPoint.getPointAt(i)));
49
            }
50
        } else {
51
            renderables.add(getRenderable((Point) geom));
52
        }
53
        return renderables;
54
    }
55

    
56
    private PointPlacemark getRenderable(Point point) {
57
        boolean hasZ = point.getDimension() > 2;
58
        double h = 0.0;
59
        
60
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
61
        if(coordTrans != null) {
62
            point.reProject(coordTrans);
63
        }
64
        
65
        double y = point.getY();
66
        double x = point.getX();
67
        
68
        if(VectorElevationMode.CLAMP_TO_GROUND.equals(parameters.getVectorElevationMode())) {
69
            hasZ = false;
70
        } else {
71
            if(VectorElevationMode.RELATIVE_TO_GROUND.equals(parameters.getVectorElevationMode())) {
72
                hasZ = false;
73
            }
74
            if (parameters.getConstantHeight() != null) {
75
                h = parameters.getConstantHeight();
76
            }
77
        }
78
        
79
        
80
        PointPlacemark marker;
81
        if (hasZ) {
82
            double z = point.getCoordinateAt(2);
83
            marker = new PointPlacemark(Position.fromDegrees(y, x, z + h));
84
        } else {
85
            Position position = Position.fromDegrees(y, x, h);
86
            marker = new PointPlacemark(position);
87
        }
88
        marker.setAltitudeMode(getAltitudeMode(parameters.getVectorElevationMode()));
89
        marker.setAttributes(this.markAttributes);
90
        return marker;
91
    }
92

    
93
    private PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
94

    
95
        if (this.markAttributes != null) {
96
            return this.markAttributes;
97
        }
98

    
99
        double markerSize = 0;
100
        Material fillMaterial = null;
101

    
102
        if (legend == null) {
103
            fillMaterial = new Material(parameters.getDefaultColor());
104
            markerSize = 0.3;
105
        } else {
106
            ISymbol symbol = legend.getDefaultSymbol();
107
            if (symbol instanceof ISimpleMarkerSymbol) {
108
                ISimpleMarkerSymbol markerSymbol = (ISimpleMarkerSymbol) symbol;
109
                Color fillColor = markerSymbol.getColor();
110
                markerSize = markerSymbol.getSize();
111
                fillMaterial = new Material(fillColor);
112
            } else {
113
                fillMaterial = new Material(parameters.getDefaultColor());
114
                markerSize = 4;
115
            }
116
        }
117
        markAttributes = new PointPlacemarkAttributes();
118
        Color color = fillMaterial.getDiffuse();
119
        markAttributes.setImageColor(color);
120
        markAttributes.setLineMaterial(fillMaterial);
121
        markAttributes.setLineWidth(1d);
122
        markAttributes.setUsePointAsDefaultImage(true);
123
        markAttributes.setScale(markerSize);
124
        return markAttributes;
125
    }
126

    
127
}