Move mates processing above tweak processing (#358)
Bug: Not all generated dot output could be changed by tweak entries. Seen in https://github.com/wireviz/WireViz/issues/325#issuecomment-2116395221 Tweak processing must be the very last dot producing code to enable tweaking any dot output. Fix: Move all other dot producing code above Tweak processing.
This commit is contained in:
parent
55ad9c68ee
commit
ba84c54382
@ -534,6 +534,38 @@ class Harness:
|
|||||||
fillcolor=translate_color(bgcolor, "HEX"),
|
fillcolor=translate_color(bgcolor, "HEX"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# mates
|
||||||
|
for mate in self.mates:
|
||||||
|
if mate.shape[-1] == ">":
|
||||||
|
dir = "both" if mate.shape[0] == "<" else "forward"
|
||||||
|
else:
|
||||||
|
dir = "back" if mate.shape[0] == "<" else "none"
|
||||||
|
|
||||||
|
if isinstance(mate, MatePin):
|
||||||
|
color = "#000000"
|
||||||
|
elif isinstance(mate, MateComponent):
|
||||||
|
color = "#000000:#000000"
|
||||||
|
else:
|
||||||
|
raise Exception(f"{mate} is an unknown mate")
|
||||||
|
|
||||||
|
from_connector = self.connectors[mate.from_name]
|
||||||
|
to_connector = self.connectors[mate.to_name]
|
||||||
|
if isinstance(mate, MatePin) and from_connector.style != "simple":
|
||||||
|
from_pin_index = from_connector.pins.index(mate.from_pin)
|
||||||
|
from_port_str = f":p{from_pin_index+1}r"
|
||||||
|
else: # MateComponent or style == 'simple'
|
||||||
|
from_port_str = ""
|
||||||
|
if isinstance(mate, MatePin) and to_connector.style != "simple":
|
||||||
|
to_pin_index = to_connector.pins.index(mate.to_pin)
|
||||||
|
to_port_str = f":p{to_pin_index+1}l"
|
||||||
|
else: # MateComponent or style == 'simple'
|
||||||
|
to_port_str = ""
|
||||||
|
code_from = f"{mate.from_name}{from_port_str}:e"
|
||||||
|
code_to = f"{mate.to_name}{to_port_str}:w"
|
||||||
|
|
||||||
|
dot.attr("edge", color=color, style="dashed", dir=dir)
|
||||||
|
dot.edge(code_from, code_to)
|
||||||
|
|
||||||
def typecheck(name: str, value: Any, expect: type) -> None:
|
def typecheck(name: str, value: Any, expect: type) -> None:
|
||||||
if not isinstance(value, expect):
|
if not isinstance(value, expect):
|
||||||
raise Exception(
|
raise Exception(
|
||||||
@ -599,41 +631,9 @@ class Harness:
|
|||||||
typecheck("tweak.append", self.tweak.append, str)
|
typecheck("tweak.append", self.tweak.append, str)
|
||||||
dot.body.append(self.tweak.append)
|
dot.body.append(self.tweak.append)
|
||||||
|
|
||||||
# TODO: All code below until "return dot" must be moved above all tweak processing!
|
# Tweak processing above must be the last before returning dot.
|
||||||
for mate in self.mates:
|
# Please don't insert any code that might change the dot contents
|
||||||
if mate.shape[0] == "<" and mate.shape[-1] == ">":
|
# after tweak processing.
|
||||||
dir = "both"
|
|
||||||
elif mate.shape[0] == "<":
|
|
||||||
dir = "back"
|
|
||||||
elif mate.shape[-1] == ">":
|
|
||||||
dir = "forward"
|
|
||||||
else:
|
|
||||||
dir = "none"
|
|
||||||
|
|
||||||
if isinstance(mate, MatePin):
|
|
||||||
color = "#000000"
|
|
||||||
elif isinstance(mate, MateComponent):
|
|
||||||
color = "#000000:#000000"
|
|
||||||
else:
|
|
||||||
raise Exception(f"{mate} is an unknown mate")
|
|
||||||
|
|
||||||
from_connector = self.connectors[mate.from_name]
|
|
||||||
to_connector = self.connectors[mate.to_name]
|
|
||||||
if isinstance(mate, MatePin) and from_connector.style != "simple":
|
|
||||||
from_pin_index = from_connector.pins.index(mate.from_pin)
|
|
||||||
from_port_str = f":p{from_pin_index+1}r"
|
|
||||||
else: # MateComponent or style == 'simple'
|
|
||||||
from_port_str = ""
|
|
||||||
if isinstance(mate, MatePin) and to_connector.style != "simple":
|
|
||||||
to_pin_index = to_connector.pins.index(mate.to_pin)
|
|
||||||
to_port_str = f":p{to_pin_index+1}l"
|
|
||||||
else: # MateComponent or style == 'simple'
|
|
||||||
to_port_str = ""
|
|
||||||
code_from = f"{mate.from_name}{from_port_str}:e"
|
|
||||||
code_to = f"{mate.to_name}{to_port_str}:w"
|
|
||||||
|
|
||||||
dot.attr("edge", color=color, style="dashed", dir=dir)
|
|
||||||
dot.edge(code_from, code_to)
|
|
||||||
|
|
||||||
return dot
|
return dot
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user