Skip to content

Commit f7b457d

Browse files
committed
Minor API fix.
1 parent 6e01b89 commit f7b457d

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

utils/surface/nurbs.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -428,30 +428,37 @@ def cut_slice(self, direction, p_min, p_max):
428428
result, _ = rest.split_at(direction, p_max)
429429
return result
430430

431-
def get_discontinuities_u(self, order):
431+
def get_discontinuities_u(self, order, include_endpoints=False):
432432
p = self.get_degree_u()
433433
knotvector = self.get_knotvector_u()
434434
ms = sv_knotvector.to_multiplicity(knotvector)
435-
return [t for t, s in ms if s == p - order + 1]
435+
result = [t for t, s in ms if s == p - order + 1]
436+
if include_endpoints:
437+
result = [knotvector[0]] + result + [knotvector[-1]]
438+
return result
436439

437-
def get_discontinuities_v(self, order):
440+
def get_discontinuities_v(self, order, include_endpoints=False):
438441
p = self.get_degree_v()
439442
knotvector = self.get_knotvector_v()
440443
ms = sv_knotvector.to_multiplicity(knotvector)
441-
return [t for t, s in ms if s == p - order + 1]
444+
result = [t for t, s in ms if s == p - order + 1]
445+
if include_endpoints:
446+
result = [knotvector[0]] + result + [knotvector[-1]]
447+
return result
442448

443-
def get_discontinuities(self, direction, order):
449+
def get_discontinuities(self, direction, order, include_endpoints=False):
444450
if direction == SvNurbsSurface.U:
445-
return self.get_discontinuities_u(order)
451+
return self.get_discontinuities_u(order, include_endpoints)
446452
else:
447-
return self.get_discontinuities_v(order)
453+
return self.get_discontinuities_v(order, include_endpoints)
448454

449455
def cut_slices_by_discontinuity(self, direction, order):
450-
ts = self.get_discontinuities(direction, order)
451-
if len(ts) <= 1:
456+
ts = self.get_discontinuities(direction, order, include_endpoints=True)
457+
if len(ts) <= 2:
452458
return [self]
453-
print(f"Discontinuities in {direction}: {ts}")
454-
return [self.cut_slice(direction, t1, t2) for t1, t2 in zip(ts, ts[1:])]
459+
result = [self.cut_slice(direction, t1, t2) for t1, t2 in zip(ts, ts[1:])]
460+
#print(f"Discontinuities in {direction}: {ts} => {len(result)} slices")
461+
return result
455462

456463
def cut_slices_by_discontinuity_uv(self, order, join=True):
457464
slices_u = self.cut_slices_by_discontinuity(SvNurbsSurface.U, order)

0 commit comments

Comments
 (0)