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 @ 43510

History | View | Annotate | Download (6.87 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.slf4j.Logger;
38
import org.slf4j.LoggerFactory;
39

    
40
import org.gvsig.fmap.dal.feature.Feature;
41
import org.gvsig.fmap.geom.Geometry;
42
import org.gvsig.fmap.geom.GeometryLocator;
43
import org.gvsig.fmap.geom.GeometryManager;
44
import org.gvsig.fmap.geom.handler.Handler;
45

    
46
import org.gvsig.fmap.geom.primitive.Line;
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

    
52
/**
53
 * MapControlDrawer for a 2D view.
54
 *
55
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
56
 */
57
public class MapControlDrawer2D extends DefaultPrimitivesDrawer implements MapControlDrawer{
58
    private static final Logger LOG = LoggerFactory.getLogger(MapControlDrawer2D.class);
59

    
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
                    symbol.draw(graphics, viewPort.getAffineTransform(), geometry, null, null);
77
                }
78
        }
79

    
80
    public void draw(Geometry geometry, ISymbol symbol, Feature feature) {
81
        if (geometry != null) {
82
            symbol.draw(graphics, viewPort.getAffineTransform(), geometry, feature, null);
83
        }
84
    }
85

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

    
93
                    try {
94
                    Point2D point = handlers[i].getPoint();
95
                    at.transform(point, point);
96

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

    
114
    @Override
115
        public void drawLine(Point2D firstPoint, Point2D endPoint, ISymbol symbol) {
116
                try {
117
                        Line line = geomManager.createLine(Geometry.SUBTYPES.GEOM2D);
118
                        line.addVertex(firstPoint.getX(), firstPoint.getY());
119
                        line.addVertex(endPoint.getX(), endPoint.getY());
120
            
121
                    AffineTransform at = viewPort.getAffineTransform();                
122
            symbol.draw(graphics, at, line, null, null);
123
                } catch (Exception e) {
124
                        LOG.warn("Cant draw line.", e);
125
                }
126
        }
127

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

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

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

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

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

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

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

    
192
}
193