def plot_control_mesh(ax, control_points, label=False): """ Plot the control mesh of a NURBS given by its control points. """ dim = control_points.shape[-1] ax = _get_axes(ax, dim) shape = control_points.shape conn, desc = get_tensor_product_conn(nm.array(shape[:-1])) gel = GeometryElement(desc) coors = control_points.reshape((-1, dim)) ax = pd.plot_mesh(ax, coors, conn, gel.edges) pd.plot_points(ax, coors) if label: for ii, cc in enumerate(coors): if dim == 3: cx, cy, cz = cc ax.text(cx, cy, cz, '%d' % ii, color='g', fontsize=12, weight='bold') else: cx, cy = cc ax.text(cx, cy, '%d' % ii, color='g', fontsize=12, weight='bold') return ax
def plot_control_mesh(ax, control_points, label=False): """ Plot the control mesh of a NURBS given by its control points. """ dim = control_points.shape[-1] ax = _get_axes(ax, dim) shape = control_points.shape conn, desc = get_tensor_product_conn(nm.array(shape[:-1])) gel = GeometryElement(desc) coors = control_points.reshape((-1, dim)) ax = pd.plot_mesh(ax, coors, conn, gel.edges) pd.plot_points(ax, coors) if label: for ii, cc in enumerate(coors): if dim == 3: cx, cy, cz = cc ax.text(cx, cy, cz, '%d' % ii, color='g', fontsize=12, weight='bold') else: cx, cy = cc ax.text(cx, cy, '%d' % ii, color='g', fontsize=12, weight='bold') return ax
def create_linear_fe_mesh(nurbs, pars=None): """ Convert a NURBS object into a nD-linear tensor product FE mesh. Parameters ---------- nurbs : igakit.nurbs.NURBS instance The NURBS object. pars : sequence of array, optional The values of parameters in each parametric dimension. If not given, the values are set so that the resulting mesh has the same number of vertices as the number of control points/basis functions of the NURBS object. Returns ------- coors : array The coordinates of mesh vertices. conn : array The vertex connectivity array. desc : str The cell kind. """ knots = nurbs.knots shape = nurbs.weights.shape if pars is None: pars = [] for ii, kv in enumerate(knots): par = nm.linspace(kv[0], kv[-1], shape[ii]) pars.append(par) coors = nurbs(*pars) coors.shape = (-1, coors.shape[-1]) conn, desc = get_tensor_product_conn([len(ii) for ii in pars]) if (coors[:, -1] == 0.0).all(): coors = coors[:, :-1] return coors, conn, desc
def create_linear_fe_mesh(nurbs, pars=None): """ Convert a NURBS object into a nD-linear tensor product FE mesh. Parameters ---------- nurbs : igakit.nurbs.NURBS instance The NURBS object. pars : sequence of array, optional The values of parameters in each parametric dimension. If not given, the values are set so that the resulting mesh has the same number of vertices as the number of control points/basis functions of the NURBS object. Returns ------- coors : array The coordinates of mesh vertices. conn : array The vertex connectivity array. desc : str The cell kind. """ knots = nurbs.knots shape = nurbs.weights.shape if pars is None: pars = [] for ii, kv in enumerate(knots): par = nm.linspace(kv[0], kv[-1], shape[ii]) pars.append(par) coors = nurbs(*pars) coors.shape = (-1, coors.shape[-1]) conn, desc = get_tensor_product_conn([len(ii) for ii in pars]) if (coors[:, -1] == 0.0).all(): coors = coors[:, :-1] return coors, conn, desc
def plot_control_mesh(ax, control_points, label=False): """ Plot the control mesh of a NURBS given by its control points. """ dim = control_points.shape[-1] ax = _get_axes(ax, dim) shape = control_points.shape conn, desc = get_tensor_product_conn(nm.array(shape[:-1])) gel = GeometryElement(desc) coors = control_points.reshape((-1, dim)) ax = pd.plot_mesh(ax, coors, conn, gel.edges) pd.plot_points(ax, coors) if label: for ii, cc in enumerate(coors): ax.text(*cc, s="%d" % ii, color="g", fontsize=12, weight="bold") return ax
def plot_parametric_mesh(ax, knots): """ Plot the parametric mesh of a NURBS given by its knots. """ knots = _get_knots_tuple(knots) dim = len(knots) ax = _get_axes(ax, dim) uknots = [nm.unique(ii) for ii in knots] shape = [len(ii) for ii in uknots] ngrid = nm.mgrid[[slice(ii) for ii in shape]] coors = nm.r_[[uknots[ii][ig].ravel() for ii, ig in enumerate(ngrid)]].T conn, desc = get_tensor_product_conn(nm.array(shape)) gel = GeometryElement(desc) ax = pd.plot_mesh(ax, coors, conn, gel.edges) pd.plot_points(ax, coors) return ax
def plot_parametric_mesh(ax, knots): """ Plot the parametric mesh of a NURBS given by its knots. """ knots = _get_knots_tuple(knots) dim = len(knots) ax = _get_axes(ax, dim) uknots = [nm.unique(ii) for ii in knots] shape = [len(ii) for ii in uknots] ngrid = nm.mgrid[[slice(ii) for ii in shape]] coors = nm.r_[[uknots[ii][ig].ravel() for ii, ig in enumerate(ngrid)]].T conn, desc = get_tensor_product_conn(nm.array(shape)) gel = GeometryElement(desc) ax = pd.plot_mesh(ax, coors, conn, gel.edges) pd.plot_points(ax, coors) return ax