def populateTreeItem(addToBeamClickText, item, element): item.setText(0, element.name) item.setText(1, element.displayLine()) item.setText(2, displayWithUnitsNumber(roundSigFig(element.getLength(), 4), 'm')) item.setText(3, displayWithUnitsNumber(roundSigFig(element.getDisplacement(), 4), 'm')) item.setText(4, str(roundSigFig(convertUnitsNumber(element.getAngle(), 'rad', 'deg'), 4))+' deg') item.setText(5, str(element.getNumberOfElements()) if element.isBeamline() else '') item.setText(6, addToBeamClickText) item.setForeground(6, rt_qt.QtCore.Qt.blue) font = item.font(6) font.setBold(True) font.setUnderline(True) item.setFont(6, font)
def drawLengthScale(self): if self.ui.graphicsView.scene() is None or len(self.ui.graphicsView.scene().items()) == 0: return self.removeLengthScale() vis = self.visibleSceneRect() # Determine a reasonable length to display length = 1.0 # meter widthFraction = 0.25 # maximum length of legend w.r.t. preview window resolution = self.classDictionary.values()[0]().getResolution() while length*resolution < float(vis.width())*widthFraction: length = length*10.0 while length*resolution > float(vis.width())*widthFraction: length = length/10.0 textItem = rt_qt.QtGui.QGraphicsTextItem(displayWithUnitsNumber(length, 'm')) pixLength = int(length*resolution) if pixLength < 1: return # line showing length given by textItem try: rightEnd = rt_qt.QtCore.QPoint(vis.right()-vis.width()/10, vis.bottom()-vis.height()/10) except OverflowError: self.zoomPreview(1) return leftEnd = rightEnd - rt_qt.QtCore.QPoint(pixLength,0) self.lengthLegend.append(rt_qt.QtGui.QGraphicsLineItem(leftEnd.x(), leftEnd.y(), rightEnd.x(), rightEnd.y())) endHeight = int(20.0/self.zoomScale) # constant-height despite zooming if endHeight <= 0: self.zoomPreview(-1) return # left upright bracket self.lengthLegend.append(rt_qt.QtGui.QGraphicsLineItem(leftEnd.x(), leftEnd.y()+endHeight, leftEnd.x(), leftEnd.y()-endHeight)) # right upright bracket self.lengthLegend.append(rt_qt.QtGui.QGraphicsLineItem(rightEnd.x(), rightEnd.y()+endHeight, rightEnd.x(), rightEnd.y()-endHeight)) # Scale textItem so it always appears the same size textItem.translate(rightEnd.x(), rightEnd.y() - textItem.boundingRect().height()/(2*self.zoomScale)) textItem.scale(1.0/self.zoomScale, 1.0/self.zoomScale) self.lengthLegend.append(textItem) for item in self.lengthLegend: self.ui.graphicsView.scene().addItem(item)