def get_number_mobject(self, x, direction=None, buff=None, scale_val=None, # number_config=None, **number_config): number_config = merge_dicts_recursively( self.decimal_number_config, number_config or {}, ) if scale_val is None: scale_val = self.number_scale_val if direction is None: direction = self.line_to_number_direction #direction = self.label_direction if buff is None: buff = self.line_to_number_buff #buff = buff or self.line_to_number_buff num_mob = DecimalNumber(x, **number_config) num_mob.scale(scale_val) num_mob.next_to( self.number_to_point(x), direction=direction, buff=buff ) if x < 0 and self.line_to_number_direction[0] == 0: # Align without the minus sign num_mob.shift(num_mob[0].get_width() * LEFT / 2) return num_mob
def get_number_mobject( self, number, # input number should be a origin_x number_config=None, scale_val=None, direction=None, buff=None, number_is_origin_x=True): number_config = merge_dicts_recursively( self.decimal_number_config, number_config or {}, ) if scale_val is None: scale_val = self.number_scale_val if direction is None: direction = self.label_direction buff = buff or self.line_to_number_buff num_mob = DecimalNumber(self.log_factor * (self.log_base**(number)), **number_config) num_mob.scale(scale_val) num_mob.next_to(self.number_to_point(number, number_is_origin_x), direction=direction, buff=buff) return num_mob
def get_number_mobject( self, x: float, direction: np.ndarray | None = None, buff: float | None = None, **number_config ) -> DecimalNumber: number_config = merge_dicts_recursively( self.decimal_number_config, number_config ) if direction is None: direction = self.line_to_number_direction if buff is None: buff = self.line_to_number_buff num_mob = DecimalNumber(x, **number_config) num_mob.next_to( self.number_to_point(x), direction=direction, buff=buff ) if x < 0 and direction[0] == 0: # Align without the minus sign num_mob.shift(num_mob[0].get_width() * LEFT / 2) return num_mob
def create_axis(self, range_terms: Sequence[float], axis_config: dict[str], length: float) -> NumberLine: new_config = merge_dicts_recursively(self.axis_config, axis_config) new_config["width"] = length axis = NumberLine(range_terms, **new_config) axis.shift(-axis.n2p(0)) return axis
def create_axis(self, min_val, max_val, axis_config): new_config = merge_dicts_recursively( self.axis_config, {"x_min": min_val, "x_max": max_val}, axis_config, ) return NumberLine(**new_config)
def __init__(self, **kwargs): digest_config(self, kwargs) if self.camera_config["pixel_width"] == PRODUCTION_QUALITY_CAMERA_CONFIG["pixel_width"]: config = {} else: config = self.low_quality_config config = merge_dicts_recursively(config, kwargs) ThreeDScene.__init__(self, **config)
def __init__(self, **kwargs): digest_config(self, kwargs) if self.camera_config["pixel_width"] == PRODUCTION_QUALITY_CAMERA_CONFIG["pixel_width"]: config = {} else: config = self.low_quality_config config = merge_dicts_recursively(config, kwargs) ThreeDScene.__init__(self, **config)
def create_axis(self, *args): if args[2] is not None and not isinstance(args[2], (int, float)): min_val, max_val, axis_config = args new_config = merge_dicts_recursively( self.number_line_config, { "x_min": min_val, "x_max": max_val }, axis_config, ) return NumberLine(**new_config) else: range_terms, axis_config, length = args new_config = merge_dicts_recursively(self.axis_config, axis_config) new_config["width"] = length axis = NumberLine(range_terms, **new_config) axis.shift(-axis.n2p(0)) return axis
def __init__(self, **kwargs): digest_config(self, kwargs) self.low_quality_config = vars(self)['low_quality_config'] self.three_d_axes_config = vars(self)['three_d_axes_config'] self.cut_axes_at_radius = vars(self)['cut_axes_at_radius'] self.sphere_config = vars(self)['sphere_config'] self.default_angled_camera_position = vars( self)['default_angled_camera_position'] if self.camera_config[ "pixel_width"] == PRODUCTION_QUALITY_CAMERA_CONFIG[ "pixel_width"]: config = {} else: config = self.low_quality_config config = merge_dicts_recursively(config, kwargs) ThreeDScene.__init__(self, **config)
def get_vector(self, coords, **kwargs): vector_config = merge_dicts_recursively(self.vector_config, kwargs) output = np.array(self.func(*coords)) norm = get_norm(output) if norm > 0: output *= self.length_func(norm) / norm origin = self.coordinate_system.get_origin() _input = self.coordinate_system.c2p(*coords) _output = self.coordinate_system.c2p(*output) vect = Arrow(origin, _output, buff=0, **vector_config) vect.shift(_input - origin) vect.set_rgba_array([[*self.value_to_rgb(norm), self.opacity]]) return vect
def get_sphere(self, **kwargs): """ Returns a sphere with the passed **kwargs as properties. Parameters ---------- **kwargs Some valid kwargs are: Any param of a Sphere or ParametricSurface. Returns ------- Sphere The sphere object. """ config = merge_dicts_recursively(self.sphere_config, kwargs) return Sphere(**config)
def get_custom_defaults(): filename = "custom_defaults.yml" manim_defaults_file = os.path.join(get_manim_dir(), filename) with open(manim_defaults_file, "r") as file: custom_defaults = yaml.safe_load(file) # See if there's a custom_defaults file in current directory, # and if so, it further updates the defaults based on it. if os.path.exists(filename): with open(filename, "r") as file: local_defaults = yaml.safe_load(file) if local_defaults: custom_defaults = merge_dicts_recursively( custom_defaults, local_defaults, ) return custom_defaults
def get_coordinate_labels(self, *numbers, **kwargs): if len(numbers) == 0: numbers = self.get_default_coordinate_values() self.coordinate_labels = VGroup() for number in numbers: z = complex(number) if abs(z.imag) > abs(z.real): axis = self.get_y_axis() value = z.imag kwargs = merge_dicts_recursively( kwargs, {"number_config": {"unit": "i"}}, ) else: axis = self.get_x_axis() value = z.real number_mob = axis.get_number_mobject(value, **kwargs) self.coordinate_labels.add(number_mob) return self.coordinate_labels
def get_number_mobject(self, number, number_config=None, scale_val=None, direction=None, buff=None): number_config = merge_dicts_recursively( self.decimal_number_config, number_config or {}, ) scale_val = scale_val or self.number_scale_val direction = direction or self.label_direction buff = buff or self.line_to_number_buff num_mob = DecimalNumber(number, **number_config) num_mob.scale(scale_val) num_mob.next_to(self.number_to_point(number), direction=direction, buff=buff) return num_mob
def get_custom_config(): filename = "custom_config.yml" global_defaults_file = os.path.join(get_manim_dir(), "manimlib", "default_config.yml") if os.path.exists(global_defaults_file): with open(global_defaults_file, "r") as file: config = yaml.safe_load(file) if os.path.exists(filename): with open(filename, "r") as file: local_defaults = yaml.safe_load(file) if local_defaults: config = merge_dicts_recursively( config, local_defaults, ) else: with open(filename, "r") as file: config = yaml.safe_load(file) return config
def get_number_mobject(self, number, number_config=None, scale_val=None, direction=None, buff=None): number_config = merge_dicts_recursively( self.decimal_number_config, number_config or {}, ) if scale_val is None: scale_val = self.number_scale_val if direction is None: direction = self.label_direction buff = buff or self.line_to_number_buff num_mob = DecimalNumber(number, **number_config) num_mob.scale(scale_val) num_mob.next_to( self.number_to_point(number), direction=direction, buff=buff ) return num_mob
def create_axis(self, range_terms, axis_config, length): new_config = merge_dicts_recursively(self.axis_config, axis_config) new_config["width"] = length axis = NumberLine(range_terms, **new_config) axis.shift(-axis.n2p(0)) return axis
def get_sphere(self, **kwargs): config = merge_dicts_recursively(self.sphere_config, kwargs) return Sphere(**config)
def get_sphere(self, **kwargs): config = merge_dicts_recursively(self.sphere_config, kwargs) return Sphere(**config)