mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
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:
@@ -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):
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user