Skip to content

Commit 4e6394e

Browse files
committed
[processing] fixed disappearing lines in modeler
Moved the updating of paths of arrows/lines in the modeler out of the paint method, fixing various rendering problems.
1 parent 2f9b926 commit 4e6394e

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

python/plugins/processing/modeler/ModelerArrowItem.py

+24-18
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"""
4848

4949
from PyQt4.QtCore import Qt, QPointF
50-
from PyQt4.QtGui import QGraphicsPathItem, QPen, QGraphicsItem, QPainterPath, QPolygonF
50+
from PyQt4.QtGui import QGraphicsPathItem, QPen, QGraphicsItem, QPainterPath, QPolygonF, QPainter
5151
from processing.modeler.ModelerGraphicItem import ModelerGraphicItem
5252
from processing.modeler.ModelerAlgorithm import Algorithm
5353

@@ -61,56 +61,62 @@ def __init__(self, startItem, startIndex, endItem, endIndex,
6161
self.startIndex = startIndex
6262
self.startItem = startItem
6363
self.endItem = endItem
64+
self.endPoints = []
6465
self.setFlag(QGraphicsItem.ItemIsSelectable, False)
6566
self.myColor = Qt.gray
6667
self.setPen(QPen(self.myColor, 1, Qt.SolidLine,
6768
Qt.RoundCap, Qt.RoundJoin))
6869
self.setZValue(0)
6970

70-
def paint(self, painter, option, widget=None):
71-
myPen = self.pen()
72-
myPen.setColor(self.myColor)
73-
painter.setPen(myPen)
74-
painter.setBrush(self.myColor)
75-
71+
def updatePath(self):
72+
self.endPoints = []
7673
controlPoints = []
7774
endPt = self.endItem.getLinkPointForParameter(self.endIndex)
7875
startPt = self.startItem.getLinkPointForOutput(self.startIndex)
7976
if isinstance(self.startItem.element, Algorithm):
8077
if self.startIndex != -1:
8178
controlPoints.append(self.startItem.pos() + startPt)
8279
controlPoints.append(self.startItem.pos() + startPt
83-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
80+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
8481
controlPoints.append(self.endItem.pos() + endPt
85-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
82+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
8683
controlPoints.append(self.endItem.pos() + endPt)
8784
pt = QPointF(self.startItem.pos() + startPt
8885
+ QPointF(-3, -3))
89-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
86+
self.endPoints.append(pt)
9087
pt = QPointF(self.endItem.pos() + endPt +
9188
QPointF(-3, -3))
92-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
89+
self.endPoints.append(pt)
9390
else:
9491
# Case where there is a dependency on an algorithm not
9592
# on an output
9693
controlPoints.append(self.startItem.pos() + startPt)
9794
controlPoints.append(self.startItem.pos() + startPt
98-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
95+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
9996
controlPoints.append(self.endItem.pos() + endPt
100-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
97+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
10198
controlPoints.append(self.endItem.pos() + endPt)
10299
else:
103100
controlPoints.append(self.startItem.pos())
104101
controlPoints.append(self.startItem.pos()
105-
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
102+
+ QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
106103
controlPoints.append(self.endItem.pos() + endPt
107-
- QPointF(ModelerGraphicItem.BOX_WIDTH / 2, 0))
104+
- QPointF(ModelerGraphicItem.BOX_WIDTH / 3, 0))
108105
controlPoints.append(self.endItem.pos() + endPt)
109106
pt = QPointF(self.endItem.pos() + endPt + QPointF(-3, -3))
110-
painter.drawEllipse(pt.x(), pt.y(), 6, 6)
111-
107+
self.endPoints.append(pt)
112108
path = QPainterPath()
113109
path.moveTo(controlPoints[0])
114110
path.cubicTo(*controlPoints[1:])
115-
painter.strokePath(path, painter.pen())
116111
self.setPath(path)
112+
113+
def paint(self, painter, option, widget=None):
114+
myPen = self.pen()
115+
myPen.setColor(self.myColor)
116+
painter.setPen(myPen)
117+
painter.setBrush(self.myColor)
118+
painter.setRenderHint(QPainter.Antialiasing)
119+
120+
for point in self.endPoints:
121+
painter.drawEllipse(point.x(), point.y(), 6, 6)
122+
painter.strokePath(self.shape(), painter.pen())

python/plugins/processing/modeler/ModelerGraphicItem.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ def getLinkPointForOutput(self, outputIndex):
302302
def itemChange(self, change, value):
303303
if change == QGraphicsItem.ItemPositionHasChanged:
304304
for arrow in self.arrows:
305-
arrow.updatePosition()
305+
arrow.updatePath()
306306
self.element.pos = self.pos()
307307

308308
return value

python/plugins/processing/modeler/ModelerScene.py

+9
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,17 @@ def paintModel(self, model):
105105
sourceItems = self.getItemsFromParamValue(value)
106106
for sourceItem, sourceIdx in sourceItems:
107107
arrow = ModelerArrowItem(sourceItem, sourceIdx, self.algItems[alg.name], idx)
108+
sourceItem.addArrow(arrow)
109+
self.algItems[alg.name].addArrow(arrow)
110+
arrow.updatePath()
108111
self.addItem(arrow)
109112
idx += 1
110113
for depend in alg.dependencies:
111114
arrow = ModelerArrowItem(self.algItems[depend], -1,
112115
self.algItems[alg.name], -1)
116+
self.algItems[depend].addArrow(arrow)
117+
self.algItems[alg.name].addArrow(arrow)
118+
arrow.updatePath()
113119
self.addItem(arrow)
114120

115121
# And finally the outputs
@@ -132,6 +138,9 @@ def paintModel(self, model):
132138
outputItems[key] = item
133139
arrow = ModelerArrowItem(self.algItems[alg.name], idx, item,
134140
-1)
141+
self.algItems[alg.name].addArrow(arrow)
142+
item.addArrow(arrow)
143+
arrow.updatePath()
135144
self.addItem(arrow)
136145
idx += 1
137146
else:

0 commit comments

Comments
 (0)