diff --git a/src/blenderbim/blenderbim/bim/module/unit/ui.py b/src/blenderbim/blenderbim/bim/module/unit/ui.py index 8f053d108b..a6d13447f5 100644 --- a/src/blenderbim/blenderbim/bim/module/unit/ui.py +++ b/src/blenderbim/blenderbim/bim/module/unit/ui.py @@ -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 diff --git a/src/blenderbim/blenderbim/core/unit.py b/src/blenderbim/blenderbim/core/unit.py index f5fd274a66..e21ea62816 100644 --- a/src/blenderbim/blenderbim/core/unit.py +++ b/src/blenderbim/blenderbim/core/unit.py @@ -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() diff --git a/src/blenderbim/blenderbim/tool/unit.py b/src/blenderbim/blenderbim/tool/unit.py index e377592028..ebd9f1c152 100644 --- a/src/blenderbim/blenderbim/tool/unit.py +++ b/src/blenderbim/blenderbim/tool/unit.py @@ -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() diff --git a/src/blenderbim/test/core/test_unit.py b/src/blenderbim/test/core/test_unit.py index 5c7143ceaa..3e77d582a8 100644 --- a/src/blenderbim/test/core/test_unit.py +++ b/src/blenderbim/test/core/test_unit.py @@ -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() diff --git a/src/blenderbim/test/tool/test_unit.py b/src/blenderbim/test/tool/test_unit.py index 41250a9d77..626b6d0247 100644 --- a/src/blenderbim/test/tool/test_unit.py +++ b/src/blenderbim/test/tool/test_unit.py @@ -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()