This commit is contained in:
Andrej730
2025-04-02 19:29:12 +05:00
parent 54c1dfdb77
commit 7bacdbf8dd
3 changed files with 22 additions and 4 deletions
+3 -2
View File
@@ -28,7 +28,7 @@ import bonsai.core.tool
import bonsai.tool as tool
import bonsai.bim.helper
from mathutils import Color
from typing import Union, Any, Optional, Literal, TYPE_CHECKING
from typing import Union, Any, Optional, Literal, TYPE_CHECKING, Sequence
if TYPE_CHECKING:
from bonsai.bim.module.style.prop import BIMStylesProperties, BIMStyleProperties
@@ -291,7 +291,7 @@ class Style(bonsai.core.tool.Style):
def get_surface_rendering_attributes(cls, obj: bpy.types.Material, verbose: bool = False) -> dict[str, Any]:
report = (lambda *x: print(*x)) if verbose else (lambda *x: None)
def color_to_ifc_format(color):
def color_to_ifc_format(color: Sequence[float]) -> dict[str, Any]:
return {
"Name": None,
"Red": color[0],
@@ -324,6 +324,7 @@ class Style(bonsai.core.tool.Style):
report(f"{GREEN}Viewport color{R} saved as {GREEN}SurfaceColour{R}")
# TODO: make sure bsdf is connected to the output?
assert obj.node_tree
bsdfs = {n.type: n for n in obj.node_tree.nodes if n.outputs and n.outputs[0].is_linked}
if "BSDF_PRINCIPLED" not in bsdfs:
report(f"{GREEN}Viewport color alpha{R} saved as {GREEN}Transparency{R}")
+13 -2
View File
@@ -162,7 +162,7 @@ class TemplateListSpy:
ui_name_cache = {}
panel_spy: PanelSpy = None
panel_spy: Union[PanelSpy, None] = None
def create_ui_name_cache():
@@ -287,6 +287,7 @@ def i_trigger_operator(operator):
@when(parsers.parse('I see "{text}"'))
@then(parsers.parse('I see "{text}"'))
def i_see_text(text):
assert panel_spy
panel_spy.refresh_spy()
assert [l for l in panel_spy.spied_labels if text in l], f"Text {text} not found in {panel_spy.spied_labels}"
@@ -295,6 +296,7 @@ def i_see_text(text):
@when(parsers.parse('I don\'t see "{text}"'))
@then(parsers.parse('I don\'t see "{text}"'))
def i_dont_see_text(text):
assert panel_spy
panel_spy.refresh_spy()
assert not [l for l in panel_spy.spied_labels if text in l], f"Text {text} found in {panel_spy.spied_labels}"
@@ -303,6 +305,7 @@ def i_dont_see_text(text):
@when(parsers.parse('I don\'t see the "{name}" list'))
@then(parsers.parse('I don\'t see the "{name}" list'))
def i_dont_see_the_name_list(name):
assert panel_spy
panel_spy.refresh_spy()
assert name not in [l["listtype_name"] for l in panel_spy.spied_lists]
@@ -311,6 +314,7 @@ def i_dont_see_the_name_list(name):
@when(parsers.parse('I see the "{prop}" property'))
@then(parsers.parse('I see the "{prop}" property'))
def i_see_the_prop_property(prop):
assert panel_spy
panel_spy.refresh_spy()
assert [
p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"])
@@ -321,6 +325,7 @@ def i_see_the_prop_property(prop):
@when(parsers.parse('I don\'t see the "{prop}" property'))
@then(parsers.parse('I don\'t see the "{prop}" property'))
def i_dont_see_the_prop_property(prop):
assert panel_spy
panel_spy.refresh_spy()
assert not [
p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"])
@@ -331,6 +336,7 @@ def i_dont_see_the_prop_property(prop):
@when(parsers.parse('I see the "{prop}" property is "{value}"'))
@then(parsers.parse('I see the "{prop}" property is "{value}"'))
def i_see_the_prop_property_is_value(prop, value):
assert panel_spy
panel_spy.refresh_spy()
for spied_prop in panel_spy.spied_props:
if prop in (spied_prop["name"], spied_prop["text"], spied_prop["icon"]):
@@ -344,8 +350,9 @@ def i_see_the_prop_property_is_value(prop, value):
@given(parsers.parse('I set the "{prop}" property to "{value}"'))
@when(parsers.parse('I set the "{prop}" property to "{value}"'))
@then(parsers.parse('I set the "{prop}" property to "{value}"'))
def i_set_the_prop_property_to_value(prop, value):
def i_set_the_prop_property_to_value(prop: str, value: str):
value = value.strip()
assert panel_spy
panel_spy.refresh_spy()
is_nth = False
if prop[0].isnumeric() and (prop.endswith("st") or prop.endswith("nd") or prop.endswith("th")):
@@ -382,6 +389,7 @@ def i_set_the_prop_property_to_value(prop, value):
@then(parsers.parse('The "{name}" list has {total} items'))
def the_name_list_has_total_items(name, total):
total = int(total)
assert panel_spy
panel_spy.refresh_spy()
for spied_list in panel_spy.spied_lists:
if name == spied_list["listtype_name"]:
@@ -394,6 +402,7 @@ def the_name_list_has_total_items(name, total):
@given(parsers.parse('I select the "{item_name}" item in the "{list_name}" list'))
@when(parsers.parse('I select the "{item_name}" item in the "{list_name}" list'))
def i_select_the_item_name_item_in_the_list_name_list(item_name, list_name):
assert panel_spy
panel_spy.refresh_spy()
for spied_list in panel_spy.spied_lists:
if list_name == spied_list["listtype_name"]:
@@ -553,6 +562,7 @@ def i_press_operator(operator):
@when(parsers.parse('I click "{button}"'))
@then(parsers.parse('I click "{button}"'))
def i_click_button(button):
assert panel_spy
panel_spy.refresh_spy()
for spied_operator in panel_spy.spied_operators:
if spied_operator["text"] == button or spied_operator["icon"] == button:
@@ -577,6 +587,7 @@ def i_click_button(button):
@when(parsers.parse('I click the "{button}" after the text "{text}"'))
@then(parsers.parse('I click the "{button}" after the text "{text}"'))
def i_click_the_button_after_the_text_text(button, text):
assert panel_spy
panel_spy.refresh_spy()
for spied_operator in panel_spy.spied_operators:
if spied_operator["after"] == text:
+6
View File
@@ -126,6 +126,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.diffuse_color = [1, 1, 1, 1]
obj.use_nodes = True
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert node
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
@@ -154,6 +155,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.use_nodes = True
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert obj.node_tree and node
obj.node_tree.nodes.remove(node)
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlossy")
@@ -185,6 +187,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.use_nodes = True
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert obj.node_tree and node and output
obj.node_tree.nodes.remove(node)
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfDiffuse")
@@ -216,6 +219,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.use_nodes = True
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert obj.node_tree and node and output
obj.node_tree.nodes.remove(node)
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlass")
@@ -247,6 +251,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.use_nodes = True
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert obj.node_tree and node and output
obj.node_tree.nodes.remove(node)
node = obj.node_tree.nodes.new(type="ShaderNodeEmission")
@@ -277,6 +282,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
obj.use_nodes = True
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
assert obj.node_tree and node and output
obj.node_tree.nodes.remove(node)
node = obj.node_tree.nodes.new(type="ShaderNodeVolumePrincipled")