Skip to content

Commit 8d02eca

Browse files
committed
Added QwtPlot.validAxes class attribute
This is an optimization: when plot methods are called several times, using QwtPlot.validAxes instead of range(QwtPlot.axisCnt) will gain precious milliseconds.
1 parent 0181122 commit 8d02eca

File tree

3 files changed

+47
-47
lines changed

3 files changed

+47
-47
lines changed

qwt/plot.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ class QwtPlot(QFrame, QwtPlotDict):
277277
legendDataChanged = Signal("PyQt_PyObject", "PyQt_PyObject")
278278

279279
# enum Axis
280-
yLeft, yRight, xBottom, xTop, axisCnt = list(range(5))
280+
validAxes = yLeft, yRight, xBottom, xTop = list(range(4))
281+
axisCnt = len(validAxes)
281282

282283
# enum LegendPosition
283284
LeftLegend, RightLegend, BottomLegend, TopLegend = list(range(4))
@@ -363,7 +364,7 @@ def __del__(self):
363364

364365
def initAxesData(self):
365366
"""Initialize axes"""
366-
self.__axisData = [AxisData() for axisId in range(self.axisCnt)]
367+
self.__axisData = [AxisData() for axisId in self.validAxes]
367368

368369
self.__axisData[self.yLeft].scaleWidget = \
369370
QwtScaleWidget(QwtScaleDraw.LeftScale, self)
@@ -386,7 +387,7 @@ def initAxesData(self):
386387
fscl = QFont(self.fontInfo().family(), 10)
387388
fttl = QFont(self.fontInfo().family(), 12, QFont.Bold)
388389

389-
for axisId in range(self.axisCnt):
390+
for axisId in self.validAxes:
390391
d = self.__axisData[axisId]
391392

392393
d.scaleEngine = QwtLinearScaleEngine()
@@ -414,7 +415,7 @@ def initAxesData(self):
414415

415416
def deleteAxesData(self):
416417
#XXX Is is really necessary in Python? (pure transcription of C++)
417-
for axisId in range(self.axisCnt):
418+
for axisId in self.validAxes:
418419
self.__axisData[axisId].scaleEngine = None
419420
self.__axisData[axisId] = None
420421

@@ -851,7 +852,7 @@ def updateAxes(self):
851852
:py:meth:`setAxisScaleDiv()`, :py:meth:`replot()`,
852853
:py:meth:`QwtPlotItem.boundingRect()`
853854
"""
854-
intv = [QwtInterval() for _i in range(self.axisCnt)]
855+
intv = [QwtInterval() for _i in self.validAxes]
855856
itmList = self.itemList()
856857
for item in itmList:
857858
if not item.testItemAttribute(QwtPlotItem.AutoScale):
@@ -864,7 +865,7 @@ def updateAxes(self):
864865
intv[item.xAxis()] |= QwtInterval(rect.left(), rect.right())
865866
if rect.height() >= 0.:
866867
intv[item.yAxis()] |= QwtInterval(rect.top(), rect.bottom())
867-
for axisId in range(self.axisCnt):
868+
for axisId in self.validAxes:
868869
d = self.__axisData[axisId]
869870
minValue = d.minValue
870871
maxValue = d.maxValue
@@ -1084,7 +1085,7 @@ def sizeHint(self):
10841085
:py:meth:`minimumSizeHint()`
10851086
"""
10861087
dw = dh = 0
1087-
for axisId in range(self.axisCnt):
1088+
for axisId in self.validAxes:
10881089
if self.axisEnabled(axisId):
10891090
niceDist = 40
10901091
scaleWidget = self.axisWidget(axisId)
@@ -1145,7 +1146,7 @@ def get_layout_state(self):
11451146
return (self.contentsRect(),
11461147
self.__data.titleLabel.text(), self.__data.footerLabel.text(),
11471148
[(self.axisEnabled(axisId), self.axisTitle(axisId).text())
1148-
for axisId in range(self.axisCnt)],
1149+
for axisId in self.validAxes],
11491150
self.__data.legend)
11501151

11511152
def updateLayout(self):
@@ -1166,9 +1167,8 @@ def updateLayout(self):
11661167

11671168
titleRect = self.__data.layout.titleRect().toRect()
11681169
footerRect = self.__data.layout.footerRect().toRect()
1169-
scaleRect = [None] * self.axisCnt
1170-
for axisId in range(self.axisCnt):
1171-
scaleRect[axisId] = self.__data.layout.scaleRect(axisId).toRect()
1170+
scaleRect = [self.__data.layout.scaleRect(axisId).toRect()
1171+
for axisId in self.validAxes]
11721172
legendRect = self.__data.layout.legendRect().toRect()
11731173
canvasRect = self.__data.layout.canvasRect().toRect()
11741174

