aerocaps.geom.surfaces.BSplineSurface#

class BSplineSurface(points: List[List[Point3D]], knots_u: ndarray, knots_v: ndarray, name: str = 'BSplineSurface', construction: bool = False)[source]#

Bases: Surface

B-spline surface class

__init__(points: List[List[Point3D]], knots_u: ndarray, knots_v: ndarray, name: str = 'BSplineSurface', construction: bool = False)[source]#
Parameters:
  • points

  • knots_u

  • knots_v

  • name (str) – Name of the geometric object. May be re-assigned a unique name when added to a GeometryContainer. Default: ‘BSplineSurface’

  • construction (bool) – Whether this is a geometry used only for construction of other geometries. If True, this geometry will not be exported or plotted. Default: False

Methods

d2Sdu2(u, v)

Evaluates the second derivative with respect to \(u\) at a single \((u,v)\) pair

d2Sdu2_grid(Nu, Nv)

Evaluates the second derivative with respect to \(u\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

d2Sdu2_uvvecs(u, v)

Evaluates the second derivative of the surface with respect to \(u\) at arbitrary vectors of \(u\) and \(v\)-values.

d2Sdv2(u, v)

Evaluates the second derivative with respect to \(v\) at a single \((u,v)\) pair

d2Sdv2_grid(Nu, Nv)

Evaluates the second derivative with respect to \(v\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

d2Sdv2_uvvecs(u, v)

Evaluates the second derivative of the surface with respect to \(v\) at arbitrary vectors of \(u\) and \(v\)-values.

dSdu(u, v)

Evaluates the first derivative with respect to \(u\) at a single \((u,v)\) pair

dSdu_grid(Nu, Nv)

Evaluates the first derivative with respect to \(u\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

dSdu_uvvecs(u, v)

Evaluates the first derivative of the surface with respect to \(u\) at arbitrary vectors of \(u\) and \(v\)-values.

dSdv(u, v)

Evaluates the first derivative with respect to \(v\) at a single \((u,v)\) pair

dSdv_grid(Nu, Nv)

Evaluates the first derivative with respect to \(v\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

dSdv_uvvecs(u, v)

Evaluates the first derivative of the surface with respect to \(v\) at arbitrary vectors of \(u\) and \(v\)-values.

enforce_c0(other, surface_edge, ...)

For zeroth-degree continuity, there is no difference between geometric (\(G^0\)) and parametric (\(C^0\)) continuity.

enforce_c0c1(other, surface_edge, ...)

Equivalent to calling enforce_g0g1 with f=1.0.

enforce_c0c1c2(other, surface_edge, ...)

Equivalent to calling enforce_g0g1g2 with f=1.0.

enforce_g0(other, surface_edge, ...)

Enforces \(G^0\) continuity along the input surface_edge by equating the control points along this edge to the corresponding control points and weights along the other_surface_edge of the B-spline surface given by other.

enforce_g0g1(other, f, surface_edge, ...)

First enforces \(G^0\) continuity, then tangent (\(G^1\)) continuity is enforced according to the following equation:

enforce_g0g1g2(other, f, surface_edge, ...)

First enforces \(G^0\) and \(G^1\) continuity, then curvature (\(G^2\)) continuity is enforced according to the following equation:

evaluate(u, v)

Evaluates the surface at a given \((u,v)\) parameter pair.

evaluate_grid(Nu, Nv)

Evaluates the B-spline surface on a uniform \(N_u \times N_v\) grid of parameter values.

evaluate_point3d(u, v)

Evaluates the B-spline surface at a single \((u,v)\) parameter pair and returns a point object.

extract_edge_curve(surface_edge)

Extracts the control points, weights, and knots from one of the four edges of the B-spline surface and outputs a B-spline curve with these control points and weights

generate_control_point_net()

Generates a list of Point3D and Line3D objects representing the NURBS surface's control points and connections between them

get_control_point_array()

Gets the control points in float array form.

get_edge(edge[, n_points])

Evaluates the surface at n_points parameter locations along a given edge.

get_first_derivs_along_edge(edge[, ...])

Evaluates the parallel or perpendicular derivative along a surface edge at n_points parameter locations.

get_parallel_control_point_length(surface_edge)

Gets the number of control points of the curve corresponding to the input surface edge.

get_parallel_degree(surface_edge)

Gets the degree of the curve corresponding to the input surface edge.

get_parallel_knots(surface_edge)

Gets the knots in the parametric direction parallel to the input surface edge.

get_perpendicular_control_point_length(...)

Gets the number of control points in the parametric direction perpendicular to the input surface edge.

get_perpendicular_degree(surface_edge)

Gets the degree of the curve in the parametric direction perpendicular to the input surface edge.

get_perpendicular_knots(surface_edge)

Gets the knots in the parametric direction perpendicular to the input surface edge.

get_point(row_index, continuity_index, ...)

Gets the point corresponding to a particular index along the edge curve with perpendicular index corresponding to the level of continuity being applied.

get_second_derivs_along_edge(edge[, ...])

Evaluates the parallel or perpendicular second derivative along a surface edge at n_points parameter locations.

plot_control_point_mesh_lines(plot, ...)

Plots the network of lines connecting the B-spline surface control points using the pyvista library

plot_control_points(plot, **point_kwargs)

plot_surface(plot[, Nu, Nv])

set_point(point, row_index, ...)

Sets the point corresponding to a particular index along the edge curve with perpendicular index corresponding to the level of continuity being applied.

to_iges(*args, **kwargs)

Exports the NURBS surface to an IGES entity

transform(**transformation_kwargs)

Creates a transformed copy of the surface by transforming each of the control points

verify_g0(other, surface_edge, ...[, n_points])

Verifies that two NURBS Surfaces are G0 continuous along their shared edge

verify_g1(other, surface_edge, ...[, n_points])

Verifies that two NURBSSurfaces are G1 continuous along their shared edge

verify_g2(other, surface_edge, ...[, n_points])

Verifies that two B-spline surfaces are G2 continuous along their shared edge

Attributes

degree_u

Surface degree in the \(u\)-parametric direction

degree_v

Surface degree in the \(v\)-parametric direction

m

Shorthand for degree_v

n

Shorthand for degree_u

n_points_u

Number of control points in the \(u\)-parametric direction

n_points_v

Number of control points in the \(v\)-parametric direction

weights

Weight matrix (all ones for this surface type)

d2Sdu2(u: float, v: float) ndarray[source]#

Evaluates the second derivative with respect to \(u\) at a single \((u,v)\) pair

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

1-D array containing the \(x\)-, \(y\)-, and \(z\)-components of the second derivative

Return type:

np.ndarray

d2Sdu2_grid(Nu: int, Nv: int) ndarray[source]#

Evaluates the second derivative with respect to \(u\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

Parameters:
  • Nu (int) – Number of evenly spaced \(u\) values

  • Nv (int) – Number of evenly spaced \(v\) values

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

np.ndarray

d2Sdu2_uvvecs(u: ndarray, v: ndarray)[source]#

Evaluates the second derivative of the surface with respect to \(u\) at arbitrary vectors of \(u\) and \(v\)-values.

Parameters:
  • u (np.ndarray) – 1-D array of \(u\)-parameter values

  • v (np.ndarray) – 1-D array of \(v\)-parameter values

Returns:

Array of size \(\text{len}(u) \times \text{len}(v) \times 3\)

Return type:

np.ndarray

d2Sdv2(u: float, v: float)[source]#

Evaluates the second derivative with respect to \(v\) at a single \((u,v)\) pair

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

1-D array containing the \(x\)-, \(y\)-, and \(z\)-components of the second derivative

Return type:

np.ndarray

d2Sdv2_grid(Nu: int, Nv: int) ndarray[source]#

Evaluates the second derivative with respect to \(v\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

Parameters:
  • Nu (int) – Number of evenly spaced \(u\) values

  • Nv (int) – Number of evenly spaced \(v\) values

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

np.ndarray

d2Sdv2_uvvecs(u: ndarray, v: ndarray)[source]#

Evaluates the second derivative of the surface with respect to \(v\) at arbitrary vectors of \(u\) and \(v\)-values.

Parameters:
  • u (np.ndarray) – 1-D array of \(u\)-parameter values

  • v (np.ndarray) – 1-D array of \(v\)-parameter values

Returns:

Array of size \(\text{len}(u) \times \text{len}(v) \times 3\)

Return type:

np.ndarray

dSdu(u: float, v: float) ndarray[source]#

Evaluates the first derivative with respect to \(u\) at a single \((u,v)\) pair

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

1-D array containing the \(x\)-, \(y\)-, and \(z\)-components of the second derivative

Return type:

np.ndarray

dSdu_grid(Nu: int, Nv: int) ndarray[source]#

Evaluates the first derivative with respect to \(u\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

Parameters:
  • Nu (int) – Number of evenly spaced \(u\) values

  • Nv (int) – Number of evenly spaced \(v\) values

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

np.ndarray

dSdu_uvvecs(u: ndarray, v: ndarray)[source]#

Evaluates the first derivative of the surface with respect to \(u\) at arbitrary vectors of \(u\) and \(v\)-values.

Parameters:
  • u (np.ndarray) – 1-D array of \(u\)-parameter values

  • v (np.ndarray) – 1-D array of \(v\)-parameter values

Returns:

Array of size \(\text{len}(u) \times \text{len}(v) \times 3\)

Return type:

np.ndarray

dSdv(u: float, v: float)[source]#

Evaluates the first derivative with respect to \(v\) at a single \((u,v)\) pair

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

1-D array containing the \(x\)-, \(y\)-, and \(z\)-components of the second derivative

Return type:

np.ndarray

dSdv_grid(Nu: int, Nv: int) ndarray[source]#

Evaluates the first derivative with respect to \(v\) on a linearly-spaced grid of \(u\)- and \(v\)-values.

Parameters:
  • Nu (int) – Number of evenly spaced \(u\) values

  • Nv (int) – Number of evenly spaced \(v\) values

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

np.ndarray

dSdv_uvvecs(u: ndarray, v: ndarray)[source]#

Evaluates the first derivative of the surface with respect to \(v\) at arbitrary vectors of \(u\) and \(v\)-values.

Parameters:
  • u (np.ndarray) – 1-D array of \(u\)-parameter values

  • v (np.ndarray) – 1-D array of \(v\)-parameter values

Returns:

Array of size \(\text{len}(u) \times \text{len}(v) \times 3\)

Return type:

np.ndarray

property degree_u: int#

Surface degree in the \(u\)-parametric direction

property degree_v: int#

Surface degree in the \(v\)-parametric direction

enforce_c0(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

For zeroth-degree continuity, there is no difference between geometric (\(G^0\)) and parametric (\(C^0\)) continuity. Because this method is simply a convenience method that calls enforce_g0, see the documentation for that method for more detailed documentation.

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

enforce_c0c1(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

Equivalent to calling enforce_g0g1 with f=1.0. See that method for more detailed documentation.

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

enforce_c0c1c2(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

Equivalent to calling enforce_g0g1g2 with f=1.0. See that method for more detailed documentation.

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

enforce_g0(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

Enforces \(G^0\) continuity along the input surface_edge by equating the control points along this edge to the corresponding control points and weights along the other_surface_edge of the B-spline surface given by other. The control points of the surface from which this method is called are modified in-place, and the control points of other are left unchanged.

Important

The parallel degree of the current surface along surface_edge must be equal to the parallel degree of the other surface along other_surface_edge, otherwise an AssertionError will be raised. Additionally, the knot vector along the surface_edge of the current surface must be equal to the knot vector along the other_surface_edge of the other surface.

See also

enforce_c0

Parametric continuity equivalent (\(C^0\))

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

enforce_g0g1(other: BSplineSurface, f: float, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

First enforces \(G^0\) continuity, then tangent (\(G^1\)) continuity is enforced according to the following equation:

\[\mathcal{P}^{b,\mathcal{E}_b}_{k,1} = \mathcal{P}^{b,\mathcal{E}_b}_{k,0} + f \frac{p_{\perp}^{a,\mathcal{E}_a}}{p_{\perp}^{b,\mathcal{E}_b}} \left[\mathcal{P}^{a,\mathcal{E}_a}_{k,0} - \mathcal{P}^{a,\mathcal{E}_a}_{k,1} \right] \text{ for }k=0,1,\ldots,p_{\parallel}^{b,\mathcal{E}_b}\]

Here, \(b\) corresponds to the current surface, and \(a\) corresponds to the other surface. The control points of the surface from which this method is called are modified in-place, and the control points of other are left unchanged.

See also

enforce_g0

Geometric point continuity enforcement (\(G^0\))

enforce_c0c1

Parametric continuity equivalent (\(C^1\))

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • f (float) – Tangent proportionality factor

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

enforce_g0g1g2(other: BSplineSurface, f: float, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge)[source]#

First enforces \(G^0\) and \(G^1\) continuity, then curvature (\(G^2\)) continuity is enforced according to the following equation:

\[\mathcal{P}^{b,\mathcal{E}_b}_{k,2} = 2 \mathcal{P}^{b,\mathcal{E}_b}_{k,1} - \mathcal{P}^{b,\mathcal{E}_b}_{k,0} + f^2 \frac{p_{\perp}^{a,\mathcal{E}_a}(p_{\perp}^{a,\mathcal{E}_a}-1)}{p_{\perp}^{b,\mathcal{E}_b}(p_{\perp}^{b,\mathcal{E}_b}-1)} \left[ \mathcal{P}^{a,\mathcal{E}_a}_{k,0} - 2 \mathcal{P}^{a,\mathcal{E}_a}_{k,1} + \mathcal{P}^{a,\mathcal{E}_a}_{k,2} \right] \text{ for }k=0,1,\ldots,p_{\parallel}^{b,\mathcal{E}_b}\]

Here, \(b\) corresponds to the current surface, and \(a\) corresponds to the other surface. The control points of the surface from which this method is called are modified in-place, and the control points of other are left unchanged.

See also

enforce_g0

Geometric point continuity enforcement (\(G^0\))

enforce_g0g1

Geometric tangent continuity enforcement (\(G^1\))

enforce_c0c1c2

Parametric continuity equivalent (\(C^2\))

Parameters:
  • other (BSplineSurface) – Another B-spline surface along which an edge will be used for stitching

  • f (float) – Tangent proportionality factor

  • surface_edge (SurfaceEdge) – The edge of the current surface to modify

  • other_surface_edge (SurfaceEdge) – Tool edge of surface other which determines the positions of control points along surface_edge of the current surface

evaluate(u: float, v: float) ndarray[source]#

Evaluates the surface at a given \((u,v)\) parameter pair.

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

1-D array of the form array([x, y, z]) representing the evaluated point on the surface

Return type:

numpy.ndarray

evaluate_grid(Nu: int, Nv: int) ndarray[source]#

Evaluates the B-spline surface on a uniform \(N_u \times N_v\) grid of parameter values.

Parameters:
  • Nu (int) – Number of uniformly spaced parameter values in the \(u\)-direction

  • Nv (int) – Number of uniformly spaced parameter values in the \(v\)-direction

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

numpy.ndarray

evaluate_point3d(u: float, v: float) Point3D[source]#

Evaluates the B-spline surface at a single \((u,v)\) parameter pair and returns a point object.

Parameters:
  • u (float) – Position along \(u\) in parametric space. Normally in the range \([0,1]\)

  • v (float) – Position along \(v\) in parametric space. Normally in the range \([0,1]\)

Returns:

Point object corresponding to the \((u,v)\) pair

Return type:

Point3D

extract_edge_curve(surface_edge: SurfaceEdge) BSplineCurve3D[source]#

Extracts the control points, weights, and knots from one of the four edges of the B-spline surface and outputs a B-spline curve with these control points and weights

Parameters:

surface_edge (SurfaceEdge) – Edge along which to extract the curve

Returns:

B-spline curve with control points and knots corresponding to the control points and knots along the edge of the surface

Return type:

BSplineCurve3D

generate_control_point_net()[source]#

Generates a list of Point3D and Line3D objects representing the NURBS surface’s control points and connections between them

Returns:

Control points and lines between adjacent control points in flattened lists

Return type:

List[Point3D], List[Line3D]

get_control_point_array() ndarray[source]#

Gets the control points in float array form.

Returns:

Array of size \(N_u \times N_v \times 3\)

Return type:

numpy.ndarray

get_edge(edge: SurfaceEdge, n_points: int = 10) ndarray[source]#

Evaluates the surface at n_points parameter locations along a given edge.

Parameters:
  • edge (SurfaceEdge) – Edge along which to evaluate

  • n_points (int) – Number of evenly-spaced parameter locations at which to evaluate the edge curve. Default: 10

Returns:

2-D array of size \(n_\text{points} \times 3\)

Return type:

numpy.ndarray

get_first_derivs_along_edge(edge: SurfaceEdge, n_points: int = 10, perp: bool = True) ndarray[source]#

Evaluates the parallel or perpendicular derivative along a surface edge at n_points parameter locations. The derivative represents either \(\frac{\partial \mathbf{S}(u,v)}{\partial u}\) or \(\frac{\partial \mathbf{S}(u,v)}{\partial v}\) depending on which edge is selected and which value is assigned to perp.

Parameters:
  • edge (SurfaceEdge) – Edge along which to evaluate

  • n_points (int) – Number of evenly-spaced parameter locations at which to evaluate the derivative. Default: 10

  • perp (bool) – Whether to evaluate the cross-derivative. If False, the derivative along the parameter direction parallel to the edge will be evaluated instead. Default: True

Returns:

2-D array of size \(n_\text{points} \times 3\)

Return type:

numpy.ndarray

get_parallel_control_point_length(surface_edge: SurfaceEdge) int[source]#

Gets the number of control points of the curve corresponding to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the number of control points is computed

Returns:

Number of control points parallel to the edge

Return type:

int

get_parallel_degree(surface_edge: SurfaceEdge) int[source]#

Gets the degree of the curve corresponding to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the parallel degree is evaluated

Returns:

Degree parallel to the edge

Return type:

int

get_parallel_knots(surface_edge: SurfaceEdge) ndarray[source]#

Gets the knots in the parametric direction parallel to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the parallel knots are returned

Returns:

Knots parallel to the edge

Return type:

numpy.ndarray

get_perpendicular_control_point_length(surface_edge: SurfaceEdge) int[source]#

Gets the number of control points in the parametric direction perpendicular to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the number of perpendicular control points is computed

Returns:

Number of control points perpendicular to the edge

Return type:

int

get_perpendicular_degree(surface_edge: SurfaceEdge) int[source]#

Gets the degree of the curve in the parametric direction perpendicular to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the perpendicular degree is evaluated

Returns:

Degree perpendicular to the edge

Return type:

int

get_perpendicular_knots(surface_edge: SurfaceEdge) ndarray[source]#

Gets the knots in the parametric direction perpendicular to the input surface edge.

Parameters:

surface_edge (SurfaceEdge) – Edge along which the perpendicular knots are returned

Returns:

Knots perpendicular to the edge

Return type:

numpy.ndarray

get_point(row_index: int, continuity_index: int, surface_edge: SurfaceEdge) Point3D[source]#

Gets the point corresponding to a particular index along the edge curve with perpendicular index corresponding to the level of continuity being applied. For example, for a \(6 \times 5\) B-spline surface, the following code

p = surf.get_point(2, 1, ac.SurfaceEdge.v0)

returns the point \(\mathbf{P}_{2,1}\) and

p = surf.get_point(2, 1, ac.SurfaceEdge.u1)

returns the point \(\mathbf{P}_{6-1,2} = \mathbf{P}_{5,2}\) if there are no internal knot vectors. If the B-spline surface has internal knot vectors, the actual \(i\)-index of the point may be different, but the second-to-last point in the third row of control points will still be returned.

See also

set_point

Setter equivalent of this method

Parameters:
  • row_index (int) – Index along the surface edge control points

  • continuity_index (int) – Index in the parametric direction perpendicular to the surface edge. Normally either 0, 1, or 2

  • surface_edge (SurfaceEdge) – Edge of the surface along which to retrieve the control point

Returns:

Point used to enforce \(G^x\) continuity, where \(x\) is the value of continuity_index

Return type:

Point3D

get_second_derivs_along_edge(edge: SurfaceEdge, n_points: int = 10, perp: bool = True) ndarray[source]#

Evaluates the parallel or perpendicular second derivative along a surface edge at n_points parameter locations. The derivative represents either \(\frac{\partial^2 \mathbf{S}(u,v)}{\partial u^2}\) or \(\frac{\partial^2 \mathbf{S}(u,v)}{\partial v^2}\) depending on which edge is selected and which value is assigned to perp.

Parameters:
  • edge (SurfaceEdge) – Edge along which to evaluate

  • n_points (int) – Number of evenly-spaced parameter locations at which to evaluate the second derivative. Default: 10

  • perp (bool) – Whether to evaluate the cross-derivative. If False, the second derivative along the parameter direction parallel to the edge will be evaluated instead. Default: True

Returns:

2-D array of size \(n_\text{points} \times 3\)

Return type:

numpy.ndarray

property m: int#

Shorthand for degree_v

Returns:

Surface degree in the \(v\)-parametric direction

Return type:

int

property n: int#

Shorthand for degree_u

Returns:

Surface degree in the \(u\)-parametric direction

Return type:

int

property n_points_u: int#

Number of control points in the \(u\)-parametric direction

property n_points_v: int#

Number of control points in the \(v\)-parametric direction

plot_control_point_mesh_lines(plot: Plotter, **line_kwargs) Actor[source]#

Plots the network of lines connecting the B-spline surface control points using the pyvista library

Parameters:
Returns:

The lines actor

Return type:

pv.Actor

plot_control_points(plot: Plotter, **point_kwargs) Actor[source]#

Plots the B-spline surface control points using the pyvista library

Parameters:
Returns:

The points actor

Return type:

pv.Actor

plot_surface(plot: Plotter, Nu: int = 50, Nv: int = 50, **mesh_kwargs)[source]#

Plots the B-spline surface using the pyvista library

Parameters:
  • plotpyvista.Plotter instance

  • Nu (int) – Number of points to evaluate in the \(u\)-parametric direction. Default: 50

  • Nv (int) – Number of points to evaluate in the \(v\)-parametric direction. Default: 50

  • mesh_kwargs – Keyword arguments to pass to pyvista.Plotter.add_mesh

Returns:

The evaluated B-spline surface

Return type:

pyvista.core.pointset.StructuredGrid

set_point(point: Point3D, row_index: int, continuity_index: int, surface_edge: SurfaceEdge)[source]#

Sets the point corresponding to a particular index along the edge curve with perpendicular index corresponding to the level of continuity being applied. For example, for a \(6 \times 5\) B-spline surface, the following code

p = ac.Point3D.from_array(np.array([3.0, 4.0, 5.0]))
surf.set_point(p, 2, 1, ac.SurfaceEdge.v0)

sets the value of point \(\mathbf{P}_{2,1}\) to \([3,4,5]^T\) and

p = ac.Point3D.from_array(np.array([3.0, 4.0, 5.0]))
surf.get_point(p, 2, 1, ac.SurfaceEdge.u1)

sets the value of point \(\mathbf{P}_{6-1,2} = \mathbf{P}_{5,2}\) to \([3,4,5]^T\) if there are no internal knot vectors.

See also

get_point

Getter equivalent of this method

Parameters:
  • point (Point3D) – Point object to apply at the specified indices

  • row_index (int) – Index along the surface edge control points

  • continuity_index (int) – Index in the parametric direction perpendicular to the surface edge. Normally either 0, 1, or 2

  • surface_edge (SurfaceEdge) – Edge of the surface along which to retrieve the control point

to_iges(*args, **kwargs) IGESEntity[source]#

Exports the NURBS surface to an IGES entity

transform(**transformation_kwargs) BSplineSurface[source]#

Creates a transformed copy of the surface by transforming each of the control points

Parameters:

transformation_kwargs – Keyword arguments passed to Transformation3D

Returns:

Transformed surface

Return type:

BSplineSurface

verify_g0(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge, n_points: int = 10)[source]#

Verifies that two NURBS Surfaces are G0 continuous along their shared edge

verify_g1(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge, n_points: int = 10)[source]#

Verifies that two NURBSSurfaces are G1 continuous along their shared edge

verify_g2(other: BSplineSurface, surface_edge: SurfaceEdge, other_surface_edge: SurfaceEdge, n_points: int = 10)[source]#

Verifies that two B-spline surfaces are G2 continuous along their shared edge

property weights: ndarray#

Weight matrix (all ones for this surface type)