mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-24 10:06:57 +00:00
Fix reference images import after styles ui change
This commit is contained in:
@@ -2643,8 +2643,33 @@ class AddReferenceImage(bpy.types.Operator, Operator):
|
|||||||
|
|
||||||
style = ifc_file.by_id(material.BIMMaterialProperties.ifc_style_id)
|
style = ifc_file.by_id(material.BIMMaterialProperties.ifc_style_id)
|
||||||
tool.Style.assign_style_to_object(style, obj)
|
tool.Style.assign_style_to_object(style, obj)
|
||||||
tool.Geometry.record_object_materials(obj)
|
|
||||||
|
|
||||||
material.BIMStyleProperties.diffuse_path = image_filepath.as_posix()
|
# TODO: IfcSurfaceStyleRendering is unnecessary here, added it only because
|
||||||
material.BIMStyleProperties.uv_mode = "Generated"
|
# we don't support IfcSurfaceStyleWithTextures without Rendering yet
|
||||||
bpy.ops.bim.update_style_colours()
|
shading_attributes = {
|
||||||
|
"SurfaceColour": {
|
||||||
|
"Red": 1.0,
|
||||||
|
"Green": 1.0,
|
||||||
|
"Blue": 1.0,
|
||||||
|
},
|
||||||
|
"Transparency": 0.0,
|
||||||
|
"ReflectanceMethod": "NOTDEFINED",
|
||||||
|
}
|
||||||
|
ifcopenshell.api.run(
|
||||||
|
"style.add_surface_style",
|
||||||
|
tool.Ifc.get(),
|
||||||
|
style=style,
|
||||||
|
ifc_class="IfcSurfaceStyleRendering",
|
||||||
|
attributes=shading_attributes,
|
||||||
|
)
|
||||||
|
texture = ifc_file.create_entity("IfcImageTexture", Mode="DIFFUSE", URLReference=image_filepath.as_posix())
|
||||||
|
textures = [texture]
|
||||||
|
ifc_file.create_entity("IfcTextureCoordinateGenerator", Maps=textures, Mode="COORD") # UV map
|
||||||
|
tool.Ifc.run(
|
||||||
|
"style.add_surface_style",
|
||||||
|
style=style,
|
||||||
|
ifc_class="IfcSurfaceStyleWithTextures",
|
||||||
|
attributes={"Textures": textures},
|
||||||
|
)
|
||||||
|
tool.Style.reload_material_from_ifc(material)
|
||||||
|
tool.Geometry.record_object_materials(obj)
|
||||||
|
|||||||
@@ -124,9 +124,7 @@ class DisableEditingStyle(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
|
|
||||||
style = tool.Ifc.get().by_id(props.is_editing_style)
|
style = tool.Ifc.get().by_id(props.is_editing_style)
|
||||||
material = tool.Ifc.get_object(style)
|
material = tool.Ifc.get_object(style)
|
||||||
# just to trigger style update
|
tool.Style.reload_material_from_ifc(material)
|
||||||
material.BIMStyleProperties.active_style_type = material.BIMStyleProperties.active_style_type
|
|
||||||
|
|
||||||
props.is_editing_style = 0
|
props.is_editing_style = 0
|
||||||
|
|
||||||
|
|
||||||
@@ -652,7 +650,7 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
# TODO: provide `uv_maps` - need to rework .get_uv_maps not to depend on a single representation
|
# TODO: provide `uv_maps` - need to rework .get_uv_maps not to depend on a single representation
|
||||||
material = tool.Ifc.get_object(self.style)
|
material = tool.Ifc.get_object(self.style)
|
||||||
shading_style = self.rendering_style or self.shading_style
|
shading_style = self.rendering_style or self.shading_style
|
||||||
# TODO: support creating texture styles without defining shading style first
|
# TODO: support creating texture styles without defining rendering style first
|
||||||
if self.rendering_style is None:
|
if self.rendering_style is None:
|
||||||
self.report(
|
self.report(
|
||||||
{"ERROR"},
|
{"ERROR"},
|
||||||
|
|||||||
@@ -538,3 +538,7 @@ class Style(blenderbim.core.tool.Style):
|
|||||||
"""assigns `style` to `object` current representation"""
|
"""assigns `style` to `object` current representation"""
|
||||||
representation = tool.Geometry.get_active_representation(obj)
|
representation = tool.Geometry.get_active_representation(obj)
|
||||||
tool.Ifc.run("style.assign_representation_styles", shape_representation=representation, styles=[style])
|
tool.Ifc.run("style.assign_representation_styles", shape_representation=representation, styles=[style])
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def reload_material_from_ifc(cls, blender_material):
|
||||||
|
blender_material.BIMStyleProperties.active_style_type = blender_material.BIMStyleProperties.active_style_type
|
||||||
|
|||||||
@@ -872,5 +872,10 @@ class TestAddReferenceImage(NewFile):
|
|||||||
representation_items = set(tool.Geometry.get_active_representation(obj).Items)
|
representation_items = set(tool.Geometry.get_active_representation(obj).Items)
|
||||||
assert styled_items == representation_items
|
assert styled_items == representation_items
|
||||||
|
|
||||||
assert Path(material.BIMStyleProperties.diffuse_path) == filepath
|
material_nodes = material.node_tree.nodes
|
||||||
assert material.BIMStyleProperties.uv_mode == "Generated"
|
texture_filepath = material_nodes["Image Texture"].image.filepath
|
||||||
|
texture_filepath = Path(tool.Blender.blender_path_to_posix(texture_filepath))
|
||||||
|
assert texture_filepath == filepath
|
||||||
|
|
||||||
|
uv_node = material_nodes["Texture Coordinate"]
|
||||||
|
assert len(uv_node.outputs["Generated"].links[:]) == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user