def mousePressEvent( self, event ): if event.button() == QtCore.Qt.MouseButton.LeftButton: pos = event.scenePos() x, y = pos.x(), pos.y() if self.action_ind == 0: self.center = x, y print('center set to x=%3.1f y=%3.1f' % (x,y)) self.action_ind = self.action_ind + 1 elif self.action_ind == 1: self.topLeft = x, y print('topLeft set to x=%3.1f y=%3.1f' % (x,y)) self.action_ind = self.action_ind + 1 elif self.action_ind == 2: # then place self.bottomRight = x, y self.action_ind = 0 XML = centerLinesSVG( self.center, self.topLeft, self.bottomRight, **self.dim_svg_KWs ) if XML <> None: print(XML) newSvg = QtSvg.QGraphicsSvgItem( ) svgRenderer = QtSvg.QSvgRenderer() svgRenderer.load( QtCore.QByteArray( XML )) newSvg.setSharedRenderer( svgRenderer ) dimensions.append([ newSvg, svgRenderer]) #as to prevent the garbage collector from freeing these resources (which causes a crash) self.scene().addItem( newSvg )
def mousePressEvent(self, event): if event.button() == QtCore.Qt.MouseButton.LeftButton: pos = event.scenePos() x, y = pos.x(), pos.y() if self.action_ind == 2: #then 'placeDimensionBaseLine': self.point3 = x, y print('point3 set to x=%3.1f y=%3.1f' % (x, y)) self.action_ind = self.action_ind + 1 elif self.action_ind == 3: # then placeDimensionText self.point4 = x, y self.action_ind = 0 XML = angularDimensionSVG(self.line1, self.line2, self.point3[0], self.point3[1], x, y, **self.dim_svg_KWs) if XML != None: print(XML) newSvg = QtSvg.QGraphicsSvgItem() svgRenderer = QtSvg.QSvgRenderer() svgRenderer.load(QtCore.QByteArray(self.svg_wrap(XML))) newSvg.setSharedRenderer(svgRenderer) dimensions.append( [newSvg, svgRenderer] ) #as to prevent the garbage collector from freeing these resources (which causes a crash) self.scene().addItem(newSvg) self.referer1.unlockSelection() self.referer2.unlockSelection()
def initUI(self): vbox = QtGui.QVBoxLayout() btn = QtGui.QPushButton('Dialog', self) btn.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) btn.move(20, 20) vbox.addWidget(btn) btn.clicked.connect(self.showDialog) self.lbl = QtGui.QLabel('Knowledge only matters', self) self.lbl.move(130, 20) vbox.addWidget(self.lbl) width = 250 height = 180 self.graphicsScene = QtGui.QGraphicsScene(0, 0, width * 0.8, height / 2) self.dimPreview = QtSvg.QGraphicsSvgItem() self.dimSVGRenderer = QtSvg.QSvgRenderer() self.dimSVGRenderer.load( QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' % (width, height))) self.dimPreview.setSharedRenderer(self.dimSVGRenderer) self.graphicsScene.addItem(self.dimPreview) self.graphicsView = QtGui.QGraphicsView(self.graphicsScene) vbox.addWidget(self.graphicsView) self.setLayout(vbox) self.setGeometry(300, 300, width, height) self.setWindowTitle('Font dialog') self.show()
def update(self): try: if hasattr( self, 'SVG'): self.remove() drawingVars = self.drawingVars parms = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Drawing_Dimensioning") div_period = parms.GetInt( 'grid_display_period',default_grid_display_period ) lineWidth = parms.GetFloat( 'grid_line_width', default_grid_line_width ) if parms.GetBool('grid_on', False) and div_period > 0 and lineWidth > 0: self.SVG = QtSvg.QGraphicsSvgItem() self.SVGRenderer = QtSvg.QSvgRenderer() dArg ='' div = parms.GetFloat( 'grid_spacing', default_grid_spacing ) clr = unsignedToRGBText(parms.GetUnsigned( 'grid_color', default_grid_clr )) W = drawingVars.width / drawingVars.VRT_scale H = drawingVars.height / drawingVars.VRT_scale for i in range(1, int(W / (div*div_period) )+1): dArg = dArg + ' M %f 0 L %f %f' % (i*div*div_period, i*div*div_period, H) for i in range(1, int(H / (div*div_period) )+1): dArg = dArg + ' M 0 %f L %f %f' % (i*div*div_period, W, i*div*div_period) self.SVGRenderer.load( QtCore.QByteArray( '''<svg width="%i" height="%i"> <path stroke="%srgb(0, 255, 0)" stroke-width="%f" d="%s"/> </svg>''' % (drawingVars.width, drawingVars.height, clr, lineWidth, dArg) ) ) self.SVG.setSharedRenderer( self.SVGRenderer ) self.SVG.setTransform( drawingVars.transform ) self.SVG.setZValue( 0.08 ) #ensure behind dimension preview SVG ... drawingVars.graphicsScene.addItem( self.SVG ) #FreeCAD.Console.PrintMessage('Grid Svg Added to Scene\n') except: FreeCAD.Console.PrintError(traceback.format_exc())
def __init__(self, *args): super(DimensioningRect, self).__init__(*args) svgRenderer = QtSvg.QSvgRenderer() self.action_ind = 0 self.actions = [ 'selectLine1', 'selectLine2', 'placeDimensionBaseLine', 'placeDimensionText' ] self.dimPreview = QtSvg.QGraphicsSvgItem() self.dimSVGRenderer = QtSvg.QSvgRenderer() self.dimSVGRenderer.load( QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' % (args[2], args[3]))) self.dimPreview.setSharedRenderer(self.dimSVGRenderer) self.dimPreview.setZValue(100) graphicsScene.addItem(self.dimPreview) self.dim_svg_KWs = dict( #svgTag='svg', #svgParms='width="%i" height="%i"' % (args[2],args[3]), strokeWidth=1.0, arrowL1=10, arrowL2=4, arrowW=6, textRenderer=textRenderer, gap_datum_points=8, dimension_line_overshoot=4, ) self.svg_wrap = XML_SVG_Wrapper(args)
def addOrthoView(XML): o1 = QtSvg.QGraphicsSvgItem() o1Renderer = QtSvg.QSvgRenderer() o1Renderer.load(QtCore.QByteArray(XML)) o1.setSharedRenderer(o1Renderer) graphicsScene.addItem(o1) orthoViews.append([o1, o1Renderer, XML ]) #protect o1 and o1Renderer against garbage collector
def __init__(self, path, parent): QtOpenGL.QGLWidget.__init__( self, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers)) self.doc = QtSvg.QSvgRenderer(path, self) self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self, QtCore.SLOT("update()"))
def getPixmapFromSvg(self, svgfile, w=48, h=48): svg_renderer = QtSvg.QSvgRenderer(svgfile) image = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32) image.fill(0x00000000) svg_renderer.render(QtGui.QPainter(image)) pixmap = QtGui.QPixmap.fromImage(image) return pixmap
def saveImage(self): """ Saves the current display of this view to a static image by loading a file dialog box. """ dialog = qtg.QFileDialog(self) dialog.setFileMode(qtg.QFileDialog.AnyFile) dialog.setAcceptMode(qtg.QFileDialog.AcceptSave) dialog.exec_() if dialog.result() == qtg.QFileDialog.Accepted: myFile = dialog.selectedFiles()[0] self.scene.clearSelection() self.scene.setSceneRect(self.scene.itemsBoundingRect()) if myFile.endswith('.svg'): svgGen = qts.QSvgGenerator() svgGen.setFileName(myFile) svgGen.setSize(self.scene.sceneRect().size().toSize()) svgGen.setViewBox(self.scene.sceneRect()) svgGen.setTitle("Screen capture of " + self.__class__.__name__) svgGen.setDescription("Generated from RAVEN.") painter = qtg.QPainter (svgGen) else: image = qtg.QImage(self.scene.sceneRect().size().toSize(), qtg.QImage.Format_ARGB32) image.fill(qtc.Qt.transparent) painter = qtg.QPainter(image) self.scene.render(painter) if not myFile.endswith('.svg'): image.save(myFile,quality=100) del painter
def saveImage(self): """ Method for saving the contents of this view to an image file. @ In, None @ Out, None """ dialog = qtg.QFileDialog(self) dialog.setFileMode(qtg.QFileDialog.AnyFile) dialog.setAcceptMode(qtg.QFileDialog.AcceptSave) dialog.exec_() if dialog.result() == qtg.QFileDialog.Accepted: myFile = dialog.selectedFiles()[0] self.scene().clearSelection() if myFile.endswith('.svg'): svgGen = qts.QSvgGenerator() svgGen.setFileName(myFile) svgGen.setSize(self.sceneRect().size().toSize()) svgGen.setViewBox(self.sceneRect()) svgGen.setTitle("Screen capture of " + self.__class__.__name__) svgGen.setDescription("Generated from RAVEN.") painter = qtg.QPainter(svgGen) else: image = qtg.QImage(self.sceneRect().size().toSize(), qtg.QImage.Format_ARGB32) image.fill(qtc.Qt.transparent) painter = qtg.QPainter(image) self.scene().render(painter) if not myFile.endswith('.svg'): image.save(myFile, quality=100) del painter
def create_svg(name, width, height): VBOX_WIDTH = 600 VBOX_HEIGHT = 800 # vytvoření instance třídy QSvgGenerator generator = QtSvg.QSvgGenerator() # určení typu výstupu a nastavení # jména výsledného souboru generator.setFileName(name) # specifikace rozměrů SVG obrázku generator.setSize(QtCore.QSize(width, height)) # viditelný výřez generator.setViewBox(QtCore.QRect(0, 0, VBOX_WIDTH, VBOX_HEIGHT)) # nastavení titulku SVG obrázku generator.setTitle("SVG: test 9") # popis SVG obrázku generator.setDescription("seventh SVG example") # inicializace instance třídy QPainter painter = QtGui.QPainter() # začátek kreslení painter.begin(generator) drawScene(painter, VBOX_WIDTH, VBOX_HEIGHT) # konec kreslení painter.end()
def SvgViewer(argv): svgFilename = arguments['<svgfile>'] # Create a Qt application app = QtGui.QApplication('') # Create a Window mywindow = QtGui.QWidget() mywindow.resize(425, 400) mywindow.setWindowTitle('SVG Viewer') # Create a label and display it all together fileLabel = QtGui.QLabel(mywindow) fileLabel.setGeometry(QtCore.QRect(10, 10, 80, 15)) fileLabel.setText(svgFilename) #Create an SVG widget from the file contents svgWidget = QtSvg.QSvgWidget(svgFilename, mywindow) #Resize window based on drawing size svgSize = svgWidget.renderer().defaultSize() #mywindow.resize(svgSize) mywindow.show() # Enter Qt application main loop sys.exit(app.exec_())
def __init__(self, map, parent = None): QtGui.QWidget.__init__(self, parent) self.map = map self.map.changed.connect(self.repaint) self.world_graphic = QtSvg.QGraphicsSvgItem( os.path.join( os.path.dirname(os.path.abspath(__file__)), "map.svg"))
def __init__(self,*args): super(DimensioningRect, self).__init__(*args) svgRenderer = QtSvg.QSvgRenderer() self.action_ind = 0 self.dimPreview = QtSvg.QGraphicsSvgItem() self.dimSVGRenderer = QtSvg.QSvgRenderer() self.dimSVGRenderer.load( QtCore.QByteArray( '''<svg width="%i" height="%i"></svg>''' % (args[2],args[3]))) self.dimPreview.setSharedRenderer( self.dimSVGRenderer ) self.dimPreview.setZValue(100) graphicsScene.addItem( self.dimPreview ) self.dim_svg_KWs = dict( svgTag='svg', svgParms='width="%i" height="%i"' % (args[2],args[3]), centerLine_width=2.0, centerLine_len_dot=5, centerLine_len_dash=15, centerLine_len_gap=5 ) assert not hasattr(self, 'topLeft') assert not hasattr(self, 'bottomRight') assert not hasattr(self, 'center')
def __init__(self, img): QtGui.QDialog.__init__(self) self.image = QtSvg.QSvgWidget(img) self.setWindowTitle( QtGui.QApplication.translate("RebarTool", "Detailed description", None)) self.verticalLayout = QtGui.QVBoxLayout(self) self.verticalLayout.addWidget(self.image)
def __init__(self, path, parent): QtGui.QWidget.__init__(self, parent) self.buffer = QtGui.QImage() self.m_dirty = False self.doc = QtSvg.QSvgRenderer(path, self) self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self.poluteImage)
def intrinsicSize(self, doc, posInDocument, format): renderer = QtSvg.QSvgRenderer( format.property(Window.SvgData).toByteArray()) size = renderer.defaultSize() if size.height() > 25: size *= 25.0 / size.height() return QtCore.QSizeF(size)
def load_svg(self, str_): xml = QtCore.QXmlStreamReader(str_) svg = QtSvg.QSvgRenderer(xml) w, h = svg.viewBoxF().size().toTuple() s = max((w, h, MIN_LOGICAL_SIZE)) self.contents = QtGui.QPixmap(s, s) painter = QtGui.QPainter(self.contents) painter.fillRect(0, 0, s, s, QtCore.Qt.white) svg.render(painter, QtCore.QRectF((s - w) / 2, (s - h) / 2, w, h)) painter.end()
def save_figure(scene, fname): suffix = os.path.splitext(fname)[-1] if suffix == '.svg': img = QtSvg.QSvgGenerator() img.setFileName(fname) invoke_painter(scene, img) else: img = QtGui.QImage(3000, 3000, QtGui.QImage.Format_ARGB32) invoke_painter(scene, img) img.save(fname)
def setFilePath(self, image_path=None): if not image_path: return logging.debug('Loading {} '.format(os.path.split(image_path)[-1])) self._svg = QtSvg.QSvgWidget(image_path) self._scene = QtGui.QGraphicsScene(self) self._scene.addWidget(self._svg) self.setScene(self._scene) self.setScale() self._loaded = True
def load(self, svgPath): if self.icon is None: self.icon = QtSvg.QSvgWidget(svgPath, self.centralWidget) self.icon.setFixedSize(self.size()) else: self.icon.load(svgPath) self.layoutBase = QtGui.QHBoxLayout(self) self.layoutBase.setSpacing(0) self.layoutBase.setContentsMargins(0, 0, 0, 0) self.layoutBase.addWidget(self.icon)
def __init__(self, *args): super(DimensioningRect, self).__init__(*args) svgRenderer = QtSvg.QSvgRenderer() self.action_ind = 0 self.dimPreview = QtSvg.QGraphicsSvgItem() self.dimSVGRenderer = QtSvg.QSvgRenderer() self.dimSVGRenderer.load( QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' % (args[2], args[3]))) self.dimPreview.setSharedRenderer(self.dimSVGRenderer) graphicsScene.addItem(self.dimPreview) self.dim_svg_KWs = dict( #svgTag='svg', svgParms='width="%i" height="%i"' % (args[2],args[3]), strokeWidth=1.0, arrowL1=10, arrowL2=4, arrowW=6, textRenderer=textRenderer, centerPointDia=4) self.svg_wrap = XML_SVG_Wrapper(args)
def prepareSVGWidget(self): svgWidget = QtSvg.QSvgWidget() content = QtCore.QByteArray(""" <svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='480' height='480'> <circle cx='320.0' cy='240.0' r='128' fill='rgb(0, 255, 255)' style='fill-opacity:.25'/> <circle cx='320.0' cy='240.0' r='128' fill='none' stroke='black'/> <circle cx='254.891453105' cy='335.850115412' r='111' fill='rgb(221, 34, 255)' style='fill-opacity:.25'/> <circle cx='254.891453105' cy='335.850115412' r='111' fill='none' stroke='black'/> <circle cx='140.39542436' cy='291.214534183' r='96' fill='rgb(255, 191, 64)' style='fill-opacity:.25'/> <circle cx='140.39542436' cy='291.214534183' r='96' fill='none' stroke='black'/> </svg> """) svgWidget.load(content) return svgWidget
def print_svg(self, svg_source): #logger.info(svg_source) svg_renderer = QtSvg.QSvgRenderer() svg_renderer.load(QtCore.QByteArray(svg_source)) logger.info('svg renderer') printer = QtGui.QPrinter() printer.setPageMargins(50, 250, 50, 250, QtGui.QPrinter.DevicePixel) print_dialog = QtGui.QPrintDialog(printer, self.app.view) print_dialog.setOption(QtGui.QAbstractPrintDialog.PrintToFile, True) print_dialog.setOption(QtGui.QAbstractPrintDialog.PrintPageRange, True) if print_dialog.exec_() == QtGui.QDialog.Accepted: painter = QtGui.QPainter() painter.begin(printer) svg_renderer.render(painter) painter.end()
def mousePressEvent(self, event): if self.action_ind == 0: return if event.button() == QtCore.Qt.MouseButton.LeftButton: #print( 'current action: %s' % self.actions[self.action_ind] ) pos = event.scenePos() x, y = pos.x(), pos.y() if self.action_ind == 1: self.point2 = x, y print('point2 set to x=%3.1f y=%3.1f' % (x, y)) self.action_ind = self.action_ind + 1 elif self.action_ind == 2: self.point3 = x, y print('point3 set to x=%3.1f y=%3.1f' % (x, y)) self.action_ind = self.action_ind + 1 else: #'placeDimensionText' self.point4 = x, y XML = circularDimensionSVG(self.point1[0], self.point1[1], self.radius, self.point2[0], self.point2[1], self.point3[0], self.point3[1], x, y, **self.dim_svg_KWs) self.action_ind = 0 self.radius = self.radius * 2 if XML != None: print(XML) newSvg = QtSvg.QGraphicsSvgItem() svgRenderer = QtSvg.QSvgRenderer() svgRenderer.load(QtCore.QByteArray(self.svg_wrap(XML))) newSvg.setSharedRenderer(svgRenderer) dimensions.append( [newSvg, svgRenderer] ) #as to prevent the garbage collector from freeing these resources (which causes a crash) self.scene().addItem(newSvg) elif event.button() == QtCore.Qt.MouseButton.RightButton: self.action_ind = self.action_ind - 1
def __init__(self, template): super(PageScene, self).__init__() brush = QtGui.QBrush(QtGui.QColor(100, 100, 100)) self.setBackgroundBrush(brush) self.clear() # Create drawing paper self.m_svgItem = QtSvg.QGraphicsSvgItem(template) self.m_svgItem.setFlags(QtGui.QGraphicsItem.ItemClipsToShape) self.m_svgItem.setCacheMode(QtGui.QGraphicsItem.NoCache) self.m_svgItem.setZValue(0) # Create paper background rect = self.m_svgItem.boundingRect() self.m_backgroundItem = QtGui.QGraphicsRectItem(rect) self.m_backgroundItem.setBrush(QtGui.QColor(255, 255, 255)) self.m_backgroundItem.setPen(QtCore.Qt.NoPen) self.m_backgroundItem.setZValue(-1) # Add items self.addItem(self.m_backgroundItem) self.addItem(self.m_svgItem)
def getSvgRenderer(self, printer=None): if not SVG: raise RuntimeError("QtSvg module missing. Please compile Qt with SVG support") return if sys.version < '3.0': import cStringIO as StringIO imgData = StringIO.StringIO() else: from io import BytesIO imgData = BytesIO() self.saveGraph(imgData, fileFormat='svg') imgData.flush() imgData.seek(0) svgRawData = imgData.read() svgRendererData = QtCore.QXmlStreamReader(svgRawData) svgRenderer = QtSvg.QSvgRenderer(svgRendererData) svgRenderer._svgRawData = svgRawData svgRenderer._svgRendererData = svgRendererData return svgRenderer
def export_svg(self, path): buf = QtCore.QBuffer() generator = QtSvg.QSvgGenerator() generator.setOutputDevice(buf) generator.setFileName(path) generator.setTitle('Pywr') # TODO: this doesn't work as expected rect = self.scene.itemsBoundingRect() generator.setSize(self.size()) generator.setResolution(300) #generator.setSize(QtCore.QSize(600, 400)) #generator.setViewBox(QtCore.QRect(0, 0, rect.width(), rect.height())) # paint the scene painter = QtGui.QPainter() painter.begin(generator) painter.setRenderHint(QtGui.QPainter.Antialiasing) self.scene.render(painter) painter.end()
def buildImages(self): paths = glob.glob(os.path.join(os.path.dirname(self.metaImageset.filePath), self.path)) images = [] for path in paths: pathSplit = path.rsplit(".", 1) name = os.path.basename(pathSplit[0]) svgRenderer = QtSvg.QSvgRenderer(path) qimage = QtGui.QImage(svgRenderer.defaultSize().width(), svgRenderer.defaultSize().height(), QtGui.QImage.Format_ARGB32) qimage.fill(0) painter = QtGui.QPainter() painter.begin(qimage) svgRenderer.render(painter) painter.end() image = inputs.Image(name, qimage, self.xOffset, self.yOffset) images.append(image) return images
def prepareImage(self): # vytvoření instance třídy QImage self.image = QtGui.QImage(MainWindow.IMAGE_WIDTH, MainWindow.IMAGE_HEIGHT, QtGui.QImage.Format_RGB32) # vytvoření objektu typu QPainter s předáním # reference na "pokreslovaný" objekt qp = QtGui.QPainter(self.image) # nastavení barvy kreslení qp.setPen(QtGui.QColor(64, 255, 64)) # vykreslení úsečky qp.drawLine(10, 10, MainWindow.IMAGE_WIDTH - 10, MainWindow.IMAGE_HEIGHT - 10) renderer = QtSvg.QSvgRenderer("logo.svg") renderer.render(qp) # vytvoření instance třídy QPixmap z objektu QImage self.pixmap = QtGui.QPixmap.fromImage(self.image)