diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 5dbc15f800..3702b8f052 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -196,6 +196,9 @@ from draftfunctions.move import move_edge, moveEdge from draftfunctions.move import copy_moved_edges, copyMovedEdges from draftfunctions.rotate import rotate +from draftfunctions.rotate import rotate_vertex, rotateVertex +from draftfunctions.rotate import rotate_edge, rotateEdge +from draftfunctions.rotate import copy_rotated_edges, copyRotatedEdges from draftfunctions.scale import scale from draftfunctions.scale import scale_vertex, scaleVertex @@ -514,28 +517,6 @@ def makePointArray(base, ptlst): return obj -def copyRotatedEdges(arguments): - copied_edges = [] - for argument in arguments: - copied_edges.append(copyRotatedEdge(argument[0], argument[1], - argument[2], argument[3], argument[4])) - joinWires(copied_edges) - -def copyRotatedEdge(object, edge_index, angle, center, axis): - vertex1 = rotateVectorFromCenter( - object.Placement.multVec(object.Points[edge_index]), - angle, axis, center) - if isClosedEdge(edge_index, object): - vertex2 = rotateVectorFromCenter( - object.Placement.multVec(object.Points[0]), - angle, axis, center) - else: - vertex2 = rotateVectorFromCenter( - object.Placement.multVec(object.Points[edge_index+1]), - angle, axis, center) - return makeLine(vertex1, vertex2) - - def array(objectslist,arg1,arg2,arg3,arg4=None,arg5=None,arg6=None): """array(objectslist,xvector,yvector,xnum,ynum) for rectangular array, array(objectslist,xvector,yvector,zvector,xnum,ynum,znum) for rectangular array, @@ -593,27 +574,6 @@ def array(objectslist,arg1,arg2,arg3,arg4=None,arg5=None,arg6=None): polarArray(objectslist,arg1,arg2,arg3) -def rotateVertex(object, vertex_index, angle, center, axis): - points = object.Points - points[vertex_index] = object.Placement.inverse().multVec( - rotateVectorFromCenter( - object.Placement.multVec(points[vertex_index]), - angle, axis, center)) - object.Points = points - -def rotateVectorFromCenter(vector, angle, axis, center): - rv = vector.sub(center) - rv = DraftVecUtils.rotate(rv, math.radians(angle), axis) - return center.add(rv) - -def rotateEdge(object, edge_index, angle, center, axis): - rotateVertex(object, edge_index, angle, center, axis) - if isClosedEdge(edge_index, object): - rotateVertex(object, 0, angle, center, axis) - else: - rotateVertex(object, edge_index+1, angle, center, axis) - - def getDXF(obj,direction=None): """getDXF(object,[direction]): returns a DXF entity from the given object. If direction is given, the object is projected in 2D.""" diff --git a/src/Mod/Draft/draftfunctions/rotate.py b/src/Mod/Draft/draftfunctions/rotate.py index 41a159abe6..7016e70639 100644 --- a/src/Mod/Draft/draftfunctions/rotate.py +++ b/src/Mod/Draft/draftfunctions/rotate.py @@ -35,6 +35,9 @@ import DraftVecUtils import draftutils.gui_utils as gui_utils import draftutils.utils as utils +from draftmake.make_line import make_line +from draftfunctions.join import join_wires + from draftmake.make_copy import make_copy @@ -144,3 +147,65 @@ def rotate(objectslist, angle, center=App.Vector(0,0,0), gui_utils.select(newobjlist) if len(newobjlist) == 1: return newobjlist[0] return newobjlist + + +# Following functions are needed for SubObjects modifiers +# implemented by Dion Moult during 0.19 dev cycle (works only with Draft Wire) + + +def rotate_vertex(object, vertex_index, angle, center, axis): + points = object.Points + points[vertex_index] = object.Placement.inverse().multVec( + rotate_vector_from_center( + object.Placement.multVec(points[vertex_index]), + angle, axis, center)) + object.Points = points + + +rotateVertex = rotate_vertex + + +def rotate_vector_from_center(vector, angle, axis, center): + rv = vector.sub(center) + rv = DraftVecUtils.rotate(rv, math.radians(angle), axis) + return center.add(rv) + + +rotateVectorFromCenter = rotate_vector_from_center + + +def rotate_edge(object, edge_index, angle, center, axis): + rotateVertex(object, edge_index, angle, center, axis) + if utils.isClosedEdge(edge_index, object): + rotateVertex(object, 0, angle, center, axis) + else: + rotateVertex(object, edge_index+1, angle, center, axis) + + +rotateEdge = rotate_edge + + +def copy_rotated_edges(arguments): + copied_edges = [] + for argument in arguments: + copied_edges.append(copy_rotated_edge(argument[0], argument[1], + argument[2], argument[3], argument[4])) + join_wires(copied_edges) + + +copyRotatedEdges = copy_rotated_edges + + +def copy_rotated_edge(object, edge_index, angle, center, axis): + vertex1 = rotate_vector_from_center( + object.Placement.multVec(object.Points[edge_index]), + angle, axis, center) + if utils.isClosedEdge(edge_index, object): + vertex2 = rotate_vector_from_center( + object.Placement.multVec(object.Points[0]), + angle, axis, center) + else: + vertex2 = rotate_vector_from_center( + object.Placement.multVec(object.Points[edge_index+1]), + angle, axis, center) + return make_line(vertex1, vertex2) \ No newline at end of file