mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 02:37:49 -06:00
Added merging for multi material
This commit is contained in:
parent
4c1d86d28c
commit
19d711fb80
5 changed files with 54 additions and 2 deletions
|
@ -36,6 +36,7 @@ from . import BuildVolume
|
|||
from . import CameraAnimation
|
||||
from . import PrintInformation
|
||||
from . import CuraActions
|
||||
from . import MultiMaterialDecorator
|
||||
|
||||
from PyQt5.QtCore import pyqtSlot, QUrl, Qt, pyqtSignal, pyqtProperty
|
||||
from PyQt5.QtGui import QColor, QIcon
|
||||
|
@ -425,6 +426,24 @@ class CuraApplication(QtApplication):
|
|||
|
||||
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()
|
||||
def groupSelected(self):
|
||||
|
|
8
cura/MultiMaterialDecorator.py
Normal file
8
cura/MultiMaterialDecorator.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
|
||||
|
||||
class MultiMaterialDecorator(SceneNodeDecorator):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def isMultiMaterial(self):
|
||||
return True
|
|
@ -80,7 +80,16 @@ class PlatformPhysics:
|
|||
# Check for collisions between convex hulls
|
||||
for other_node in BreadthFirstIterator(root):
|
||||
# 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
|
||||
|
||||
# Ignore nodes that do not have the right properties set.
|
||||
|
|
|
@ -19,6 +19,8 @@ Item {
|
|||
property alias centerObject: centerObjectAction;
|
||||
property alias groupObjects: groupObjectsAction;
|
||||
property alias unGroupObjects:unGroupObjectsAction;
|
||||
property alias mergeObjects: mergeObjectsAction;
|
||||
//property alias unMergeObjects: unMergeObjectsAction;
|
||||
|
||||
property alias multiplyObject: multiplyObjectAction;
|
||||
property alias splitObject: splitObjectAction;
|
||||
|
@ -139,6 +141,13 @@ Item {
|
|||
enabled: UM.Scene.isGroupSelected
|
||||
}
|
||||
|
||||
Action
|
||||
{
|
||||
id: mergeObjectsAction
|
||||
text: qsTr("Merge objects");
|
||||
enabled: UM.Scene.numObjectsSelected > 1 ? true: false
|
||||
}
|
||||
|
||||
Action {
|
||||
id: multiplyObjectAction;
|
||||
//: Duplicate object action
|
||||
|
|
|
@ -358,6 +358,11 @@ UM.MainWindow {
|
|||
Printer.ungroupSelected()
|
||||
}
|
||||
|
||||
mergeObjects.onTriggered:
|
||||
{
|
||||
Printer.mergeSelected()
|
||||
}
|
||||
|
||||
deleteAll.onTriggered: Printer.deleteAll()
|
||||
resetAllTranslation.onTriggered: Printer.resetAllTranslation()
|
||||
resetAll.onTriggered: Printer.resetAll()
|
||||
|
@ -390,6 +395,7 @@ UM.MainWindow {
|
|||
MenuItem { action: actions.resetAll; }
|
||||
MenuItem { action: actions.groupObjects;}
|
||||
MenuItem { action: actions.unGroupObjects;}
|
||||
MenuItem { action: actions.mergeObjects;}
|
||||
}
|
||||
|
||||
Menu {
|
||||
|
@ -400,6 +406,7 @@ UM.MainWindow {
|
|||
MenuItem { action: actions.resetAll; }
|
||||
MenuItem { action: actions.groupObjects;}
|
||||
MenuItem { action: actions.unGroupObjects;}
|
||||
MenuItem { action: actions.mergeObjects;}
|
||||
}
|
||||
|
||||
Connections {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue