Skip to content

Commit 533a30c

Browse files
committed
Add translate() method to curve classes
1 parent be6e977 commit 533a30c

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

geomdl/BSpline.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,30 @@ def split(self, u=-1):
921921
# Return the new curves
922922
return curve1, curve2
923923

924+
def translate(self, vec=()):
925+
""" Translates the curve using the input vector.
926+
927+
The input vector list/tuple must have
928+
929+
* 2 elements for 2D curves
930+
* 3 elements for 3D curves
931+
932+
:param vec: translation vector
933+
:type vec: list, tuple
934+
"""
935+
if not vec or not isinstance(vec, (tuple, list)):
936+
raise ValueError("The input must be a list or a tuple")
937+
938+
if len(vec) != self._dimension:
939+
raise ValueError("The input must have " + str(self._dimension) + " elements")
940+
941+
new_ctrlpts = []
942+
for point in self._control_points:
943+
temp = [v + vec[i] for i, v in enumerate(point)]
944+
new_ctrlpts.append(temp)
945+
946+
self._control_points = new_ctrlpts
947+
924948

925949
class Curve2D(Curve):
926950
""" Data storage and evaluation class for 2D B-Spline (NUBS) curves.

geomdl/NURBS.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,30 @@ def derivatives2(self, u=-1, order=0):
199199
"""
200200
return self.derivatives(u, order)
201201

202+
def translate(self, vec=()):
203+
""" Translates the curve using the input vector.
204+
205+
The input vector list/tuple must have
206+
207+
* 2 elements for 2D curves
208+
* 3 elements for 3D curves
209+
210+
:param vec: translation vector
211+
:type vec: list, tuple
212+
"""
213+
if not vec or not isinstance(vec, (tuple, list)):
214+
raise ValueError("The input must be a list or a tuple")
215+
216+
if len(vec) != self._dimension - 1:
217+
raise ValueError("The input must have " + str(self._dimension - 1) + " elements")
218+
219+
new_ctrlpts = []
220+
for point in self._control_points:
221+
temp = [v + vec[i] for i, v in enumerate(point[0:self._dimension - 1])]
222+
new_ctrlpts.append(temp)
223+
224+
self._control_points = new_ctrlpts
225+
202226

203227
class Curve2D(Curve):
204228
""" Data storage and evaluation class for 2D NURBS curves.

0 commit comments

Comments
 (0)