Draft: split sub_object_move from Draft.py

This commit is contained in:
carlopav
2020-05-09 10:23:23 +02:00
committed by Yorik van Havre
parent 10efbcb207
commit 920512692b
2 changed files with 68 additions and 43 deletions

View File

@@ -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."""

View File

@@ -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)