mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-16 02:24:30 +00:00
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:
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user