Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
dim = int( self.read_next_non_whitespace().strip())
center = np.array(next(self.fstream).split(), dtype=float)
normal = np.array(next(self.fstream).split(), dtype=float)
x_axis = np.array(next(self.fstream).split(), dtype=float)
finite = next(self.fstream).strip() != '0'
if finite:
param_u= np.array(next(self.fstream).split(), dtype=float)
param_v= np.array(next(self.fstream).split(), dtype=float)
else:
param_u= [-state.unlimited, +state.unlimited]
param_v= [-state.unlimited, +state.unlimited]
swap = next(self.fstream).strip() != '0'
result = Surface() * [param_u[1]-param_u[0], param_v[1]-param_v[0]] + [param_u[0],param_v[0]]
result.rotate(rotate_local_x_axis(x_axis, normal))
result = flip_and_move_plane_geometry(result,center,normal)
result.reparam(param_u, param_v)
if(swap):
result.swap()
return result
""" Create a spherical shell.
:param float r: Radius
:param array-like center: Local origin of the sphere
:param array-like zaxis: direction of the north/south pole of the parametrization
:param array-like xaxis: direction of the longitudal sem
:return: The spherical shell
:rtype: Surface
"""
circle = CurveFactory.circle_segment(pi, r)
circle.rotate(-pi / 2)
circle.rotate(pi / 2, (1, 0, 0)) # flip up into xz-plane
result = revolve(circle)
result.rotate(rotate_local_x_axis(xaxis, zaxis))
return flip_and_move_plane_geometry(result, center, zaxis)
""" Create an ellipse
:param float r1: Radius along xaxis
:param float r2: Radius orthogonal to xaxis
:param array-like center: local origin
:param array-like normal: local normal
:param string type: The type of parametrization ('p2C0' or 'p4C1')
:param array-like xaxis: direction of sem, i.e. parametric start point t=0
:return: A periodic, quadratic rational curve
:rtype: Curve
:raises ValueError: If radius is not positive
"""
result = circle(type=type)
result *= [r1,r2,1]
result.rotate(rotate_local_x_axis(xaxis, normal))
return flip_and_move_plane_geometry(result, center, normal)
# build control points
for i in range(n):
w = 1 - (i % 2) * (1 - cos(dt)) # weights = 1 and cos(dt) every other i
x = r * cos(t)
y = r * sin(t)
cp += [[x, y, w]]
t += dt
if theta < 0:
cp.reverse()
result = Curve(BSplineBasis(3, np.flip(knot,0)), cp, True)
else:
result = Curve(BSplineBasis(3, knot), cp, True)
result.rotate(rotate_local_x_axis(xaxis, normal))
return flip_and_move_plane_geometry(result, center, normal)
return result
elif type == 'square':
w = 1 / sqrt(2)
cp = [[-r * w, -r * w, 1],
[0, -r, w],
[r * w, -r * w, 1],
[-r, 0, w],
[0, 0, 1],
[r, 0, w],
[-r * w, r * w, 1],
[0, r, w],
[r * w, r * w, 1]]
basis1 = BSplineBasis(3)
basis2 = BSplineBasis(3)
result = Surface(basis1, basis2, cp, True)
return flip_and_move_plane_geometry(result, center, normal)
else:
raise ValueError('invalid type argument')
[-a, 1, 1],
[-b, b, w],
[-1, a, 1],
[-1,-a, 1],
[-b,-b, w],
[-a,-1, 1],
[ a,-1, 1],
[ b,-b, w]]
knot = np.array([ -1, -1, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5]) / 4.0 * 2 * pi
result = Curve(BSplineBasis(5, knot, 1), controlpoints, True)
else:
raise ValueError('Unkown type: %s' %(type))
result *= r
result.rotate(rotate_local_x_axis(xaxis, normal))
return flip_and_move_plane_geometry(result, center, normal)
def disc(r=1, center=(0,0,0), normal=(0,0,1), type='radial', xaxis=(1,0,0)):
""" Create a circular disc. The *type* parameter distinguishes between
different parametrizations.
:param float r: Radius
:param array-like center: local origin
:param array-like normal: local normal
:param string type: The type of parametrization ('radial' or 'square')
:param array-like xaxis: direction of sem, i.e. parametric start point v=0
:return: The disc
:rtype: Surface
"""
if type == 'radial':
c1 = CurveFactory.circle(r, center=center, normal=normal, xaxis=xaxis)
c2 = flip_and_move_plane_geometry(c1*0, center, normal)
result = edge_curves(c2, c1)
result.swap()
result.reparam((0,r), (0,2*pi))
return result
elif type == 'square':
w = 1 / sqrt(2)
cp = [[-r * w, -r * w, 1],
[0, -r, w],
[r * w, -r * w, 1],
[-r, 0, w],
[0, 0, 1],
[r, 0, w],
[-r * w, r * w, 1],
[0, r, w],
[r * w, r * w, 1]]
basis1 = BSplineBasis(3)
if r <= 0:
raise ValueError('radius needs to be positive')
if n < 3:
raise ValueError('regular polygons need at least 3 sides')
cp = []
dt = 2 * pi / n
knot = [-1]
for i in range(n):
cp.append([r * cos(i * dt), r * sin(i * dt)])
knot.append(i)
knot += [n, n+1]
basis = BSplineBasis(2, knot, 0)
result = Curve(basis, cp)
return flip_and_move_plane_geometry(result, center, normal)