mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 14:41:25 +00:00
typing
This commit is contained in:
@@ -28,7 +28,7 @@ import bonsai.core.tool
|
|||||||
import bonsai.tool as tool
|
import bonsai.tool as tool
|
||||||
import bonsai.bim.helper
|
import bonsai.bim.helper
|
||||||
from mathutils import Color
|
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:
|
if TYPE_CHECKING:
|
||||||
from bonsai.bim.module.style.prop import BIMStylesProperties, BIMStyleProperties
|
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]:
|
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)
|
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 {
|
return {
|
||||||
"Name": None,
|
"Name": None,
|
||||||
"Red": color[0],
|
"Red": color[0],
|
||||||
@@ -324,6 +324,7 @@ class Style(bonsai.core.tool.Style):
|
|||||||
report(f"{GREEN}Viewport color{R} saved as {GREEN}SurfaceColour{R}")
|
report(f"{GREEN}Viewport color{R} saved as {GREEN}SurfaceColour{R}")
|
||||||
|
|
||||||
# TODO: make sure bsdf is connected to the output?
|
# 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}
|
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:
|
if "BSDF_PRINCIPLED" not in bsdfs:
|
||||||
report(f"{GREEN}Viewport color alpha{R} saved as {GREEN}Transparency{R}")
|
report(f"{GREEN}Viewport color alpha{R} saved as {GREEN}Transparency{R}")
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ class TemplateListSpy:
|
|||||||
|
|
||||||
|
|
||||||
ui_name_cache = {}
|
ui_name_cache = {}
|
||||||
panel_spy: PanelSpy = None
|
panel_spy: Union[PanelSpy, None] = None
|
||||||
|
|
||||||
|
|
||||||
def create_ui_name_cache():
|
def create_ui_name_cache():
|
||||||
@@ -287,6 +287,7 @@ def i_trigger_operator(operator):
|
|||||||
@when(parsers.parse('I see "{text}"'))
|
@when(parsers.parse('I see "{text}"'))
|
||||||
@then(parsers.parse('I see "{text}"'))
|
@then(parsers.parse('I see "{text}"'))
|
||||||
def i_see_text(text):
|
def i_see_text(text):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_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}"
|
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}"'))
|
@when(parsers.parse('I don\'t see "{text}"'))
|
||||||
@then(parsers.parse('I don\'t see "{text}"'))
|
@then(parsers.parse('I don\'t see "{text}"'))
|
||||||
def i_dont_see_text(text):
|
def i_dont_see_text(text):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_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}"
|
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'))
|
@when(parsers.parse('I don\'t see the "{name}" list'))
|
||||||
@then(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):
|
def i_dont_see_the_name_list(name):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
assert name not in [l["listtype_name"] for l in panel_spy.spied_lists]
|
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'))
|
@when(parsers.parse('I see the "{prop}" property'))
|
||||||
@then(parsers.parse('I see the "{prop}" property'))
|
@then(parsers.parse('I see the "{prop}" property'))
|
||||||
def i_see_the_prop_property(prop):
|
def i_see_the_prop_property(prop):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
assert [
|
assert [
|
||||||
p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"])
|
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'))
|
@when(parsers.parse('I don\'t see the "{prop}" property'))
|
||||||
@then(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):
|
def i_dont_see_the_prop_property(prop):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
assert not [
|
assert not [
|
||||||
p for p in panel_spy.spied_props if prop in (p["name"], p["text"], p["icon"])
|
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}"'))
|
@when(parsers.parse('I see the "{prop}" property is "{value}"'))
|
||||||
@then(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):
|
def i_see_the_prop_property_is_value(prop, value):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
for spied_prop in panel_spy.spied_props:
|
for spied_prop in panel_spy.spied_props:
|
||||||
if prop in (spied_prop["name"], spied_prop["text"], spied_prop["icon"]):
|
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}"'))
|
@given(parsers.parse('I set the "{prop}" property to "{value}"'))
|
||||||
@when(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}"'))
|
@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()
|
value = value.strip()
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
is_nth = False
|
is_nth = False
|
||||||
if prop[0].isnumeric() and (prop.endswith("st") or prop.endswith("nd") or prop.endswith("th")):
|
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'))
|
@then(parsers.parse('The "{name}" list has {total} items'))
|
||||||
def the_name_list_has_total_items(name, total):
|
def the_name_list_has_total_items(name, total):
|
||||||
total = int(total)
|
total = int(total)
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
for spied_list in panel_spy.spied_lists:
|
for spied_list in panel_spy.spied_lists:
|
||||||
if name == spied_list["listtype_name"]:
|
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'))
|
@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'))
|
@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):
|
def i_select_the_item_name_item_in_the_list_name_list(item_name, list_name):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
for spied_list in panel_spy.spied_lists:
|
for spied_list in panel_spy.spied_lists:
|
||||||
if list_name == spied_list["listtype_name"]:
|
if list_name == spied_list["listtype_name"]:
|
||||||
@@ -553,6 +562,7 @@ def i_press_operator(operator):
|
|||||||
@when(parsers.parse('I click "{button}"'))
|
@when(parsers.parse('I click "{button}"'))
|
||||||
@then(parsers.parse('I click "{button}"'))
|
@then(parsers.parse('I click "{button}"'))
|
||||||
def i_click_button(button):
|
def i_click_button(button):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
for spied_operator in panel_spy.spied_operators:
|
for spied_operator in panel_spy.spied_operators:
|
||||||
if spied_operator["text"] == button or spied_operator["icon"] == button:
|
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}"'))
|
@when(parsers.parse('I click the "{button}" after the text "{text}"'))
|
||||||
@then(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):
|
def i_click_the_button_after_the_text_text(button, text):
|
||||||
|
assert panel_spy
|
||||||
panel_spy.refresh_spy()
|
panel_spy.refresh_spy()
|
||||||
for spied_operator in panel_spy.spied_operators:
|
for spied_operator in panel_spy.spied_operators:
|
||||||
if spied_operator["after"] == text:
|
if spied_operator["after"] == text:
|
||||||
|
|||||||
@@ -126,6 +126,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.diffuse_color = [1, 1, 1, 1]
|
obj.diffuse_color = [1, 1, 1, 1]
|
||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert node
|
||||||
node.inputs["Alpha"].default_value = 0.8
|
node.inputs["Alpha"].default_value = 0.8
|
||||||
node.inputs["Base Color"].default_value = [0.5, 0.5, 0.5, 0.5]
|
node.inputs["Base Color"].default_value = [0.5, 0.5, 0.5, 0.5]
|
||||||
node.inputs["Roughness"].default_value = 0.2
|
node.inputs["Roughness"].default_value = 0.2
|
||||||
@@ -154,6 +155,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert obj.node_tree and node
|
||||||
obj.node_tree.nodes.remove(node)
|
obj.node_tree.nodes.remove(node)
|
||||||
|
|
||||||
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlossy")
|
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlossy")
|
||||||
@@ -185,6 +187,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert obj.node_tree and node and output
|
||||||
obj.node_tree.nodes.remove(node)
|
obj.node_tree.nodes.remove(node)
|
||||||
|
|
||||||
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfDiffuse")
|
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfDiffuse")
|
||||||
@@ -216,6 +219,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert obj.node_tree and node and output
|
||||||
obj.node_tree.nodes.remove(node)
|
obj.node_tree.nodes.remove(node)
|
||||||
|
|
||||||
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlass")
|
node = obj.node_tree.nodes.new(type="ShaderNodeBsdfGlass")
|
||||||
@@ -247,6 +251,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert obj.node_tree and node and output
|
||||||
obj.node_tree.nodes.remove(node)
|
obj.node_tree.nodes.remove(node)
|
||||||
|
|
||||||
node = obj.node_tree.nodes.new(type="ShaderNodeEmission")
|
node = obj.node_tree.nodes.new(type="ShaderNodeEmission")
|
||||||
@@ -277,6 +282,7 @@ class TestGetSurfaceRenderingAttributes(NewFile):
|
|||||||
obj.use_nodes = True
|
obj.use_nodes = True
|
||||||
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
output = tool.Blender.get_material_node(obj, "OUTPUT_MATERIAL")
|
||||||
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
node = tool.Blender.get_material_node(obj, "BSDF_PRINCIPLED")
|
||||||
|
assert obj.node_tree and node and output
|
||||||
obj.node_tree.nodes.remove(node)
|
obj.node_tree.nodes.remove(node)
|
||||||
|
|
||||||
node = obj.node_tree.nodes.new(type="ShaderNodeVolumePrincipled")
|
node = obj.node_tree.nodes.new(type="ShaderNodeVolumePrincipled")
|
||||||
|
|||||||
Reference in New Issue
Block a user