home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / i / iritsm3s.zip / cagd_lib / bsp_gen.c < prev    next >
C/C++ Source or Header  |  1991-05-18  |  3KB  |  72 lines

  1. /******************************************************************************
  2. * Bsp-Gen.c - Bspline generic routines.                          *
  3. *******************************************************************************
  4. * Written by Gershon Elber, Aug. 90.                          *
  5. ******************************************************************************/
  6.  
  7. #include "cagd_loc.h"
  8.  
  9. /******************************************************************************
  10. * Allocates the memory required for a new Bspline surface.              *
  11. ******************************************************************************/
  12. CagdSrfStruct *BspSrfNew(int ULength, int VLength,
  13.              int UOrder, int VOrder, CagdPointType PType)
  14. {
  15.     CagdSrfStruct *Srf = CagdSrfNew(CAGD_SBSPLINE_TYPE, PType, ULength,
  16.                                    VLength);
  17.  
  18.     Srf -> UKnotVector = (CagdRType *) CagdMalloc(sizeof(CagdRType) *
  19.                                (UOrder + ULength));
  20.     Srf -> VKnotVector = (CagdRType *) CagdMalloc(sizeof(CagdRType) *
  21.                                (VOrder + VLength));
  22.  
  23.     Srf -> UOrder = UOrder;
  24.     Srf -> VOrder = VOrder;
  25.  
  26.     return Srf;
  27. }
  28.  
  29. /******************************************************************************
  30. * Allocates the memory required for a new Bspline curve.              *
  31. ******************************************************************************/
  32. CagdCrvStruct *BspCrvNew(int Length, int Order, CagdPointType PType)
  33. {
  34.     CagdCrvStruct *Crv = CagdCrvNew(CAGD_CBSPLINE_TYPE, PType, Length);
  35.  
  36.     Crv -> KnotVector = (CagdRType *) CagdMalloc(sizeof(CagdRType) *
  37.                                  (Order + Length));
  38.  
  39.     Crv -> Order = Order;
  40.  
  41.     return Crv;
  42. }
  43.  
  44. /******************************************************************************
  45. * Returns the active domain for the given curve.                  *
  46. ******************************************************************************/
  47. void BspCrvDomain(CagdCrvStruct *Crv, CagdRType *TMin, CagdRType *TMax)
  48. {
  49.     int k = Crv -> Order,
  50.     Len = Crv -> Length;
  51.  
  52.     *TMin = Crv -> KnotVector[k - 1];
  53.     *TMax = Crv -> KnotVector[Len];
  54. }
  55.  
  56. /******************************************************************************
  57. * Returns the active domain for the given surface.                  *
  58. ******************************************************************************/
  59. void BspSrfDomain(CagdSrfStruct *Srf, CagdRType *UMin, CagdRType *UMax,
  60.                       CagdRType *VMin, CagdRType *VMax)
  61. {
  62.     int UOrder = Srf -> UOrder,
  63.     VOrder = Srf -> VOrder,
  64.     ULen = Srf -> ULength,
  65.     VLen = Srf -> VLength;
  66.  
  67.     *UMin = Srf -> UKnotVector[UOrder - 1];
  68.     *UMax = Srf -> UKnotVector[ULen];
  69.     *VMin = Srf -> VKnotVector[VOrder - 1];
  70.     *VMax = Srf -> VKnotVector[VLen];
  71. }
  72.