Adjust line width in transform()

Pass scale param down the transform call tree.
This fixes the inner corners for the PS output which were seen as "too
big" when comparing with the wrong line width.

Resolves: #332
This commit is contained in:
Florian Festi 2021-10-09 13:59:24 +02:00
parent 46f350d483
commit fce7e08a1a
1 changed files with 9 additions and 8 deletions

View File

@ -57,7 +57,7 @@ class Surface:
else: else:
m = Affine.scale(self.scale, self.scale) * m m = Affine.scale(self.scale, self.scale) * m
self.transform(m, self.invert_y) self.transform(self.scale, m, self.invert_y)
return Extents(0, 0, extents.width * self.scale, extents.height * self.scale) return Extents(0, 0, extents.width * self.scale, extents.height * self.scale)
@ -67,9 +67,9 @@ class Surface:
p.render(renderer) p.render(renderer)
renderer.finish() renderer.finish()
def transform(self, m, invert_y=False): def transform(self, f, m, invert_y=False):
for p in self.parts: for p in self.parts:
p.transform(m, invert_y) p.transform(f, m, invert_y)
def new_part(self, name="part"): def new_part(self, name="part"):
if self.parts and len(self.parts[-1].pathes) == 0: if self.parts and len(self.parts[-1].pathes) == 0:
@ -104,10 +104,10 @@ class Part:
return Extents() return Extents()
return sum([p.extents() for p in self.pathes]) return sum([p.extents() for p in self.pathes])
def transform(self, m, invert_y=False): def transform(self, f, m, invert_y=False):
assert(not self.path) assert(not self.path)
for p in self.pathes: for p in self.pathes:
p.transform(m, invert_y) p.transform(f, m, invert_y)
def append(self, *path): def append(self, *path):
self.path.append(list(path)) self.path.append(list(path))
@ -173,7 +173,8 @@ class Path:
e.add(x_, y_) e.add(x_, y_)
return e return e
def transform(self, m, invert_y=False): def transform(self, f, m, invert_y=False):
self.params["lw"] *= f
for c in self.path: for c in self.path:
C = c[0] C = c[0]
c[1], c[2] = m * (c[1], c[2]) c[1], c[2] = m * (c[1], c[2])
@ -553,7 +554,7 @@ Creation date: {date}
p.pop() p.pop()
if p: # might be empty if only contains text if p: # might be empty if only contains text
t = ET.SubElement(g, "path", d=" ".join(p), stroke=color) t = ET.SubElement(g, "path", d=" ".join(p), stroke=color)
t.set("stroke-width", f'{path.params["lw"]*self.scale:.2f}') t.set("stroke-width", f'{path.params["lw"]:.2f}')
t.tail = "\n " t.tail = "\n "
t.tail = "\n" t.tail = "\n"
tree.write(open(self._fname, "wb"), xml_declaration=True, method="xml") tree.write(open(self._fname, "wb"), xml_declaration=True, method="xml")
@ -698,7 +699,7 @@ class PSSurface(Surface):
f.write("newpath\n") f.write("newpath\n")
f.write("\n".join(p)) f.write("\n".join(p))
f.write("\n") f.write("\n")
f.write(f"{path.params['lw']*self.scale} setlinewidth\n") f.write(f"{path.params['lw']} setlinewidth\n")
f.write(f"{color} setrgbcolor\n") f.write(f"{color} setrgbcolor\n")
f.write("stroke\n\n") f.write("stroke\n\n")
f.write( f.write(