def _get_the_set_params(self, params_conf: Config) -> dict: """ Extracts actual values to set from a Config object. :param params_conf: Object with all user-defined data. :return: Parameters to set as {name of the parameter: it's value} pairs. """ params = {} for key in params_conf.data.keys(): result = None if key == "cf_color_link_to_displacement": result = params_conf.get_float(key) elif key == "cf_change_to_vertex_color": result = params_conf.get_string(key) elif key == "cf_textures": result = {} paths_conf = Config(params_conf.get_raw_dict(key)) for text_key in paths_conf.data.keys(): text_path = paths_conf.get_string(text_key) result.update({text_key: text_path}) elif key == "cf_switch_to_emission_shader": result = {} emission_conf = Config(params_conf.get_raw_dict(key)) for emission_key in emission_conf.data.keys(): if emission_key == "color": attr_val = emission_conf.get_list( "color", [1, 1, 1, 1]) elif emission_key == "strength": attr_val = emission_conf.get_float("strength", 1.0) result.update({emission_key: attr_val}) elif key == "cf_infuse_texture": result = Config(params_conf.get_raw_dict(key)) elif key == "cf_infuse_material": result = Config(params_conf.get_raw_dict(key)) elif key == "cf_add_dust": result = params_conf.get_raw_dict(key) elif "cf_set_" in key or "cf_add_" in key: result = params_conf.get_raw_value(key) else: result = params_conf.get_raw_value(key) params.update({key: result}) return params
def _get_the_set_params(self, params_conf: Config): """ Extracts actual values to set from a Config object. :param params_conf: Object with all user-defined data. Type: Config. :return: Parameters to set as {name of the parameter: it's value} pairs. Type: dict. """ params = {} for key in params_conf.data.keys(): if key == "cf_add_modifier": modifier_config = Config(params_conf.get_raw_dict(key)) # instruction about unpacking the data: key, corresponding Config method to extract the value, # it's default value and a postproc function instructions = { "name": (Config.get_string, None, str.upper), "thickness": (Config.get_float, None, None) } # unpack result = self._unpack_params(modifier_config, instructions) elif key == "cf_set_shading": result = { "shading_mode": params_conf.get_string("cf_set_shading"), "angle_value": params_conf.get_float( "cf_shading_auto_smooth_angle_in_deg", 30) } elif key == "cf_add_displace_modifier_with_texture": displace_config = Config(params_conf.get_raw_dict(key)) # instruction about unpacking the data: key, corresponding Config method to extract the value, # it's default value and a postproc function instructions = { "texture": (Config.get_raw_value, [], None), "mid_level": (Config.get_float, 0.5, None), "subdiv_level": (Config.get_int, 2, None), "strength": (Config.get_float, 0.1, None), "min_vertices_for_subdiv": (Config.get_int, 10000, None) } # unpack result = self._unpack_params(displace_config, instructions) elif key == "cf_add_uv_mapping": uv_config = Config(params_conf.get_raw_dict(key)) # instruction about unpacking the data: key, corresponding Config method to extract the value, # it's default value and a postproc function instructions = { "projection": (Config.get_string, None, str.lower), "forced_recalc_of_uv_maps": (Config.get_bool, False, None) } # unpack result = self._unpack_params(uv_config, instructions) elif key == "cf_randomize_materials": rand_config = Config(params_conf.get_raw_dict(key)) # instruction about unpacking the data: key, corresponding Config method to extract the value, # it's default value and a postproc function instructions = { "randomization_level": (Config.get_float, 0.2, None), "add_to_objects_without_material": (Config.get_bool, False, None), "materials_to_replace_with": (Config.get_list, BlenderUtility.get_all_materials(), None), "obj_materials_cond_to_be_replaced": (Config.get_raw_dict, {}, None) } result = self._unpack_params(rand_config, instructions) result["material_to_replace_with"] = choice( result["materials_to_replace_with"]) else: result = params_conf.get_raw_value(key) params.update({key: result}) return params