Delete unuseful functions and improve speed (#2672)

* Delete unuseful functions and improve speed

* Delete active object function, cleaning around and improve performance

* Better functions names and prevent user defined qto use
This commit is contained in:
Massimo Fabbro
2023-01-07 18:11:46 +01:00
committed by GitHub
parent 73d43649a5
commit 694b21a0e1
3 changed files with 42 additions and 70 deletions
+5 -5
View File
@@ -24,7 +24,7 @@ def calculate_circle_radius(qto, obj=None):
def assign_pset_qto(qto, selected_objects):
for obj in selected_objects:
qto.assign_pset_qto_to_selected_object(obj)
qto.assign_base_qto_to_object(obj)
def calculate_all_qtos(qto, selected_objects):
for obj in selected_objects:
@@ -32,9 +32,9 @@ def calculate_all_qtos(qto, selected_objects):
print(f"There is no pset qto instance associated to object {obj.name}")
continue
pset_qto_properties = qto.get_pset_qto_properties(obj)
applicable_quantity_names = qto.get_applicable_quantity_names(obj)
calculated_quantities = qto.get_calculated_quantities(obj, pset_qto_properties)
calculated_quantities = qto.get_calculated_quantities(obj, applicable_quantity_names)
qto.edit_qto(obj, calculated_quantities)
@@ -44,8 +44,8 @@ def guess_all_qtos(qto, selected_objects):
print(f"There is no pset qto instance associated to object {obj.name}")
continue
pset_qto_properties = qto.get_pset_qto_properties(obj)
applicable_quantity_names = qto.get_base_quantities_name(obj)
calculated_quantities = qto.get_calculated_quantities(obj, pset_qto_properties)
calculated_quantities = qto.get_calculated_quantities(obj, applicable_quantity_names)
qto.edit_qto(obj, calculated_quantities)
+4 -6
View File
@@ -403,17 +403,15 @@ class Pset:
class Qto:
def get_radius_of_selected_vertices(cls, obj): pass
def set_qto_result(cls, result): pass
def assign_base_qto_to_object(cls, object): pass
def get_pset_qto_object_ifc_info(cls, object): pass
def get_pset_qto_properties(cls, object): pass
def get_pset_qto_name(cls, object): pass
def get_applicable_pset_names(cls, object): pass
def get_applicable_quantity_names(cls, object): pass
def get_qto_applicable_name(cls, object): pass
def edit_qto(cls, object, calculated_quantities): pass
def get_pset_qto_id(cls, object): pass
def get_pset_qto_name(cls, object): pass
def get_qto_entity(cls, object): pass
def get_new_quantity(cls, object, quantity_name, alternative_prop_names): pass
def get_rounded_value(cls, new_quantity): pass
def get_calculated_quantities(cls, object, pset_qto_properties): pass
def assign_pset_qto_to_selected_object(cls, object): pass
@interface
class Resource:
+33 -59
View File
@@ -41,6 +41,20 @@ class Qto(blenderbim.core.tool.Qto):
def set_qto_result(cls, result):
bpy.context.scene.BIMQtoProperties.qto_result = str(round(result, 3))
@classmethod
def assign_base_qto_to_object(cls, obj):
file = tool.Ifc.get()
entity = tool.Ifc.get_entity(obj)
pset_qto_name = cls.get_qto_applicable_name(obj)
ifcopenshell.api.run(
"pset.add_qto",
file,
**{
"product": entity,
"name": pset_qto_name,
},
)
@classmethod
def get_pset_qto_object_ifc_info(cls, obj):
element = tool.Ifc.get_entity(obj)
@@ -48,65 +62,40 @@ class Qto(blenderbim.core.tool.Qto):
return pset_qto_ifc_info
@classmethod
def get_pset_qto_properties(cls, obj):
def get_applicable_quantity_names(cls, obj):
file = tool.Ifc.get()
schema = file.schema
pset_qto = util.pset.PsetQto(schema)
# pset_qto_name = cls.get_pset_qto_name(obj)
pset_qto_name = cls.get_assigned_pset_qto_name(obj)
pset_qto_properties = pset_qto.get_by_name(pset_qto_name).get_info()['HasPropertyTemplates']
return pset_qto_properties
qto_name = cls.get_qto_applicable_name(obj)
properties_templates = pset_qto.get_by_name(qto_name).get_info()['HasPropertyTemplates']
applicable_quantity_names = [a.get_info()['Name'] for a in properties_templates]
return applicable_quantity_names
@classmethod
def get_pset_qto_name(cls, obj):
applicable_pset_names = cls.get_applicable_pset_names(obj)
for applicable_pset_name in applicable_pset_names:
if 'Qto_' in applicable_pset_name:
pset_qto_name = applicable_pset_name
return pset_qto_name
@classmethod
def get_assigned_pset_qto_name(cls, obj):
def get_qto_applicable_name(cls, obj):
entity = tool.Ifc.get_entity(obj)
assigned_pset_qto_name = ifcopenshell.util.element.get_psets(entity, qtos_only = True)
assigned_pset_qto_name = list(assigned_pset_qto_name.keys())[0]
return assigned_pset_qto_name
@classmethod
def get_applicable_pset_names(cls, obj):
file = tool.Ifc.get()
schema = file.schema
pset_qto = util.pset.PsetQto(schema)
entity = tool.Ifc.get_entity(obj)
ifc_object_type = entity.get_info()['type']
applicable_pset_names = pset_qto.get_applicable_names(ifc_object_type)
return applicable_pset_names
ifc_class = entity.get_info()['type']
qto_applicable_names = blenderbim.bim.schema.ifc.psetqto.get_applicable_names(ifc_class, qto_only=True)
qto_applicable_name = [q for q in qto_applicable_names if "Qto_" in q and "Base" in q][0]
return qto_applicable_name
@classmethod
def edit_qto(cls, obj, calculated_quantities):
file = tool.Ifc.get()
pset_qto_name = cls.get_pset_qto_name(obj)
pset_qto_id = cls.get_pset_qto_id(obj, pset_qto_name)
pset_qto_applicable_name = cls.get_qto_applicable_name(obj)
qto_entity = cls.get_qto_entity(obj, pset_qto_applicable_name)
ifcopenshell.api.run("pset.edit_qto",
file,
**{"qto" : pset_qto_id, "name" : pset_qto_name, "properties": calculated_quantities}
qto = qto_entity, properties = calculated_quantities,
)
@classmethod
def get_pset_qto_id(cls, obj, pset_qto_name):
def get_qto_entity(cls, obj, pset_qto_applicable_name):
file = tool.Ifc.get()
pset_qto_object_ifc_info = cls.get_pset_qto_object_ifc_info(obj)
pset_qto_id = file.by_id(pset_qto_object_ifc_info[pset_qto_name]['id'])
return pset_qto_id
@classmethod
def get_pset_qto_name(cls, obj):
applicable_pset_names = cls.get_applicable_pset_names(obj)
for applicable_pset_name in applicable_pset_names:
if 'Qto_' in applicable_pset_name:
pset_qto_name = applicable_pset_name
return pset_qto_name
qto_entity = file.by_id(pset_qto_object_ifc_info[pset_qto_applicable_name]['id'])
return qto_entity
@classmethod
def get_new_calculated_quantity(cls, qto_name, quantity_name, obj):
@@ -124,13 +113,12 @@ class Qto(blenderbim.core.tool.Qto):
return round(new_quantity, 3)
@classmethod
def get_calculated_quantities(cls, obj, pset_qto_properties):
def get_calculated_quantities(cls, obj, applicable_quantity_names):
calculated_quantities = {}
qto_name = cls.get_pset_qto_name(obj)
qto_name = cls.get_qto_applicable_name(obj)
calculator = QtoCalculator()
for pset_qto_property in pset_qto_properties:
quantity_name = pset_qto_property.get_info()['Name']
for quantity_name in applicable_quantity_names:
if not cls.has_calculator(qto_name, quantity_name):
continue
else:
@@ -163,17 +151,3 @@ class Qto(blenderbim.core.tool.Qto):
return calculated_quantities
@classmethod
def assign_pset_qto_to_selected_object(cls, obj):
file = tool.Ifc.get()
entity = tool.Ifc.get_entity(obj)
pset_qto_name = cls.get_pset_qto_name(obj)
ifcopenshell.api.run(
"pset.add_qto",
file,
**{
"product": entity,
"name": pset_qto_name,
},
)