Implement context menu actions for Cura

This commit is contained in:
Arjen Hiemstra 2015-03-17 15:56:53 +01:00
parent 3d5788a6c2
commit b11757d80f
2 changed files with 133 additions and 0 deletions

View file

@ -220,6 +220,32 @@ UM.MainWindow {
deleteSelection.onTriggered: UM.Controller.removeSelection(); deleteSelection.onTriggered: UM.Controller.removeSelection();
deleteObject.onTriggered: {
if(objectContextMenu.id != 0) {
Printer.deleteObject(objectContextMenu.id);
objectContextMenu.id = 0;
}
}
multiplyObject.onTriggered: {
if(objectContextMenu.id != 0) {
Printer.multiplyObject(objectContextMenu.id, 1);
objectContextMenu.id = 0;
}
}
centerObject.onTriggered: {
if(objectContextMenu.id != 0) {
Printer.centerObject(objectContextMenu.id);
objectContextMenu.id = 0;
}
}
deleteAll.onTriggered: Printer.deleteAll()
resetAllTranslation.onTriggered: Printer.resetAllTranslation()
resetAll.onTriggered: Printer.resetAll()
reloadAll.onTriggered: Printer.reloadAll()
addMachine.onTriggered: addMachine.visible = true; addMachine.onTriggered: addMachine.visible = true;
preferences.onTriggered: preferences.visible = true; preferences.onTriggered: preferences.visible = true;

View file

@ -8,10 +8,16 @@ from UM.Resources import Resources
from UM.Scene.ToolHandle import ToolHandle from UM.Scene.ToolHandle import ToolHandle
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Mesh.WriteMeshJob import WriteMeshJob from UM.Mesh.WriteMeshJob import WriteMeshJob
from UM.Mesh.ReadMeshJob import ReadMeshJob
from UM.Scene.BoxRenderer import BoxRenderer from UM.Scene.BoxRenderer import BoxRenderer
from UM.Scene.Selection import Selection from UM.Scene.Selection import Selection
from UM.Operations.AddSceneNodeOperation import AddSceneNodeOperation
from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
from UM.Operations.GroupedOperation import GroupedOperation
from UM.Operations.SetTransformOperation import SetTransformOperation
from PlatformPhysics import PlatformPhysics from PlatformPhysics import PlatformPhysics
from BuildVolume import BuildVolume from BuildVolume import BuildVolume
from CameraAnimation import CameraAnimation from CameraAnimation import CameraAnimation
@ -22,6 +28,7 @@ from PyQt5.QtGui import QColor
import os.path import os.path
import numpy import numpy
numpy.seterr(all='ignore') numpy.seterr(all='ignore')
import copy
class PrinterApplication(QtApplication): class PrinterApplication(QtApplication):
def __init__(self): def __init__(self):
@ -120,6 +127,106 @@ class PrinterApplication(QtApplication):
requestAddPrinter = pyqtSignal() requestAddPrinter = pyqtSignal()
@pyqtSlot('quint64')
def deleteObject(self, object_id):
object = self.getController().getScene().findObject(object_id)
if object:
op = RemoveSceneNodeOperation(object)
op.push()
@pyqtSlot('quint64', int)
def multiplyObject(self, object_id, count):
node = self.getController().getScene().findObject(object_id)
if node:
op = GroupedOperation()
for i in range(count):
new_node = SceneNode()
new_node.setMeshData(node.getMeshData())
new_node.setScale(node.getScale())
new_node.translate(Vector((i + 1) * node.getBoundingBox().width, 0, 0))
new_node.setSelectable(True)
op.addOperation(AddSceneNodeOperation(new_node, node.getParent()))
op.push()
@pyqtSlot('quint64')
def centerObject(self, object_id):
node = self.getController().getScene().findObject(object_id)
if node:
transform = node.getLocalTransformation()
transform.setTranslation(Vector(0, 0, 0))
op = SetTransformOperation(node, transform)
op.push()
@pyqtSlot()
def deleteAll(self):
nodes = []
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
if type(node) is not SceneNode or not node.getMeshData():
continue
nodes.append(node)
if nodes:
op = GroupedOperation()
for node in nodes:
op.addOperation(RemoveSceneNodeOperation(node))
op.push()
@pyqtSlot()
def resetAllTranslation(self):
nodes = []
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
if type(node) is not SceneNode or not node.getMeshData():
continue
nodes.append(node)
if nodes:
op = GroupedOperation()
for node in nodes:
transform = node.getLocalTransformation()
transform.setTranslation(Vector(0, 0, 0))
op.addOperation(SetTransformOperation(node, transform))
op.push()
@pyqtSlot()
def resetAll(self):
nodes = []
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
if type(node) is not SceneNode or not node.getMeshData():
continue
nodes.append(node)
if nodes:
op = GroupedOperation()
for node in nodes:
transform = Matrix()
op.addOperation(SetTransformOperation(node, transform))
op.push()
@pyqtSlot()
def reloadAll(self):
nodes = []
for node in DepthFirstIterator(self.getController().getScene().getRoot()):
if type(node) is not SceneNode or not node.getMeshData():
continue
nodes.append(node)
if nodes:
file_name = node.getMeshData().getFileName()
job = ReadMeshJob(file_name)
job.finished.connect(lambda j: node.setMeshData(j.getResult()))
job.start()
def _onActiveMachineChanged(self): def _onActiveMachineChanged(self):
machine = self.getActiveMachine() machine = self.getActiveMachine()
if machine: if machine: