예제 #1
0
 def test_run(self):
     ifc = ifcopenshell.file()
     style = ifc.createIfcSurfaceStyle("Name", "BOTH")
     obj = bpy.data.materials.new("Material")
     subject.import_surface_attributes(style, obj)
     assert obj.BIMStyleProperties.attributes.get("Name").string_value == "Name"
     assert obj.BIMStyleProperties.attributes.get("Side").enum_value == "BOTH"
예제 #2
0
 def test_get_rendering_styles_from_a_emission_bsdf(self):
     obj = bpy.data.materials.new("Material")
     obj.diffuse_color = [1, 1, 1, 1]
     obj.use_nodes = True
     node = obj.node_tree.nodes["Principled BSDF"]
     obj.node_tree.nodes.remove(node)
     node = obj.node_tree.nodes.new(type="ShaderNodeEmission")
     node.inputs["Color"].default_value = [0.5, 0.5, 0.5, 0.5]
     assert subject.get_surface_rendering_attributes(obj) == {
         "SurfaceColour": {
             "Name": None,
             "Red": 1,
             "Green": 1,
             "Blue": 1,
         },
         "Transparency": 1,
         "DiffuseColour": {
             "Name": None,
             "Red": 0.5,
             "Green": 0.5,
             "Blue": 0.5,
         },
         "SpecularHighlight": None,
         "ReflectanceMethod": "FLAT",
     }
예제 #3
0
 def test_get_different_surface_and_diffuse_colours_from_a_principled_bsdf(self):
     obj = bpy.data.materials.new("Material")
     obj.diffuse_color = [1, 1, 1, 1]
     obj.use_nodes = True
     node = obj.node_tree.nodes["Principled BSDF"]
     node.inputs["Alpha"].default_value = 0.8
     node.inputs["Base Color"].default_value = [0.5, 0.5, 0.5, 0.5]
     node.inputs["Roughness"].default_value = 0.2
     assert subject.get_surface_rendering_attributes(obj) == {
         "SurfaceColour": {
             "Name": None,
             "Red": 1,
             "Green": 1,
             "Blue": 1,
         },
         "Transparency": 1 - node.inputs["Alpha"].default_value,
         "DiffuseColour": {
             "Name": None,
             "Red": 0.5,
             "Green": 0.5,
             "Blue": 0.5,
         },
         "SpecularHighlight": {"IfcSpecularRoughness": 0.2},
         "ReflectanceMethod": "NOTDEFINED",
     }
예제 #4
0
    def test_get_the_leaf_node_of_each_map_in_a_principled_bsdf(self):
        obj = bpy.data.materials.new("Material")
        obj.use_nodes = True
        bsdf = obj.node_tree.nodes["Principled BSDF"]

        diffuse = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Base Color"], diffuse.outputs["Color"])
        shininess = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Roughness"], shininess.outputs["Color"])
        normal = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Normal"], normal.outputs["Color"])
        specular = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Specular"], specular.outputs["Color"])
        emission = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Emission Strength"], emission.outputs["Color"])
        opacity = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Alpha"], opacity.outputs["Color"])

        assert subject.get_surface_textures(obj) == {
            "DIFFUSE": diffuse,
            "SHININESS": shininess,
            "NORMAL": normal,
            "SPECULAR": specular,
            "SELFILLUMINATION": emission,
            "OPACITY": opacity,
        }
예제 #5
0
 def test_a_texture_without_an_image_filepath_is_not_supported(self):
     obj = bpy.data.materials.new("Material")
     obj.use_nodes = True
     bsdf = obj.node_tree.nodes["Principled BSDF"]
     node = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
     obj.node_tree.links.new(bsdf.inputs["Base Color"], node.outputs["Color"])
     assert subject.can_support_texture_style(obj) is False
예제 #6
0
 def test_other_unsupported_bsdfs_copy_the_rendering_style_from_the_shading_colours_as_a_fallback(self):
     obj = bpy.data.materials.new("Material")
     obj.diffuse_color = [1, 1, 1, 1]
     obj.use_nodes = True
     node = obj.node_tree.nodes["Principled BSDF"]
     obj.node_tree.nodes.remove(node)
     node = obj.node_tree.nodes.new(type="ShaderNodeVolumePrincipled")
     node.inputs["Color"].default_value = [0.5, 0.5, 0.5, 0.5]
     assert subject.get_surface_rendering_attributes(obj) == {
         "SurfaceColour": {
             "Name": None,
             "Red": 1,
             "Green": 1,
             "Blue": 1,
         },
         "Transparency": 1,
         "DiffuseColour": {
             "Name": None,
             "Red": 1,
             "Green": 1,
             "Blue": 1,
         },
         "SpecularHighlight": None,
         "ReflectanceMethod": "NOTDEFINED",
     }
예제 #7
0
 def test_run(self):
     tool.Ifc.set(ifcopenshell.file())
     style_item = tool.Ifc.get().createIfcSurfaceStyleWithTextures()
     style = tool.Ifc.get().createIfcSurfaceStyle(Styles=[style_item])
     obj = bpy.data.materials.new("Material")
     obj.BIMMaterialProperties.ifc_style_id = style.id()
     assert subject.get_surface_texture_style(obj) == style_item
