def setExtent(self, center, width, height, rotation=0): """ Set map extent to export settings. This is a convenience method to set map extent to export settings. Map settings should be set before this method is called. :param center: Center of the map extent in the map CRS. :type center: QgsPoint :param width: Width of the map extent in unit of the map CRS. :type width: float :param height: Height of the map extent in unit of the map CRS. :type height: float :param rotation: Rotation in degrees. Requires QGIS version 2.8 or later. :type rotation: float """ if self.mapSettings is None: self.mapSettings = QgsMapSettings() if rotation: rect = RotatedRect(center, width, height, rotation) rect.toMapSettings(self.mapSettings) else: rect = QgsRectangle(center.x() - width / 2, center.y() - height / 2, center.x() + width / 2, center.y() + height / 2) self.mapSettings.setExtent(rect) self.settings.setMapSettings(self.mapSettings)
def _rect(self, startPoint, endPoint): if startPoint is None or endPoint is None: return None p0 = self.toCanvasCoordinates(startPoint) p1 = self.toCanvasCoordinates(endPoint) canvas_rect = QgsRectangle(QgsPoint(p0.x(), p0.y()), QgsPoint(p1.x(), p1.y())) center = QgsPoint((startPoint.x() + endPoint.x()) / 2, (startPoint.y() + endPoint.y()) / 2) return RotatedRect(center, self.mupp * canvas_rect.width(), self.mupp * canvas_rect.height()).rotate( self.rotation, center)
def surroundingDEMBlocks(writer, layer, provider, properties, progress=None): settings = writer.settings canvas_size = settings.mapSettings.outputSize() mapTo3d = settings.mapTo3d() baseExtent = settings.baseExtent progress = progress or dummyProgress # options size = properties["spinBox_Size"] roughening = properties["spinBox_Roughening"] texture_scale = properties.get("comboBox_TextureSize", 100) / 100 transparency = properties.get("spinBox_demtransp", 0) transp_background = properties.get("checkBox_TransparentBackground", False) prop = DEMPropertyReader(properties) dem_size = prop.demSize(canvas_size) dem_width = (dem_size.width() - 1) / roughening + 1 dem_height = (dem_size.height() - 1) / roughening + 1 # texture size image_width = canvas_size.width() * texture_scale image_height = canvas_size.height() * texture_scale center = baseExtent.center() rotation = baseExtent.rotation() blocks = [] size2 = size * size for i in range(size2): progress(20 * i / size2 + 10) if i == (size2 - 1) / 2: # center (map canvas) continue # block extent sx = i % size - (size - 1) / 2 sy = i / size - (size - 1) / 2 block_center = QgsPoint(center.x() + sx * baseExtent.width(), center.y() + sy * baseExtent.height()) extent = RotatedRect(block_center, baseExtent.width(), baseExtent.height()).rotate(rotation, center) # display type if properties.get("radioButton_MapCanvas", False): mat = layer.materialManager.getMapImageIndex( image_width, image_height, extent, transparency, transp_background) elif properties.get("radioButton_LayerImage", False): layerids = properties.get("layerImageIds", []) mat = layer.materialManager.getLayerImageIndex( layerids, image_width, image_height, extent, transparency, transp_background) else: #.get("radioButton_SolidColor", False) mat = layer.materialManager.getMeshLambertIndex( properties.get("lineEdit_Color", ""), transparency, True) # DEM block dem_values = provider.read(dem_width, dem_height, extent) planeWidth, planeHeight = mapTo3d.planeWidth, mapTo3d.planeHeight offsetX, offsetY = planeWidth * sx, planeHeight * sy block = DEMBlock(dem_width, dem_height, dem_values, planeWidth, planeHeight, offsetX, offsetY) block.zShift(mapTo3d.verticalShift) block.zScale(mapTo3d.multiplierZ) block.set("m", mat) blocks.append(block) return blocks