1 |
# Copyright (c) 2001, 2002, 2003 by Intevation GmbH |
# Copyright (c) 2001, 2002, 2003, 2004 by Intevation GmbH |
2 |
# Authors: |
# Authors: |
3 |
# Bernhard Herzog <[email protected]> |
# Bernhard Herzog <[email protected]> |
4 |
# Jonathan Coles <[email protected]> |
# Jonathan Coles <[email protected]> |
42 |
# (layer_class, draw_function) pairs. If the renderer has to draw a |
# (layer_class, draw_function) pairs. If the renderer has to draw a |
43 |
# non-builtin layer type, i.e. a layer that is not a subclass of Layer |
# non-builtin layer type, i.e. a layer that is not a subclass of Layer |
44 |
# or RasterLayer, it iterates through that list, tests whether the layer |
# or RasterLayer, it iterates through that list, tests whether the layer |
45 |
# to be drawin is an instance of layer_class and if so calls |
# to be drawn is an instance of layer_class and if so calls |
46 |
# draw_function with the renderer and the layer as arguments. Since |
# draw_function with the renderer and the layer as arguments. Since |
47 |
# drawing is done incrementally, the draw_function should return an |
# drawing is done incrementally, the draw_function should return an |
48 |
# iterable. The easiest way is to simply implement the draw_function as |
# iterable. The easiest way is to simply implement the draw_function as |
64 |
function should return an iterable. The easiest way is to simply |
function should return an iterable. The easiest way is to simply |
65 |
implement the draw_function as a generator and to yield True in |
implement the draw_function as a generator and to yield True in |
66 |
suitable places, or to return the empty tuple if it's not possible |
suitable places, or to return the empty tuple if it's not possible |
67 |
to do the rendering in incrementally. |
to do the rendering incrementally. |
68 |
""" |
""" |
69 |
_renderer_extensions.append((layer_class, function)) |
_renderer_extensions.append((layer_class, function)) |
70 |
|
|
198 |
# if honor_visibility is true, only draw visible layers, |
# if honor_visibility is true, only draw visible layers, |
199 |
# otherwise draw all layers |
# otherwise draw all layers |
200 |
if not self.honor_visibility or layer.Visible(): |
if not self.honor_visibility or layer.Visible(): |
201 |
if isinstance(layer, Layer) and seenRaster: |
if isinstance(layer, Layer): |
202 |
for i in self.draw_shape_layer_incrementally(layer): |
if seenRaster: |
203 |
yield True |
for i in self.draw_shape_layer_incrementally(layer): |
204 |
|
yield True |
205 |
elif isinstance(layer, RasterLayer) \ |
elif isinstance(layer, RasterLayer) \ |
206 |
and Thuban.Model.resource.has_gdal_support(): |
and Thuban.Model.resource.has_gdal_support(): |
207 |
self.draw_raster_layer(layer) |
self.draw_raster_layer(layer) |
289 |
data = shape.RawData() |
data = shape.RawData() |
290 |
else: |
else: |
291 |
data = shape.Points() |
data = shape.Points() |
292 |
draw_func(draw_func_param, data, pen, brush) |
if draw_func == self.draw_point_shape: |
293 |
|
draw_func(draw_func_param, data, pen, brush, |
294 |
|
size = group.GetProperties().GetSize()) |
295 |
|
else: |
296 |
|
draw_func(draw_func_param, data, pen, brush) |
297 |
if count % 500 == 0: |
if count % 500 == 0: |
298 |
yield True |
yield True |
299 |
|
|
388 |
value of the shape's Points() method. The coordinates in the |
value of the shape's Points() method. The coordinates in the |
389 |
DC's coordinate system are determined with |
DC's coordinate system are determined with |
390 |
self.projected_points. |
self.projected_points. |
391 |
|
|
392 |
|
For a description of the algorithm look in wxproj.cpp. |
393 |
""" |
""" |
394 |
points = self.projected_points(layer, points) |
points = self.projected_points(layer, points) |
395 |
|
|
398 |
for part in points: |
for part in points: |
399 |
polygon.extend(part) |
polygon.extend(part) |
400 |
|
|
401 |
|
# missing back vertices for correct filling. |
402 |
insert_index = len(polygon) |
insert_index = len(polygon) |
403 |
for part in points[:-1]: |
for part in points[:-1]: |
404 |
polygon.insert(insert_index, part[0]) |
polygon.insert(insert_index, part[0]) |
428 |
for part in points: |
for part in points: |
429 |
self.dc.DrawLines(part) |
self.dc.DrawLines(part) |
430 |
|
|
431 |
def draw_point_shape(self, layer, points, pen, brush): |
def draw_point_shape(self, layer, points, pen, brush, size = 5): |
432 |
"""Draw a point shape from layer with the given brush and pen |
"""Draw a point shape from layer with the given brush and pen |
433 |
|
|
434 |
The shape is given by points argument which is a the return |
The shape is given by points argument which is a the return |
442 |
if not points: |
if not points: |
443 |
return |
return |
444 |
|
|
445 |
radius = int(round(self.resolution * 5)) |
radius = int(round(self.resolution * size)) |
446 |
self.dc.SetBrush(brush) |
self.dc.SetBrush(brush) |
447 |
self.dc.SetPen(pen) |
self.dc.SetPen(pen) |
448 |
for part in points: |
for part in points: |