예제 #8
0
 def test_the_texture_needs_to_connect_to_the_bsdf(self):
     obj = bpy.data.materials.new("Material")
     obj.use_nodes = True
     bsdf = obj.node_tree.nodes["Principled BSDF"]
     node = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
     cwd = os.path.dirname(os.path.realpath(__file__))
     image_path = os.path.join(cwd, "..", "files", "image.jpg")
     node.image = bpy.data.images.load(image_path)
     assert subject.can_support_texture_style(obj) is False
예제 #9
0
 def test_we_need_at_least_one_image_connected_to_a_bsdf(self):
     obj = bpy.data.materials.new("Material")
     obj.use_nodes = True
     bsdf = obj.node_tree.nodes["Principled BSDF"]
     node = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
     cwd = os.path.dirname(os.path.realpath(__file__))
     image_path = os.path.join(cwd, "..", "files", "image.jpg")
     node.image = bpy.data.images.load(image_path)
     obj.node_tree.links.new(bsdf.inputs["Base Color"], node.outputs["Color"])
     assert subject.can_support_texture_style(obj) is True
예제 #10
0
 def test_get_colours_from_a_basic_material_ifc2x3(self):
     tool.Ifc.set(ifcopenshell.file(schema="IFC2X3"))
     obj = bpy.data.materials.new("Material")
     obj.diffuse_color = [1, 1, 1, 1]
     assert subject.get_surface_shading_attributes(obj) == {
         "SurfaceColour": {
             "Name": None,
             "Red": 1,
             "Green": 1,
             "Blue": 1,
         },
     }
예제 #11
0
    def test_get_the_leaf_node_of_each_map_in_a_emission_bsdf(self):
        obj = bpy.data.materials.new("Material")
        obj.use_nodes = True
        bsdf = obj.node_tree.nodes["Principled BSDF"]

        obj.node_tree.nodes.remove(bsdf)
        bsdf = obj.node_tree.nodes.new(type="ShaderNodeEmission")
        output = {n.type: n for n in obj.node_tree.nodes}.get("OUTPUT_MATERIAL", None)
        obj.node_tree.links.new(output.inputs["Surface"], bsdf.outputs["Emission"])

        diffuse = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Color"], diffuse.outputs["Color"])

        assert subject.get_surface_textures(obj) == {"DIFFUSE": diffuse}
예제 #12
0
    def test_get_the_leaf_node_of_each_map_in_a_glass_bsdf(self):
        obj = bpy.data.materials.new("Material")
        obj.use_nodes = True
        bsdf = obj.node_tree.nodes["Principled BSDF"]

        obj.node_tree.nodes.remove(bsdf)
        bsdf = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlass")
        output = {n.type: n for n in obj.node_tree.nodes}.get("OUTPUT_MATERIAL", None)
        obj.node_tree.links.new(output.inputs["Surface"], bsdf.outputs["BSDF"])

        diffuse = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Color"], diffuse.outputs["Color"])
        shininess = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Roughness"], shininess.outputs["Color"])
        normal = obj.node_tree.nodes.new(type="ShaderNodeTexImage")
        obj.node_tree.links.new(bsdf.inputs["Normal"], normal.outputs["Color"])

        assert subject.get_surface_textures(obj) == {"DIFFUSE": diffuse, "SHININESS": shininess, "NORMAL": normal}
예제 #13
0
 def test_anything_with_nodes_can_support_a_rendering_style(self):
     obj = bpy.data.materials.new("Material")
     obj.use_nodes = True
     assert subject.can_support_rendering_style(obj) is True
예제 #14
0
 def test_getting_no_style(self):
     assert subject.get_style(bpy.data.materials.new("Material")) is None
예제 #15
0
 def test_getting_a_linked_style(self):
     tool.Ifc.set(ifcopenshell.file())
     style = tool.Ifc.get().createIfcSurfaceStyle()
     obj = bpy.data.materials.new("Material")
     obj.BIMMaterialProperties.ifc_style_id = style.id()
     assert subject.get_style(obj) == style
예제 #16
0
 def test_without_nodes_we_do_not_support_textures(self):
     obj = bpy.data.materials.new("Material")
     obj.use_nodes = False
     assert subject.can_support_texture_style(obj) is False
예제 #17
0
 def test_getting_nothing_for_a_broken_link_style(self):
     obj = bpy.data.materials.new("Material")
     obj.BIMMaterialProperties.ifc_style_id = 1
     assert subject.get_style(obj) == None
예제 #18
0
 def test_run(self):
     assert subject.get_name(bpy.data.materials.new("Material")) == "Material"
예제 #19
0
 def test_run(self):
     obj = bpy.data.materials.new("Material")
     subject.enable_editing(obj)
     assert obj.BIMStyleProperties.is_editing is True
예제 #20
0
 def test_run(self):
     TestImportSurfaceAttributes().test_run()
     obj = bpy.data.materials.get("Material")
     assert subject.export_surface_attributes(obj) == {"Name": "Name", "Side": "BOTH"}
예제 #21
0
 def test_run(self):
     bpy.ops.bim.create_project()
     context = ifcopenshell.util.representation.get_context(tool.Ifc.get(), "Model", "Body", "MODEL_VIEW")
     assert subject.get_context("obj") == context