Source code for pyleecan.Functions.Material.replace_material_pyleecan_obj
from ...Classes.Material import Material
from ...Functions.Material.compare_material import compare_material
[docs]def replace_material_pyleecan_obj(obj, mat1, mat2, comp_name_path=True):
"""
replace first material by the second in the object
Parameters
----------
obj: Pyleecan object
mat1: Material
material to replace
mat2: Material
new material
comp_name_path: bool
replace strictly mat1 or replace materials without comparing mat1.path and mat1.name
Returns
-------
is_change: bool
True if a material has been replaced
"""
is_change = False
obj_dict = obj.as_dict()
if comp_name_path:
for key, val in obj_dict.items():
if isinstance(getattr(obj, key), Material) and getattr(obj, key) == mat1:
setattr(obj, key, mat2)
is_change = True
# Call the function recursively to modify attributes materials
elif isinstance(val, dict):
is_change_recurs = replace_material_pyleecan_obj(
getattr(obj, key), mat1, mat2, comp_name_path
)
# update is_change if needed
if not is_change:
is_change = is_change_recurs
else:
for key, val in obj_dict.items():
# Compare materials with mat1 without name and path
if isinstance(getattr(obj, key), Material) and compare_material(
getattr(obj, key), mat1
):
setattr(obj, key, mat2)
is_change = True
# Call the function recursively to modify attributes materials
elif isinstance(val, dict):
is_change_recurs = replace_material_pyleecan_obj(
getattr(obj, key), mat1, mat2, comp_name_path
)
# update is_change if needed
if not is_change:
is_change = is_change_recurs
return is_change