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())
示例#6
0
 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"))
示例#7
0
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')
示例#9
0
 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
示例#12
0
 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)
示例#13
0
    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)
示例#14
0
    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())
示例#15
0
    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()