mirror of
https://github.com/3b1b/manim.git
synced 2025-07-30 05:24:22 +08:00
support <line> tag in SVG
This commit is contained in:
@ -13,6 +13,7 @@ from tinycss2 import parse_stylesheet, parse_declaration_list
|
|||||||
from manimlib.constants import ORIGIN, UP, DOWN, LEFT, RIGHT, IN
|
from manimlib.constants import ORIGIN, UP, DOWN, LEFT, RIGHT, IN
|
||||||
from manimlib.constants import DEGREES, PI
|
from manimlib.constants import DEGREES, PI
|
||||||
|
|
||||||
|
from manimlib.mobject.geometry import Line
|
||||||
from manimlib.mobject.geometry import Circle
|
from manimlib.mobject.geometry import Circle
|
||||||
from manimlib.mobject.geometry import Rectangle
|
from manimlib.mobject.geometry import Rectangle
|
||||||
from manimlib.mobject.geometry import RoundedRectangle
|
from manimlib.mobject.geometry import RoundedRectangle
|
||||||
@ -174,6 +175,8 @@ class SVGMobject(VMobject):
|
|||||||
))
|
))
|
||||||
elif tag == 'use':
|
elif tag == 'use':
|
||||||
result += self.use_to_mobjects(element, style)
|
result += self.use_to_mobjects(element, style)
|
||||||
|
elif tag == 'line':
|
||||||
|
result.append(self.line_to_mobject(element, style))
|
||||||
elif tag == 'rect':
|
elif tag == 'rect':
|
||||||
result.append(self.rect_to_mobject(element, style))
|
result.append(self.rect_to_mobject(element, style))
|
||||||
elif tag == 'circle':
|
elif tag == 'circle':
|
||||||
@ -186,8 +189,8 @@ class SVGMobject(VMobject):
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
log.warning(f"Unsupported element type: {tag}")
|
log.warning(f"Unsupported element type: {tag}")
|
||||||
pass # TODO, support <line> and <text> tag
|
pass # TODO, support <text> tag
|
||||||
result = [m.insert_n_curves(0) for m in result if m is not None]
|
result = [m for m in result if m is not None]
|
||||||
self.handle_transforms(element, VGroup(*result))
|
self.handle_transforms(element, VGroup(*result))
|
||||||
if len(result) > 1 and not self.unpack_groups:
|
if len(result) > 1 and not self.unpack_groups:
|
||||||
result = [VGroup(*result)]
|
result = [VGroup(*result)]
|
||||||
@ -315,6 +318,16 @@ class SVGMobject(VMobject):
|
|||||||
mob.shift(mob.get_center() - mob.get_corner(UP + LEFT))
|
mob.shift(mob.get_center() - mob.get_corner(UP + LEFT))
|
||||||
return mob
|
return mob
|
||||||
|
|
||||||
|
def line_to_mobject(self, line_element, style):
|
||||||
|
x1, y1, x2, y2 = (
|
||||||
|
self.attribute_to_float(line_element.get(key, "0.0"))
|
||||||
|
for key in ("x1", "y1", "x2", "y2")
|
||||||
|
)
|
||||||
|
return Line(
|
||||||
|
[x1, -y1, 0], [x2, -y2, 0],
|
||||||
|
**parse_style(style, self.generate_default_style())
|
||||||
|
)
|
||||||
|
|
||||||
def handle_transforms(self, element, mobject):
|
def handle_transforms(self, element, mobject):
|
||||||
x, y = (
|
x, y = (
|
||||||
self.attribute_to_float(element.get(key, "0.0"))
|
self.attribute_to_float(element.get(key, "0.0"))
|
||||||
|
Reference in New Issue
Block a user