OUBSPS   

Equivalent PK functions: PK_BSURF_ask

OUBSPS ( bs, ctrl, dim, uorder, vorder, ncol, nrow, uknots, vknots, props, 
===========================================================================
         nprops, sense, ifail )
         ======================

  Output B-surface in B-spline form

Receives:
  KI_tag_b_surface         *bs             --- B-surface

Returns:
  KI_tag_list_dbl          *ctrl           --- control points
  KI_int_dimension         *dim            --- dimension of control points
  KI_int_order             *uorder         --- order of surface in u
  KI_int_order             *vorder         --- order of surface in v
  KI_int_nitems            *ncol           --- number of cols of control points
  KI_int_nitems            *nrow           --- number of rows of control points
  KI_tag_list_dbl          *uknots         --- knot vector in the u direction
  KI_tag_list_dbl          *vknots         --- knot vector in the v direction
 <KI_tag_list_int>         *props          --- list of surface properties
 <KI_int_nitems>           *nprops         --- number of surface properties
  KI_cod_logical           *sense          --- surface sense
  KI_cod_error             *ifail          --- failure indicator


Description:
  This function outputs a B-surface in B-spline form.

  Dimension of control points 'dim':
  . For rational surfaces 'dim'=4.
  . For non-rational surfaces 'dim'=3.

  Order of the surface in u and v 'uorder' and 'vorder':
  . The order = degree + 1.
  . The minimum order is 2.

  Control points 'ctrl':
  . This is a real list containing 'ncol'*'nrow' vectors of dimension 'dim'.
  . The vectors are output row by row.
  . For non-rational surfaces, the vectors are points in 3-space and are
    returned [x0,y0,z0,x1,y1,z1,...].
  . For rational surfaces each vector contains a point in 3-space followed by a
    weight for the point. The points are returned [x0,y0,z0,w0,x1,y1,z1,w1,...].
    The weights are positive.

  Number of columns of control points 'ncol':
  . For surfaces with non-periodic rows 'ncol' >= 'uorder'.
  . For surfaces with periodic rows 'ncol' >= 3.

  Number of rows of control points 'nrow':
  . For surfaces with non-periodic columns 'nrow' >= 'vorder'.
  . For surfaces with periodic columns 'nrow' >= 3.

  Knot vector in the u direction 'uknots':
  . The knot values form a non-decreasing sequence.
  . If the rows are not periodic there are ('ncol' + 'uorder') knot values.
  . If the rows are periodic there are ('ncol' + 1) knot values.
  . The knot values follow the rules described in CRBSPS.

  Knot vector in the v direction 'vknots':
  . The knot values form a non-decreasing sequence.
  . If the columns are not periodic there are ('nrow' + 'vorder') knot values.
  . If the columns are periodic there are ('nrow' + 1) knot values.
  . The knot values follow the rules described in CRBSPS.

  Properties list 'props':
    The following tokens may be returned -
    . PAPRPU - the surface is periodic in u (i.e. the rows are periodic).
    . PAPRPV - the surface is periodic in v (i.e. the columns are periodic).

    The default is that the surface is not periodic.

  Number of properties 'nprops':
  . Gives the number of properties in the 'props' array.

  Surface sense 'sense'
  . If 'sense' is KI_true the surface normal is given by the cross product of
    the first derivatives of the surface with respect the u and v parameters.
    i.e.
             normal = Pu X Pv

  . If 'sense' is KI_false the surface normal is in opposite to that described
    for 'sense' == KI_true.