Added merging for multi material

This commit is contained in:
Jaime van Kessel 2015-07-27 14:25:27 +02:00
parent 4c1d86d28c
commit 19d711fb80
5 changed files with 54 additions and 2 deletions

View file

@ -36,6 +36,7 @@ from . import BuildVolume
from . import CameraAnimation from . import CameraAnimation
from . import PrintInformation from . import PrintInformation
from . import CuraActions from . import CuraActions
from . import MultiMaterialDecorator
from PyQt5.QtCore import pyqtSlot, QUrl, Qt, pyqtSignal, pyqtProperty from PyQt5.QtCore import pyqtSlot, QUrl, Qt, pyqtSignal, pyqtProperty
from PyQt5.QtGui import QColor, QIcon from PyQt5.QtGui import QColor, QIcon
@ -425,6 +426,24 @@ class CuraApplication(QtApplication):
self.getActiveMachine().setSettingValueByKey(key, value) self.getActiveMachine().setSettingValueByKey(key, value)
@pyqtSlot()
def mergeSelected(self):
self.groupSelected()
try:
group_node = Selection.getAllSelectedObjects()[0]
except Exception as e:
return
multi_material_decorator = MultiMaterialDecorator.MultiMaterialDecorator()
group_node.addDecorator(multi_material_decorator)
# Reset the position of each node
for node in group_node.getChildren():
new_position = node.getPosition()
new_position.setX(0)
new_position.setZ(0)
node.setPosition(new_position)
# Use the previously found center of the group bounding box as the new location of the group
group_node.setPosition((group_node.getBoundingBox().maximum + group_node.getBoundingBox().minimum) / 2)
@pyqtSlot() @pyqtSlot()
def groupSelected(self): def groupSelected(self):

View file

@ -0,0 +1,8 @@
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
class MultiMaterialDecorator(SceneNodeDecorator):
def __init__(self):
super().__init__()
def isMultiMaterial(self):
return True

View file

@ -80,7 +80,16 @@ class PlatformPhysics:
# Check for collisions between convex hulls # Check for collisions between convex hulls
for other_node in BreadthFirstIterator(root): for other_node in BreadthFirstIterator(root):
# Ignore root, ourselves and anything that is not a normal SceneNode. # Ignore root, ourselves and anything that is not a normal SceneNode.
if other_node is root or type(other_node) is not SceneNode or other_node is node or other_node in node.getAllChildren() or node in other_node.getAllChildren(): if other_node is root or type(other_node) is not SceneNode or other_node is node:
continue
# Ignore colissions of a group with it's own children
if other_node in node.getAllChildren() or node in other_node.getAllChildren():
continue
# Ignore colissions within a group
if other_node.getParent().callDecoration("isGroup") is not None:
if node.getParent().callDecoration("isGroup") is other_node.getParent().callDecoration("isGroup"):
continue continue
# Ignore nodes that do not have the right properties set. # Ignore nodes that do not have the right properties set.

View file

@ -19,6 +19,8 @@ Item {
property alias centerObject: centerObjectAction; property alias centerObject: centerObjectAction;
property alias groupObjects: groupObjectsAction; property alias groupObjects: groupObjectsAction;
property alias unGroupObjects:unGroupObjectsAction; property alias unGroupObjects:unGroupObjectsAction;
property alias mergeObjects: mergeObjectsAction;
//property alias unMergeObjects: unMergeObjectsAction;
property alias multiplyObject: multiplyObjectAction; property alias multiplyObject: multiplyObjectAction;
property alias splitObject: splitObjectAction; property alias splitObject: splitObjectAction;
@ -139,6 +141,13 @@ Item {
enabled: UM.Scene.isGroupSelected enabled: UM.Scene.isGroupSelected
} }
Action
{
id: mergeObjectsAction
text: qsTr("Merge objects");
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
}
Action { Action {
id: multiplyObjectAction; id: multiplyObjectAction;
//: Duplicate object action //: Duplicate object action

View file

@ -358,6 +358,11 @@ UM.MainWindow {
Printer.ungroupSelected() Printer.ungroupSelected()
} }
mergeObjects.onTriggered:
{
Printer.mergeSelected()
}
deleteAll.onTriggered: Printer.deleteAll() deleteAll.onTriggered: Printer.deleteAll()
resetAllTranslation.onTriggered: Printer.resetAllTranslation() resetAllTranslation.onTriggered: Printer.resetAllTranslation()
resetAll.onTriggered: Printer.resetAll() resetAll.onTriggered: Printer.resetAll()
@ -390,6 +395,7 @@ UM.MainWindow {
MenuItem { action: actions.resetAll; } MenuItem { action: actions.resetAll; }
MenuItem { action: actions.groupObjects;} MenuItem { action: actions.groupObjects;}
MenuItem { action: actions.unGroupObjects;} MenuItem { action: actions.unGroupObjects;}
MenuItem { action: actions.mergeObjects;}
} }
Menu { Menu {
@ -400,6 +406,7 @@ UM.MainWindow {
MenuItem { action: actions.resetAll; } MenuItem { action: actions.resetAll; }
MenuItem { action: actions.groupObjects;} MenuItem { action: actions.groupObjects;}
MenuItem { action: actions.unGroupObjects;} MenuItem { action: actions.unGroupObjects;}
MenuItem { action: actions.mergeObjects;}
} }
Connections { Connections {