mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-09 09:21:46 +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}"
|
||||
|
||||
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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user