def export_scene(canvas, width, height, dpi, exportFileName): """ This function exports the scene to a file. """ # need this to make sure we take away focus from # any currently selected legend items canvas.clearFocus() with HiddenStitchManager(canvas): # NOTE: We seem to need the 1px buffer region to avoid # the image being cut off margin = 10 theScene = visible_bounding_rect(canvas.items()) theScene.adjust(-margin, -margin, margin, margin) # check if user requested an svg file svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \ else False if svg: generator = QSvgGenerator() generator.setFileName(exportFileName) generator.setSize(QSize(width, height)) generator.setViewBox(QRect(0, 0, width, height)) generator.setTitle("sconcho generated SVG image") generator.setDescription("this svg image was exported from " "a sconcho project") generator.setResolution(dpi) else: generator = QImage(width+2*margin, height+2*margin, QImage.Format_ARGB32_Premultiplied) generator.fill(1) inchesToMeter = 39.3700787 generator.setDotsPerMeterX(dpi*inchesToMeter) generator.setDotsPerMeterY(dpi*inchesToMeter) painter = QPainter(generator) painter.setRenderHints(QPainter.SmoothPixmapTransform | QPainter.HighQualityAntialiasing | QPainter.TextAntialiasing ) painter.setBackgroundMode(Qt.TransparentMode ) canvas.render(painter, QRectF(), theScene ) painter.end() if not svg: generator.save(exportFileName)
def export_scene(canvas, width, height, dpi, exportFileName): """ This function exports the scene to a file. """ # need this to make sure we take away focus from # any currently selected legend items canvas.clearFocus() with HiddenStitchManager(canvas): # NOTE: We seem to need the 1px buffer region to avoid # the image being cut off margin = 10 theScene = visible_bounding_rect(canvas.items()) theScene.adjust(-margin, -margin, margin, margin) # check if user requested an svg file svg = True if QFileInfo(exportFileName).completeSuffix() == "svg" \ else False if svg: generator = QSvgGenerator() generator.setFileName(exportFileName) generator.setSize(QSize(width, height)) generator.setViewBox(QRect(0, 0, width, height)) generator.setTitle("sconcho generated SVG image") generator.setDescription("this svg image was exported from " "a sconcho project") generator.setResolution(dpi) else: generator = QImage(width + 2 * margin, height + 2 * margin, QImage.Format_ARGB32_Premultiplied) generator.fill(1) inchesToMeter = 39.3700787 generator.setDotsPerMeterX(dpi * inchesToMeter) generator.setDotsPerMeterY(dpi * inchesToMeter) painter = QPainter(generator) painter.setRenderHints(QPainter.SmoothPixmapTransform | QPainter.HighQualityAntialiasing | QPainter.TextAntialiasing) painter.setBackgroundMode(Qt.TransparentMode) canvas.render(painter, QRectF(), theScene) painter.end() if not svg: generator.save(exportFileName)
def saveGraph(self): sizeDlg = OWChooseImageSizeDlg(self.dendrogram, parent=self) filename = sizeDlg.getFileName( "graph", "Portable Network Graphics (*.PNG);;" "Windows Bitmap (*.BMP);;" "Graphics Interchange Format (*.GIF);;" "Scalable Vector Graphics (*.SVG)", ".png", ) if not filename: return _, ext = os.path.splitext(filename) ext = ext.lower() canvases = (self.headerView.scene(), self.dendrogramView.scene(), self.footerView.scene()) width = max([c.width() for c in canvases]) height = sum([c.height() for c in canvases]) size = QSize(width, height) if ext == ".svg": device = QSvgGenerator() device.setTitle("Dendrogram Plot") device.setFileName(filename) device.setSize(size) device.setViewBox(QRect(QPoint(0, 0), size)) else: device = QPixmap(size) device.fill(Qt.white) painter = QPainter() painter.begin(device) painter.setRenderHint(QPainter.Antialiasing) self.renderDendrogram(painter) painter.end() if ext != ".svg": device.save(filename)
def saveGraph(self): sizeDlg = OWChooseImageSizeDlg(self.dendrogram, parent=self) filename = sizeDlg.getFileName( "graph", "Portable Network Graphics (*.PNG);;" "Windows Bitmap (*.BMP);;" "Graphics Interchange Format (*.GIF);;" "Scalable Vector Graphics (*.SVG)", ".png") if not filename: return _, ext = os.path.splitext(filename) ext = ext.lower() canvases = (self.headerView.scene(), self.dendrogramView.scene(), self.footerView.scene()) width = max([c.width() for c in canvases]) height = sum([c.height() for c in canvases]) size = QSize(width, height) if ext == ".svg": device = QSvgGenerator() device.setTitle("Dendrogram Plot") device.setFileName(filename) device.setSize(size) device.setViewBox(QRect(QPoint(0, 0), size)) else: device = QPixmap(size) device.fill(Qt.white) painter = QPainter() painter.begin(device) painter.setRenderHint(QPainter.Antialiasing) self.renderDendrogram(painter) painter.end() if ext != ".svg": device.save(filename)