mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-22 12:07:59 +00:00
Fix IfcSurfaceStyleRendering colour reset on save
This commit is contained in:
committed by
Thomas Krijnen
parent
9d1cd6adf6
commit
f2ddda8f83
@@ -118,6 +118,19 @@ def update_shader_graph(self: Union["Texture", "BIMStylesProperties"], context:
|
|||||||
tool.Loader.create_surface_style_with_textures(material, shading_data, textures_data)
|
tool.Loader.create_surface_style_with_textures(material, shading_data, textures_data)
|
||||||
|
|
||||||
|
|
||||||
|
def _make_clear_null_updater(null_prop: str):
|
||||||
|
def _update(self: "BIMStylesProperties", context: bpy.types.Context) -> None:
|
||||||
|
self[null_prop] = False
|
||||||
|
update_shader_graph(self, context)
|
||||||
|
|
||||||
|
return _update
|
||||||
|
|
||||||
|
|
||||||
|
update_diffuse_colour = _make_clear_null_updater("is_diffuse_colour_null")
|
||||||
|
update_specular_colour = _make_clear_null_updater("is_specular_colour_null")
|
||||||
|
update_specular_highlight_value = _make_clear_null_updater("is_specular_highlight_null")
|
||||||
|
|
||||||
|
|
||||||
UV_MODES = [
|
UV_MODES = [
|
||||||
("UV", "UV", _("Actual UV data presented on the geometry")),
|
("UV", "UV", _("Actual UV data presented on the geometry")),
|
||||||
("Generated", "Generated", _("Automatically-generated UV from the vertex positions of the mesh")),
|
("Generated", "Generated", _("Automatically-generated UV from the vertex positions of the mesh")),
|
||||||
@@ -221,24 +234,29 @@ class BIMStylesProperties(PropertyGroup):
|
|||||||
transparency: bpy.props.FloatProperty(
|
transparency: bpy.props.FloatProperty(
|
||||||
name="Transparency", default=0.0, min=0.0, max=1.0, update=update_shader_graph
|
name="Transparency", default=0.0, min=0.0, max=1.0, update=update_shader_graph
|
||||||
)
|
)
|
||||||
# TODO: do something on null?
|
is_diffuse_colour_null: BoolProperty(name="Is Null", update=update_shader_graph)
|
||||||
is_diffuse_colour_null: BoolProperty(name="Is Null")
|
|
||||||
diffuse_colour_class: EnumProperty(
|
diffuse_colour_class: EnumProperty(
|
||||||
items=[(x, x, "") for x in get_args(ColourClass)],
|
items=[(x, x, "") for x in get_args(ColourClass)],
|
||||||
name="Diffuse Colour Class",
|
name="Diffuse Colour Class",
|
||||||
update=update_shader_graph,
|
update=update_diffuse_colour,
|
||||||
)
|
)
|
||||||
diffuse_colour: bpy.props.FloatVectorProperty(
|
diffuse_colour: bpy.props.FloatVectorProperty(
|
||||||
name="Diffuse Colour", subtype="COLOR", default=(1, 1, 1), min=0.0, max=1.0, size=3, update=update_shader_graph
|
name="Diffuse Colour",
|
||||||
|
subtype="COLOR",
|
||||||
|
default=(1, 1, 1),
|
||||||
|
min=0.0,
|
||||||
|
max=1.0,
|
||||||
|
size=3,
|
||||||
|
update=update_diffuse_colour,
|
||||||
)
|
)
|
||||||
diffuse_colour_ratio: bpy.props.FloatProperty(
|
diffuse_colour_ratio: bpy.props.FloatProperty(
|
||||||
name="Diffuse Ratio", default=0.0, min=0.0, max=1.0, update=update_shader_graph
|
name="Diffuse Ratio", default=0.0, min=0.0, max=1.0, update=update_diffuse_colour
|
||||||
)
|
)
|
||||||
is_specular_colour_null: BoolProperty(name="Is Null")
|
is_specular_colour_null: BoolProperty(name="Is Null", update=update_shader_graph)
|
||||||
specular_colour_class: EnumProperty(
|
specular_colour_class: EnumProperty(
|
||||||
items=[(x, x, "") for x in get_args(ColourClass)],
|
items=[(x, x, "") for x in get_args(ColourClass)],
|
||||||
name="Specular Colour Class",
|
name="Specular Colour Class",
|
||||||
update=update_shader_graph,
|
update=update_specular_colour,
|
||||||
default="IfcNormalisedRatioMeasure",
|
default="IfcNormalisedRatioMeasure",
|
||||||
)
|
)
|
||||||
specular_colour: bpy.props.FloatVectorProperty(
|
specular_colour: bpy.props.FloatVectorProperty(
|
||||||
@@ -248,7 +266,7 @@ class BIMStylesProperties(PropertyGroup):
|
|||||||
min=0.0,
|
min=0.0,
|
||||||
max=1.0,
|
max=1.0,
|
||||||
size=3,
|
size=3,
|
||||||
update=update_shader_graph,
|
update=update_specular_colour,
|
||||||
)
|
)
|
||||||
specular_colour_ratio: bpy.props.FloatProperty(
|
specular_colour_ratio: bpy.props.FloatProperty(
|
||||||
name="Specular Ratio",
|
name="Specular Ratio",
|
||||||
@@ -256,16 +274,16 @@ class BIMStylesProperties(PropertyGroup):
|
|||||||
default=0.0,
|
default=0.0,
|
||||||
min=0.0,
|
min=0.0,
|
||||||
max=1.0,
|
max=1.0,
|
||||||
update=update_shader_graph,
|
update=update_specular_colour,
|
||||||
)
|
)
|
||||||
is_specular_highlight_null: BoolProperty(name="Is Null")
|
is_specular_highlight_null: BoolProperty(name="Is Null", update=update_shader_graph)
|
||||||
specular_highlight: bpy.props.FloatProperty(
|
specular_highlight: bpy.props.FloatProperty(
|
||||||
name="Specular Highlight",
|
name="Specular Highlight",
|
||||||
description="Used as Roughness value in PHYSICAL Reflectance Method",
|
description="Used as Roughness value in PHYSICAL Reflectance Method",
|
||||||
default=0.0,
|
default=0.0,
|
||||||
min=0.0,
|
min=0.0,
|
||||||
max=1.0,
|
max=1.0,
|
||||||
update=update_shader_graph,
|
update=update_specular_highlight_value,
|
||||||
)
|
)
|
||||||
reflectance_method: EnumProperty(
|
reflectance_method: EnumProperty(
|
||||||
name="Reflectance Method",
|
name="Reflectance Method",
|
||||||
|
|||||||
@@ -203,6 +203,11 @@ class Style(bonsai.core.tool.Style):
|
|||||||
|
|
||||||
available_props = props.bl_rna.properties.keys()
|
available_props = props.bl_rna.properties.keys()
|
||||||
for prop_blender, prop_ifc in STYLE_PROPS_MAP.items():
|
for prop_blender, prop_ifc in STYLE_PROPS_MAP.items():
|
||||||
|
null_prop_name = f"is_{prop_blender}_null"
|
||||||
|
if null_prop_name in available_props and getattr(props, null_prop_name):
|
||||||
|
surface_style_data[prop_ifc] = None
|
||||||
|
continue
|
||||||
|
|
||||||
class_prop_name = f"{prop_blender}_class"
|
class_prop_name = f"{prop_blender}_class"
|
||||||
|
|
||||||
# get detailed color properties if available
|
# get detailed color properties if available
|
||||||
|
|||||||
Reference in New Issue
Block a user