Speed up the objects model

It was using a few expensive calls that had already been cached.

CURA-7106
This commit is contained in:
Jaime van Kessel 2020-06-23 10:32:42 +02:00
parent 46076bf21d
commit 737a9faa5f
No known key found for this signature in database
GPG key ID: 3710727397403C91
2 changed files with 22 additions and 6 deletions

View file

@ -49,6 +49,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
self._is_support_mesh = False self._is_support_mesh = False
self._is_cutting_mesh = False self._is_cutting_mesh = False
self._is_infill_mesh = False self._is_infill_mesh = False
self._is_anti_overhang_mesh = False
self._stack.propertyChanged.connect(self._onSettingChanged) self._stack.propertyChanged.connect(self._onSettingChanged)
@ -126,6 +127,12 @@ class SettingOverrideDecorator(SceneNodeDecorator):
def isInfillMesh(self): def isInfillMesh(self):
return self._is_infill_mesh return self._is_infill_mesh
def isAntiOverhangMesh(self):
return self._is_anti_overhang_mesh
def _evaluateAntiOverhangMesh(self):
return bool(self._stack.userChanges.getProperty("anti_overhang_mesh", "value"))
def _evaluateIsCuttingMesh(self): def _evaluateIsCuttingMesh(self):
return bool(self._stack.userChanges.getProperty("cutting_mesh", "value")) return bool(self._stack.userChanges.getProperty("cutting_mesh", "value"))
@ -154,7 +161,9 @@ class SettingOverrideDecorator(SceneNodeDecorator):
self._is_non_printing_mesh = self._evaluateIsNonPrintingMesh() self._is_non_printing_mesh = self._evaluateIsNonPrintingMesh()
self._is_non_thumbnail_visible_mesh = self._evaluateIsNonThumbnailVisibleMesh() self._is_non_thumbnail_visible_mesh = self._evaluateIsNonThumbnailVisibleMesh()
if setting_key == "support_mesh": if setting_key == "anti_overhang_mesh":
self._is_anti_overhang_mesh = self._evaluateAntiOverhangMesh()
elif setting_key == "support_mesh":
self._is_support_mesh = self._evaluateIsSupportMesh() self._is_support_mesh = self._evaluateIsSupportMesh()
elif setting_key == "cutting_mesh": elif setting_key == "cutting_mesh":
self._is_cutting_mesh = self._evaluateIsCuttingMesh() self._is_cutting_mesh = self._evaluateIsCuttingMesh()

View file

@ -185,11 +185,18 @@ class ObjectsModel(ListModel):
if per_object_stack: if per_object_stack:
per_object_settings_count = per_object_stack.getTop().getNumInstances() per_object_settings_count = per_object_stack.getTop().getNumInstances()
for mesh_type in ["anti_overhang_mesh", "infill_mesh", "cutting_mesh", "support_mesh"]: if node.callDecoration("isAntiOverhangMesh"):
if per_object_stack.getProperty(mesh_type, "value"): node_mesh_type = "anti_overhang_mesh"
node_mesh_type = mesh_type per_object_settings_count -= 1 # do not count this mesh type setting
per_object_settings_count -= 1 # do not count this mesh type setting elif node.callDecoration("isSupportMesh"):
break node_mesh_type = "support_mesh"
per_object_settings_count -= 1 # do not count this mesh type setting
elif node.callDecoration("isCuttingMesh"):
node_mesh_type = "cutting_mesh"
per_object_settings_count -= 1 # do not count this mesh type setting
elif node.callDecoration("isInfillMesh"):
node_mesh_type = "infill_mesh"
per_object_settings_count -= 1 # do not count this mesh type setting
if per_object_settings_count > 0: if per_object_settings_count > 0:
if node_mesh_type == "support_mesh": if node_mesh_type == "support_mesh":