Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Examples  

/home/xchen/xia/src/glrender/demoBsp.cc

#include <View.H>
#include <TensorBlossom.H>

using namespace xchen;

void bspsph(View* v)
{
  TensorBlossom<2,4> *sph = new TensorBlossom<2,4>(2,5, 2,8);

  double w = sqrt(2.0) / 2;
  E4 p(0, 1, 0, 1);
  E4 
    p1 = p, 
    p2 = rZ(-45)(p).Szw(w), 
    p3 = rZ(-90)(p), 
    p4 = rZ(-135)(p).Szw(w),
    p5 = rZ(-180)(p);

  sph->ControlMesh() = 
    p1, rY(45)(p1).Syw(w), rY(90)(p1), rY(135)(p1).Syw(w), rY(180)(p1), rY(225)(p1).Syw(w),rY(270)(p1), rY(315)(p1).Syw(w),
    p2, rY(45)(p2).Syw(w), rY(90)(p2), rY(135)(p2).Syw(w), rY(180)(p2), rY(225)(p2).Syw(w),rY(270)(p2), rY(315)(p2).Syw(w),
    p3, rY(45)(p3).Syw(w), rY(90)(p3), rY(135)(p3).Syw(w), rY(180)(p3), rY(225)(p3).Syw(w),rY(270)(p3), rY(315)(p3).Syw(w),
    p4, rY(45)(p4).Syw(w), rY(90)(p4), rY(135)(p4).Syw(w), rY(180)(p4), rY(225)(p4).Syw(w),rY(270)(p4), rY(315)(p4).Syw(w),
    p5, rY(45)(p5).Syw(w), rY(90)(p5), rY(135)(p5).Syw(w), rY(180)(p5), rY(225)(p5).Syw(w),rY(270)(p5), rY(315)(p5).Syw(w);
    
  sph->SetPeriodicEnd(0);
  sph->KnotVector() = 
    0.,0, 1, 1, 2, 2, 3, 3, 4,
    0.,0, 1, 1, 2, 2;
  sph->IsRational() = true;

  cout << "\n________________________________________________________________________________________________________________________";
  cout << "\nSphere is \n" << *sph << endl;
    
  new glModel(v, sph);
}
  

void bsp_torus(View* v)
//int main()
{

   TensorBlossom<1,4> *circle = new TensorBlossom<1,4>(2,8);
 
  double w = sqrt(2.0) / 2;
  E4 p(1, 0, 0, 1);
  circle->ControlMesh() = 
    tX(2.0)*p, 
    (tX(2.0*w)*(rZ(45)*p)).Szw(w), 
    tX(2.0)*(rZ(90)*p), 
    (tX(2.0*w)*(rZ(135)*p)).Szw(w),
    tX(2.0)*(rZ(180)*p), 
    (tX(2.0*w)*(rZ(225)*p)).Szw(w),
    tX(2.0)*(rZ(270)*p), 
    (tX(2.0*w)*(rZ(315)*p)).Szw(w);
    
  circle->IsRational() = true;
  circle->SetPeriodicEnd();
  circle->KnotVector() = 0.,0, 1, 1, 2, 2, 3, 3, 4;
    
  cout << "\n________________________________________________________________________________________________________________________";
  cout << "\nCircle is \n" << *circle << endl;
    
  TensorBlossom<2,4> *torus = new TensorBlossom<2,4>(revolution, circle);
  cout << "\nTorus is \n" << *torus << endl;

  torus->Subdivide(2);
    
  torus->Convert2OpenEnd();
  new glModel(v, torus);
}

//int main()
void bspdisk(View* v)
{
  TensorBlossom<1,2> *radius = new TensorBlossom<1,2>(1,2);
  radius->ControlMesh() = E2(0.001), E2(1.);
  TensorBlossom<2,4> *disk = new TensorBlossom<2,4>(revolution, radius);
  *disk = rX(-90) * (*disk);
  disk->Subdivide(2);
  disk->Convert2Bzr();
//   disk->RaiseDegree(10,0);
//   disk->RaiseDegree(10,1);
  new glModel(v, disk);
}

//int main()
void volume_torus(View* v)
{
  TensorBlossom<1,2> *radius2 = new TensorBlossom<1,2>(1,2);
  radius2->ControlMesh() = E2(0.001), E2(1.);
  TensorBlossom<2,4> *disk02 = new TensorBlossom<2,4>(revolution, radius2);
  *disk02 = tX(1.5) * ( rX(-90) * (*disk02));
    
  TensorBlossom<3,4> *vtorus = new TensorBlossom<3,4>(revolution, disk02);

  cout << "\n________________________________________________________________________________________________________________________";
  cout << "\nVolume Torus is \n" << *vtorus << endl;

  TensorBlossom<3,4> *vtorus2 = new TensorBlossom<3,4>(*vtorus);
//   vtorus->RaiseDegree(5,0);
//   vtorus->RaiseDegree(5,1);
//   vtorus->RaiseDegree(5,2);
  
  new glModel(v, vtorus);
}
  

void new_glModel(View* v) 
{
  bspsph(v);
  bsp_torus(new View);
  bspdisk(new View);
  volume_torus(new View);
}

Generated on Wed Apr 7 21:40:48 2004 by doxygen1.2.18