Fix crash on Mac M1 on removing cost item

Crash happened because we were addressing `.id()` of already deleted `cost_item`.
Surprisingly for me on windows addressing `cost_item` was causing crash too but `cost_item.id()` worked fine.
This commit is contained in:
Andrej730
2023-06-29 14:56:06 +05:00
parent fb7591caef
commit 4d0be19720
3 changed files with 8 additions and 7 deletions
@@ -163,7 +163,7 @@ class RemoveCostItem(bpy.types.Operator, tool.Ifc.Operator):
cost_item: bpy.props.IntProperty() cost_item: bpy.props.IntProperty()
def _execute(self, context): def _execute(self, context):
core.remove_cost_item(tool.Ifc, tool.Cost, cost_item=tool.Ifc.get().by_id(self.cost_item)) core.remove_cost_item(tool.Ifc, tool.Cost, cost_item_id=self.cost_item)
class EnableEditingCostItem(bpy.types.Operator, tool.Ifc.Operator): class EnableEditingCostItem(bpy.types.Operator, tool.Ifc.Operator):
+3 -2
View File
@@ -59,9 +59,10 @@ def contract_cost_items(cost):
cost.load_cost_schedule_tree() cost.load_cost_schedule_tree()
def remove_cost_item(ifc, cost, cost_item): def remove_cost_item(ifc, cost, cost_item_id):
cost_item = ifc.get().by_id(cost_item_id)
ifc.run("cost.remove_cost_item", cost_item=cost_item) ifc.run("cost.remove_cost_item", cost_item=cost_item)
cost.clean_up_cost_item_tree(cost_item) cost.clean_up_cost_item_tree(cost_item_id)
cost.load_cost_schedule_tree() cost.load_cost_schedule_tree()
+4 -4
View File
@@ -96,11 +96,11 @@ class Cost(blenderbim.core.tool.Cost):
props.contracted_cost_items = json.dumps(cls.contracted_cost_items) props.contracted_cost_items = json.dumps(cls.contracted_cost_items)
@classmethod @classmethod
def contract_cost_item(cls, cost_item): def contract_cost_item(cls, cost_item_id):
props = bpy.context.scene.BIMCostProperties props = bpy.context.scene.BIMCostProperties
if not hasattr(cls, "contracted_cost_items"): if not hasattr(cls, "contracted_cost_items"):
cls.contracted_cost_items = json.loads(props.contracted_cost_items) cls.contracted_cost_items = json.loads(props.contracted_cost_items)
cls.contracted_cost_items.append(cost_item.id()) cls.contracted_cost_items.append(cost_item_id)
props.contracted_cost_items = json.dumps(cls.contracted_cost_items) props.contracted_cost_items = json.dumps(cls.contracted_cost_items)
@classmethod @classmethod
@@ -114,11 +114,11 @@ class Cost(blenderbim.core.tool.Cost):
props.contracted_cost_items = json.dumps(cls.contracted_cost_items) props.contracted_cost_items = json.dumps(cls.contracted_cost_items)
@classmethod @classmethod
def clean_up_cost_item_tree(cls, cost_item): def clean_up_cost_item_tree(cls, cost_item_id):
props = bpy.context.scene.BIMCostProperties props = bpy.context.scene.BIMCostProperties
if not hasattr(cls, "contracted_cost_items"): if not hasattr(cls, "contracted_cost_items"):
cls.contracted_cost_items = json.loads(props.contracted_cost_items) cls.contracted_cost_items = json.loads(props.contracted_cost_items)
if props.active_cost_item_id == cost_item.id(): if props.active_cost_item_id == cost_item_id:
props.active_cost_item_id = 0 props.active_cost_item_id = 0
if props.active_cost_item_index in cls.contracted_cost_items: if props.active_cost_item_index in cls.contracted_cost_items:
cls.contracted_cost_items.remove(props.active_cost_item_index) cls.contracted_cost_items.remove(props.active_cost_item_index)