Fix bug where unit editing failed for named units

This commit is contained in:
Dion Moult
2022-05-29 17:25:28 +10:00
parent 4b426e1fc0
commit 2d4e316df2
5 changed files with 21 additions and 19 deletions
@@ -111,7 +111,7 @@ class BIM_UL_units(UIList):
op.unit = item.ifc_definition_id
if props.active_unit_id == item.ifc_definition_id:
row.operator("bim.edit_unit", text="", icon="CHECKMARK")
row.operator("bim.edit_unit", text="", icon="CHECKMARK").unit = item.ifc_definition_id
row.operator("bim.disable_editing_unit", text="", icon="CANCEL")
elif props.active_unit_id:
row.operator("bim.remove_unit", text="", icon="X").unit = item.ifc_definition_id
+3 -4
View File
@@ -96,12 +96,11 @@ def disable_editing_unit(unit):
def edit_unit(ifc, unit_tool, unit=None):
attributes = unit_tool.export_unit_attributes()
unit_class = unit_tool.get_unit_class(unit)
if unit_class == "IfcMonetaryUnit":
if unit_tool.is_unit_class(unit, "IfcMonetaryUnit"):
ifc.run("unit.edit_monetary_unit", unit=unit, attributes=attributes)
elif unit_class == "IfcDerivedUnit":
elif unit_tool.is_unit_class(unit, "IfcDerivedUnit"):
ifc.run("unit.edit_derived_unit", unit=unit, attributes=attributes)
elif unit_class == "IfcNamedUnit":
elif unit_tool.is_unit_class(unit, "IfcNamedUnit"):
ifc.run("unit.edit_named_unit", unit=unit, attributes=attributes)
unit_tool.import_units()
unit_tool.clear_active_unit()
+4 -4
View File
@@ -87,10 +87,6 @@ class Unit(blenderbim.core.tool.Unit):
def get_si_name_from_unit_type(cls, unit_type):
return ifcopenshell.util.unit.si_type_names.get(unit_type, None)
@classmethod
def get_unit_class(cls, unit):
return unit.is_a()
@classmethod
def import_unit_attributes(cls, unit):
def callback(name, prop, data):
@@ -152,6 +148,10 @@ class Unit(blenderbim.core.tool.Unit):
def is_scene_unit_metric(cls):
return bpy.context.scene.unit_settings.system in ["METRIC", "NONE"]
@classmethod
def is_unit_class(cls, unit, ifc_class):
return unit.is_a(ifc_class)
@classmethod
def set_active_unit(cls, unit):
bpy.context.scene.BIMUnitProperties.active_unit_id = unit.id()
+6 -3
View File
@@ -142,7 +142,7 @@ class TestDisableEditingUnit:
class TestEditUnit:
def test_editing_monetary_units(self, ifc, unit):
unit.export_unit_attributes().should_be_called().will_return("attributes")
unit.get_unit_class("unit").should_be_called().will_return("IfcMonetaryUnit")
unit.is_unit_class("unit", "IfcMonetaryUnit").should_be_called().will_return(True)
ifc.run("unit.edit_monetary_unit", unit="unit", attributes="attributes").should_be_called()
unit.import_units().should_be_called()
unit.clear_active_unit().should_be_called()
@@ -150,7 +150,8 @@ class TestEditUnit:
def test_editing_derived_units(self, ifc, unit):
unit.export_unit_attributes().should_be_called().will_return("attributes")
unit.get_unit_class("unit").should_be_called().will_return("IfcDerivedUnit")
unit.is_unit_class("unit", "IfcMonetaryUnit").should_be_called().will_return(False)
unit.is_unit_class("unit", "IfcDerivedUnit").should_be_called().will_return(True)
ifc.run("unit.edit_derived_unit", unit="unit", attributes="attributes").should_be_called()
unit.import_units().should_be_called()
unit.clear_active_unit().should_be_called()
@@ -158,7 +159,9 @@ class TestEditUnit:
def test_editing_named_units(self, ifc, unit):
unit.export_unit_attributes().should_be_called().will_return("attributes")
unit.get_unit_class("unit").should_be_called().will_return("IfcNamedUnit")
unit.is_unit_class("unit", "IfcMonetaryUnit").should_be_called().will_return(False)
unit.is_unit_class("unit", "IfcDerivedUnit").should_be_called().will_return(False)
unit.is_unit_class("unit", "IfcNamedUnit").should_be_called().will_return(True)
ifc.run("unit.edit_named_unit", unit="unit", attributes="attributes").should_be_called()
unit.import_units().should_be_called()
unit.clear_active_unit().should_be_called()
+7 -7
View File
@@ -154,13 +154,6 @@ class TestGetSINameFromUnitType:
assert subject.get_si_name_from_unit_type(key) == value
class TestGetUnitClass:
def test_run(self):
ifc = ifcopenshell.file()
assert subject.get_unit_class(ifc.createIfcSIUnit()) == "IfcSIUnit"
assert subject.get_unit_class(ifc.createIfcNamedUnit()) == "IfcNamedUnit"
class TestImportUnitAttributes(NewFile):
def test_importing_derived_units(self):
ifc = ifcopenshell.file()
@@ -307,6 +300,13 @@ class TestIsSceneUnitMetric(NewFile):
assert subject.is_scene_unit_metric() is True
class TestIsUnitClass:
def test_run(self):
ifc = ifcopenshell.file()
assert subject.is_unit_class(ifc.createIfcSIUnit(), "IfcNamedUnit") is True
assert subject.is_unit_class(ifc.createIfcSIUnit(), "IfcMonetaryUnit") is False
class TestSetActiveUnit(NewFile):
def test_run(self):
ifc = ifcopenshell.file()