home *** CD-ROM | disk | FTP | other *** search
/ Stone Design / Stone Design.iso / Stone_Friends / Wave / WavesWorld / Source / IBPalettes / WW3DKit / RIBBasis.m < prev    next >
Encoding:
Text File  |  1995-03-22  |  3.8 KB  |  130 lines

  1. // copyright 1993 Michael B. Johnson; some portions copyright 1994, MIT
  2. // see COPYRIGHT for reuse legalities
  3. //
  4.  
  5. #import "RIBBasis.h"
  6. #import "WW3DShape.h"
  7.  
  8. @implementation RIBBasis
  9.  
  10. + initialize { return [RIBBasis setVersion:1], self; }
  11.  
  12. - init
  13. {
  14.   [super init] ;
  15.  
  16.   N3D_CopyMatrix(RiBezierBasis, uBasis); 
  17.   uBasisToken = RI_BEZIER;
  18.   uStep = 3; 
  19.   N3D_CopyMatrix(RiBezierBasis, vBasis); 
  20.   vBasisToken = RI_BEZIER;
  21.   vStep = 3; 
  22.  
  23.   return self;
  24. }
  25.  
  26. - setUBasis:(RtBasis)newUBasis
  27.      uBasisToken:(RtToken)newUBasisToken
  28.      uStep:(RtInt)newUStep
  29.      vBasis:(RtBasis)newVBasis
  30.      vBasisToken:(RtToken)newVBasisToken
  31.      vStep:(RtInt)newVStep
  32. {
  33.   N3D_CopyMatrix(newUBasis, uBasis); 
  34.   uBasisToken = newUBasisToken;
  35.   uStep = newUStep; 
  36.   N3D_CopyMatrix(newVBasis, vBasis); 
  37.   vBasisToken = newVBasisToken;
  38.   vStep = newVStep; 
  39.  
  40.   [myShape updateBases];
  41.  
  42.   return self;
  43. }
  44.  
  45. - (RtBasis *)uBasis  {  return &uBasis; }
  46. - (RtToken)uBasisToken  {  return uBasisToken; }
  47. - (RtInt)uStep  {  return uStep; }
  48. - (RtBasis *)vBasis  {  return &vBasis; }
  49. - (RtToken)vBasisToken  {  return vBasisToken; }
  50. - (RtInt)vStep  {  return vStep; }
  51.  
  52. - renderSelf:(WW3DCamera *)camera  startingAt:(RtFloat)shutterOpenTime endingAt:(RtFloat)shutterCloseTime
  53. {
  54.   RiBasis(uBasis, uStep, vBasis, vStep);
  55.   return self;
  56. }
  57.  
  58. - (unsigned long int)maxSampleBandwidth {  return ([super maxSampleBandwidth] + (unsigned long int)(16 * 2 * sizeof(RtFloat))); }
  59.  
  60.  
  61. - writeEve:(NXStream *)stream atTabLevel:(int)tab
  62. {
  63.    int  i;
  64.  
  65.  
  66.    for (i = 0; i < tab; i++)
  67.    {  NXPrintf(stream, "\t");
  68.    }
  69.    // probably should see if we can write out the token, if it's there...
  70.    NXPrintf(stream, "Basis {"); 
  71.    NXPrintf(stream, "%f %f %f %f ",  uBasis[0][0], uBasis[0][1], uBasis[0][2], uBasis[0][3]);
  72.    NXPrintf(stream, "%f %f %f %f ",  uBasis[1][0], uBasis[1][1], uBasis[1][2], uBasis[1][3]);
  73.    NXPrintf(stream, "%f %f %f %f ",  uBasis[2][0], uBasis[2][1], uBasis[2][2], uBasis[2][3]);
  74.    NXPrintf(stream, "%f %f %f %f} ", uBasis[3][0], uBasis[3][1], uBasis[3][2], uBasis[3][3]);
  75.    NXPrintf(stream, "%d ", uStep);
  76.    NXPrintf(stream, "{%f %f %f %f ",  vBasis[0][0], vBasis[0][1], vBasis[0][2], vBasis[0][3]);
  77.    NXPrintf(stream, "%f %f %f %f ",  vBasis[1][0], vBasis[1][1], vBasis[1][2], vBasis[1][3]);
  78.    NXPrintf(stream, "%f %f %f %f ",  vBasis[2][0], vBasis[2][1], vBasis[2][2], vBasis[2][3]);
  79.    NXPrintf(stream, "%f %f %f %f} ", vBasis[3][0], vBasis[3][1], vBasis[3][2], vBasis[3][3]);
  80.    NXPrintf(stream, "%d ", vStep);
  81.    NXPrintf(stream, "; ");
  82.  
  83.    return self;
  84. }
  85.  
  86. - read:(NXTypedStream*)stream 
  87. {
  88.     int version;
  89.     [super read:stream];
  90.  
  91.     version = NXTypedStreamClassVersion(stream,"RIBBasis");
  92.     if (version == 0) NXReadTypes(stream,"i",&version), version=1;
  93.     if (version == 1)
  94.     {  NXReadArray(stream, "f", 4, uBasis[0]);
  95.        NXReadArray(stream, "f", 4, uBasis[1]);
  96.        NXReadArray(stream, "f", 4, uBasis[2]);
  97.        NXReadArray(stream, "f", 4, uBasis[3]);
  98.        NXReadArray(stream, "f", 4, vBasis[0]);
  99.        NXReadArray(stream, "f", 4, vBasis[1]);
  100.        NXReadArray(stream, "f", 4, vBasis[2]);
  101.        NXReadArray(stream, "f", 4, vBasis[3]);
  102.        NXReadTypes(stream, "ii", &uStep, &vStep);
  103.        NXReadTypes(stream, "**", &uBasisToken, &vBasisToken);
  104.     } 
  105.     else 
  106.     {
  107.     }
  108.     return self;
  109. }
  110.  
  111. - write:(NXTypedStream*)stream 
  112. {
  113.     [super write:stream];
  114.  
  115.     NXWriteArray(stream, "f", 4, uBasis[0]);
  116.     NXWriteArray(stream, "f", 4, uBasis[1]);
  117.     NXWriteArray(stream, "f", 4, uBasis[2]);
  118.     NXWriteArray(stream, "f", 4, uBasis[3]);
  119.     NXWriteArray(stream, "f", 4, vBasis[0]);
  120.     NXWriteArray(stream, "f", 4, vBasis[1]);
  121.     NXWriteArray(stream, "f", 4, vBasis[2]);
  122.     NXWriteArray(stream, "f", 4, vBasis[3]);
  123.     NXWriteTypes(stream, "ii", &uStep, &vStep);
  124.     NXWriteTypes(stream, "**", &uBasisToken, &vBasisToken);
  125.  
  126.     return self;
  127. }
  128.  
  129. @end
  130.