home *** CD-ROM | disk | FTP | other *** search
/ Late Night VRML 2.0 with Java CD-ROM / code.zip / Ch12 / geometry / TextureTransform.java < prev    next >
Text File  |  1997-01-02  |  4KB  |  172 lines

  1. // VRML Generator
  2. // Copyright Justin Couch 1996
  3. //
  4. // Chapter 13: Late Night VRML 2.0 and Java
  5. //
  6. // Shape class
  7.  
  8. package geometry;
  9.  
  10. import java.io.*;
  11. import java.awt.*;
  12. import vrml.external.*;
  13. import vrml.external.field.*;
  14. import vrml.external.exception.*;
  15. import geometry.TextureTransform;
  16.  
  17. public class TextureTransform extends VrmlObject
  18. {
  19.     EventInSFVec2f    _set_middle;
  20.     EventInSFVec2f    _set_scale;
  21.     EventInSFVec2f    _set_trans;
  22.     EventInSFFloat    _set_rotate;
  23.  
  24.     float[] center;
  25.     float[] scale;
  26.     float[] translation;
  27.     float    rotation = 0;
  28.  
  29.     boolean center_changed = false;
  30.     boolean scale_changed = false;
  31.     boolean translation_changed = false;
  32.  
  33.     // constructor builds a copy of itself and is added to the scene
  34.     // graph.
  35.     public TextureTransform()
  36.     {
  37.         center = new float[2];
  38.         center[0] = 0;
  39.         center[1] = 0;
  40.  
  41.         scale = new float[2];
  42.         scale[0] = 1;
  43.         scale[1] = 1;
  44.  
  45.         translation = new float[2];
  46.         translation[0] = 0;
  47.         translation[1] = 0;
  48.  
  49.         Browser b = Browser.getBrowser();
  50.  
  51.         if(b == null)
  52.             return;
  53.  
  54.         node = b.createVrmlFromString("TextureTransform {}")[0];
  55.         _set_middle = (EventInSFVec2f)node.getEventIn("center");
  56.         _set_scale = (EventInSFVec2f)node.getEventIn("scale");
  57.         _set_trans = (EventInSFVec2f)node.getEventIn("translation");
  58.         _set_rotate = (EventInSFFloat)node.getEventIn("rotation");
  59.  
  60.         have_browser = true;
  61.     }
  62.  
  63.     public TextureTransform(Browser b)
  64.     {
  65.         center = new float[2];
  66.         center[0] = 0;
  67.         center[1] = 0;
  68.  
  69.         scale = new float[2];
  70.         scale[0] = 1;
  71.         scale[1] = 1;
  72.  
  73.         translation = new float[2];
  74.         translation[0] = 0;
  75.         translation[1] = 0;
  76.  
  77.         if(b == null)
  78.             return;
  79.  
  80.         node = b.createVrmlFromString("TextureTransform {}")[0];
  81.         _set_middle = (EventInSFVec2f)node.getEventIn("center");
  82.         _set_scale = (EventInSFVec2f)node.getEventIn("scale");
  83.         _set_trans = (EventInSFVec2f)node.getEventIn("translation");
  84.         _set_rotate = (EventInSFFloat)node.getEventIn("rotation");
  85.  
  86.         have_browser = true;
  87.     }
  88.  
  89.     public void writeToFile(PrintStream fp, int indent)
  90.     {
  91.         int    i;
  92.         StringBuffer buffer = new StringBuffer();
  93.  
  94.         for(i = 0; i < indent; i++)
  95.             buffer.append("  ");
  96.  
  97.         fp.print(buffer.toString() + "textureTransform ");
  98.         if(name != null)
  99.             fp.print("DEF " + name + " ");
  100.  
  101.         fp.println("TextureTransform {");
  102.  
  103.         // print the contents of the shape node
  104.         if(center_changed)
  105.             fp.println(buffer.toString() + " center " +
  106.                    center[0] + " " +
  107.                    center[1]);
  108.         if(scale_changed)
  109.             fp.println(buffer.toString() + " scale " +
  110.                    scale[0] + " " +
  111.                    scale[1]);
  112.         if(translation_changed)
  113.             fp.println(buffer.toString() + " translation " +
  114.                    translation[0] + " " +
  115.                    translation[1]);
  116.         if(rotation != 0)
  117.             fp.println(buffer.toString() + " rotation " + rotation);
  118.  
  119.         fp.println(buffer.toString() + "}");
  120.     }
  121.  
  122.     public void set_center(float x, float y)
  123.     {
  124.         center[0] = x;
  125.         center[1] = y;
  126.  
  127.         if(have_browser);
  128.             _set_middle.setValue(center);
  129.  
  130.         if((x == 0) && (y == 0))
  131.             center_changed = false;
  132.         else
  133.             center_changed = true;
  134.     }
  135.  
  136.     public void set_scale(float x, float y)
  137.     {
  138.         scale[0] = x;
  139.         scale[1] = y;
  140.  
  141.         if(have_browser);
  142.             _set_scale.setValue(scale);
  143.  
  144.         if((x == 0) && (y == 0))
  145.             scale_changed = false;
  146.         else
  147.             scale_changed = true;
  148.     }
  149.  
  150.     public void set_translation(float x, float y)
  151.     {
  152.         translation[0] = x;
  153.         translation[1] = y;
  154.  
  155.         if(have_browser);
  156.             _set_trans.setValue(scale);
  157.  
  158.         if((x == 0) && (y == 0))
  159.             translation_changed = false;
  160.         else
  161.             translation_changed = true;
  162.     }
  163.  
  164.     public void set_rotation(float val)
  165.     {
  166.         rotation = val;
  167.  
  168.         if(have_browser);
  169.             _set_rotate.setValue(rotation);
  170.     }
  171. }
  172.