From 6bfdd4e2f54e7a42a41b53705479a53cce26fe0d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 24 Feb 2019 22:09:44 +1100 Subject: [PATCH] Support copying subelements --- src/Mod/Draft/Draft.py | 14 ++++++++++++++ src/Mod/Draft/DraftTools.py | 22 +++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 1bace3522a..dd1ccddcbc 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1500,6 +1500,20 @@ def moveEdge(object, edge_index, vector): else: moveVertex(object, edge_index+1, object.Placement.multVec(object.Points[edge_index+1]), vector) +def copyEdges(copy_edge_arguments): + copied_edges = [] + for argument in copy_edge_arguments: + copied_edges.append(copyEdge(argument[0], argument[1], argument[2])) + joinWires(copied_edges) + +def copyEdge(object, edge_index, vector): + vertex1 = object.Placement.multVec(object.Points[edge_index]).add(vector) + if isClosedEdge(edge_index, object): + vertex2 = object.Placement.multVec(object.Points[0]).add(vector) + else: + vertex2 = object.Placement.multVec(object.Points[edge_index+1]).add(vector) + return makeLine(vertex1, vertex2) + def isClosedEdge(edge_index, object): return edge_index + 1 >= len(object.Points) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 59d67f18f0..ec03ec286d 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -2667,10 +2667,30 @@ class Move(Modifier): def move_subelements(self): try: - self.commit(translate("draft", "Move"), self.build_move_subelements_command()) + if self.ui.isCopy.isChecked(): + self.commit(translate("draft", "Copy"), self.build_copy_subelements_command()) + else: + self.commit(translate("draft", "Move"), self.build_move_subelements_command()) except: FreeCAD.Console.PrintError(translate("draft", "Some subelements could not be moved.")) + def build_copy_subelements_command(self): + import Part + command = [] + copy_edge_arguments = [] + for object in self.selected_subelements: + for index, subelement in enumerate(object.SubObjects): + if not isinstance(subelement, Part.Edge): + continue + copy_edge_arguments.append('[FreeCAD.ActiveDocument.{}, {}, {}]'.format( + object.ObjectName, + int(object.SubElementNames[index][len("Edge"):])-1, + DraftVecUtils.toString(self.vector) + )) + command.append('Draft.copyEdges([{}])'.format(','.join(copy_edge_arguments))) + command.append('FreeCAD.ActiveDocument.recompute()') + return command + def build_move_subelements_command(self): import Part command = []