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 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 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 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, 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 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,*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, 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 __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 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 openFile(self,path_top, path_bot): self.svg_item_bot = QtSvg.QGraphicsSvgItem(path_bot) self.svg_item_top = QtSvg.QGraphicsSvgItem(path_top) self.scene.addItem(self.svg_item_bot); self.scene.addItem(self.svg_item_top); self.setCursor(QtCore.Qt.CrossCursor)
def __init__(self, parent): super(MdiTable, self).__init__(parent) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.setWindowTitle(self.tr('Table titilonius')) #self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) self.setMinimumHeight(200) self.pic = QtGui.QPixmap('./data/gfx/table/default/table.png') scene = QtGui.QGraphicsScene(self) scene.setBackgroundBrush(parent.mdiArea.background()) #seat = scene.addPixmap(self.pic) seat = Interactable(self.pic, self) seat.setTransformationMode(QtCore.Qt.SmoothTransformation) scene.addItem(seat) self.disppic = scene.items()[0] #self.view = QtGui.QGraphicsView() self.view = NonScrollGraphicsView() self.view.setScene(scene) self.view.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.view.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.view.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.setWidget(self.view) #scroll = ScrollEater(self.view) #self.view.installEventFilter(scroll) #self.view.clearFocus() #self.view.setFocusPolicy(QtCore.Qt.NoFocus) #self.seat = QtGui.QPixmap('./data/gfx/table/default/seat_empty.png') self.seat_boy = QtGui.QPixmap('./data/gfx/table/default/boy.png') self.seat_girl = QtGui.QPixmap('./data/gfx/table/default/girl.png') self.seat_custom = QtGui.QPixmap('./data/gfx/table/default/custom-avatar.png') #avatarPositions = [(610, 100), (620, 200), (510, 290), (330, 290), (140, 290), (30, 200), (60, 100), (240, 60), (430, 60), (80, 80)] avatarPositions = [ (600, 38), (660, 170), (485, 360), (270, 360), (100, 327), (42, 168), (81, 77), (290, 20), (400, 20), (628, 319)] #avatarPositions = [(40, 170), (470, 280), (200, 280), (630, 170), (200, 40), (470, 40)] self.allSeats = [] for p in avatarPositions: #for p in []: choice = random.randint(0,2) if choice == 0: seat = scene.addPixmap(self.seat_boy) elif choice == 1: seat = scene.addPixmap(self.seat_girl) else: seat = scene.addPixmap(self.seat_custom) seat.setTransformationMode(QtCore.Qt.SmoothTransformation) seat.setFlags(seat.ItemIsMovable) seat.setPos(*p) self.allSeats.append(seat) #seat = scene.addPixmap(self.seat) """seat.setPos(80,220) seat.setTransformationMode(QtCore.Qt.SmoothTransformation) seat = scene.addPixmap(self.seat) seat.setPos(60,30) seat.setTransformationMode(QtCore.Qt.SmoothTransformation) seat = scene.addPixmap(self.seat) seat.setPos(20,120) seat.setTransformationMode(QtCore.Qt.SmoothTransformation) seat = scene.addPixmap(self.seat) seat.setPos(460,120) seat.setTransformationMode(QtCore.Qt.SmoothTransformation)""" self.other = QtGui.QPixmap('./data/gfx/table/default/other_cards.png') #positions = [(610, 120), (620, 200), (510, 290), (330, 290), (140, 290), (100, 210), (120, 120), (280, 110), (480, 110)] positions = [(625, 210), (250, 80), (250, 320), (100, 210), (470, 80)] self.allCards = [] #for p in positions: for p in []: #other = Interactable(self.other, self) other = scene.addPixmap(self.other) other.setTransformationMode(QtCore.Qt.SmoothTransformation) other.setFlags(other.ItemIsMovable) other.setPos(*p) self.allCards.append(other) #scene.addItem(other) """other = scene.addPixmap(self.other) other.setPos(80, 130) other.setTransformationMode(QtCore.Qt.SmoothTransformation) other = scene.addPixmap(self.other) other.setPos(120, 200) other.setTransformationMode(QtCore.Qt.SmoothTransformation) other = scene.addPixmap(self.other) other.setPos(440, 120) other.setTransformationMode(QtCore.Qt.SmoothTransformation) #other = scene.addPixmap(self.other) other = Interactable(self.other) other.setPos(380, 50) other.setTransformationMode(QtCore.Qt.SmoothTransformation) scene.addItem(other)""" font = QtGui.QFont('Lucida Sans') font.setPointSize(10) font1 = QtGui.QFont('Lucida Sans') font1.setPointSize(10) font1.setWeight(QtGui.QFont.Black) brush = QtGui.QLinearGradient() brush.setColorAt(0, QtCore.Qt.white) #brush = QtGui.QBrush() #brush.setColor(QtCore.Qt.white) pen = QtGui.QPen() pen.setWidth(0) pen.setStyle(QtCore.Qt.NoPen) names = [ "Tracy", "Genjix", "derp-derp", "KibKibKib", "Tracy", "Genjix", "derp-derp", "KibKibKib", "drawingfishe", "scribl"] stacks = [ '1200 btc', '8000 btc', '100 btc', '9112 btc', '1200 btc', '8000 btc', '100 btc', '9112 btc', '7654 btc', '400 btc'] playbox = QtGui.QPixmap('./data/gfx/table/default/playerbox.png') self.allPlayboxes = [] playboxPositions = [ (377, 380), (652, 257), (638, 123), (260, 443), (580, 407), (85, 412), (31, 261), (180, 13), (493, 46), (21, 30)] for p in playboxPositions: path = QtGui.QPainterPath() play = scene.addPixmap(playbox) play.setFlags(play.ItemIsMovable) self.allPlayboxes.append(play) p = [p[0], p[1]] play.setPos(p[0], p[1]) p[0] += 10 p[1] += 4 p = p[0], p[1] + 12 path.addText(QtCore.QPointF(p[0], p[1]), font, names.pop()) p = p[0], p[1] + 15 path.addText(QtCore.QPointF(p[0], p[1]), font1, stacks.pop()) scene.addPath(path, pen, brush) ranks = "23456789tjqka" suits = "hdcs" deck = [rank + suit for rank in ranks for suit in suits] deckGraphics = [QtSvg.QGraphicsSvgItem('./data/gfx/cards/replixanax/%s.svg'%card) for card in deck] random.shuffle(deckGraphics) for i in range(5): card = deckGraphics.pop() scene.addItem(card) card.setScale(0.8) card.setPos(280 + 50*i, 175) for p in avatarPositions: card = deckGraphics.pop() scene.addItem(card) card.setScale(0.8) p = p[0] - 10, p[1] - 5 card.setPos(p[0], p[1]) card = deckGraphics.pop() scene.addItem(card) card.setScale(0.8) p = p[0] + 22, p[1] + 10 card.setPos(p[0], p[1]) chips = [ QtGui.QPixmap('./data/gfx/chips/default/chip0001.png'), QtGui.QPixmap('./data/gfx/chips/default/chip000025.png'), QtGui.QPixmap('./data/gfx/chips/default/chip000005.png')] def addchip(chip, scene, pos): other = scene.addPixmap(chip) other.setTransformationMode(QtCore.Qt.SmoothTransformation) other.setFlags(other.ItemIsMovable) other.setPos(*pos) start = 260 off = 6 addchip(chips[0], scene, (300, start)) addchip(chips[0], scene, (300, start - off)) addchip(chips[0], scene, (300, start - 2*off)) addchip(chips[0], scene, (300, start - 3*off)) addchip(chips[0], scene, (300, start - 4*off)) addchip(chips[1], scene, (330, start)) addchip(chips[1], scene, (330, start - off)) addchip(chips[1], scene, (330, start - 2*off)) addchip(chips[2], scene, (360, start)) self.wgt = QtGui.QWidget() hbox = QtGui.QHBoxLayout() hbox.addStretch() fold = QtGui.QPushButton('Fold') fold.setObjectName('FoldBtn') #fold.setStyleSheet('background-color: #1169a4; width: 80px; font-size: 10pt; font-weight: bold; color: white;') fold.setCheckable(True) fold.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) hbox.addWidget(fold) call = QtGui.QPushButton('Call\n$1') call.setObjectName('CallBtn') #call.setStyleSheet('background-color: #1169a4; width: 80px; font-size: 10pt; font-weight: bold; color: white;') call.setCheckable(True) call.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) hbox.addWidget(call) hbox.addSpacing(20) rai = QtGui.QPushButton('Raise\n$2') rai.setObjectName('RaiseBtn') #rai.setStyleSheet('background-color: #1169a4; color: #ddf; width: 80px; height: 50px; font-size: 10pt; font-weight: bold;') rai.setCheckable(True) rai.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum) hbox.addWidget(rai) self.edit = QtGui.QLineEdit() self.edit.setValidator(QtGui.QDoubleValidator(0.0, -1.0, 2, self.edit)) self.edit.setMaximumSize(60,28) self.edit.setText('1') #hbox.addWidget(self.edit, 0.2) self.slider = QtGui.QSlider(QtCore.Qt.Vertical) self.slider.setTickPosition(self.slider.TicksBelow) #self.slider.setStyleSheet('background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);') self.slider.valueChanged.connect(self.sliderMoved) self.edit.textChanged.connect(self.textChanged) #hbox.addWidget(self.slider) self.wgt.resize(500,100) #self.btn = QtGui.QPushButton('play') #self.btn.setAttribute(QtCore.Qt.WA_NoSystemBackground) self.wgt.setAttribute(QtCore.Qt.WA_NoSystemBackground) vboxnum = QtGui.QVBoxLayout() vboxnum.addStretch() vboxnum.addWidget(self.edit) hboxslider = QtGui.QHBoxLayout() hboxslider.addStretch() hboxslider.addLayout(vboxnum) hboxslider.addWidget(self.slider) vbox = QtGui.QVBoxLayout(self.wgt) #vbox.addStretch() vbox.addLayout(hboxslider) vbox.addLayout(hbox) size = self.pic.size() self.wgt.resize(size.width(), size.height()) if QtCore.QDir.setCurrent('./data/gfx/table/default/'): self.wgt.setStyleSheet(str(common.loadStyleSheet('style.css'))) QtCore.QDir.setCurrent('../../../../') scene.addWidget(self.wgt) self.view.setRenderHints(QtGui.QPainter.Antialiasing|QtGui.QPainter.SmoothPixmapTransform)
def __init__(self): selected = FreeCADGui.Selection.getSelectionEx() # Check selection if len(selected) == 1: selected = selected[0] self.selected = selected else: FreeCAD.Console.PrintError("Multipart selection not available.") self.reject() if not selected.HasSubObjects: FreeCAD.Console.PrintError("Part selected not feature.") self.reject() elif not len(selected.SubObjects) == 1: FreeCAD.Console.PrintError("Multifeature selection not available") self.reject() # Choices related to selection so_desc = ARTools.describeSubObject(selected.SubObjects[0]) self.so_desc = so_desc shape_choices = { "Vertex": [], "Edge": ["PointOnEdge"], "Face": ["PointOnSurface"] } prim_choices = { "ArcOfCircle": ["Center"], "ArcOfEllipse": ["Center"], "ArcOfHyperBola": ["Center"], "ArcOfParabola": ["Center"], "BSplineCurve": ["Center"], "BezierCurve": ["Center"], "Circle": ["Center"], "Ellipse": ["Center"], "Hyperbola": ["Center"], "Parabola": ["Center"], "Line": [], "BSplineSurface": ["Center"], "BezierSurface": ["Center"], "Cylinder": ["PointOnCenterline"], "Plane": ["Center"], "Sphere": ["Center"], "Toroid": ["Center"], "Cone": ["PointOnCenterline"] } self.choices = ["PickedPoint"] self.choices = self.choices + shape_choices[so_desc[1]] self.choices = self.choices + prim_choices[so_desc[0]] # Setting up QT form uiform_path = os.path.join(uidir, "FeatureFrameCreator.ui") self.form = FreeCADGui.PySideUic.loadUi(uiform_path) self.form.ChoicesBox.addItems(self.choices) self.form.PickedTypeLabel.setText(so_desc[0]) QtCore.QObject.connect(self.form.ChoicesBox, QtCore.SIGNAL("currentIndexChanged(QString)"), self.choiceChanged) self.scenes = {} for choice in self.choices: sc = QtGui.QGraphicsScene() icon = str(os.path.join(icondir, choice + ".svg")) sc.addItem(QtSvg.QGraphicsSvgItem(icon)) self.scenes[choice] = sc self.choiceChanged(self.form.ChoicesBox.currentText())
def openMap(self, svg_map): s = self.scene() s.map = svg_map # If the map doesn't contain information about the map's scale or north angle if s.map.pixel_per_mm is None: s.setMapScale() if s.map.north_angle is None: s.setMapNorthAngle() s.path = None s.graphicalPath = None # We remove the current view from the car's model s.car.removeView(s.graphicCar) if self.backgroundItem: drawBackground = self.backgroundItem.isVisible() else: drawBackground = True s.clear() # Graphic visualization of the SVG map self.svgItem = QtSvg.QGraphicsSvgItem(svg_map.path) self.svgItem.setFlags(QGraphicsItem.ItemClipsToShape) self.svgItem.setZValue(0) s.addItem(self.svgItem) # The svg item's height: s.width = self.svgItem.boundingRect().width() s.height = self.svgItem.boundingRect().height() # Background (blueprint image) self.backgroundItem = QGraphicsRectItem(self.svgItem.boundingRect()) self.backgroundItem.setBrush(QImage("img/blueprint.png")) self.backgroundItem.setPen(QPen()) self.backgroundItem.setVisible(drawBackground) self.backgroundItem.setZValue(-1) self.backgroundItem.setCacheMode(QGraphicsItem.ItemCoordinateCache) s.addItem(self.backgroundItem) # Shadow effect on the background # TODO : See why this is *so* slow when we zoom in ? # self.shadow = QGraphicsDropShadowEffect() # self.shadow.setBlurRadius(50) # self.shadow.setColor( QColor(20, 20, 40) ) # self.shadow.setOffset(0, 0) # self.backgroundItem.setGraphicsEffect( self.shadow ) # Title text self.titleItem = QGraphicsTextItem("Autonomee visualization UI") self.titleItem.setFont(QFont("Ubuntu-L.ttf", 35, QFont.Light)) # 'Dirty' centering of the text self.titleItem.setPos(s.width/2 - self.titleItem.boundingRect().width()/2, 5) self.titleItem.setDefaultTextColor(QColor(210, 220, 250)) s.addItem(self.titleItem) # Drop shadow on the text self.textShadow = QGraphicsDropShadowEffect() self.textShadow.setBlurRadius(3) self.textShadow.setColor(QColor(20, 20, 40)) self.textShadow.setOffset(1, 1) self.titleItem.setGraphicsEffect(self.textShadow) # Compass showing the map's orientation # angle = s.map.north_angle if s.map.north_angle is not None else 0. # s.graphicCompass = MapCompass(angle) # s.graphicCompass.setPos(s.width - 80, 60) # s.addItem(s.graphicCompass) # We initialize the path's visualization s.graphicalPath = QGraphicsPathItem() pen = QPen() pen.setColor(QColor(180, 200, 240)) pen.setWidth(3) pen.setMiterLimit(10) pen.setJoinStyle(Qt.RoundJoin) space = 4 pen.setDashPattern([8, space, 1, space]) s.graphicalPath.setPen(pen) s.graphicalPath.setOpacity(0.8) s.graphicalPath.setZValue(-1) s.addItem(s.graphicalPath) # Car visualization s.car.map = s.map s.graphicCar = GraphicsCarItem(s.car) s.addItem(s.graphicCar) # Heatmap if s.particleFilter is None: s.particleFilter = ParticleFilter(car=s.car, map=s.map) else: s.particleFilter.reset() s.particleFilter.setMap(s.map) s.heatmap = GraphicalParticleFilter(s.particleFilter) s.heatmap.setVisible(False) s.addItem(s.heatmap) # Waypoints s.waypoints = list() self.x = 0 self.y = 0 self.updateScene()