diff options
author | fieldOfView <aldo@fieldofview.com> | 2018-03-15 14:46:22 +0300 |
---|---|---|
committer | fieldOfView <aldo@fieldofview.com> | 2018-03-15 14:46:22 +0300 |
commit | c25711797e6ccb9d7924ea7c724c5a40529dcf9f (patch) | |
tree | 9b22d6f95e67f251cfffd4ac27968ff7116e938d /plugins/SupportEraser | |
parent | 11be8f158f7c6f10349ce7d236f41d2c8796043e (diff) |
Click support eraser mesh to remove it from the scene
Diffstat (limited to 'plugins/SupportEraser')
-rw-r--r-- | plugins/SupportEraser/SupportEraser.py | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/plugins/SupportEraser/SupportEraser.py b/plugins/SupportEraser/SupportEraser.py index 65d22bcdfd..bbb3fefca5 100644 --- a/plugins/SupportEraser/SupportEraser.py +++ b/plugins/SupportEraser/SupportEraser.py @@ -7,6 +7,7 @@ from UM.Application import Application from UM.Event import Event, MouseEvent from UM.Mesh.MeshBuilder import MeshBuilder from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation +from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation from UM.Settings.SettingInstance import SettingInstance from cura.Scene.CuraSceneNode import CuraSceneNode from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator @@ -24,24 +25,39 @@ class SupportEraser(Tool): self._shortcut_key = Qt.Key_G self._controller = Application.getInstance().getController() + self._selection_pass = None Application.getInstance().globalContainerStackChanged.connect(self._updateEnabled) def event(self, event): super().event(event) if event.type == Event.MousePressEvent and self._controller.getToolsEnabled(): - active_camera = self._controller.getScene().getActiveCamera() + + if self._selection_pass is None: + # The selection renderpass is used to identify objects in the current view + self._selection_pass = Application.getInstance().getRenderer().getRenderPass("selection") + picked_node = self._controller.getScene().findObject(self._selection_pass.getIdAtPosition(event.x, event.y)) + + node_stack = picked_node.callDecoration("getStack") + if node_stack: + if node_stack.getProperty("anti_overhang_mesh", "value"): + self._removeEraserMesh(picked_node) + return + + elif node_stack.getProperty("support_mesh", "value") or node_stack.getProperty("infill_mesh", "value") or node_stack.getProperty("cutting_mesh", "value"): + return # Create a pass for picking a world-space location from the mouse location + active_camera = self._controller.getScene().getActiveCamera() picking_pass = PickingPass(active_camera.getViewportWidth(), active_camera.getViewportHeight()) picking_pass.render() picked_position = picking_pass.getPickedPosition(event.x, event.y) # Add the anti_overhang_mesh cube at the picked location - self._createEraserMesh(picked_position) + self._createEraserMesh(picked_node, picked_position) - def _createEraserMesh(self, position: Vector): + def _createEraserMesh(self, parent: CuraSceneNode, position: Vector): node = CuraSceneNode() node.setName("Eraser") @@ -76,6 +92,11 @@ class SupportEraser(Tool): op.push() Application.getInstance().getController().getScene().sceneChanged.emit(node) + def _removeEraserMesh(self, node: CuraSceneNode): + op = RemoveSceneNodeOperation(node) + op.push() + Application.getInstance().getController().getScene().sceneChanged.emit(node) + def _updateEnabled(self): plugin_enabled = False |