Revision 762

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

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

  
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10

  
11
import org.gvsig.fmap.dal.exception.DataException;
12
import org.gvsig.fmap.dal.feature.Feature;
13
import org.gvsig.fmap.dal.feature.FeatureQuery;
14
import org.gvsig.fmap.dal.feature.FeatureSet;
15
import org.gvsig.fmap.dal.feature.FeatureStore;
16
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
17
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
18
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
19
import org.gvsig.tools.dispose.DisposableIterator;
20
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
21
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
22

  
23
import gov.nasa.worldwind.WorldWind;
24
import gov.nasa.worldwind.layers.RenderableLayer;
25
import gov.nasa.worldwind.render.Material;
26
import gov.nasa.worldwind.render.PointPlacemarkAttributes;
27
import gov.nasa.worldwind.render.Renderable;
28

  
29
public abstract class AbstractPointRenderableLayer extends RenderableLayer {
30

  
31
    private static final Logger LOG = LoggerFactory.getLogger(AbstractPointRenderableLayer.class);
32

  
33
    protected FeatureStore featureStore;
34

  
35
    protected PointPlacemarkAttributes markAttributes;
36

  
37
    protected VectorLoaderParameters parameters;
38

  
39
    public AbstractPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
40
        IVectorLegend legend) {
41
        this.featureStore = featureStore;
42
        this.parameters = parameters;
43
        this.markAttributes = getBasicMarkerAttributes(legend);
44
        ExecutorService executor = Executors.newSingleThreadExecutor();
45
        executor.execute(addRenderableObjects());
46
    }
47

  
48
    protected Runnable addRenderableObjects() {
49
        
50
        return new Runnable() {
51
            
52
            @Override
53
            public void run() {
54
                FeatureQuery featureQuery;
55
                try {
56
                    featureQuery = getFeatureQuery();
57
                } catch (DataException e) {
58
                    LOG.error(String.format("Can not access to feature type of %1s", featureStore.getFullName()), e);
59
                    removeAllRenderables();
60
                    return;
61
                }
62

  
63
                FeatureSet featureSet = null;
64
                DisposableIterator it = null;
65
                try {
66
                    featureSet = featureStore.getFeatureSet(featureQuery);
67
                    it = featureSet.fastIterator();
68
                    while (it.hasNext()) {
69
                        Feature feature = (Feature) it.next();
70
                        List<Renderable> renderables = getRenderable(feature);
71
                        for (Renderable renderable : renderables) {
72
                            addRenderable(renderable);
73
                        }
74
                    }
75
                } catch (DataException e) {
76
                    LOG.error(String.format("Can not access to %1s data", featureStore.getFullName()), e);
77
                    removeAllRenderables();
78
                    return;
79
                } finally {
80
                    if (it != null) {
81
                        it.dispose();
82
                    }
83
                    if (featureSet != null) {
84
                        featureSet.dispose();
85
                    }
86
                }
87
            }
88
        };
89
    }
90

  
91
    protected PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
92

  
93
        if (this.markAttributes != null) {
94
            return this.markAttributes;
95
        }
96

  
97
        double markerSize = 0;
98
        Material fillMaterial = null;
99

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

  
125
    protected int getAltitudeMode(VectorElevationMode mode) {
126
        switch (mode) {
127
        case CLAMP_TO_GROUND:
128
            return WorldWind.CLAMP_TO_GROUND;
129
        case ABSOLUTE:
130
            return WorldWind.ABSOLUTE;
131
        case RELATIVE_TO_GROUND:
132
            return WorldWind.RELATIVE_TO_GROUND;
133
        default:
134
            throw new IllegalArgumentException(
135
                "Vector elevation mode not reconized. Only CLAMP_TO_GROUND, ABSOLUTE and RELATIVE_TO_GROUND are valid");
136
        }
137
    }
138

  
139
    protected abstract List<Renderable> getRenderable(Feature feature);
