mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-26 02:07:36 +00:00
tool.Qto.convert_to_project_units
This commit is contained in:
@@ -45,34 +45,8 @@ class QtoCalculator:
|
|||||||
else:
|
else:
|
||||||
self.mapping_dict[key][item] = None
|
self.mapping_dict[key][item] = None
|
||||||
|
|
||||||
def convert_to_project_units(self, value, qto_name, quantity_name):
|
|
||||||
ifc_file = tool.Ifc.get()
|
|
||||||
quantity_to_unit_types = {
|
|
||||||
"Q_LENGTH": ("LENGTHUNIT", "METRE"),
|
|
||||||
"Q_AREA": ("AREAUNIT", "SQUARE_METRE"),
|
|
||||||
"Q_VOLUME": ("VOLUMEUNIT", "CUBIC_METRE"),
|
|
||||||
}
|
|
||||||
|
|
||||||
qt = blenderbim.bim.schema.ifc.psetqto.get_by_name(qto_name)
|
|
||||||
quantity_type = next(q.TemplateType for q in qt.HasPropertyTemplates if q.Name == quantity_name)
|
|
||||||
unit_type = quantity_to_unit_types.get(quantity_type, None)
|
|
||||||
if not unit_type:
|
|
||||||
return
|
|
||||||
|
|
||||||
unit_type, base_unit = unit_type
|
|
||||||
project_unit = ifcopenshell.util.unit.get_project_unit(ifc_file, unit_type)
|
|
||||||
if not project_unit:
|
|
||||||
return
|
|
||||||
value = ifcopenshell.util.unit.convert(
|
|
||||||
value,
|
|
||||||
from_prefix=None,
|
|
||||||
from_unit=base_unit,
|
|
||||||
to_prefix=getattr(project_unit, "Prefix", None),
|
|
||||||
to_unit=project_unit.Name,
|
|
||||||
)
|
|
||||||
return value
|
|
||||||
|
|
||||||
def calculate_quantity(self, qto_name, quantity_name, obj):
|
def calculate_quantity(self, qto_name, quantity_name, obj):
|
||||||
|
"""calculates the value of the quantity in the project units"""
|
||||||
string = "self.mapping_dict[qto_name][quantity_name](obj"
|
string = "self.mapping_dict[qto_name][quantity_name](obj"
|
||||||
if isinstance(mapper[qto_name][quantity_name], dict):
|
if isinstance(mapper[qto_name][quantity_name], dict):
|
||||||
args = mapper[qto_name][quantity_name]["args"]
|
args = mapper[qto_name][quantity_name]["args"]
|
||||||
@@ -82,7 +56,7 @@ class QtoCalculator:
|
|||||||
string += ")"
|
string += ")"
|
||||||
value = eval(string)
|
value = eval(string)
|
||||||
|
|
||||||
return self.convert_to_project_units(value, qto_name, quantity_name) or value
|
return tool.Qto.convert_to_project_units(value, qto_name, quantity_name) or value
|
||||||
|
|
||||||
def guess_quantity(self, prop_name, alternative_prop_names, obj):
|
def guess_quantity(self, prop_name, alternative_prop_names, obj):
|
||||||
prop_name = prop_name.lower()
|
prop_name = prop_name.lower()
|
||||||
|
|||||||
@@ -97,6 +97,35 @@ class Qto(blenderbim.core.tool.Qto):
|
|||||||
def has_calculator(cls, qto_name, quantity_name):
|
def has_calculator(cls, qto_name, quantity_name):
|
||||||
return bool(mapper.get(qto_name, {}).get(quantity_name, None))
|
return bool(mapper.get(qto_name, {}).get(quantity_name, None))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def convert_to_project_units(cls, value, qto_name, quantity_name):
|
||||||
|
ifc_file = tool.Ifc.get()
|
||||||
|
quantity_to_unit_types = {
|
||||||
|
"Q_LENGTH": ("LENGTHUNIT", "METRE"),
|
||||||
|
"Q_AREA": ("AREAUNIT", "SQUARE_METRE"),
|
||||||
|
"Q_VOLUME": ("VOLUMEUNIT", "CUBIC_METRE"),
|
||||||
|
}
|
||||||
|
|
||||||
|
qt = blenderbim.bim.schema.ifc.psetqto.get_by_name(qto_name)
|
||||||
|
quantity_type = next(q.TemplateType for q in qt.HasPropertyTemplates if q.Name == quantity_name)
|
||||||
|
unit_type = quantity_to_unit_types.get(quantity_type, None)
|
||||||
|
if not unit_type:
|
||||||
|
return
|
||||||
|
|
||||||
|
unit_type, base_unit = unit_type
|
||||||
|
project_unit = ifcopenshell.util.unit.get_project_unit(ifc_file, unit_type)
|
||||||
|
if not project_unit:
|
||||||
|
return
|
||||||
|
value = ifcopenshell.util.unit.convert(
|
||||||
|
value,
|
||||||
|
from_prefix=None,
|
||||||
|
from_unit=base_unit,
|
||||||
|
to_prefix=getattr(project_unit, "Prefix", None),
|
||||||
|
to_unit=project_unit.Name,
|
||||||
|
)
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_guessed_quantities(cls, obj, pset_qto_properties):
|
def get_guessed_quantities(cls, obj, pset_qto_properties):
|
||||||
calculated_quantities = {}
|
calculated_quantities = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user