mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Fix bug where unit editing failed for named units
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user