Statistics
| Revision:

gvsig-3d / 2.0 / trunk / org.gvsig.gvsig3d / org.gvsig.gvsig3d.lib / org.gvsig.gvsig3d.lib.impl / src / main / java / org / gvsig / gvsig3d / impl / symbology3d / marker / impl / SimpleMarker3DSymbol.java @ 313

History | View | Annotate | Download (6.58 KB)

1
package org.gvsig.gvsig3d.impl.symbology3d.marker.impl;
2

    
3

    
4

    
5
import java.awt.BasicStroke;
6
import java.awt.Graphics2D;
7
import java.awt.Rectangle;
8
import java.awt.geom.AffineTransform;
9

    
10
import org.gvsig.compat.print.PrintAttributes;
11
import org.gvsig.fmap.dal.feature.Feature;
12
import org.gvsig.fmap.geom.Geometry;
13
import org.gvsig.fmap.geom.GeometryLocator;
14
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
15
import org.gvsig.fmap.geom.Geometry.TYPES;
16
import org.gvsig.fmap.geom.exception.CreateGeometryException;
17
import org.gvsig.fmap.geom.primitive.GeneralPathX;
18
import org.gvsig.fmap.mapcontext.MapContextLocator;
19
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
20
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolDrawingException;
21
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
22
import org.gvsig.gvsig3d.symbology3d.marker.ISimpleMarker3DSymbol;
23
import org.gvsig.osgvp.exceptions.node.NodeException;
24
import org.gvsig.osgvp.geometry.GeoPointArray3D;
25
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.AbstractMarkerSymbol;
26
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
27
import org.gvsig.tools.ToolsLocator;
28
import org.gvsig.tools.dynobject.DynStruct;
29
import org.gvsig.tools.locator.LocatorException;
30
import org.gvsig.tools.persistence.PersistenceManager;
31
import org.gvsig.tools.persistence.PersistentState;
32
import org.gvsig.tools.persistence.exception.PersistenceException;
33
import org.gvsig.tools.task.Cancellable;
34
import org.gvsig.tools.util.Callable;
35

    
36
public class SimpleMarker3DSymbol extends AbstractMarkerSymbol implements ISimpleMarker3DSymbol{
37

    
38
        public static final String SIMPLE_MARKER3D_SYMBOL_PERSISTENCE_DEFINITION_NAME = "SimpleMarker3DSymbol";
39
        
40
        public GeoPointArray3D _geometry;
41
        
42
        
43
        public SimpleMarker3DSymbol() 
44
        {
45
                super();
46
                try {
47
                        _geometry = new GeoPointArray3D();
48
                } catch (NodeException e) {
49
                        // TODO Auto-generated catch block
50
                        e.printStackTrace();
51
                }
52
        }
53
        public ISymbol getSymbolForSelection() {
54
                //TODO 
55
                return null;
56
        }
57
        public GeoPointArray3D getGeometry(){
58
                return _geometry;
59
        }
60
        
61
        
62
        
63
        public void previewSymbol(Graphics2D g, AffineTransform affineTransform,
64
                        Geometry geom, Feature f, Cancellable cancel) {
65
                int x, y;
66
                org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geom.cloneGeometry();
67
                p.transform(affineTransform);
68
                
69
                int size = (int) getSize();
70

    
71
                int halfSize = size/2;
72
                x = ((int) (p.getX() + getOffset().getX()) - halfSize);
73
                y = ((int) (p.getY() + getOffset().getY()) - halfSize);
74

    
75
                g.setColor(getColor());
76
                g.setStroke(new BasicStroke(1));
77
                // IMask mask = getMask();
78
                // if (mask != null) {
79
                // IFillSymbol maskShape = mask.getFillSymbol();
80
                // // maskShape.draw(g, null, mask.getHaloShape(shp));
81
                // }
82
                g.fillOval(x, y, size, size);
83
        }
84
        public void drawInsideRectangle(Graphics2D g, AffineTransform scaleInstance, Rectangle r, PrintAttributes properties) throws SymbolDrawingException {
85
                SimpleMarkerSymbol smarker = new SimpleMarkerSymbol();
86
                try {
87
                        if (properties==null)
88
                        this.previewSymbol(g, scaleInstance, GeometryLocator.getGeometryManager().createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), null, null);
89
                        else
90
                        {
91
                                double originalSize = getSize();
92
                                double size=originalSize;
93
                                int pq = properties.getPrintQuality();
94
                                if (pq == PrintAttributes.PRINT_QUALITY_NORMAL){
95
                                        size *= (double) 300/72;
96
                                }else if (pq == PrintAttributes.PRINT_QUALITY_HIGH){
97
                                        size *= (double) 600/72;
98
                                }else if (pq == PrintAttributes.PRINT_QUALITY_DRAFT){
99
                                        // d *= 72/72; // (which is the same than doing nothing)
100
                                }
101
                                setSize(size);
102
                                print(g, scaleInstance,GeometryLocator.getGeometryManager().createPoint(r.getCenterX(), r.getCenterY(), SUBTYPES.GEOM2D), properties);
103
                                setSize(originalSize);
104
                        }
105
                
106
                } catch (CreateGeometryException e) {
107
                        // TODO Auto-generated catch block
108
                        e.printStackTrace();
109
                } catch (LocatorException e) {
110
                        // TODO Auto-generated catch block
111
                        e.printStackTrace();
112
                }
113
                
114
        }