@@ -1186,7 +1186,7 @@ def updateLayout(self):
11861186
else:
11871187
self.__data.footerLabel.hide()
11881188

1189-
for axisId in range(self.axisCnt):
1189+
for axisId in self.validAxes:
11901190
if self.axisEnabled(axisId):
11911191
self.axisWidget(axisId).setGeometry(scaleRect[axisId])
11921192

@@ -1254,12 +1254,12 @@ def updateCanvasMargins(self):
12541254
:py:meth:`getCanvasMarginsHint()`,
12551255
:py:meth:`QwtPlotItem.getCanvasMarginHint()`
12561256
"""
1257-
maps = [self.canvasMap(axisId) for axisId in range(self.axisCnt)]
1257+
maps = [self.canvasMap(axisId) for axisId in self.validAxes]
12581258
margins = self.getCanvasMarginsHint(maps, self.canvas().contentsRect())
12591259

12601260
doUpdate = False
12611261

1262-
for axisId in range(self.axisCnt):
1262+
for axisId in self.validAxes:
12631263
if margins[axisId] >= 0.:
12641264
m = np.ceil(margins[axisId])
12651265
self.plotLayout().setCanvasMargin(m, axisId)
@@ -1285,7 +1285,7 @@ def drawCanvas(self, painter):
12851285
:py:meth:`getCanvasMarginsHint()`,
12861286
:py:meth:`QwtPlotItem.getCanvasMarginHint()`
12871287
"""
1288-
maps = [self.canvasMap(axisId) for axisId in range(self.axisCnt)]
1288+
maps = [self.canvasMap(axisId) for axisId in self.validAxes]
12891289
self.drawItems(painter, self.__data.canvas.contentsRect(), maps)
12901290

12911291
def drawItems(self, painter, canvasRect, maps):
@@ -1397,7 +1397,7 @@ def axisValid(self, axisId):
13971397
:param int axisId: Axis
13981398
:return: True if the specified axis exists, otherwise False
13991399
"""
1400-
return axisId in range(QwtPlot.axisCnt)
1400+
return axisId in QwtPlot.validAxes
14011401

14021402
def insertLegend(self, legend, pos=None, ratio=-1):
14031403
"""

qwt/plot_layout.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ def __init__(self):
5656

5757
class CanvasData(object):
5858
def __init__(self):
59-
self.contentsMargins = [0 for _i in range(QwtPlot.axisCnt)]
59+
self.contentsMargins = [0 for _i in QwtPlot.validAxes]
6060

6161
class QwtPlotLayout_LayoutData(object):
6262
def __init__(self):
6363
self.legend = LegendData()
6464
self.title = TitleData()
6565
self.footer = FooterData()
66-
self.scale = [ScaleData() for _i in range(QwtPlot.axisCnt)]
66+
self.scale = [ScaleData() for _i in QwtPlot.validAxes]
6767
self.canvas = CanvasData()
6868

6969
def init(self, plot, rect):
@@ -100,7 +100,7 @@ def init(self, plot, rect):
100100
self.footer.text.setFont(label.font())
101101
self.footer.frameWidth = plot.footerLabel().frameWidth()
102102
# scales
103-
for axis in range(QwtPlot.axisCnt):
103+
for axis in QwtPlot.validAxes:
104104
if plot.axisEnabled(axis):
105105
scaleWidget = plot.axisWidget(axis)
106106
self.scale[axis].isEnabled = True
@@ -133,7 +133,7 @@ def __init__(self):
133133
self.titleRect = QRectF()
134134
self.footerRect = QRectF()
135135
self.legendRect = QRectF()
136-
self.scaleRect = [QRectF() for _i in range(QwtPlot.axisCnt)]
136+
self.scaleRect = [QRectF() for _i in QwtPlot.validAxes]
137137
self.canvasRect = QRectF()
138138
self.layoutData = QwtPlotLayout_LayoutData()
139139
self.legendPos = None
@@ -199,9 +199,9 @@ def setCanvasMargin(self, margin, axis=-1):
199199
if margin < 1:
200200
margin = -1
201201
if axis == -1:
202-
for axis in range(QwtPlot.axisCnt):
202+
for axis in QwtPlot.validAxes:
203203
self.__data.canvasMargin[axis] = margin
204-
elif axis >= 0 and axis < QwtPlot.axisCnt:
204+
elif axis in QwtPlot.validAxes:
205205
self.__data.canvasMargin[axis] = margin
206206