140

  
141
    protected abstract FeatureQuery getFeatureQuery() throws DataException;
142
}
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
1 1
package org.gvsig.view3d.vector.lib.impl.extrusion;
2 2

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

  
......
15 16
import org.gvsig.fmap.geom.aggregate.MultiPoint;
16 17
import org.gvsig.fmap.geom.primitive.Point;
17 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;
18 21
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
19 22
import org.gvsig.view3d.vector.lib.api.VectorExtrusionLoaderParameters;
20
import org.gvsig.view3d.vector.lib.impl.AbstractPointRenderableLayer;
23
import org.gvsig.view3d.vector.lib.impl.AbstractRenderableLayer;
21 24

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

  
26
public class DefaultVectorExtrusionPointRenderableLayer extends AbstractPointRenderableLayer {
31
public class DefaultVectorExtrusionPointRenderableLayer extends AbstractRenderableLayer {
32
    
33
    private PointPlacemarkAttributes markAttributes;
27 34

  
28 35
    public DefaultVectorExtrusionPointRenderableLayer(VectorExtrusionLoaderParameters parameters, FeatureStore featureStore,
29 36
        IVectorLegend legend) {
30
        super(parameters, featureStore, legend);
37
        super(parameters, featureStore);
38
        this.markAttributes = getBasicMarkerAttributes(legend);
31 39
    }
32 40

  
33 41
    @Override
......
97 105
        }
98 106
        return featureQuery;
99 107
    }
108
    
109
    private PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
100 110

  
111
        if (this.markAttributes != null) {
112
            return this.markAttributes;
113
        }
114

  
115
        double markerSize = 0;
116
        Material fillMaterial = null;
117

  
118
        if (legend == null) {
119
            fillMaterial = new Material(parameters.getDefaultColor());
120
            markerSize = 0.3;
121
        } else {
122
            ISymbol symbol = legend.getDefaultSymbol();
123
            if (symbol instanceof ISimpleMarkerSymbol) {
124
                ISimpleMarkerSymbol markerSymbol = (ISimpleMarkerSymbol) symbol;
125
                Color fillColor = markerSymbol.getColor();
126
                markerSize = markerSymbol.getSize();
127
                fillMaterial = new Material(fillColor);
128
            } else {
129
                fillMaterial = new Material(parameters.getDefaultColor());
130
                markerSize = 4;
131
            }
132
        }
133
        markAttributes = new PointPlacemarkAttributes();
134
        Color color = fillMaterial.getDiffuse();
135
        markAttributes.setImageColor(color);
136
        markAttributes.setLineMaterial(fillMaterial);
137
        markAttributes.setLineWidth(1d);
138
        markAttributes.setUsePointAsDefaultImage(true);
139
        markAttributes.setScale(markerSize);
140
        return markAttributes;
141
    }
142

  
101 143
}
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/DefeaultVectorPointRenderableLayer.java
1 1
package org.gvsig.view3d.vector.lib.impl.vector;
2 2

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

  
......
13 14
import org.gvsig.fmap.geom.aggregate.MultiPoint;
14 15
import org.gvsig.fmap.geom.primitive.Point;
15 16
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
17
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
18
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.ISimpleMarkerSymbol;
16 19
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
17 20
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
18
import org.gvsig.view3d.vector.lib.impl.AbstractPointRenderableLayer;
21
import org.gvsig.view3d.vector.lib.impl.AbstractRenderableLayer;
19 22

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

  
24
public class DefeaultVectorPointRenderableLayer extends AbstractPointRenderableLayer {
29
public class DefeaultVectorPointRenderableLayer extends AbstractRenderableLayer {
30
    
31
    private PointPlacemarkAttributes markAttributes;
25 32

  
26 33
    public DefeaultVectorPointRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore,
27 34
        IVectorLegend legend) {
28
        super(parameters, featureStore, legend);
35
        super(parameters, featureStore);
36
        this.markAttributes = getBasicMarkerAttributes(legend);
29 37
    }
30 38

  
31 39
    @Override
......
81 89
        featureQuery.addAttributeName(geomAtt);
82 90
        return featureQuery;
83 91
    }
