Slightly more correct transform updating. Does not currently matter but affects some 3D transforms.
This commit is contained in:
parent
9c3010bcbd
commit
44f6a7fee0
@ -745,7 +745,7 @@ class AFPRenderer(VerboseOutput):
|
|||||||
if obj.object_id == tag.object_id and obj.depth == tag.depth:
|
if obj.object_id == tag.object_id and obj.depth == tag.depth:
|
||||||
new_mult_color = tag.mult_color or obj.mult_color
|
new_mult_color = tag.mult_color or obj.mult_color
|
||||||
new_add_color = tag.add_color or obj.add_color
|
new_add_color = tag.add_color or obj.add_color
|
||||||
new_transform = tag.transform or obj.transform
|
new_transform = obj.transform.update(tag.transform) if tag.transform is not None else obj.transform
|
||||||
new_rotation_origin = tag.rotation_origin or obj.rotation_origin
|
new_rotation_origin = tag.rotation_origin or obj.rotation_origin
|
||||||
new_blend = tag.blend or obj.blend
|
new_blend = tag.blend or obj.blend
|
||||||
|
|
||||||
|
@ -156,15 +156,22 @@ class Matrix:
|
|||||||
self.a41 = a41
|
self.a41 = a41
|
||||||
self.a42 = a42
|
self.a42 = a42
|
||||||
self.a43 = a43
|
self.a43 = a43
|
||||||
|
self.__scale_set = True
|
||||||
|
self.__rotate_set = True
|
||||||
|
self.__translate_set = True
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def identity() -> "Matrix":
|
def identity() -> "Matrix":
|
||||||
return Matrix(
|
new = Matrix(
|
||||||
a11=1.0, a12=0.0, a13=0.0,
|
a11=1.0, a12=0.0, a13=0.0,
|
||||||
a21=0.0, a22=1.0, a23=0.0,
|
a21=0.0, a22=1.0, a23=0.0,
|
||||||
a31=0.0, a32=0.0, a33=1.0,
|
a31=0.0, a32=0.0, a33=1.0,
|
||||||
a41=0.0, a42=0.0, a43=0.0,
|
a41=0.0, a42=0.0, a43=0.0,
|
||||||
)
|
)
|
||||||
|
new.__scale_set = False
|
||||||
|
new.__rotate_set = False
|
||||||
|
new.__translate_set = False
|
||||||
|
return new
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def affine(*, a: float, b: float, c: float, d: float, tx: float, ty: float) -> "Matrix":
|
def affine(*, a: float, b: float, c: float, d: float, tx: float, ty: float) -> "Matrix":
|
||||||
@ -175,6 +182,7 @@ class Matrix:
|
|||||||
a41=tx, a42=ty, a43=0.0,
|
a41=tx, a42=ty, a43=0.0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
def __is_affine(self) -> bool:
|
def __is_affine(self) -> bool:
|
||||||
return (
|
return (
|
||||||
round(abs(self.a13), 5) == 0.0 and
|
round(abs(self.a13), 5) == 0.0 and
|
||||||
@ -211,6 +219,49 @@ class Matrix:
|
|||||||
'a43': self.a43,
|
'a43': self.a43,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def update(self, other: "Matrix") -> "Matrix":
|
||||||
|
new = Matrix(
|
||||||
|
a11=self.a11,
|
||||||
|
a12=self.a12,
|
||||||
|
a13=self.a13,
|
||||||
|
a21=self.a21,
|
||||||
|
a22=self.a22,
|
||||||
|
a23=self.a23,
|
||||||
|
a31=self.a31,
|
||||||
|
a32=self.a32,
|
||||||
|
a33=self.a33,
|
||||||
|
a41=self.a41,
|
||||||
|
a42=self.a42,
|
||||||
|
a43=self.a43,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not other.__is_affine:
|
||||||
|
new.a11 = other.a11
|
||||||
|
new.a12 = other.a12
|
||||||
|
new.a13 = other.a13
|
||||||
|
new.a21 = other.a21
|
||||||
|
new.a22 = other.a22
|
||||||
|
new.a23 = other.a23
|
||||||
|
new.a31 = other.a31
|
||||||
|
new.a32 = other.a32
|
||||||
|
new.a33 = other.a33
|
||||||
|
new.a41 = other.a41
|
||||||
|
new.a42 = other.a42
|
||||||
|
new.a43 = other.a43
|
||||||
|
else:
|
||||||
|
if other.__scale_set:
|
||||||
|
new.a = other.a
|
||||||
|
new.d = other.d
|
||||||
|
if other.__rotate_set:
|
||||||
|
new.b = other.b
|
||||||
|
new.c = other.c
|
||||||
|
if other.__translate_set:
|
||||||
|
new.tx = other.tx
|
||||||
|
new.ty = other.ty
|
||||||
|
new.tz = other.tz
|
||||||
|
|
||||||
|
return new
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def xscale(self) -> float:
|
def xscale(self) -> float:
|
||||||
return math.sqrt((self.a11 * self.a11) + (self.a12 * self.a12) + (self.a13 * self.a13))
|
return math.sqrt((self.a11 * self.a11) + (self.a12 * self.a12) + (self.a13 * self.a13))
|
||||||
@ -219,12 +270,17 @@ class Matrix:
|
|||||||
def yscale(self) -> float:
|
def yscale(self) -> float:
|
||||||
return math.sqrt((self.a21 * self.a21) + (self.a22 * self.a22) + (self.a23 * self.a23))
|
return math.sqrt((self.a21 * self.a21) + (self.a22 * self.a22) + (self.a23 * self.a23))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def zscale(self) -> float:
|
||||||
|
return math.sqrt((self.a31 * self.a31) + (self.a32 * self.a32) + (self.a33 * self.a33))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def a(self) -> float:
|
def a(self) -> float:
|
||||||
return self.a11
|
return self.a11
|
||||||
|
|
||||||
@a.setter
|
@a.setter
|
||||||
def a(self, val: float) -> None:
|
def a(self, val: float) -> None:
|
||||||
|
self.__scale_set = True
|
||||||
self.a11 = val
|
self.a11 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -233,6 +289,7 @@ class Matrix:
|
|||||||
|
|
||||||
@b.setter
|
@b.setter
|
||||||
def b(self, val: float) -> None:
|
def b(self, val: float) -> None:
|
||||||
|
self.__rotate_set = True
|
||||||
self.a12 = val
|
self.a12 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -241,6 +298,7 @@ class Matrix:
|
|||||||
|
|
||||||
@c.setter
|
@c.setter
|
||||||
def c(self, val: float) -> None:
|
def c(self, val: float) -> None:
|
||||||
|
self.__rotate_set = True
|
||||||
self.a21 = val
|
self.a21 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -249,6 +307,7 @@ class Matrix:
|
|||||||
|
|
||||||
@d.setter
|
@d.setter
|
||||||
def d(self, val: float) -> None:
|
def d(self, val: float) -> None:
|
||||||
|
self.__scale_set = True
|
||||||
self.a22 = val
|
self.a22 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -257,6 +316,7 @@ class Matrix:
|
|||||||
|
|
||||||
@tx.setter
|
@tx.setter
|
||||||
def tx(self, val: float) -> None:
|
def tx(self, val: float) -> None:
|
||||||
|
self.__translate_set = True
|
||||||
self.a41 = val
|
self.a41 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -265,6 +325,7 @@ class Matrix:
|
|||||||
|
|
||||||
@ty.setter
|
@ty.setter
|
||||||
def ty(self, val: float) -> None:
|
def ty(self, val: float) -> None:
|
||||||
|
self.__translate_set = True
|
||||||
self.a42 = val
|
self.a42 = val
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -273,6 +334,7 @@ class Matrix:
|
|||||||
|
|
||||||
@tz.setter
|
@tz.setter
|
||||||
def tz(self, val: float) -> None:
|
def tz(self, val: float) -> None:
|
||||||
|
self.__translate_set = True
|
||||||
self.a43 = val
|
self.a43 = val
|
||||||
|
|
||||||
def multiply_point(self, point: Point) -> Point:
|
def multiply_point(self, point: Point) -> Point:
|
||||||
|
Loading…
Reference in New Issue
Block a user