add support for skewX and skewY transform

This commit is contained in:
TonyCrane 2022-01-25 14:40:02 +08:00
parent 11379283aa
commit d694aed452
No known key found for this signature in database
GPG key ID: 2313A5058A9C637C

View file

@ -250,7 +250,7 @@ class SVGMobject(VMobject):
"translate", "translateX", "translateY",
"scale", "scaleX", "scaleY",
"rotate",
"skew", "skewX", "skewY"
"skewX", "skewY"
]
transform_pattern = re.compile("|".join([x + r"[^)]*\)" for x in transform_names]))
number_pattern = re.compile(r"[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?")
@ -269,6 +269,8 @@ class SVGMobject(VMobject):
self._handle_scale_transform(mobject, op_name, op_args)
elif op_name == "rotate":
self._handle_rotate_transform(mobject, op_name, op_args)
elif op_name.startswith("skew"):
self._handle_skew_transform(mobject, op_name, op_args)
def _handle_matrix_transform(self, mobject, op_name, op_args):
transform = np.array(op_args).reshape([3, 2])
@ -314,6 +316,15 @@ class SVGMobject(VMobject):
else:
deg, x, y = op_args
mobject.rotate(deg * DEGREES, axis=IN, about_point=np.array([x, y, 0]))
def _handle_skew_transform(self, mobject, op_name, op_args):
rad = op_args[0] * DEGREES
if op_name == "skewX":
tana = np.tan(rad)
self._handle_matrix_transform(mobject, None, [1., 0., tana, 1., 0., 0.])
elif op_name == "skewY":
tana = np.tan(rad)
self._handle_matrix_transform(mobject, None, [1., tana, 0., 1., 0., 0.])
def flatten(self, input_list):
output_list = []