def __init__(self, logger, ev_quit): # call superclass constructors--sets self.app QtMain.QtMain.__init__(self, logger=logger, ev_quit=ev_quit) if os.path.exists(rc_file): self.app.setStyleSheet(rc_file) # Get screen size desktop = self.app.desktop() #rect = desktop.screenGeometry() rect = desktop.availableGeometry() size = rect.size() self.screen_wd = size.width() self.screen_ht = size.height() # defaults for height and width self.default_height = min(900, self.screen_ht - 100) self.default_width = min(1600, self.screen_wd) self.w = Bunch.Bunch() self.iconpath = icon_path self.font = QtGui.QFont('Monospace', 12) self.font11 = QtGui.QFont('Monospace', 11) self.font14 = QtGui.QFont('Monospace', 14) self.w.tooltips = None QtGui.QToolTip.setFont(self.font11)
def build_gui(self, container): rvbox = container self.msgFont = QtGui.QFont("Fixed", 14) tw = QtGui.QTextEdit() #tw.setLineWrapMode(??) ## tw.set_left_margin(4) ## tw.set_right_margin(4) tw.setReadOnly(True) ## tw.set_left_margin(4) ## tw.set_right_margin(4) tw.setCurrentFont(self.msgFont) self.tw = tw self.history = [] self.histmax = 10 sw = QtGui.QScrollArea() sw.setWidgetResizable(True) #sw.set_border_width(2) sw.setWidget(self.tw) rvbox.addWidget(sw, stretch=1) sw.show() self.entry = QtGui.QLineEdit() rvbox.addWidget(self.entry, stretch=0) self.entry.returnPressed.connect(self.command_cb)
def draw(self): cx1, cy1 = self.canvascoords(self.x1, self.y1) cx2, cy2 = self.canvascoords(self.x2, self.y2) cx3, cy3 = self.canvascoords(self.x3, self.y3) cr = self.setup_cr() # draw North line and arrowhead cr.pen().setCapStyle(QtCore.Qt.RoundCap) cr.drawLine(cx1, cy1, cx2, cy2) self.draw_arrowhead(cr, cx1, cy1, cx2, cy2) # draw East line and arrowhead cr.drawLine(cx1, cy1, cx3, cy3) self.draw_arrowhead(cr, cx1, cy1, cx3, cy3) # draw "N" & "E" if not self.fontsize: fontsize = self.scale_font() else: fontsize = self.fontsize cr.setFont(QtGui.QFont('Sans Serif', pointSize=fontsize)) cx, cy = self.get_textpos(cr, 'N', cx1, cy1, cx2, cy2) cr.drawText(cx, cy, 'N') cx, cy = self.get_textpos(cr, 'E', cx1, cy1, cx3, cy3) cr.drawText(cx, cy, 'E') if self.cap: self.draw_caps(cr, self.cap, ((cx1, cy1), ))
def draw(self): cpoints = map(lambda p: self.canvascoords(p[0], p[1]), ((self.x1, self.y1), (self.x2, self.y1), (self.x2, self.y2), (self.x1, self.y2))) #qpoints = map(lambda p: QtCore.QPoint(p[0], p[1]), cpoints) qpoints = map(lambda p: QtCore.QPoint(p[0], p[1]), cpoints + [cpoints[0]]) qpoly = QtGui.QPolygon(qpoints) cr = self.setup_cr() cr.drawPolygon(qpoly) if self.cap: self.draw_caps(cr, self.cap, cpoints) if self.drawdims: fontsize = self.scale_font() cr.setFont(QtGui.QFont(self.font, pointSize=fontsize)) cx1, cy1 = cpoints[0] cx2, cy2 = cpoints[2] # draw label on X dimension cx = cx1 + (cx2 - cx1) // 2 cy = cy2 + -4 cr.drawText(cx, cy, "%d" % (self.x2 - self.x1)) # draw label on Y dimension cy = cy1 + (cy2 - cy1) // 2 cx = cx2 + 4 cr.drawText(cx, cy, "%d" % (self.y2 - self.y1))
def draw(self): cx, cy = self.canvascoords(self.x, self.y) cr = self.setup_cr() if not self.fontsize: fontsize = self.scale_font() else: fontsize = self.fontsize cr.setFont(QtGui.QFont(self.font, pointSize=fontsize)) cr.drawText(cx, cy, self.text)
def build_gui(self, container): sw = QtGui.QScrollArea() twidget = QtHelp.VBox() sp = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) twidget.setSizePolicy(sp) vbox1 = twidget.layout() vbox1.setContentsMargins(4, 4, 4, 4) vbox1.setSpacing(2) sw.setWidgetResizable(True) sw.setWidget(twidget) msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) fr = QtHelp.Frame("HDU") captions = [("Num HDUs", 'label'), ("Choose HDU", 'spinbutton')] w, b = QtHelp.build_info(captions) self.w.update(b) self.w.numhdu = b.num_hdus self.w.hdu = b.choose_hdu self.w.hdu.valueChanged.connect(self.set_hdu_cb) fr.layout().addWidget(w, stretch=1, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) fr = QtHelp.Frame("NAXIS") self.stack = QtHelp.StackedWidget() self.stack.addWidget(QtGui.QLabel('')) fr.layout().addWidget(self.stack, stretch=1, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) btns = QtHelp.HBox() layout = btns.layout() layout.setSpacing(3) #btns.set_child_size(15, -1) btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft) container.addWidget(sw, stretch=1)
def build_gui(self, container): sw = QtGui.QScrollArea() twidget = QtHelp.VBox() sp = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) twidget.setSizePolicy(sp) vbox1 = twidget.layout() vbox1.setContentsMargins(4, 4, 4, 4) vbox1.setSpacing(2) sw.setWidgetResizable(True) sw.setWidget(twidget) msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) fr = QtHelp.Frame("Ruler") captions = (('Units', 'combobox'), ) w, b = QtHelp.build_info(captions) self.w = b combobox = b.units for name in self.unittypes: combobox.addItem(name) index = self.unittypes.index(self.units) combobox.setCurrentIndex(index) combobox.activated.connect(self.set_units) fr.layout().addWidget(w, stretch=1, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) btns = QtHelp.HBox() layout = btns.layout() layout.setSpacing(3) #btns.set_child_size(15, -1) btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft) container.addWidget(sw, stretch=1)
def __init__(self, logger=None, settings=None, render=None): #super(FitsImageQt, self).__init__(logger=logger, settings=settings) FitsImage.FitsImageBase.__init__(self, logger=logger, settings=settings) if render == None: render = 'widget' self.wtype = render if self.wtype == 'widget': self.imgwin = RenderWidget() elif self.wtype == 'scene': self.scene = QtGui.QGraphicsScene() self.imgwin = RenderGraphicsView(self.scene) else: raise FitsImageQtError("Undefined render type: '%s'" % (render)) self.imgwin.fitsimage = self self.pixmap = None self.message = None self.msgtimer = QtCore.QTimer() # QtCore.QObject.connect(self.msgtimer, QtCore.SIGNAL("timeout()"), # self.onscreen_message_off) self.msgtimer.timeout.connect(self.onscreen_message_off) self.msgfont = QtGui.QFont('Sans Serif', pointSize=24) self.set_bg(0.5, 0.5, 0.5, redraw=False) self.set_fg(1.0, 1.0, 1.0, redraw=False) # cursors self.cursor = {} # optimization of redrawing self.defer_redraw = True self.defer_lagtime = 25 self._defer_whence = 0 self._defer_lock = threading.RLock() self._defer_flag = False # self._defer_task = None self._defer_task = QtCore.QTimer() self._defer_task.setSingleShot(True) self._defer_task.timeout.connect(self._redraw) self.t_.setDefaults(show_pan_position=False)
def build_gui(self, container): # Splitter is just to provide a way to size the graph # to a reasonable size vpaned = QtGui.QSplitter() vpaned.setOrientation(QtCore.Qt.Vertical) # Make the cuts plot twidget = QtHelp.VBox() vbox1 = twidget.layout() vbox1.setContentsMargins(4, 4, 4, 4) vbox1.setSpacing(2) msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) self.plot = Plot.Cuts(self.logger) w = self.plot.get_widget() vbox1.addWidget(w, stretch=1, alignment=QtCore.Qt.AlignTop) hbox = QtHelp.HBox() hbox.setSpacing(4) # control for selecting a cut combobox = QtHelp.ComboBox() for tag in self.tags: combobox.append_text(tag) if self.cutstag == None: combobox.setCurrentIndex(0) else: combobox.show_text(self.cutstag) combobox.activated.connect(self.cut_select_cb) self.w.cuts = combobox combobox.setToolTip("Select a cut") hbox.addWidget(combobox) btn = QtGui.QPushButton("Delete") btn.clicked.connect(self.delete_cut_cb) btn.setToolTip("Delete selected cut") hbox.addWidget(btn) btn = QtGui.QPushButton("Delete All") btn.clicked.connect(self.delete_all) btn.setToolTip("Clear all cuts") hbox.addWidget(btn) ## btn = QtGui.CheckBox("Move together") ## #btn.stateChanged.connect(self.movetogether_cb) ## btn.setChecked(self.move_together) ## btn.setToolTip("Move cuts as a group") ## hbox.addWidget(btn) vbox1.addWidget(hbox, stretch=0, alignment=QtCore.Qt.AlignLeft) btns = QtHelp.HBox() layout = btns.layout() layout.setSpacing(3) #btns.set_child_size(15, -1) btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft) vpaned.addWidget(twidget) vpaned.addWidget(QtGui.QLabel('')) container.addWidget(vpaned, stretch=1)
def _draw(self, cr): width, height = self.get_size() #print "window size is %d,%d" % (width, height) x1 = 0 x2 = width clr_wd = width // 256 rem_px = x2 - (clr_wd * 256) if rem_px > 0: ival = 256 // rem_px else: ival = 0 clr_ht = height #print "clr is %dx%d width=%d rem=%d ival=%d" % ( # width, height, clr_wd, rem_px, ival) j = ival off = 0 range_pts = [] for i in xrange(256): wd = clr_wd if rem_px > 0: j -= 1 if j == 0: rem_px -= 1 j = ival wd += 1 x = off (r, g, b) = self.rgbmap.get_rgbval(i) color = QtGui.QColor(r, g, b) cr.fillRect(QtCore.QRect(x, 0, wd, clr_ht), color) # Draw range scale if we are supposed to if self.t_showrange and self._interval.has_key(i): pct = float(i) / 256.0 val = int(self.loval + pct * (self.hival - self.loval)) text = "%d" % (val) rect = cr.boundingRect(0, 0, 1000, 1000, 0, text) x1, y1, x2, y2 = rect.getCoords() _wd = x2 - x1 _ht = y2 - y1 _ht = 14 rx = x ry = _ht - 2 range_pts.append((rx, ry, text)) off += wd # draw range pen = cr.pen() cr.setFont(QtGui.QFont(self.t_font, pointSize=self.t_fontsize)) color = QtGui.QColor() color.setRgbF(0.0, 0.0, 0.0) pen.setColor(color) cr.setPen(pen) for (x, y, text) in range_pts: # tick cr.drawLine(x, 0, x, 2) # number cr.drawText(x, y, text)
def build_gui(self, container): sw = QtGui.QScrollArea() twidget = QtHelp.VBox() sp = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) twidget.setSizePolicy(sp) vbox1 = twidget.layout() vbox1.setContentsMargins(4, 4, 4, 4) vbox1.setSpacing(2) sw.setWidgetResizable(True) sw.setWidget(twidget) msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) fr = QtHelp.Frame("Drawing") captions = (('Draw type', 'combobox'), ('Draw color', 'combobox'), ('Clear canvas', 'button')) w, b = QtHelp.build_info(captions) self.w = b combobox = b.draw_type options = [] index = 0 for name in self.drawtypes: options.append(name) combobox.addItem(name) index += 1 index = self.drawtypes.index(default_drawtype) combobox.setCurrentIndex(index) combobox.activated.connect(self.set_drawparams) self.w.draw_color = b.draw_color combobox = b.draw_color options = [] index = 0 self.drawcolors = draw_colors for name in self.drawcolors: options.append(name) combobox.addItem(name) index += 1 index = self.drawcolors.index(default_drawcolor) combobox.setCurrentIndex(index) combobox.activated.connect(self.set_drawparams) b.clear_canvas.clicked.connect(self.clear_canvas) fr.layout().addWidget(w, stretch=1, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) btns = QtHelp.HBox() layout = btns.layout() layout.setSpacing(3) btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft) container.addWidget(sw, stretch=1)
def build_gui(self, container): # Splitter is just to provide a way to size the graph # to a reasonable size vpaned = QtGui.QSplitter() vpaned.setOrientation(QtCore.Qt.Vertical) # Make the cuts plot twidget = QtHelp.VBox() vbox1 = twidget.layout() vbox1.setContentsMargins(4, 4, 4, 4) vbox1.setSpacing(2) msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.layout().addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) self.plot = Plot.Plot(self.logger) w = self.plot.get_widget() vbox1.addWidget(w, stretch=1, alignment=QtCore.Qt.AlignTop) captions = (('Cut Low', 'xlabel', '@Cut Low', 'entry'), ('Cut High', 'xlabel', '@Cut High', 'entry', 'Cut Levels', 'button'), ('Auto Levels', 'button'), ) w, b = QtHelp.build_info(captions) self.w.update(b) b.cut_levels.setToolTip("Set cut levels manually") b.auto_levels.setToolTip("Set cut levels by algorithm") b.cut_low.setToolTip("Set low cut level (press Enter)") b.cut_high.setToolTip("Set high cut level (press Enter)") b.cut_low.returnPressed.connect(self.cut_levels) b.cut_high.returnPressed.connect(self.cut_levels) b.cut_levels.clicked.connect(self.cut_levels) b.auto_levels.clicked.connect(self.auto_levels) vbox1.addWidget(w, stretch=0, alignment=QtCore.Qt.AlignLeft) btns = QtHelp.HBox() layout= btns.layout() layout.setSpacing(3) #btns.set_child_size(15, -1) btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) btn = QtGui.QPushButton("Full Image") btn.clicked.connect(self.full_image) layout.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) vbox1.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignLeft) vpaned.addWidget(twidget) vpaned.addWidget(QtGui.QLabel('')) container.addWidget(vpaned, stretch=1) self.gui_up = True
def build_gui(self, container, future=None): vbox1 = QtHelp.VBox() msgFont = QtGui.QFont("Sans", 14) tw = QtGui.QLabel() tw.setFont(msgFont) tw.setWordWrap(True) self.tw = tw fr = QtHelp.Frame("Instructions") fr.addWidget(tw, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignTop) nb = QtHelp.TabWidget() nb.setTabPosition(QtGui.QTabWidget.South) nb.setUsesScrollButtons(True) self.w.nb = nb #vbox1.addWidget(nb, stretch=1, alignment=QtCore.Qt.AlignTop) vbox1.addWidget(nb, stretch=1) vbox0 = QtHelp.VBox() hbox = QtHelp.HBox() hbox.setSpacing(4) vbox0.addWidget(hbox, stretch=1, alignment=QtCore.Qt.AlignTop) vbox = QtHelp.VBox() fr = QtHelp.Frame(" Image Server ") fr.addWidget(vbox, stretch=1, alignment=QtCore.Qt.AlignTop) hbox.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignLeft) captions = (('Server', 'xlabel'), ('@Server', 'combobox'), ('Use DSS channel', 'checkbutton'), ('Get Image', 'button')) w, b = QtHelp.build_info(captions) self.w.update(b) self.w.get_image.clicked.connect(self.getimage_cb) self.w.use_dss_channel.setChecked(self.use_dss_channel) self.w.use_dss_channel.stateChanged.connect(self.use_dss_channel_cb) vbox.addWidget(w, stretch=0, alignment=QtCore.Qt.AlignTop) self.w.img_params = QtHelp.StackedWidget() vbox.addWidget(self.w.img_params, stretch=1, alignment=QtCore.Qt.AlignTop) combobox = self.w.server index = 0 self.image_server_options = self.fv.imgsrv.getServerNames(kind='image') for name in self.image_server_options: combobox.addItem(name) index += 1 index = 0 combobox.setCurrentIndex(index) combobox.activated.connect(self.setup_params_image) if len(self.image_server_options) > 0: self.setup_params_image(index, redo=False) vbox = QtHelp.VBox() fr = QtHelp.Frame(" Catalog Server ") fr.addWidget(vbox, stretch=1, alignment=QtCore.Qt.AlignTop) hbox.addWidget(fr, stretch=0, alignment=QtCore.Qt.AlignLeft) captions = (('Server', 'xlabel'), ('@Server', 'combobox'), ('Limit stars to area', 'checkbutton'), ('Search', 'button')) w, self.w2 = QtHelp.build_info(captions) self.w2.search.clicked.connect(self.getcatalog_cb) self.w2.limit_stars_to_area.setChecked(self.limit_stars_to_area) self.w2.limit_stars_to_area.stateChanged.connect(self.limit_area_cb) vbox.addWidget(w, stretch=0, alignment=QtCore.Qt.AlignTop) self.w2.cat_params = QtHelp.StackedWidget() vbox.addWidget(self.w2.cat_params, stretch=1, alignment=QtCore.Qt.AlignTop) combobox = self.w2.server index = 0 self.catalog_server_options = self.fv.imgsrv.getServerNames(kind='catalog') for name in self.catalog_server_options: combobox.addItem(name) index += 1 index = 0 combobox.setCurrentIndex(index) combobox.activated.connect(self.setup_params_catalog) if len(self.catalog_server_options) > 0: self.setup_params_catalog(index, redo=False) btns = QtHelp.HBox() btns.setSpacing(5) btn = QtGui.QPushButton("Set parameters from entire image") btn.clicked.connect(self.setfromimage) btns.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignCenter) vbox0.addWidget(btns, stretch=0, alignment=QtCore.Qt.AlignTop) self.w.params = vbox0 nb.addTab(vbox0, u"Params") vbox = QtHelp.VBox() self.table = CatalogListing(self.logger, vbox) hbox = QtHelp.HBox() adj = QtGui.QScrollBar(QtCore.Qt.Horizontal) adj.setRange(0, 1000) adj.setSingleStep(1) adj.setPageStep(10) #adj.setMaximum(1000) adj.setValue(0) #adj.resize(200, -1) adj.setTracking(True) adj.setToolTip("Choose subset of stars plotted") self.w.plotgrp = adj adj.valueChanged.connect(self.plot_pct_cb) hbox.addWidget(adj, stretch=1) sb = QtGui.QSpinBox() sb.setRange(10, self.plot_max) sb.setValue(self.plot_limit) sb.setSingleStep(10) adj.setPageStep(100) sb.setWrapping(False) self.w.plotnum = sb sb.setToolTip("Adjust size of subset of stars plotted") sb.valueChanged.connect(self.plot_limit_cb) hbox.addWidget(sb, stretch=0) vbox.addWidget(hbox, stretch=0) self.w.listing = vbox nb.addTab(vbox, u"Listing") btns = QtHelp.HBox() btns.setSpacing(3) #btns.set_child_size(15, -1) self.w.buttons = btns btn = QtGui.QPushButton("Close") btn.clicked.connect(self.close) btns.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) if future: btn = QtGui.QPushButton('Ok') btn.clicked.connect(lambda w: self.ok()) btns.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) btn = QtGui.QPushButton('Cancel') btn.clicked.connect(lambda w: self.cancel()) btns.addWidget(btn, stretch=0, alignment=QtCore.Qt.AlignLeft) container.addWidget(vbox1, stretch=1)
def draw(self): cx1, cy1 = self.canvascoords(self.x1, self.y1) cx2, cy2 = self.canvascoords(self.x2, self.y2) cr = self.setup_cr() if not self.fontsize: fontsize = self.scale_font() else: fontsize = self.fontsize cr.setFont(QtGui.QFont(self.font, pointSize=fontsize)) cr.pen().setCapStyle(QtCore.Qt.RoundCap) cr.drawLine(cx1, cy1, cx2, cy2) self.draw_arrowhead(cr, cx1, cy1, cx2, cy2) self.draw_arrowhead(cr, cx2, cy2, cx1, cy1) pen = cr.pen() # calculate offsets and positions for drawing labels # try not to cover anything up xtwd, xtht = self.text_extents(cr, self.text_x) ytwd, ytht = self.text_extents(cr, self.text_y) htwd, htht = self.text_extents(cr, self.text_h) diag_xoffset = 0 diag_yoffset = 0 xplumb_yoffset = 0 yplumb_xoffset = 0 diag_yoffset = 14 if abs(cy1 - cy2) < 5: show_angle = 0 elif cy1 < cy2: xplumb_yoffset = -4 else: xplumb_yoffset = 14 diag_yoffset = -4 if abs(cx1 - cx2) < 5: diag_xoffset = -(4 + htwd) show_angle = 0 elif (cx1 < cx2): diag_xoffset = -(4 + htwd) yplumb_xoffset = 4 else: diag_xoffset = 4 yplumb_xoffset = -(4 + ytwd) xh = min(cx1, cx2) y = cy1 + xplumb_yoffset xh += (max(cx1, cx2) - xh) // 2 yh = min(cy1, cy2) x = cx2 + yplumb_xoffset yh += (max(cy1, cy2) - yh) // 2 xd = xh + diag_xoffset yd = yh + diag_yoffset cr.drawText(xd, yd, self.text_h) pen.setDashPattern([3.0, 4.0, 6.0, 4.0]) pen.setDashOffset(5.0) cr.setPen(pen) if self.color2: self.set_color(cr, self.color2) # draw X plumb line cr.drawLine(cx1, cy1, cx2, cy1) # draw Y plumb line cr.drawLine(cx2, cy1, cx2, cy2) # draw X plum line label xh -= xtwd // 2 cr.drawText(xh, y, self.text_x) # draw Y plum line label cr.drawText(x, yh, self.text_y) if self.cap: self.draw_caps(cr, self.cap, ((cx2, cy1), ))