fixed overlapping arrows with multiple depends

This commit is contained in:
Louis Heredero 2024-03-24 11:52:56 +01:00
parent 5a4d30e162
commit d61a707591
2 changed files with 12 additions and 4 deletions

View File

@ -18,6 +18,7 @@ class Range:
self.description = description self.description = description
self.values = values self.values = values
self.dependsOn = dependsOn self.dependsOn = dependsOn
self.lastValueY = -1
@property @property
def bits(self) -> int: def bits(self) -> int:

View File

@ -193,8 +193,13 @@ class Renderer:
rWidth = range_.bits * bitW rWidth = range_.bits * bitW
self.drawUnderbracket(rStartX, rStartX + rWidth, bitsY) self.drawUnderbracket(rStartX, rStartX + rWidth, bitsY)
prevY = bitsY + bitH * 1.5
dependRange = struct.ranges[range_.dependsOn] dependRange = struct.ranges[range_.dependsOn]
prevRangeY = bitsY + bitH * 1.5
if dependRange.lastValueY == -1:
prevDependY = bitsY + bitH * 1.5
else:
prevDependY = dependRange.lastValueY
dependStartI = struct.bits - dependRange.end - 1 dependStartI = struct.bits - dependRange.end - 1
dependStartX = bitsX + dependStartI * bitW dependStartX = bitsX + dependStartI * bitW
dependWidth = dependRange.bits * bitW dependWidth = dependRange.bits * bitW
@ -202,7 +207,7 @@ class Renderer:
self.drawUnderbracket(dependStartX, dependStartX + dependWidth, bitsY) self.drawUnderbracket(dependStartX, dependStartX + dependWidth, bitsY)
for val, data in sorted(range_.values.items(), key=lambda vd: vd[0]): for val, data in sorted(range_.values.items(), key=lambda vd: vd[0]):
self.drawArrow(dependMid, prevY, dependMid, descY - arrowMargin) self.drawArrow(dependMid, prevDependY, dependMid, descY - arrowMargin)
valRanges = {} valRanges = {}
for i in range(dependRange.bits): for i in range(dependRange.bits):
@ -234,11 +239,13 @@ class Renderer:
self.drawArrow(x1, y, x2, y, data["description"]) self.drawArrow(x1, y, x2, y, data["description"])
self.drawArrow(rStartX + rWidth - bitW, self.drawArrow(rStartX + rWidth - bitW,
prevY, prevRangeY,
rStartX + rWidth - bitW, rStartX + rWidth - bitW,
descY + bitH - arrowMargin) descY + bitH - arrowMargin)
prevY = descY + bitH*2 + arrowMargin prevDependY = descY + bitH*2 + arrowMargin
prevRangeY =prevDependY
dependRange.lastValueY = prevDependY
descY = self.drawStructure(structures[data["structure"]], structures, rStartX, descY) descY = self.drawStructure(structures[data["structure"]], structures, rStartX, descY)
return (descX, descY) return (descX, descY)