def get_color(self, color, intensity=0): """ Returns a QColor for a given color code or rgb list, or None if one cannot be constructed. """ if isinstance(color, int): # Adjust for intensity, if possible. if color < 8 and intensity > 0: color += 8 constructor = self.color_map.get(color, None) elif isinstance(color, (tuple, list)): constructor = color else: return None if isinstance(constructor, string_types): # If this is an X11 color name, we just hope there is a close SVG # color name. We could use QColor's static method # 'setAllowX11ColorNames()', but this is global and only available # on X11. It seems cleaner to aim for uniformity of behavior. return QtGui.QColor(constructor) elif isinstance(constructor, (tuple, list)): return QtGui.QColor(*constructor) return None
def _get_color(self, color): """ Returns a QColor built from a Pygments color string. """ qcolor = QtGui.QColor() qcolor.setRgb(int(color[:2], base=16), int(color[2:4], base=16), int(color[4:6], base=16)) return qcolor
def drawLabelAtMouse(self, qp): # Nothing to do without a highlighted object if not self.highlightObj: return # Nothing to without a mouse position if not self.mousePosOrig: return # Save QPainter settings to stack qp.save() # That is the mouse positiong mouse = self.mousePosOrig # Will show zoom showZoom = self.zoom and not self.image.isNull() and self.w and self.h # The text that is written next to the mouse mouseText = self.highlightObj.label # Where to write the text # Depends on the zoom (additional offset to mouse to make space for zoom?) # The location in the image (if we are at the top we want to write below of the mouse) off = 36 if showZoom: off += self.zoomSize / 2 if mouse.y() - off > self.toolbar.height(): top = mouse.y() - off btm = mouse.y() vAlign = QtCore.Qt.AlignTop else: # The height of the cursor if not showZoom: off += 20 top = mouse.y() btm = mouse.y() + off vAlign = QtCore.Qt.AlignBottom # Here we can draw rect = QtCore.QRect() rect.setTopLeft(QtCore.QPoint(mouse.x() - 200, top)) rect.setBottomRight(QtCore.QPoint(mouse.x() + 200, btm)) # The color qp.setPen(QtGui.QColor('white')) # The font to use font = QtGui.QFont("Helvetica", 20, QtGui.QFont.Bold) qp.setFont(font) # Non-transparent qp.setOpacity(1) # Draw the text, horizontally centered qp.drawText(rect, QtCore.Qt.AlignHCenter | vAlign, mouseText) # Restore settings qp.restore()
def __init__(self, text_edit): """ Create a call tip manager that is attached to the specified Qt text edit widget. """ assert isinstance(text_edit, (QtGui.QTextEdit, QtGui.QPlainTextEdit)) super(BracketMatcher, self).__init__() # The format to apply to matching brackets. self.format = QtGui.QTextCharFormat() self.format.setBackground(QtGui.QColor('silver')) self._text_edit = text_edit text_edit.cursorPositionChanged.connect(self._cursor_position_changed)
def drawBboxes(self, qp, ignore=[]): if self.image.isNull() or self.w == 0 or self.h == 0: return if not self.annotation: return # The overlay is created in the viewing coordinates # This way, the drawing is more dense and the polygon edges are nicer # We create an image that is the overlay # Within this image we draw using another QPainter # Finally we use the real QPainter to overlay the overlay-image on what is drawn so far # The image that is used to draw the overlays overlay = QtGui.QImage(self.w, self.h, QtGui.QImage.Format_ARGB32_Premultiplied) # Fill the image col = QtGui.QColor(0, 0, 0, 0) overlay.fill(col) # Create a new QPainter that draws in the overlay image qp2 = QtGui.QPainter() qp2.begin(overlay) # Draw all objects for obj in self.annotation.objects: bbox, bboxVis = self.getBoundingBox(obj) bboxToDraw = self.scaleBoundingBox(bbox) bboxVisToDraw = self.scaleBoundingBox(bbox) # The label of the object name = obj.label # If we do not know a color for this label, warn the user if name not in name2labelCp: print( "The annotations contain unknown labels. This should not happen. Please inform the datasets authors. Thank you!") print("Details: label '{}', file '{}'".format(name, self.currentLabelFile)) continue # Reset brush for QPainter object qp2.setBrush(QtGui.QBrush()) # Color from color table col = QtGui.QColor(*name2labelCp[name].color) if name2labelCp[name].hasInstances: if self.highlightObj and obj == self.highlightObj: pen = QtGui.QPen(QtGui.QBrush(col), 5.0) else: pen = QtGui.QPen(QtGui.QBrush(col), 3.0) qp2.setPen(pen) qp2.setOpacity(1.0) qp2.drawRect(bboxToDraw) if self.highlightObj and obj == self.highlightObj: pen = QtGui.QPen(QtGui.QBrush(col), 3.0, style=QtCore.Qt.DotLine) qp2.setPen(pen) qp2.setOpacity(1.0) qp2.drawRect(bboxVisToDraw) else: pen = QtGui.QPen(QtGui.QBrush(col), 1.0, style=QtCore.Qt.DashLine) qp2.setPen(pen) qp2.setOpacity(1.0) qp2.drawRect(bboxVisToDraw) qp2.setBrush(QtGui.QBrush(col, QtCore.Qt.SolidPattern)) qp2.setOpacity(0.4) qp2.drawRect(bboxVisToDraw) else: if self.highlightObj and obj == self.highlightObj: pen = QtGui.QPen(QtGui.QBrush(col), 3.0) qp2.setPen(pen) qp2.setBrush(QtGui.QBrush(col, QtCore.Qt.NoBrush)) else: pen = QtGui.QPen(QtGui.QBrush(col), 1.0) qp2.setPen(pen) qp2.setBrush(QtGui.QBrush(col, QtCore.Qt.DiagCrossPattern)) qp2.setOpacity(1.0) qp2.drawRect(bboxToDraw) # End the drawing of the overlay qp2.end() # Save QPainter settings to stack qp.save() # Define transparency qp.setOpacity(self.transp) # Draw the overlay image qp.drawImage(self.xoff, self.yoff, overlay) # Restore settings qp.restore() return overlay
def drawLabels(self, qp, ignore=[]): if self.image.isNull() or self.w == 0 or self.h == 0: return if not self.annotation: return # The overlay is created in the viewing coordinates # This way, the drawing is more dense and the polygon edges are nicer # We create an image that is the overlay # Within this image we draw using another QPainter # Finally we use the real QPainter to overlay the overlay-image on what is drawn so far # The image that is used to draw the overlays overlay = QtGui.QImage(self.w, self.h, QtGui.QImage.Format_ARGB32_Premultiplied) # Fill the image with the default color defaultLabel = name2label[self.defaultLabel] col = QtGui.QColor(*defaultLabel.color) overlay.fill(col) # Create a new QPainter that draws in the overlay image qp2 = QtGui.QPainter() qp2.begin(overlay) # The color of the outlines qp2.setPen(QtGui.QColor('white')) # Draw all objects for obj in self.annotation.objects: # The label of the object name = assureSingleInstanceName(obj.label) # If we do not know a color for this label, warn the user if name not in name2label: print( "The annotations contain unkown labels. This should not happen. Please inform the datasets authors. Thank you!") print("Details: label '{}', file '{}'".format(name, self.currentLabelFile)) continue poly = self.getPolygon(obj) # Scale the polygon properly polyToDraw = poly * QtGui.QTransform.fromScale(self.scale, self.scale) # Default drawing # Color from color table, solid brush col = QtGui.QColor(*name2label[name].color) brush = QtGui.QBrush(col, QtCore.Qt.SolidPattern) qp2.setBrush(brush) # Overwrite drawing if this is the highlighted object if self.highlightObj and obj == self.highlightObj: # First clear everything below of the polygon qp2.setCompositionMode(QtGui.QPainter.CompositionMode_Clear) qp2.drawPolygon(polyToDraw) qp2.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver) # Set the drawing to a special pattern brush = QtGui.QBrush(col, QtCore.Qt.DiagCrossPattern) qp2.setBrush(brush) qp2.drawPolygon(polyToDraw) # Draw outline of selected object dotted if self.highlightObj: brush = QtGui.QBrush(QtCore.Qt.NoBrush) qp2.setBrush(brush) qp2.setPen(QtCore.Qt.DashLine) polyToDraw = self.getPolygon(self.highlightObj) * QtGui.QTransform.fromScale(self.scale, self.scale) qp2.drawPolygon(polyToDraw) # End the drawing of the overlay qp2.end() # Save QPainter settings to stack qp.save() # Define transparency qp.setOpacity(self.transp) # Draw the overlay image qp.drawImage(self.xoff, self.yoff, overlay) # Restore settings qp.restore() return overlay