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 @ 41102
History | View | Annotate | Download (7.42 KB)
1 | 40559 | jjdelcerro | /**
|
---|---|---|---|
2 | * gvSIG. Desktop Geographic Information System.
|
||
3 | 40435 | jjdelcerro | *
|
4 | 40559 | jjdelcerro | * Copyright (C) 2007-2013 gvSIG Association.
|
5 | *
|
||
6 | 40435 | jjdelcerro | * This program is free software; you can redistribute it and/or
|
7 | * modify it under the terms of the GNU General Public License
|
||
8 | 40559 | jjdelcerro | * as published by the Free Software Foundation; either version 3
|
9 | 40435 | jjdelcerro | * of the License, or (at your option) any later version.
|
10 | 40559 | jjdelcerro | *
|
11 | 40435 | jjdelcerro | * 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 | 40559 | jjdelcerro | *
|
16 | 40435 | jjdelcerro | * 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 | 40559 | jjdelcerro | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19 | 40435 | jjdelcerro | * MA 02110-1301, USA.
|
20 | 40559 | jjdelcerro | *
|
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 | 40435 | jjdelcerro | */
|
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 | 41102 | jldominguez | |
89 | try {
|
||
90 | Point2D point = handlers[i].getPoint();
|
||
91 | at.transform(point, point); |
||
92 | 40435 | jjdelcerro | |
93 | 41102 | jldominguez | 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.info("Unexpected error while drawing handler: " + th.getMessage());
|
||
106 | } |
||
107 | 40435 | jjdelcerro | } |
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 | } |