bim.unshare_pset - move implementation to core

This commit is contained in:
Andrej730
2024-09-05 18:18:02 +05:00
parent 89bb7c76de
commit ffb2ea2be3
5 changed files with 42 additions and 19 deletions
+1 -19
View File
@@ -213,25 +213,7 @@ class UnsharePset(bpy.types.Operator, tool.Ifc.Operator):
return f"{properties.description_}{cls.bl_description}"
def _execute(self, context):
# TODO: move to core
ifc_file = tool.Ifc.get()
obj_type: tool.Ifc.OBJECT_TYPE = self.obj_type
elements: list[ifcopenshell.entity_instance]
pset = ifc_file.by_id(self.pset_id)
pset_elements = ifcopenshell.util.element.get_elements_by_pset(pset)
if obj_type == "Object":
elements = [
element
for obj in tool.Blender.get_selected_objects()
if (element := tool.Ifc.get_entity(obj)) and element in pset_elements
]
else:
element_id = tool.Blender.get_obj_ifc_definition_id(self.obj, obj_type)
assert element_id
elements = [ifc_file.by_id(element_id)]
ifcopenshell.api.pset.unshare_pset(ifc_file, elements, pset)
core.unshare_pset(tool.Ifc, tool.Pset, self.obj_type, self.obj, self.pset_id)
class AddQto(bpy.types.Operator, tool.Ifc.Operator):
+10
View File
@@ -92,3 +92,13 @@ def enable_pset_editing(
def add_proposed_prop(pset: tool.Pset, obj_name: str, obj_type: tool.Ifc.OBJECT_TYPE, name: str, value: Any) -> None:
props = pset.get_pset_props(obj_name, obj_type)
pset.add_proposed_property(name, pset.cast_string_to_primitive(value), props)
def unshare_pset(
ifc: tool.Ifc, pset_tool: tool.Pset, obj_type: tool.Ifc.OBJECT_TYPE, obj_name: str, pset_id: int
) -> None:
elements: list[ifcopenshell.entity_instance]
pset = ifc.get_entity_by_id(pset_id)
assert pset
elements = pset_tool.get_selected_pset_elements(obj_name, obj_type, pset)
ifc.run("pset.unshare_pset", products=elements, pset=pset)
+2
View File
@@ -465,6 +465,7 @@ class Georeference:
class Ifc:
def get(cls): pass
def get_entity(cls, obj): pass
def get_entity_by_id(cls, element_id): pass
def get_object(cls, entity): pass
def get_path(cls): pass
def get_schema(cls): pass
@@ -651,6 +652,7 @@ class Pset:
def get_prop_template_primitive_type(cls, prop_template): pass
def get_pset_name(cls, obj, obj_type, pset_type): pass
def get_pset_template(cls, name): pass
def get_selected_pset_elements(cls, obj_name, obj_type, pset): pass
def import_enumerated_value_from_template(cls, prop_template, data, props): pass
def import_pset_from_existing(cls, pset, props): pass
def import_pset_from_template(cls, pset_template, pset, props): pass
+21
View File
@@ -150,6 +150,27 @@ class Pset(bonsai.core.tool.Pset):
tool.Ifc.schema().declaration_by_name(prop_template.PrimaryMeasureType or "IfcLabel")
)
@classmethod
def get_selected_pset_elements(
cls, obj_name: str, obj_type: tool.Ifc.OBJECT_TYPE, pset: ifcopenshell.entity_instance
) -> list[ifcopenshell.entity_instance]:
ifc_file = tool.Ifc.get()
pset_elements = ifcopenshell.util.element.get_elements_by_pset(pset)
elements: list[ifcopenshell.entity_instance]
if obj_type == "Object":
elements = [
element
for obj in tool.Blender.get_selected_objects()
if (element := tool.Ifc.get_entity(obj)) and element in pset_elements
]
else:
element_id = tool.Blender.get_obj_ifc_definition_id(obj_name, obj_type)
assert element_id
elements = [ifc_file.by_id(element_id)]
return elements
@classmethod
def import_enumerated_value_from_template(
cls, prop_template: ifcopenshell.entity_instance, data: dict[str, Any], props: bpy.types.PropertyGroup
+8
View File
@@ -60,3 +60,11 @@ class TestCopyPropertyToSelection:
subject.copy_property_to_selection(
ifc, pset, is_pset=False, obj="obj", pset_name="qto_name", prop_name="prop_name", prop_value="prop_value"
)
class TestUnsharePset:
def test_run(self, ifc, pset):
ifc.get_entity_by_id("pset_id").should_be_called().will_return("pset")
pset.get_selected_pset_elements("obj_name", "obj_type", "pset").should_be_called().will_return("elements")
ifc.run("pset.unshare_pset", products="elements", pset="pset").should_be_called()
subject.unshare_pset(ifc, pset, "obj_type", "obj_name", "pset_id")