Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_controls / src / org / gvsig / fmap / mapcontrol / impl / MapControlDrawer2D.java @ 33411

History | View | Annotate | Download (7.17 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2009 {Iver T.I.}   {Task}
26
 */
27

    
28
package org.gvsig.fmap.mapcontrol.impl;
29

    
30
import java.awt.Color;
31
import java.awt.Composite;
32
import java.awt.Graphics;
33
import java.awt.Graphics2D;
34
import java.awt.Image;
35
import java.awt.geom.AffineTransform;
36
import java.awt.geom.Point2D;
37

    
38
import org.apache.log4j.Logger;
39
import org.gvsig.fmap.geom.Geometry;
40
import org.gvsig.fmap.geom.GeometryLocator;
41
import org.gvsig.fmap.geom.GeometryManager;
42
import org.gvsig.fmap.geom.handler.Handler;
43
import org.gvsig.fmap.geom.operation.Draw;
44
import org.gvsig.fmap.geom.operation.DrawOperationContext;
45
import org.gvsig.fmap.geom.operation.GeometryOperationException;
46
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
47
import org.gvsig.fmap.geom.primitive.Curve;
48
import org.gvsig.fmap.geom.primitive.GeneralPathX;
49
import org.gvsig.fmap.mapcontext.MapContext;
50
import org.gvsig.fmap.mapcontext.MapContextLocator;
51
import org.gvsig.fmap.mapcontext.ViewPort;
52
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
53
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
54

    
55
/**
56
 * MapControlDrawer for a 2D view.
57
 * 
58
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
59
 */
60
public class MapControlDrawer2D extends DefaultPrimitivesDrawer implements MapControlDrawer{
61
        protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
62
        private ViewPort viewPort = null;
63

    
64
        /**
65
         * @param graphics
66
         * @param viewPort
67
         */
68
        public MapControlDrawer2D() {
69
                super();                
70
        }
71

    
72
        /* (non-Javadoc)
73
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#draw(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
74
         */
75
        public void draw(Geometry geometry, ISymbol symbol) {
76
                if (geometry != null) {
77
                        DrawOperationContext doc = new DrawOperationContext();
78
                        doc.setGraphics(graphics);
79
                        doc.setViewPort(viewPort);
80
                        doc.setSymbol(symbol);
81
                        try {
82
                                geometry.cloneGeometry().invokeOperation(Draw.CODE, doc);
83
                        } catch (GeometryOperationNotSupportedException e) {
84
                                e.printStackTrace();
85
                        } catch (GeometryOperationException e) {
86
                                e.printStackTrace();
87
                        }
88
                }                
89
        }
90

    
91
        /*
92
         * (non-Javadoc)
93
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawHandlers(org.gvsig.fmap.geom.Geometry, java.awt.geom.AffineTransform, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
94
         */
95
        public void drawHandlers(Handler[] handlers, AffineTransform at, ISymbol symbol) {
96
                for (int i = 0; i < handlers.length; i++) {
97
                        Point2D point = handlers[i].getPoint();
98
                        at.transform(point, point);
99

    
100
                        graphics.setPaintMode();
101
                        graphics.setColor(symbol.getColor());
102
                        graphics.fillRect((int) (point.getX() - 3), (int) (point.getY() - 3), 7, 7);
103
                        graphics.drawRect((int) (point.getX() - 5), (int) (point.getY() - 5), 10, 10);
104
                        graphics.drawString( "" + i, (int) (point.getX() - 5), (int) (point.getY() - 5));
105
                }
106
        }
107

    
108
        /* (non-Javadoc)
109
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawLine(java.awt.geom.Point2D, java.awt.geom.Point2D, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
110
         */
111
        public void drawLine(Point2D firstPoint, Point2D endPoint, ISymbol symbol) {
112
                GeneralPathX elShape = new GeneralPathX(GeneralPathX.WIND_EVEN_ODD, 2);
113
                elShape.moveTo(firstPoint.getX(), firstPoint.getY());
114
                elShape.lineTo(endPoint.getX(), endPoint.getY());
115
                DrawOperationContext doc = new DrawOperationContext();
116
                doc.setGraphics(graphics);
117
                doc.setViewPort(viewPort);
118
                doc.setSymbol(symbol);
119
                try {
120
                        Curve curve = (Curve)geomManager.create(Geometry.TYPES.CURVE, Geometry.SUBTYPES.GEOM2D);
121
                        curve.setGeneralPath(elShape);
122
                        curve.invokeOperation(Draw.CODE, doc);
123
                } catch (GeometryOperationNotSupportedException e) {
124
                        e.printStackTrace();
125
                } catch (GeometryOperationException e) {
126
                        e.printStackTrace();
127
                } catch (org.gvsig.fmap.geom.exception.CreateGeometryException e) {
128
                        e.printStackTrace();
129
                }                
130
        }
131

    
132
        /* (non-Javadoc)
133
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawImage(java.awt.Image, int, int)
134
         */
135
        public void drawImage(Image img, int x, int y) {
136
                if (img != null){
137
                        graphics.drawImage(img, x, y, null);
138
                }                
139
        }        
140

    
141
        /*
142
         * (non-Javadoc)
143
         * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#drawHandler(org.gvsig.fmap.geom.handler.Handler, java.awt.geom.AffineTransform)
144
         */
145
        public void drawHandler(Handler handler, AffineTransform at) {
146
                Point2D point = handler.getPoint();
147
                at.transform(point, point);
148
                graphics.setColor(Color.black);
149
                graphics.drawLine((int)point.getX()-2,(int)point.getY()-10,(int)point.getX()-2,(int)point.getY()+10);
150
                graphics.drawLine((int)point.getX()+2,(int)point.getY()-10,(int)point.getX()+2,(int)point.getY()+10);
151
                graphics.drawLine((int)point.getX()-10,(int)point.getY()-2,(int)point.getX()+10,(int)point.getY()-2);
152
                graphics.drawLine((int)point.getX()-10,(int)point.getY()+2,(int)point.getX()+10,(int)point.getY()+2);
153
                graphics.setColor(Color.red);
154
                graphics.drawLine((int)point.getX()-1,(int)point.getY()-10,(int)point.getX()-1,(int)point.getY()+10);
155
                graphics.drawLine((int)point.getX()+1,(int)point.getY()-10,(int)point.getX()+1,(int)point.getY()+10);
156
                graphics.drawLine((int)point.getX()-10,(int)point.getY()-1,(int)point.getX()+10,(int)point.getY()-1);
157
                graphics.drawLine((int)point.getX()-10,(int)point.getY()+1,(int)point.getX()+10,(int)point.getY()+1);
158
        }
159

    
160
        /* (non-Javadoc)
161
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawImage(java.awt.Image, java.awt.geom.AffineTransform)
162
         */
163
        public void drawImage(Image img, AffineTransform xform) {
164
                graphics.drawImage(img, xform, null);                
165
        }
166

    
167
        /* (non-Javadoc)
168
         * @see org.gvsig.fmap.mapcontext.rendering.Renderer#setViewPort(org.gvsig.fmap.mapcontext.ViewPort)
169
         */
170
        public void setViewPort(ViewPort viewPort) {
171
                this.viewPort = viewPort;                
172
        }
173

    
174
        /* (non-Javadoc)
175
         * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#draw(org.gvsig.fmap.geom.Geometry)
176
         */
177
        public void draw(Geometry geometry) {
178
                draw(geometry, MapContextLocator.getSymbolManager().createSymbol(geometry.getType()));
179
        }
180

    
181
        /* (non-Javadoc)
182
         * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#setComposite(java.awt.AlphaComposite)
183
         */
184
        public void setComposite(Composite composite) {
185
                graphics.setComposite(composite);
186
        }
187

    
188
        /* (non-Javadoc)
189
         * @see org.gvsig.fmap.mapcontrol.MapControlDrawer#transform(java.awt.geom.AffineTransform)
190
         */
191
        public void transform(AffineTransform at) {
192
                graphics.transform(at);                
193
        }
194

    
195
}
196