Compare commits
No commits in common. "c9a8e63ac9d75e2fafc1d1012aae50060b31ffca" and "04b8dd4c5705dd5b7874ff502271013b8ba241dd" have entirely different histories.
c9a8e63ac9
...
04b8dd4c57
@ -68,47 +68,6 @@ class ApplyTransformations(inkex.EffectExtension):
|
|||||||
except AttributeError as e:
|
except AttributeError as e:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def transformRectangle(self, node, transf: Transform):
|
|
||||||
x = float(node.get('x', '0'))
|
|
||||||
y = float(node.get('y', '0'))
|
|
||||||
width = float(node.get('width', '0'))
|
|
||||||
height = float(node.get('height', '0'))
|
|
||||||
rx = float(node.get('rx', '0'))
|
|
||||||
ry = float(node.get('ry', '0'))
|
|
||||||
|
|
||||||
# Extract translation, scaling and rotation
|
|
||||||
a, b, c, d = transf.a, transf.b, transf.c, transf.d
|
|
||||||
tx, ty = transf.e, transf.f
|
|
||||||
sx = math.sqrt(a**2 + c**2)
|
|
||||||
sy = math.sqrt(b**2 + d**2)
|
|
||||||
angle = math.degrees(math.atan2(b, a))
|
|
||||||
|
|
||||||
# Calculate the center of the rectangle
|
|
||||||
cx = x + width / 2
|
|
||||||
cy = y + height / 2
|
|
||||||
|
|
||||||
# Apply the transformation to the center point
|
|
||||||
new_cx, new_cy = transf.apply_to_point((cx, cy))
|
|
||||||
new_x = new_cx - (width * sx) / 2
|
|
||||||
new_y = new_cy - (height * sy) / 2
|
|
||||||
|
|
||||||
# Update rectangle attributes
|
|
||||||
node.set('x', str(new_x))
|
|
||||||
node.set('y', str(new_y))
|
|
||||||
node.set('width', str(width * sx))
|
|
||||||
node.set('height', str(height * sy))
|
|
||||||
|
|
||||||
# Apply scale to rx and ry if they exist
|
|
||||||
if rx > 0:
|
|
||||||
node.set('rx', str(rx * sx))
|
|
||||||
if ry > 0:
|
|
||||||
node.set('ry', str(ry * sy))
|
|
||||||
|
|
||||||
# Add rotation if it exists
|
|
||||||
if abs(angle) > 1e-6:
|
|
||||||
tr = Transform(f"rotate({angle:.6f},{new_cx:.6f},{new_cy:.6f})")
|
|
||||||
node.set('transform',tr)
|
|
||||||
|
|
||||||
def recursiveFuseTransform(self, element, transf=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]):
|
def recursiveFuseTransform(self, element, transf=[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]):
|
||||||
|
|
||||||
transf = Transform(transf) @ Transform(element.get("transform", None)) #a, b, c, d = linear transformations / e, f = translations
|
transf = Transform(transf) @ Transform(element.get("transform", None)) #a, b, c, d = linear transformations / e, f = translations
|
||||||
@ -238,14 +197,9 @@ class ApplyTransformations(inkex.EffectExtension):
|
|||||||
#self.recursiveFuseTransform(linkedObjectCopy, transf)
|
#self.recursiveFuseTransform(linkedObjectCopy, transf)
|
||||||
self.recursiveFuseTransform(element.unlink(), transf)
|
self.recursiveFuseTransform(element.unlink(), transf)
|
||||||
|
|
||||||
elif element.tag == inkex.addNS('rect', 'svg'):
|
elif element.tag in [inkex.addNS('rect', 'svg'),
|
||||||
self.transformRectangle(element, transf)
|
inkex.addNS('text', 'svg'),
|
||||||
self.scaleStrokeWidth(element, transf)
|
inkex.addNS('image', 'svg')]:
|
||||||
|
|
||||||
elif element.tag in [inkex.addNS('text', 'svg'),
|
|
||||||
inkex.addNS('image', 'svg'),
|
|
||||||
inkex.addNS('use', 'svg')]:
|
|
||||||
|
|
||||||
element.attrib['transform'] = str(transf)
|
element.attrib['transform'] = str(transf)
|
||||||
inkex.utils.errormsg(f"Shape {element.TAG} ({element.get('id')}) not yet supported. Not all transforms will be applied. Try Object to path first")
|
inkex.utils.errormsg(f"Shape {element.TAG} ({element.get('id')}) not yet supported. Not all transforms will be applied. Try Object to path first")
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user