Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_controls / src / org / gvsig / fmap / mapcontrol / impl / MapControlDrawer2D.java @ 30788

History | View | Annotate | Download (7.05 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.ViewPort;
51
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
52
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
53

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

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

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

    
90
        /*
91
         * (non-Javadoc)
92
         * @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)
93
         */
94
        public void drawHandlers(Handler[] handlers, AffineTransform at, ISymbol symbol) {
95
                for (int i = 0; i < handlers.length; i++) {
96
                        Point2D point = handlers[i].getPoint();
97
                        at.transform(point, point);
98

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

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

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

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

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

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

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

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

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

    
194
}
195