home *** CD-ROM | disk | FTP | other *** search
/ VRML Tools for 3D Cyberspace / VRML_Tools_For_3D_Cyberspace.iso / amber / demos / children / demo.cpp < prev    next >
C/C++ Source or Header  |  1996-07-01  |  3KB  |  147 lines

  1. #define DEMO_OBJS
  2.  
  3. #include "amber.hpp"
  4. #include "demo.hpp"
  5.  
  6. #define X 0
  7. #define Y 1
  8. #define Z 2
  9.  
  10. void init(channelClass *ch)
  11. {
  12.     F4 color = {1.0,0.0,0.0,1.0};
  13.     V3 pos, trackPoint;
  14.    // Create center red box;
  15.    sp[0] = new spinClass(Y, 0.017, 1.0, 1.0, 1.0);
  16.    sp[0]->setAllColor(color);
  17.    V3_set(pos, 0.0, 0.0, 0.0);
  18.    sp[0]->setPosition(pos);
  19.    //sp[0]->rotate(Z, 0.34);
  20.  
  21.    // Create child of red cube
  22.    V3_init(pos);
  23.    sp[1] = new spinClass(X,-0.017, 0.5, 0.5, 0.5);
  24.    color[0] = 0.0;
  25.    color[1] = 1.0;
  26.    sp[1]->setAllColor(color);
  27.    pos[X] = 2.0;
  28.    sp[1]->setPosition(pos);
  29.  
  30.    // Create child of child
  31.    sp[5] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
  32.    sp[5]->setAllColor(color);
  33.    pos[Y] = 0.5;
  34.    sp[5]->setPosition(pos);
  35.  
  36.    // Create child of red cube
  37.    V3_init(pos);
  38.    sp[2] = new spinClass(X, 0.017, 0.5, 0.5, 0.5);
  39.    color[1] = 0.0;
  40.    color[2] = 1.0;
  41.    sp[2]->setAllColor(color);
  42.    pos[X] = -2.0;
  43.    sp[2]->setPosition(pos);
  44.  
  45.    // Create child of child
  46.    sp[6] = new spinClass(Z, -0.017, 0.25, 0.25, 0.25);
  47.    sp[6]->setAllColor(color);
  48.    pos[Y] = 0.5;
  49.    sp[6]->setPosition(pos);
  50.  
  51.    // Create child of red cube
  52.    V3_init(pos);
  53.    sp[3] = new spinClass(Z, -0.017, 0.5, 0.5, 0.5);
  54.    color[0] = 1.0;
  55.    sp[3]->setAllColor(color);
  56.    pos[Z] = 2.0;
  57.    sp[3]->setPosition(pos);
  58.  
  59.    // Create child of child
  60.    sp[7] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
  61.    sp[7]->setAllColor(color);
  62.    pos[Y] = 0.5;
  63.    sp[7]->setPosition(pos);
  64.  
  65.    // Create child of red cube
  66.    V3_init(pos);
  67.    sp[4] = new spinClass(Z, 0.017, 0.5, 0.5, 0.5);
  68.    color[0] = 0.0;
  69.    color[1] = 1.0;
  70.    sp[4]->setAllColor(color);
  71.    pos[Z] = -2.0;
  72.    sp[4]->setPosition(pos);
  73.  
  74.    // Create child of child
  75.    sp[8] = new spinClass(Z, 0.017, 0.25, 0.25, 0.25);
  76.     sp[8]->setAllColor(color);
  77.     pos[Y] = 0.5;
  78.     sp[8]->setPosition(pos);
  79.  
  80.     // Create point tracking object
  81.     tb = new cubeClass(0.05,0.05,0.05);
  82.     F4_set(color, 1.0,1.0,1.0,1.0);
  83.     tb->setAllColor(color);
  84.     V3_set(pos, -0.125,-0.1255,-0.125);
  85.     pt = new pTrackClass(sp[8], pos, tb);
  86.  
  87.  
  88.     sp[1]->addChild(sp[5]);
  89.     sp[2]->addChild(sp[6]);
  90.     sp[3]->addChild(sp[7]);
  91.     sp[4]->addChild(sp[8]);
  92.  
  93.     // Add four medium children to parent.
  94.     sp[0]->addChild(sp[1]);
  95.     sp[0]->addChild(sp[2]);
  96.     sp[0]->addChild(sp[3]);
  97.     sp[0]->addChild(sp[4]);
  98.  
  99.     V3_set(pos,0.0,0.0,10.0);
  100.     ch->setPosition(pos);
  101. }
  102.  
  103. void cleanup()
  104. {
  105.     delete sp[0];
  106.     delete sp[1];
  107.     delete sp[2];
  108.     delete sp[3];
  109.     delete sp[4];
  110.     delete sp[5];
  111.     delete sp[6];
  112.     delete sp[7];
  113.     delete sp[8];
  114.     delete pt;
  115.     delete tb;
  116. }
  117.  
  118. extern void processChar(unsigned int nChar)
  119. {
  120.     switch (nChar) {
  121.         case 'A':
  122.             if (attached) break;
  123.             attached=1;
  124.             sp[0]->addChild(sp[1]);
  125.             sp[0]->addChild(sp[2]);
  126.             sp[0]->addChild(sp[3]);
  127.             sp[0]->addChild(sp[4]);
  128.             sp[1]->addChild(sp[5]);
  129.             sp[2]->addChild(sp[6]);
  130.             sp[3]->addChild(sp[7]);
  131.             sp[4]->addChild(sp[8]);
  132.             break;
  133.         case 'B':
  134.             if (!attached) break;
  135.             attached=0;
  136.             sp[0]->removeChild(sp[1]);
  137.             sp[0]->removeChild(sp[2]);
  138.             sp[0]->removeChild(sp[3]);
  139.             sp[0]->removeChild(sp[4]);
  140.             sp[1]->removeChild(sp[5]);
  141.             sp[2]->removeChild(sp[6]);
  142.             sp[3]->removeChild(sp[7]);
  143.             sp[4]->removeChild(sp[8]);
  144.             break;
  145.     }
  146. }
  147.