207207
def canvasMargin(self, axisId):
@@ -213,7 +213,7 @@ def canvasMargin(self, axisId):
213213
214214
:py:meth:`setCanvasMargin()`
215215
"""
216-
if axisId < 0 or axisId >= QwtPlot.axisCnt:
216+
if axisId not in QwtPlot.validAxes:
217217
return 0
218218
return self.__data.canvasMargin[axisId]
219219

@@ -250,11 +250,11 @@ def setAlignCanvasToScales(self, *args):
250250
"""
251251
if len(args) == 1:
252252
on, = args
253-
for axis in range(QwtPlot.axisCnt):
253+
for axis in QwtPlot.validAxes:
254254
self.__data.alignCanvasToScales[axis] = on
255255
elif len(args) == 2:
256256
axisId, on = args
257-
if axis >= 0 and axis < QwtPlot.axisCnt:
257+
if axis in QwtPlot.validAxes:
258258
self.__data.alignCanvasToScales[axisId] = on
259259
else:
260260
raise TypeError("%s().setAlignCanvasToScales() takes 1 or 2 "\
@@ -276,7 +276,7 @@ def alignCanvasToScale(self, axisId):
276276
277277
:py:meth:`setAlignCanvasToScale()`, :py:meth:`setCanvasMargin()`
278278
"""
279-
if axisId < 0 or axisId >= QwtPlot.axisCnt:
279+
if axisId not in QwtPlot.validAxes:
280280
return False
281281
return self.__data.alignCanvasToScales[axisId]
282282

@@ -477,7 +477,7 @@ def setScaleRect(self, axis, rect):
477477
478478
:py:meth:`scaleRect()`, :py:meth:`activate()`
479479
"""
480-
if axis >= 0 and axis < QwtPlot.axisCnt:
480+
if axis in QwtPlot.validAxes:
481481
self.__data.scaleRect[axis] = rect
482482

483483
def scaleRect(self, axis):
@@ -489,7 +489,7 @@ def scaleRect(self, axis):
489489
490490
:py:meth:`invalidate()`, :py:meth:`activate()`
491491
"""
492-
if axis < 0 or axis >= QwtPlot.axisCnt:
492+
if axis not in QwtPlot.validAxes:
493493
return QRectF()
494494
return self.__data.scaleRect[axis]
495495

@@ -530,7 +530,7 @@ def invalidate(self):
530530
self.__data.footerRect = QRectF()
531531
self.__data.legendRect = QRectF()
532532
self.__data.canvasRect = QRectF()
533-
for axis in range(QwtPlot.axisCnt):
533+
for axis in QwtPlot.validAxes:
534534
self.__data.scaleRect[axis] = QRectF()
535535

536536
def minimumSizeHint(self, plot):
@@ -549,10 +549,10 @@ def __init__(self):
549549
self.minLeft = 0
550550
self.minRight = 0
551551
self.tickOffset = 0
552-
scaleData = [_ScaleData() for _i in range(QwtPlot.axisCnt)]
553-
canvasBorder = [0 for _i in range(QwtPlot.axisCnt)]
552+
scaleData = [_ScaleData() for _i in QwtPlot.validAxes]
553+
canvasBorder = [0 for _i in QwtPlot.validAxes]
554554
fw, _, _, _ = plot.canvas().getContentsMargins()
555-
for axis in range(QwtPlot.axisCnt):
555+
for axis in QwtPlot.validAxes:
556556
if plot.axisEnabled(axis):
557557
scl = plot.axisWidget(axis)
558558
sd = scaleData[axis]
@@ -564,7 +564,7 @@ def __init__(self):
564564
if scl.scaleDraw().hasComponent(QwtAbstractScaleDraw.Ticks):
565565
sd.tickOffset += np.ceil(scl.scaleDraw().maxTickLength())
566566
canvasBorder[axis] = fw + self.__data.canvasMargin[axis] + 1
567-
for axis in range(QwtPlot.axisCnt):
567+
for axis in QwtPlot.validAxes:
568568
sd = scaleData[axis]
569569
if sd.w and axis in (QwtPlot.xBottom, QwtPlot.xTop):
570570
if sd.minLeft > canvasBorder[QwtPlot.yLeft]\
@@ -707,9 +707,9 @@ def expandLineBreaks(self, options, rect):
707707
* `dimAxis`: Expanded heights of the axis in axis orientation.
708708
"""
709709
dimTitle = dimFooter = 0
710-
dimAxis = [0 for axis in range(QwtPlot.axisCnt)]
711-
backboneOffset = [0 for _i in range(QwtPlot.axisCnt)]
712-
for axis in range(QwtPlot.axisCnt):
710+
dimAxis = [0 for axis in QwtPlot.validAxes]
711+
backboneOffset = [0 for _i in QwtPlot.validAxes]
712+
for axis in QwtPlot.validAxes:
713713
if not (options & self.IgnoreFrames):
714714
backboneOffset[axis] += self.__data.layoutData.canvas.contentsMargins[axis]
715715
if not self.__data.alignCanvasToScales[axis]:
@@ -748,7 +748,7 @@ def expandLineBreaks(self, options, rect):
748748
if d > dimFooter:
749749
dimFooter = d
750750
done = False
751-
for axis in range(QwtPlot.axisCnt):
751+
for axis in QwtPlot.validAxes:
752752
scaleData = self.__data.layoutData.scale[axis]
753753
if scaleData.isEnabled:
754754
if axis in (QwtPlot.xTop, QwtPlot.xBottom):
@@ -793,14 +793,14 @@ def alignScales(self, options, canvasRect, scaleRect):
793793
:param QRectF canvasRect: Geometry of the canvas ( IN/OUT )
794794
:param QRectF scaleRect: Geometry of the scales ( IN/OUT )
795795
"""
796-
backboneOffset = [0 for _i in range(QwtPlot.axisCnt)]
797-
for axis in range(QwtPlot.axisCnt):
796+
backboneOffset = [0 for _i in QwtPlot.validAxes]
797+
for axis in QwtPlot.validAxes:
798798
backboneOffset[axis] = 0
799799
if not self.__data.alignCanvasToScales[axis]:
800800
backboneOffset[axis] += self.__data.canvasMargin[axis]
801801
if not options & self.IgnoreFrames:
802802
backboneOffset[axis] += self.__data.layoutData.canvas.contentsMargins[axis]
803-
for axis in range(QwtPlot.axisCnt):
803+
for axis in QwtPlot.validAxes:
804804
if not scaleRect[axis].isValid():
805805
continue
806806
startDist = self.__data.layoutData.scale[axis].start
@@ -881,7 +881,7 @@ def alignScales(self, options, canvasRect, scaleRect):
881881
else:
882882
if topOffset > 0:
883883
axisRect.setTop(axisRect.top()+topOffset)
884-
for axis in range(QwtPlot.axisCnt):
884+
for axis in QwtPlot.validAxes:
885885
sRect = scaleRect[axis]
886886
if not sRect.isValid():
887887
continue
@@ -990,7 +990,7 @@ def activate(self, plot, plotRect, options=0x00):
990990
rect.y()+dimAxes[QwtPlot.xTop],
991991
rect.width()-dimAxes[QwtPlot.yRight]-dimAxes[QwtPlot.yLeft],
992992
rect.height()-dimAxes[QwtPlot.xBottom]-dimAxes[QwtPlot.xTop])
993-
for axis in range(QwtPlot.axisCnt):
993+
for axis in QwtPlot.validAxes:
994994
if dimAxes[axis]:
995995
dim = dimAxes[axis]
996996
scaleRect = self.__data.scaleRect[axis]

qwt/plot_renderer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ def render(self, plot, painter, plotRect):
348348
baseLineDists = [None]*QwtPlot.axisCnt
349349
canvasMargins = [None]*QwtPlot.axisCnt
350350

351-
for axisId in range(QwtPlot.axisCnt):
351+
for axisId in QwtPlot.validAxes:
352352
canvasMargins[axisId] = layout.canvasMargin(axisId)
353353
if self.__data.layoutFlags & self.FrameWithScales:
354354
scaleWidget = plot.axisWidget(axisId)
@@ -410,7 +410,7 @@ def render(self, plot, painter, plotRect):
410410
plot.titleLabel().text():
411411
self.renderLegend(plot, painter, layout.legendRect())
412412

413-
for axisId in range(QwtPlot.axisCnt):
413+
for axisId in QwtPlot.validAxes:
414414
scaleWidget = plot.axisWidget(axisId)
415415
if scaleWidget:
416416
baseDist = scaleWidget.margin()
@@ -420,7 +420,7 @@ def render(self, plot, painter, plotRect):
420420

421421
painter.restore()
422422

423-
for axisId in range(QwtPlot.axisCnt):
423+
for axisId in QwtPlot.validAxes:
424424
if self.__data.layoutFlags & self.FrameWithScales:
425425
scaleWidget = plot.axisWidget(axisId)
426426
if scaleWidget:
@@ -603,7 +603,7 @@ def buildCanvasMaps(self, plot, canvasRect):
603603
:return: Calculated scale maps
604604
"""
605605
maps = []
606-
for axisId in range(QwtPlot.axisCnt):
606+
for axisId in QwtPlot.validAxes:
607607
map_ = QwtScaleMap()
608608
map_.setTransformation(
609609
plot.axisScaleEngine(axisId).transformation())
@@ -635,7 +635,7 @@ def buildCanvasMaps(self, plot, canvasRect):
635635
def updateCanvasMargins(self, plot, canvasRect, maps):
636636
margins = plot.getCanvasMarginsHint(maps, canvasRect)
637637
marginsChanged = False
638-
for axisId in range(QwtPlot.axisCnt):
638+
for axisId in QwtPlot.validAxes:
639639
if margins[axisId] >= 0.:
640640
m = np.ceil(margins[axisId])
641641
plot.plotLayout().setCanvasMargin(m, axisId)

0 commit comments

Comments
 (0)