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 / DefaultVectorLineRenderableLayer.java @ 767

History | View | Annotate | Download (4.22 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.MultiLine;
14
import org.gvsig.fmap.geom.primitive.Curve;
15
import org.gvsig.fmap.geom.primitive.Line;
16
import org.gvsig.fmap.geom.primitive.Point;
17
import org.gvsig.fmap.mapcontext.layers.FLayer;
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.line.ILineSymbol;
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.BasicShapeAttributes;
27
import gov.nasa.worldwind.render.Material;
28
import gov.nasa.worldwind.render.Path;
29
import gov.nasa.worldwind.render.Renderable;
30

    
31
public class DefaultVectorLineRenderableLayer extends AbstractRenderableLayer {
32

    
33
    private BasicShapeAttributes normalShapeAttributes;
34

    
35
    public DefaultVectorLineRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
36
        IVectorLegend legend) {
37
        super(parameters, featureStore);
38
        this.normalShapeAttributes = getNormalShapAttributes(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.MULTILINE)) {
46
            MultiLine multiLine = (MultiLine) geom;
47
            for (int i = 0; i < multiLine.getPrimitivesNumber(); i++) {
48
                if (multiLine.getCurveAt(i).getNumVertices() >= 2) {
49
                    renderables.add(getRenderable(multiLine.getCurveAt(i)));
50
                }
51
            }
52
        } else {
53
            if (((Line) geom).getNumVertices() >= 2) {
54
                renderables.add(getRenderable((Line) geom));
55
            }
56
        }
57
        return renderables;
58
    }
59

    
60
    private Renderable getRenderable(Curve curve) {
61
        boolean hasZ = curve.getDimension() > 2;
62
        double h = 0.0;
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
        ICoordTrans coordTrans = getCoordTrans(this.parameters.getLayer().getProjection());
76
        List<Position> verticesList = getVertices(curve, h, hasZ, coordTrans);
77
        Path path = new Path(verticesList);
78
        path.setAltitudeMode(getAltitudeMode(this.parameters.getVectorElevationMode()));
79
        path.setAttributes(normalShapeAttributes);
80
        return path;
81
    }
82

    
83
    private BasicShapeAttributes getNormalShapAttributes(IVectorLegend legend) {
84

    
85
        Material outlineMaterial;
86
        double outlineOpacity = 1.0;
87
        double outlineWidth = 3.0;
88

    
89
        ISymbol symbol = legend.getDefaultSymbol();
90
        if (symbol instanceof ILineSymbol) {
91
            ILineSymbol lineSymbol = (ILineSymbol) symbol;
92
            Color lineColor = lineSymbol.getColor();
93
            int lineAlpha = lineSymbol.getAlpha();
94
            outlineMaterial = new Material(lineColor);
95
            outlineOpacity = lineAlpha / 255.0;
96
            outlineWidth = lineSymbol.getLineWidth();
97
        } else {
98
            outlineMaterial = new Material(this.parameters.getDefaultColor());
99
            outlineOpacity = 1.0;
100
            outlineWidth = 3.0;
101
        }
102
        normalShapeAttributes = new BasicShapeAttributes();
103
        normalShapeAttributes.setOutlineMaterial(outlineMaterial);
104
        normalShapeAttributes.setOutlineWidth(outlineWidth);
105
        normalShapeAttributes.setOutlineOpacity(outlineOpacity);
106
        return normalShapeAttributes;
107
    }
108
}