Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.fmap.control / src / main / java / org / gvsig / fmap / mapcontrol / impl / MapControlDrawer2D.java @ 41104

History | View | Annotate | Download (7.42 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
/*
25
 * AUTHORS (In addition to CIT):
26
 * 2009 {Iver T.I.}   {Task}
27
 */
28

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

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

    
37
import org.gvsig.fmap.geom.Geometry;
38
import org.gvsig.fmap.geom.GeometryLocator;
39
import org.gvsig.fmap.geom.GeometryManager;
40
import org.gvsig.fmap.geom.handler.Handler;
41

    
42
import org.gvsig.fmap.geom.operation.Draw;
43
import org.gvsig.fmap.geom.operation.DrawOperationContext;
44
import org.gvsig.fmap.geom.operation.GeometryOperationException;
45
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
46
import org.gvsig.fmap.geom.primitive.Curve;
47
import org.gvsig.fmap.mapcontext.MapContextLocator;
48
import org.gvsig.fmap.mapcontext.ViewPort;
49
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
50
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
51
import org.slf4j.Logger;
52
import org.slf4j.LoggerFactory;
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
    private static final Logger LOG = LoggerFactory.getLogger(MapControlDrawer2D.class);
61
    
62
        protected GeometryManager geomManager = GeometryLocator.getGeometryManager();
63
        private ViewPort viewPort = null;
64

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

    
73
        /* (non-Javadoc)
74
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#draw(org.gvsig.fmap.geom.Geometry, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
75
         */
76
        public void draw(Geometry geometry, ISymbol symbol) {
77
                if (geometry != null) {
78
                    symbol.draw(graphics, viewPort.getAffineTransform(), geometry, null, null);             
79
                }                
80
        }
81

    
82
        /*
83
         * (non-Javadoc)
84
         * @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)
85
         */
86
        public void drawHandlers(Handler[] handlers, AffineTransform at, ISymbol symbol) {
87
                for (int i = 0; i < handlers.length; i++) {
88
                    
89
                    try {
90
                    Point2D point = handlers[i].getPoint();
91
                    at.transform(point, point);
92

    
93
                    graphics.setPaintMode();
94
                    graphics.setColor(symbol.getColor());
95
                    graphics.fillRect((int) (point.getX() - 3), (int) (point.getY() - 3), 7, 7);
96
                    graphics.drawRect((int) (point.getX() - 5), (int) (point.getY() - 5), 10, 10);
97
                    graphics.drawString( "" + i, (int) (point.getX() - 5), (int) (point.getY() - 5));
98
                    } catch (Throwable th) {
99
                        /*
100
                         * jmvivo experienced a "java.lang.InternalError" here, possibly
101
                         * a graphic bug in the JRE when dealing with windows.
102
                         * Since we are simply drawing a handler, we will ignore this
103
                         * error and simply write a line in the log file.. 
104
                         */
105
                        LOG.warn("Unexpected error while drawing handler: " + th.getMessage(), th);
106
                    }
107
                }
108
        }
109

    
110
        /* (non-Javadoc)
111
         * @see org.gvsig.fmap.mapcontrol.tools.renderer.Renderer#drawLine(java.awt.geom.Point2D, java.awt.geom.Point2D, org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
112
         */
113
        public void drawLine(Point2D firstPoint, Point2D endPoint, ISymbol symbol) {
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.addVertex(geomManager.createPoint(firstPoint.getX(), firstPoint.getY(), Geometry.SUBTYPES.GEOM2D) );
121
                        curve.addVertex(geomManager.createPoint(endPoint.getX(), endPoint.getY(), Geometry.SUBTYPES.GEOM2D) );
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
                Point2D dest = (Point2D) point.clone();
148
                at.transform(point, dest);
149
                graphics.setColor(Color.black);
150
                graphics.drawLine((int)dest.getX()-2,(int)dest.getY()-10,(int)dest.getX()-2,(int)dest.getY()+10);
151
                graphics.drawLine((int)dest.getX()+2,(int)dest.getY()-10,(int)dest.getX()+2,(int)dest.getY()+10);
152
                graphics.drawLine((int)dest.getX()-10,(int)dest.getY()-2,(int)dest.getX()+10,(int)dest.getY()-2);
153
                graphics.drawLine((int)dest.getX()-10,(int)dest.getY()+2,(int)dest.getX()+10,(int)dest.getY()+2);
154
                graphics.setColor(Color.red);
155
                graphics.drawLine((int)dest.getX()-1,(int)dest.getY()-10,(int)dest.getX()-1,(int)dest.getY()+10);
156
                graphics.drawLine((int)dest.getX()+1,(int)dest.getY()-10,(int)dest.getX()+1,(int)dest.getY()+10);
157
                graphics.drawLine((int)dest.getX()-10,(int)dest.getY()-1,(int)dest.getX()+10,(int)dest.getY()-1);
158
                graphics.drawLine((int)dest.getX()-10,(int)dest.getY()+1,(int)dest.getX()+10,(int)dest.getY()+1);
159
        }
160

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

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

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

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

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

    
196
}
197