4 |
import java.awt.Rectangle; |
import java.awt.Rectangle; |
5 |
import java.awt.geom.AffineTransform; |
import java.awt.geom.AffineTransform; |
6 |
|
|
|
import javax.swing.SwingUtilities; |
|
|
|
|
7 |
import org.geotools.geometry.jts.ReferencedEnvelope; |
import org.geotools.geometry.jts.ReferencedEnvelope; |
8 |
import org.geotools.renderer.GTRenderer; |
import org.geotools.renderer.GTRenderer; |
9 |
import org.geotools.renderer.RenderListener; |
import org.geotools.renderer.RenderListener; |
10 |
import org.opengis.feature.simple.SimpleFeature; |
import org.opengis.feature.simple.SimpleFeature; |
11 |
|
|
|
import schmitzm.swing.SwingUtil; |
|
|
|
|
12 |
/** |
/** |
13 |
* This class is used by {@link XMapPane} to start and stop the rendering a |
* This class is used by {@link XMapPane} to start and stop the rendering a |
14 |
* {@link Thread} for rendering. |
* {@link Thread} for rendering. |
54 |
renderThread = null; |
renderThread = null; |
55 |
|
|
56 |
renderThread = new RenderThread(paintArea, graphics, renderer, |
renderThread = new RenderThread(paintArea, graphics, renderer, |
57 |
worldToScreen); |
worldToScreen, envelope); |
58 |
renderThread.start(); |
renderThread.start(); |
59 |
|
|
60 |
return true; |
return true; |
76 |
|
|
77 |
public RenderThread(final Rectangle paintArea, |
public RenderThread(final Rectangle paintArea, |
78 |
final Graphics2D graphics, GTRenderer renderer, |
final Graphics2D graphics, GTRenderer renderer, |
79 |
AffineTransform worldToScreen) { |
AffineTransform worldToScreen, ReferencedEnvelope mapEnv) { |
80 |
super(new RenderRun(paintArea, graphics, renderer, worldToScreen)); |
super(new RenderRun(paintArea, graphics, renderer, mapEnv, worldToScreen)); |
81 |
this.renderer = renderer; |
this.renderer = renderer; |
82 |
|
|
83 |
setName("Render" + getName()); |
setName("Render" + getName()); |
99 |
private final Graphics2D graphics; |
private final Graphics2D graphics; |
100 |
private final AffineTransform worldToScreen; |
private final AffineTransform worldToScreen; |
101 |
private final GTRenderer renderer; |
private final GTRenderer renderer; |
102 |
|
private final ReferencedEnvelope mapEnv; |
103 |
|
|
104 |
public RenderRun(Rectangle paintArea, Graphics2D graphics, |
public RenderRun(Rectangle paintArea, Graphics2D graphics, |
105 |
GTRenderer renderer, AffineTransform worldToScreen) { |
GTRenderer renderer, ReferencedEnvelope mapEnv, AffineTransform worldToScreen) { |
106 |
this.paintArea = paintArea; |
this.paintArea = paintArea; |
107 |
this.graphics = graphics; |
this.graphics = graphics; |
108 |
this.renderer = renderer; |
this.renderer = renderer; |
109 |
|
this.mapEnv = mapEnv; |
110 |
this.worldToScreen = worldToScreen; |
this.worldToScreen = worldToScreen; |
111 |
} |
} |
112 |
|
|
126 |
graphics.clearRect(paintArea.x, paintArea.y, paintArea.width, |
graphics.clearRect(paintArea.x, paintArea.y, paintArea.width, |
127 |
paintArea.height); |
paintArea.height); |
128 |
|
|
129 |
renderer.paint(graphics, paintArea, worldToScreen); |
renderer.paint(graphics, paintArea, mapEnv, worldToScreen); |
130 |
|
|
131 |
// Invoked later, so when onRenderingCompleted is called, the Thread is not running anymore (#isRunning = false) |
// Kill the reference to this Thread to #isRunning will def. say false |
132 |
SwingUtilities.invokeLater(new Runnable() { |
renderThread = null; |
133 |
@Override |
mapPane.onRenderingCompleted(); |
134 |
public void run() { |
|
|
mapPane.onRenderingCompleted(); |
|
|
}; |
|
|
}); |
|
135 |
} finally { |
} finally { |
136 |
renderer.removeRenderListener(this); |
renderer.removeRenderListener(this); |
137 |
} |
} |
139 |
|
|
140 |
@Override |
@Override |
141 |
public void errorOccurred(Exception e) { |
public void errorOccurred(Exception e) { |
|
// System.out.println("rendering error"); |
|
142 |
mapPane.onRenderingFailed(e); |
mapPane.onRenderingFailed(e); |
143 |
} |
} |
144 |
|
|