92
    
93
    private PointPlacemarkAttributes getBasicMarkerAttributes(IVectorLegend legend) {
84 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

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

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

  
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9

  
10
import org.gvsig.fmap.dal.exception.DataException;
11
import org.gvsig.fmap.dal.feature.Feature;
12
import org.gvsig.fmap.dal.feature.FeatureQuery;
13
import org.gvsig.fmap.dal.feature.FeatureSet;
14
import org.gvsig.fmap.dal.feature.FeatureStore;
15
import org.gvsig.tools.dispose.DisposableIterator;
16
import org.gvsig.view3d.vector.lib.api.VectorElevationMode;
17
import org.gvsig.view3d.vector.lib.api.VectorLoaderParameters;
18

  
19
import gov.nasa.worldwind.WorldWind;
20
import gov.nasa.worldwind.layers.RenderableLayer;
21
import gov.nasa.worldwind.render.Renderable;
22

  
23
public abstract class AbstractRenderableLayer extends RenderableLayer {
24

  
25
    private static final Logger LOG = LoggerFactory.getLogger(AbstractRenderableLayer.class);
26

  
27
    protected FeatureStore featureStore;
28

  
29
    protected VectorLoaderParameters parameters;
30

  
31
    public AbstractRenderableLayer(VectorLoaderParameters parameters, FeatureStore featureStore) {
32
        this.featureStore = featureStore;
33
        this.parameters = parameters;
34
        ExecutorService executor = Executors.newSingleThreadExecutor();
35
        executor.execute(addRenderableObjects());
36
    }
37

  
38
    protected Runnable addRenderableObjects() {
39
        
40
        return new Runnable() {
41
            
42
            @Override
43
            public void run() {
44
                FeatureQuery featureQuery;
45
                try {
46
                    featureQuery = getFeatureQuery();
47
                } catch (DataException e) {
48
                    LOG.error(String.format("Can not access to feature type of %1s", featureStore.getFullName()), e);
49
                    removeAllRenderables();
50
                    return;
51
                }
52

  
53
                FeatureSet featureSet = null;
54
                DisposableIterator it = null;
55
                try {
56
                    featureSet = featureStore.getFeatureSet(featureQuery);
57
                    it = featureSet.fastIterator();
58
                    while (it.hasNext()) {
59
                        Feature feature = (Feature) it.next();
60
                        List<Renderable> renderables = getRenderable(feature);
61
                        for (Renderable renderable : renderables) {
62
                            addRenderable(renderable);
63
                        }
64
                    }
65
                } catch (DataException e) {
66
                    LOG.error(String.format("Can not access to %1s data", featureStore.getFullName()), e);
67
                    removeAllRenderables();
68
                    return;
69
                } finally {
70
                    if (it != null) {
71
                        it.dispose();
72
                    }
73
                    if (featureSet != null) {
74
                        featureSet.dispose();
75
                    }
76
                }
77
            }
78
        };
79
    }
80

  
81
    protected int getAltitudeMode(VectorElevationMode mode) {
82
        switch (mode) {
83
        case CLAMP_TO_GROUND:
84
            return WorldWind.CLAMP_TO_GROUND;
85
        case ABSOLUTE:
86
            return WorldWind.ABSOLUTE;
87
        case RELATIVE_TO_GROUND:
88
            return WorldWind.RELATIVE_TO_GROUND;
89
        default:
90
            throw new IllegalArgumentException(
91
                "Vector elevation mode not reconized. Only CLAMP_TO_GROUND, ABSOLUTE and RELATIVE_TO_GROUND are valid");
92
        }
93
    }
94

  
95
    protected abstract List<Renderable> getRenderable(Feature feature);
96

  
97
    protected abstract FeatureQuery getFeatureQuery() throws DataException;
98
}

Also available in: Unified diff