def rect_to_mobject(self, rect_element): fill_color = rect_element.getAttribute("fill") stroke_color = rect_element.getAttribute("stroke") stroke_width = rect_element.getAttribute("stroke-width") corner_radius = rect_element.getAttribute("rx") # input preprocessing if fill_color in ["", "none", "#FFF", "#FFFFFF"] or Color(fill_color) == Color(WHITE): opacity = 0 fill_color = BLACK # shdn't be necessary but avoids error msgs if fill_color in ["#000", "#000000"]: fill_color = WHITE if stroke_color in ["", "none", "#FFF", "#FFFFFF"] or Color(stroke_color) == Color(WHITE): stroke_width = 0 stroke_color = BLACK if stroke_color in ["#000", "#000000"]: stroke_color = WHITE if stroke_width in ["", "none", "0"]: stroke_width = 0 if corner_radius in ["", "0", "none"]: corner_radius = 0 corner_radius = float(corner_radius) if corner_radius == 0: mob = Rectangle( width=self.attribute_to_float( rect_element.getAttribute("width") ), height=self.attribute_to_float( rect_element.getAttribute("height") ), stroke_width=stroke_width, stroke_color=stroke_color, fill_color=fill_color, fill_opacity=opacity ) else: mob = RoundedRectangle( width=self.attribute_to_float( rect_element.getAttribute("width") ), height=self.attribute_to_float( rect_element.getAttribute("height") ), stroke_width=stroke_width, stroke_color=stroke_color, fill_color=fill_color, fill_opacity=opacity, corner_radius=corner_radius ) mob.shift(mob.get_center() - mob.get_corner(UP + LEFT)) return mob
def rect_to_mobject(self, rect_element): fill_color = rect_element.getAttribute("fill") stroke_color = rect_element.getAttribute("stroke") stroke_width = rect_element.getAttribute("stroke-width") corner_radius = rect_element.getAttribute("rx") # input preprocessing if fill_color in ["", "none", "#FFF", "#FFFFFF" ] or Color(fill_color) == Color(WHITE): opacity = 0 fill_color = BLACK # shdn't be necessary but avoids error msgs if fill_color in ["#000", "#000000"]: fill_color = WHITE if stroke_color in ["", "none", "#FFF", "#FFFFFF" ] or Color(stroke_color) == Color(WHITE): stroke_width = 0 stroke_color = BLACK if stroke_color in ["#000", "#000000"]: stroke_color = WHITE if stroke_width in ["", "none", "0"]: stroke_width = 0 if corner_radius in ["", "0", "none"]: corner_radius = 0 corner_radius = float(corner_radius) if corner_radius == 0: mob = Rectangle( width=self.attribute_to_float( rect_element.getAttribute("width")), height=self.attribute_to_float( rect_element.getAttribute("height")), stroke_width=stroke_width, stroke_color=stroke_color, fill_color=fill_color, fill_opacity=opacity, ) else: mob = RoundedRectangle( width=self.attribute_to_float( rect_element.getAttribute("width")), height=self.attribute_to_float( rect_element.getAttribute("height")), stroke_width=stroke_width, stroke_color=stroke_color, fill_color=fill_color, fill_opacity=opacity, corner_radius=corner_radius, ) mob.shift(mob.get_center() - mob.get_corner(UP + LEFT)) return mob
def __init__(self, texmob, **kwargs): VMobject.__init__(self, **kwargs) rect = Rectangle(width=texmob.get_width() + self.margin, height=texmob.get_height() + self.margin) rect.move_to(texmob) w = rect.get_width() h = rect.get_height() alpha = w / h hp = np.ceil(self.partitions / (2 * (alpha + 1))) wp = np.ceil(alpha * hp) sides = VGroup(*[ Line(rect.get_corner(c1), rect.get_corner(c2)) for c1, c2 in zip([UL, UR, DR, DL], [UR, DR, DL, UL]) ]) total_points = [] for side, p in zip(sides, [wp, hp, wp, hp]): path = FreehandDraw(side, p).points for point in path: total_points.append(point) total_points.append(total_points[0]) self.set_points_smoothly(total_points)
def rect_to_mobject(self, rect_element: MinidomElement, style: dict): """Converts a SVG <rect> command to a VMobject. Parameters ---------- rect_element : minidom.Element A SVG rect path command. style : dict Style specification, using the SVG names for properties. Returns ------- Rectangle Creates either a Rectangle, or RoundRectangle, VMobject from a rect element. """ stroke_width = rect_element.getAttribute("stroke-width") corner_radius = rect_element.getAttribute("rx") if stroke_width in ["", "none", "0"]: stroke_width = 0 if corner_radius in ["", "0", "none"]: corner_radius = 0 corner_radius = float(corner_radius) parsed_style = parse_style(style) parsed_style["stroke_width"] = stroke_width if corner_radius == 0: mob = Rectangle( width=self.attribute_to_float(rect_element.getAttribute("width")), height=self.attribute_to_float(rect_element.getAttribute("height")), **parsed_style, ) else: mob = RoundedRectangle( width=self.attribute_to_float(rect_element.getAttribute("width")), height=self.attribute_to_float(rect_element.getAttribute("height")), corner_radius=corner_radius, **parsed_style, ) mob.shift(mob.get_center() - mob.get_corner(UP + LEFT)) return mob