mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-11 18:16:40 +00:00
Allow custom qtos without a template
This commit is contained in:
@@ -40,14 +40,6 @@ classes = (
|
||||
prop.IfcPropertyEnumeratedValue,
|
||||
prop.IfcProperty,
|
||||
prop.PsetProperties,
|
||||
prop.MaterialPsetProperties,
|
||||
prop.MaterialSetPsetProperties,
|
||||
prop.MaterialSetItemPsetProperties,
|
||||
prop.TaskPsetProperties,
|
||||
prop.ResourcePsetProperties,
|
||||
prop.GroupPsetProperties,
|
||||
prop.ProfilePsetProperties,
|
||||
prop.WorkSchedulePsetProperties,
|
||||
prop.RenameProperties,
|
||||
prop.AddEditProperties,
|
||||
prop.DeletePsets,
|
||||
@@ -72,14 +64,14 @@ classes = (
|
||||
|
||||
def register():
|
||||
bpy.types.Object.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.MaterialSetPsetProperties)
|
||||
bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.MaterialSetItemPsetProperties)
|
||||
bpy.types.Material.PsetProperties = bpy.props.PointerProperty(type=prop.MaterialPsetProperties)
|
||||
bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.TaskPsetProperties)
|
||||
bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.ResourcePsetProperties)
|
||||
bpy.types.Scene.GroupPsetProperties = bpy.props.PointerProperty(type=prop.GroupPsetProperties)
|
||||
bpy.types.Scene.ProfilePsetProperties = bpy.props.PointerProperty(type=prop.ProfilePsetProperties)
|
||||
bpy.types.Scene.WorkSchedulePsetProperties = bpy.props.PointerProperty(type=prop.WorkSchedulePsetProperties)
|
||||
bpy.types.Object.MaterialSetPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Object.MaterialSetItemPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Material.PsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.TaskPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.ResourcePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.GroupPsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.ProfilePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.WorkSchedulePsetProperties = bpy.props.PointerProperty(type=prop.PsetProperties)
|
||||
bpy.types.Scene.RenameProperties = bpy.props.CollectionProperty(type=prop.RenameProperties)
|
||||
bpy.types.Scene.AddEditProperties = bpy.props.CollectionProperty(type=prop.AddEditProperties)
|
||||
bpy.types.Scene.DeletePsets = bpy.props.CollectionProperty(type=prop.DeletePsets)
|
||||
|
||||
@@ -101,9 +101,7 @@ class ObjectPsetsData(Data):
|
||||
)
|
||||
psetnames = cls.format_pset_enum(psets)
|
||||
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] + [
|
||||
p for p in psetnames if p[0] not in assigned_names
|
||||
]
|
||||
return [p for p in psetnames if p[0] not in assigned_names]
|
||||
|
||||
@classmethod
|
||||
def qto_name(cls):
|
||||
|
||||
@@ -144,6 +144,8 @@ class EditPset(bpy.types.Operator, Operator):
|
||||
for key, value in properties.items():
|
||||
if isinstance(value, float):
|
||||
properties[key] = round(value, 4)
|
||||
elif not isinstance(value, int):
|
||||
properties[key] = 0
|
||||
ifcopenshell.api.run(
|
||||
"pset.edit_qto",
|
||||
self.file,
|
||||
@@ -206,11 +208,9 @@ class AddQto(bpy.types.Operator, Operator):
|
||||
|
||||
def _execute(self, context):
|
||||
self.file = IfcStore.get_file()
|
||||
props = tool.Pset.get_pset_props(self.obj, self.obj_type)
|
||||
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)
|
||||
qto_name = tool.Pset.get_pset_name(self.obj, self.obj_type, pset_type="QTO")
|
||||
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):
|
||||
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:
|
||||
ObjectPsetsData.load()
|
||||
return ObjectPsetsData.data["pset_name"]
|
||||
@@ -168,6 +192,21 @@ def get_work_schedule_pset_names(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:
|
||||
ObjectPsetsData.load()
|
||||
return ObjectPsetsData.data["qto_name"]
|
||||
@@ -209,79 +248,6 @@ class PsetProperties(PropertyGroup):
|
||||
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):
|
||||
pset_name: StringProperty(name="Pset")
|
||||
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):
|
||||
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":
|
||||
elements = [ifc.get_entity(obj) for obj in blender.get_selected_objects()]
|
||||
else:
|
||||
elements = [ifc.get().by_id(blender.get_obj_ifc_definition_id(obj_name, obj_type))]
|
||||
for element in elements:
|
||||
print('checking', element, pset_name)
|
||||
if not element:
|
||||
continue
|
||||
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 get_element_pset(cls, element, pset_name): 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 import_enumerated_value_from_template(cls, prop_template, data, 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
|
||||
|
||||
@classmethod
|
||||
def get_pset_name(cls, obj, obj_type):
|
||||
pset = cls.get_pset_props(obj, obj_type)
|
||||
if (name := pset.pset_name) == "BBIM_CUSTOM_PSET":
|
||||
def get_pset_name(cls, obj, obj_type, pset_type="PSET"):
|
||||
props = cls.get_pset_props(obj, obj_type)
|
||||
name = props.pset_name if pset_type == "PSET" else props.qto_name
|
||||
if name == "BBIM_CUSTOM":
|
||||
return ""
|
||||
return name
|
||||
|
||||
@@ -244,7 +245,7 @@ class Pset(blenderbim.core.tool.Pset):
|
||||
@classmethod
|
||||
def enable_proposed_pset(cls, props, pset_name, pset_type, has_template):
|
||||
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_has_template = has_template
|
||||
|
||||
|
||||
Reference in New Issue
Block a user