115
                
116
                public void loadFromState(PersistentState state)
117
        throws PersistenceException {
118
                // Set parent fill symbol properties
119
                super.loadFromState(state);
120

    
121
                // Set own properties sample
122
                //thi.setStyle(state.getInt(FIELD_MARKERSTYLE));
123

    
124
                
125
        }
126

    
127
        public void saveToState(PersistentState state) throws PersistenceException {
128
                // Save parent fill symbol properties
129
                super.saveToState(state);
130

    
131
        // Save own properties
132
        //        state.set(FIELD_MARKERSTYLE, getStyle());
133
        }
134

    
135

    
136

    
137

    
138
        public static class RegisterPersistence implements Callable {
139

    
140
                public Object call() throws Exception {
141
                        PersistenceManager manager = ToolsLocator.getPersistenceManager();
142
                        if( manager.getDefinition(SIMPLE_MARKER3D_SYMBOL_PERSISTENCE_DEFINITION_NAME)==null ) {
143
                                DynStruct definition = manager.addDefinition(
144
                                                SimpleMarker3DSymbol.class,
145
                                                SIMPLE_MARKER3D_SYMBOL_PERSISTENCE_DEFINITION_NAME,
146
                                                SIMPLE_MARKER3D_SYMBOL_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
147
                                                null, 
148
                                                null
149
                                );
150
                                // Extend the MarkerSymbol base definition
151
                                definition.extend(manager.getDefinition(MARKER_SYMBOL_PERSISTENCE_DEFINITION_NAME));
152

    
153
                                //Add the fields to save                                
154
                                // Marker style
155
                                //definition.addDynFieldInt(FIELD_MARKERSTYLE).setMandatory(true);
156

    
157
                        }
158
                        return Boolean.TRUE;
159
                }
160

    
161
        }
162

    
163
        public static class RegisterSymbol implements Callable {
164

    
165
                public Object call() throws Exception {
166
                        int[] shapeTypes;
167
                        SymbolManager manager = MapContextLocator.getSymbolManager();
168

    
169
                        shapeTypes =
170
                                new int[] { Geometry.TYPES.POINT, Geometry.TYPES.MULTIPOINT};
171
                        manager.registerSymbol(ISimpleMarker3DSymbol.SYMBOL_NAME,
172
                                        shapeTypes,
173
                                        SimpleMarker3DSymbol.class,"project.document.view3d");
174

    
175
                        return Boolean.TRUE;
176
                }
177

    
178
        }
179

    
180
        public void draw(Graphics2D g, AffineTransform affineTransform,
181
                        Geometry geom, Feature f, Cancellable cancel) {
182
                        
183
                        org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geom.cloneGeometry();
184
                        
185
                        _geometry.addPoint(p.getX(),p.getY(), 10.0);
186
                        //                        int x, y;
187
//                        org.gvsig.fmap.geom.primitive.Point p = (org.gvsig.fmap.geom.primitive.Point)geom.cloneGeometry();
188
//                        p.transform(affineTransform);
189
//                        
190
//                        int size = (int) getSize();
191
//
192
//                        int halfSize = size/2;
193
//                        x = ((int) (p.getX() + getOffset().getX()) - halfSize);
194
//                        y = ((int) (p.getY() + getOffset().getY()) - halfSize);
195
//
196
//                        g.setColor(getColor());
197
//                        g.setStroke(new BasicStroke(1));
198
//                        // IMask mask = getMask();
199
//                        // if (mask != null) {
200
//                        // IFillSymbol maskShape = mask.getFillSymbol();
201
//                        // // maskShape.draw(g, null, mask.getHaloShape(shp));
202
//                        // }
203
//                        g.fillOval(x, y, size, size); 
204
                // TODO Auto-generated method stub
205
        }
206

    
207
}