mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-28 15:53:00 +00:00
bim.unshare_pset - move implementation to core
This commit is contained in:
@@ -213,25 +213,7 @@ class UnsharePset(bpy.types.Operator, tool.Ifc.Operator):
|
|||||||
return f"{properties.description_}{cls.bl_description}"
|
return f"{properties.description_}{cls.bl_description}"
|
||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
# TODO: move to core
|
core.unshare_pset(tool.Ifc, tool.Pset, self.obj_type, self.obj, self.pset_id)
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
class AddQto(bpy.types.Operator, tool.Ifc.Operator):
|
class AddQto(bpy.types.Operator, tool.Ifc.Operator):
|
||||||
|
|||||||
@@ -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:
|
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)
|
props = pset.get_pset_props(obj_name, obj_type)
|
||||||
pset.add_proposed_property(name, pset.cast_string_to_primitive(value), props)
|
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)
|
||||||
|
|||||||
@@ -465,6 +465,7 @@ class Georeference:
|
|||||||
class Ifc:
|
class Ifc:
|
||||||
def get(cls): pass
|
def get(cls): pass
|
||||||
def get_entity(cls, obj): pass
|
def get_entity(cls, obj): pass
|
||||||
|
def get_entity_by_id(cls, element_id): pass
|
||||||
def get_object(cls, entity): pass
|
def get_object(cls, entity): pass
|
||||||
def get_path(cls): pass
|
def get_path(cls): pass
|
||||||
def get_schema(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_prop_template_primitive_type(cls, prop_template): pass
|
||||||
def get_pset_name(cls, obj, obj_type, pset_type): pass
|
def get_pset_name(cls, obj, obj_type, pset_type): pass
|
||||||
def get_pset_template(cls, name): 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_enumerated_value_from_template(cls, prop_template, data, props): pass
|
||||||
def import_pset_from_existing(cls, pset, props): pass
|
def import_pset_from_existing(cls, pset, props): pass
|
||||||
def import_pset_from_template(cls, pset_template, pset, props): pass
|
def import_pset_from_template(cls, pset_template, pset, props): pass
|
||||||
|
|||||||
@@ -150,6 +150,27 @@ class Pset(bonsai.core.tool.Pset):
|
|||||||
tool.Ifc.schema().declaration_by_name(prop_template.PrimaryMeasureType or "IfcLabel")
|
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
|
@classmethod
|
||||||
def import_enumerated_value_from_template(
|
def import_enumerated_value_from_template(
|
||||||
cls, prop_template: ifcopenshell.entity_instance, data: dict[str, Any], props: bpy.types.PropertyGroup
|
cls, prop_template: ifcopenshell.entity_instance, data: dict[str, Any], props: bpy.types.PropertyGroup
|
||||||
|
|||||||
@@ -60,3 +60,11 @@ class TestCopyPropertyToSelection:
|
|||||||
subject.copy_property_to_selection(
|
subject.copy_property_to_selection(
|
||||||
ifc, pset, is_pset=False, obj="obj", pset_name="qto_name", prop_name="prop_name", prop_value="prop_value"
|
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")
|
||||||
|
|||||||
Reference in New Issue
Block a user