mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 14:02:27 +00:00
Allow custom qtos without a template
This commit is contained in:
@@ -40,14 +40,6 @@ classes = (
|
|||||||
prop.IfcPropertyEnumeratedValue,
|
prop.IfcPropertyEnumeratedValue,
|
||||||
prop.IfcProperty,
|
prop.IfcProperty,
|
||||||
prop.PsetProperties,
|
prop.PsetProperties,
|
||||||
prop.MaterialPsetProperties,
|
|
||||||
prop.MaterialSetPsetProperties,
|
|
||||||
prop.MaterialSetItemPsetProperties,
|
|
||||||
prop.TaskPsetProperties,
|
|
||||||
prop.ResourcePsetProperties,
|
|
||||||
prop.GroupPsetProperties,
|
|
||||||
prop.ProfilePsetProperties,
|
|
||||||
prop.WorkSchedulePsetProperties,
|
|
||||||
prop.RenameProperties,
|
prop.RenameProperties,
|
||||||
prop.AddEditProperties,
|
prop.AddEditProperties,
|
||||||
prop.DeletePsets,
|
prop.DeletePsets,
|
||||||
@@ -72,14 +64,14 @@ classes = (
|
|||||||
|
|
||||||
def register():
|
def register():
|
||||||
bpy.types.Object.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
bpy.types.Object.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.MaterialSetPsetProperties)
|
bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.MaterialSetItemPsetProperties)
|
bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Material.PsetProperties = bpy.props.PointerProperty(type=prop.MaterialPsetProperties)
|
bpy.types.Material.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.TaskPsetProperties)
|
bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.ResourcePsetProperties)
|
bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.GroupPsetProperties = bpy.props.PointerProperty(type=prop.GroupPsetProperties)
|
bpy.types.Scene.GroupPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.ProfilePsetProperties = bpy.props.PointerProperty(type=prop.ProfilePsetProperties)
|
bpy.types.Scene.ProfilePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.WorkSchedulePsetProperties = bpy.props.PointerProperty(type=prop.WorkSchedulePsetProperties)
|
bpy.types.Scene.WorkSchedulePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||||
bpy.types.Scene.RenameProperties = bpy.props.CollectionProperty(type=prop.RenameProperties)
|
bpy.types.Scene.RenameProperties = bpy.props.CollectionProperty(type=prop.RenameProperties)
|
||||||
bpy.types.Scene.AddEditProperties = bpy.props.CollectionProperty(type=prop.AddEditProperties)
|
bpy.types.Scene.AddEditProperties = bpy.props.CollectionProperty(type=prop.AddEditProperties)
|
||||||
bpy.types.Scene.DeletePsets = bpy.props.CollectionProperty(type=prop.DeletePsets)
|
bpy.types.Scene.DeletePsets = bpy.props.CollectionProperty(type=prop.DeletePsets)
|
||||||
|
|||||||
@@ -101,9 +101,7 @@ class ObjectPsetsData(Data):
|
|||||||
)
|
)
|
||||||
psetnames = cls.format_pset_enum(psets)
|
psetnames = cls.format_pset_enum(psets)
|
||||||
assigned_names = ifcopenshell.util.element.get_psets(element, psets_only=True, should_inherit=False).keys()
|
assigned_names = ifcopenshell.util.element.get_psets(element, psets_only=True, should_inherit=False).keys()
|
||||||
return [("BBIM_CUSTOM_PSET", "Custom Pset", "Create a property set without using a template."), None] + [
|
return [p for p in psetnames if p[0] not in assigned_names]
|
||||||
p for p in psetnames if p[0] not in assigned_names
|
|
||||||
]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def qto_name(cls):
|
def qto_name(cls):
|
||||||
|
|||||||
@@ -144,6 +144,8 @@ class EditPset(bpy.types.Operator, Operator):
|
|||||||
for key, value in properties.items():
|
for key, value in properties.items():
|
||||||
if isinstance(value, float):
|
if isinstance(value, float):
|
||||||
properties[key] = round(value, 4)
|
properties[key] = round(value, 4)
|
||||||
|
elif not isinstance(value, int):
|
||||||
|
properties[key] = 0
|
||||||
ifcopenshell.api.run(
|
ifcopenshell.api.run(
|
||||||
"pset.edit_qto",
|
"pset.edit_qto",
|
||||||
self.file,
|
self.file,
|
||||||
@@ -206,11 +208,9 @@ class AddQto(bpy.types.Operator, Operator):
|
|||||||
|
|
||||||
def _execute(self, context):
|
def _execute(self, context):
|
||||||
self.file = IfcStore.get_file()
|
self.file = IfcStore.get_file()
|
||||||
props = tool.Pset.get_pset_props(self.obj, self.obj_type)
|
qto_name = tool.Pset.get_pset_name(self.obj, self.obj_type, pset_type="QTO")
|
||||||
ifc_definition_id = tool.Blender.get_obj_ifc_definition_id(self.obj, self.obj_type, context)
|
|
||||||
element = tool.Ifc.get().by_id(ifc_definition_id)
|
|
||||||
bpy.ops.bim.enable_pset_editing(
|
bpy.ops.bim.enable_pset_editing(
|
||||||
pset_id=0, pset_name=props.qto_name, pset_type="QTO", obj=self.obj, obj_type=self.obj_type
|
pset_id=0, pset_name=qto_name, pset_type="QTO", obj=self.obj, obj_type=self.obj_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,30 @@ def blender_formatted_enum_from_psets(psets):
|
|||||||
|
|
||||||
|
|
||||||
def get_pset_name(self, context):
|
def get_pset_name(self, context):
|
||||||
|
pset_type = repr(self)
|
||||||
|
prop_type = pset_type.split(".")[-1]
|
||||||
|
results = []
|
||||||
|
if "bpy.data.objects" in pset_type:
|
||||||
|
if prop_type == "PsetProperties":
|
||||||
|
results = get_object_pset_name(self, context)
|
||||||
|
elif prop_type == "MaterialSetPsetProperties":
|
||||||
|
results = get_material_set_pset_names(self, context)
|
||||||
|
elif prop_type == "MaterialSetItemPsetProperties":
|
||||||
|
results = get_material_set_item_pset_names(self, context)
|
||||||
|
elif "bpy.data.materials" in pset_type:
|
||||||
|
results = get_material_pset_names(self, context)
|
||||||
|
elif prop_type == "ResourcePsetProperties":
|
||||||
|
results = get_resource_pset_names(self, context)
|
||||||
|
elif prop_type == "GroupPsetProperties":
|
||||||
|
results = get_group_pset_names(self, context)
|
||||||
|
elif prop_type == "ProfilePsetProperties":
|
||||||
|
results = get_profile_pset_names(self, context)
|
||||||
|
elif prop_type == "WorkSchedulePsetProperties":
|
||||||
|
results = get_work_schedule_pset_names(self, context)
|
||||||
|
return [("BBIM_CUSTOM", "Custom Pset", "Create a property set without using a template."), None] + results
|
||||||
|
|
||||||
|
|
||||||
|
def get_object_pset_name(self, context):
|
||||||
if not ObjectPsetsData.is_loaded:
|
if not ObjectPsetsData.is_loaded:
|
||||||
ObjectPsetsData.load()
|
ObjectPsetsData.load()
|
||||||
return ObjectPsetsData.data["pset_name"]
|
return ObjectPsetsData.data["pset_name"]
|
||||||
@@ -168,6 +192,21 @@ def get_work_schedule_pset_names(self, context):
|
|||||||
|
|
||||||
|
|
||||||
def get_qto_name(self, context):
|
def get_qto_name(self, context):
|
||||||
|
pset_type = repr(self)
|
||||||
|
prop_type = pset_type.split(".")[-1]
|
||||||
|
if "bpy.data.objects" in pset_type:
|
||||||
|
if prop_type == "PsetProperties":
|
||||||
|
results = get_object_qto_name(self, context)
|
||||||
|
elif prop_type == "TaskPsetProperties":
|
||||||
|
results = get_task_qto_names(self, context)
|
||||||
|
elif prop_type == "ResourcePsetProperties":
|
||||||
|
results = get_resource_qto_names(self, context)
|
||||||
|
elif prop_type == "GroupPsetProperties":
|
||||||
|
results = get_group_qto_names(self, context)
|
||||||
|
return [("BBIM_CUSTOM", "Custom Qto", "Create a quantity set without using a template."), None] + results
|
||||||
|
|
||||||
|
|
||||||
|
def get_object_qto_name(self, context):
|
||||||
if not ObjectPsetsData.is_loaded:
|
if not ObjectPsetsData.is_loaded:
|
||||||
ObjectPsetsData.load()
|
ObjectPsetsData.load()
|
||||||
return ObjectPsetsData.data["qto_name"]
|
return ObjectPsetsData.data["qto_name"]
|
||||||
@@ -209,79 +248,6 @@ class PsetProperties(PropertyGroup):
|
|||||||
prop_value: StringProperty(name="Property Value", default="Some Value")
|
prop_value: StringProperty(name="Property Value", default="Some Value")
|
||||||
|
|
||||||
|
|
||||||
class MaterialPsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_material_pset_names, name="Pset Name")
|
|
||||||
|
|
||||||
|
|
||||||
class MaterialSetPsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_material_set_pset_names, name="Pset Name")
|
|
||||||
|
|
||||||
|
|
||||||
class MaterialSetItemPsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_material_set_item_pset_names, name="Pset Name")
|
|
||||||
|
|
||||||
|
|
||||||
class TaskPsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
qto_name: EnumProperty(items=get_task_qto_names, name="Qto Name")
|
|
||||||
|
|
||||||
|
|
||||||
class ResourcePsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_resource_pset_names, name="Pset Name")
|
|
||||||
qto_name: EnumProperty(items=get_resource_qto_names, name="Qto Name")
|
|
||||||
|
|
||||||
|
|
||||||
class GroupPsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_group_pset_names, name="Pset Name")
|
|
||||||
qto_name: EnumProperty(items=get_group_qto_names, name="Qto Name")
|
|
||||||
|
|
||||||
class ProfilePsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_profile_pset_names, name="Pset Name")
|
|
||||||
|
|
||||||
|
|
||||||
class WorkSchedulePsetProperties(PropertyGroup):
|
|
||||||
active_pset_id: IntProperty(name="Active Pset ID")
|
|
||||||
active_pset_has_template: BoolProperty(name="Active Pset Has Template")
|
|
||||||
active_pset_name: StringProperty(name="Pset Name")
|
|
||||||
active_pset_type: StringProperty(name="Active Pset Type")
|
|
||||||
properties: CollectionProperty(name="Properties", type=IfcProperty)
|
|
||||||
pset_name: EnumProperty(items=get_work_schedule_pset_names, name="Pset Name")
|
|
||||||
|
|
||||||
|
|
||||||
class RenameProperties(PropertyGroup):
|
class RenameProperties(PropertyGroup):
|
||||||
pset_name: StringProperty(name="Pset")
|
pset_name: StringProperty(name="Pset")
|
||||||
existing_property_name: StringProperty(name="Existing Property Name")
|
existing_property_name: StringProperty(name="Existing Property Name")
|
||||||
|
|||||||
@@ -31,13 +31,12 @@ def copy_property_to_selection(ifc, pset, is_pset=True, obj=None, pset_name=None
|
|||||||
|
|
||||||
|
|
||||||
def add_pset(ifc, pset, blender, obj_name, obj_type):
|
def add_pset(ifc, pset, blender, obj_name, obj_type):
|
||||||
pset_name = pset.get_pset_name(obj_name, obj_type)
|
pset_name = pset.get_pset_name(obj_name, obj_type, pset_type="PSET")
|
||||||
if obj_type == "Object":
|
if obj_type == "Object":
|
||||||
elements = [ifc.get_entity(obj) for obj in blender.get_selected_objects()]
|
elements = [ifc.get_entity(obj) for obj in blender.get_selected_objects()]
|
||||||
else:
|
else:
|
||||||
elements = [ifc.get().by_id(blender.get_obj_ifc_definition_id(obj_name, obj_type))]
|
elements = [ifc.get().by_id(blender.get_obj_ifc_definition_id(obj_name, obj_type))]
|
||||||
for element in elements:
|
for element in elements:
|
||||||
print('checking', element, pset_name)
|
|
||||||
if not element:
|
if not element:
|
||||||
continue
|
continue
|
||||||
if pset_name and not pset.is_pset_applicable(element, pset_name):
|
if pset_name and not pset.is_pset_applicable(element, pset_name):
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ class Pset:
|
|||||||
def enable_proposed_pset(cls, props, pset_name, pset_type, has_template): pass
|
def enable_proposed_pset(cls, props, pset_name, pset_type, has_template): pass
|
||||||
def get_element_pset(cls, element, pset_name): pass
|
def get_element_pset(cls, element, pset_name): pass
|
||||||
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): 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 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
|
||||||
|
|||||||
@@ -57,9 +57,10 @@ class Pset(blenderbim.core.tool.Pset):
|
|||||||
return bpy.context.scene.GroupPsetProperties
|
return bpy.context.scene.GroupPsetProperties
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_pset_name(cls, obj, obj_type):
|
def get_pset_name(cls, obj, obj_type, pset_type="PSET"):
|
||||||
pset = cls.get_pset_props(obj, obj_type)
|
props = cls.get_pset_props(obj, obj_type)
|
||||||
if (name := pset.pset_name) == "BBIM_CUSTOM_PSET":
|
name = props.pset_name if pset_type == "PSET" else props.qto_name
|
||||||
|
if name == "BBIM_CUSTOM":
|
||||||
return ""
|
return ""
|
||||||
return name
|
return name
|
||||||
|
|
||||||
@@ -244,7 +245,7 @@ class Pset(blenderbim.core.tool.Pset):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def enable_proposed_pset(cls, props, pset_name, pset_type, has_template):
|
def enable_proposed_pset(cls, props, pset_name, pset_type, has_template):
|
||||||
props.active_pset_id = 0
|
props.active_pset_id = 0
|
||||||
props.active_pset_name = pset_name or "My_Pset"
|
props.active_pset_name = pset_name or "My_Data"
|
||||||
props.active_pset_type = pset_type
|
props.active_pset_type = pset_type
|
||||||
props.active_pset_has_template = has_template
|
props.active_pset_has_template = has_template
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user