home *** CD-ROM | disk | FTP | other *** search
- // VRML Generator
- // Copyright Justin Couch 1996
- //
- // Chapter 13: Late Night VRML 2.0 and Java
- //
- // Shape class
-
- package geometry;
-
- import java.io.PrintStream;
- import vrml.external.*;
- import vrml.external.field.*;
- import vrml.external.exception.*;
- import geometry.Texture;
-
- public class PixelTexture extends Texture
- {
- private EventInSFImage _set_image;
- private int _width;
- private int _height;
- private int _num_components;
- private int[] _pixels;
-
- // Null constructor since you cannot create just a straight texture
- public PixelTexture()
- {
- Browser b = Browser.getBrowser();
-
- if(b == null)
- return;
-
- node = b.createVrmlFromString("PixelTexture {}")[0];
-
- _set_image = (EventInSFImage)node.getEventIn("image");
-
- have_browser = true;
- }
-
- public PixelTexture(Browser b)
- {
- if(b == null)
- return;
-
- node = b.createVrmlFromString("PixelTexture {}")[0];
-
- _set_image = (EventInSFImage)node.getEventIn("image");
-
- have_browser = true;
- }
-
- public PixelTexture(boolean rptS, boolean rptT)
- {
- String tmp = "PixelTexture { ";
-
- repeatS = rptS;
- repeatT = rptT;
-
- if(!repeatS)
- tmp += "repeatS FALSE ";
- if(!repeatT)
- tmp += "repeatT FALSE ";
-
- tmp += "}";
-
- Browser b = Browser.getBrowser();
-
- if(b == null)
- return;
-
- node = b.createVrmlFromString(tmp)[0];
-
- _set_image = (EventInSFImage)node.getEventIn("image");
-
- have_browser = true;
- }
-
- public PixelTexture(Browser b, boolean rptS, boolean rptT)
- {
- String tmp = "PixelTexture { ";
-
- repeatS = rptS;
- repeatT = rptT;
-
- if(!repeatS)
- tmp += "repeatS FALSE ";
- if(!repeatT)
- tmp += "repeatT FALSE ";
-
- tmp += "}";
-
- if(b == null)
- return;
-
- node = b.createVrmlFromString(tmp)[0];
-
- _set_image = (EventInSFImage)node.getEventIn("image");
-
- have_browser = true;
- }
-
- public void writeToFile(PrintStream fp, int indent)
- {
- int i;
- StringBuffer buffer = new StringBuffer();
-
- for(i = 0; i < indent; i++)
- buffer.append(" ");
-
- fp.print(buffer.toString() + " texture ");
- if(name != null)
- fp.print("DEF " + name + " ");
-
- fp.println("PixelTexture {");
-
- if(!repeatS)
- fp.println(buffer.toString() + " repeatS FALSE");
- if(!repeatT)
- fp.println(buffer.toString() + " repeatT FALSE");
-
- if((_width != 0) && (_height != 0))
- {
- fp.println(buffer.toString() + " image " + _width +
- " " + _height + " " + _num_components);
-
- int num_vals = _width * _height * _num_components;
-
- switch(_num_components)
- {
- case 1:
- for(i = 0; i < num_vals; i++)
- fp.println(buffer.toString() + " " + _pixels[i]);
- break;
- case 2:
- for(i = 0; i < num_vals; i += 2)
- fp.print(buffer.toString() + " " +
- _pixels[i] + " " +
- _pixels[i+1]);
- break;
- case 3:
- for(i = 0; i < num_vals; i += 3)
- fp.println(buffer.toString() + " " +
- _pixels[i] + " " +
- _pixels[i + 1] + " " +
- _pixels[i + 2]);
- break;
- case 4:
- for(i = 0; i < num_vals; i += 4)
- fp.print(buffer.toString() + " " +
- _pixels[i] + " " +
- _pixels[i + 1] + " " +
- _pixels[i + 2] + " " +
- _pixels[i + 3]);
- break;
- default: break;
- }
- }
- }
-
- public void set_image(int width,
- int height,
- int num_components,
- int[] pixels)
- {
- _width = width;
- _height = height;
- _num_components = num_components;
-
- // now will this work? Should I make an internal copy or not?
- _pixels = pixels;
- // this is causing problems -does not seem to be implemented in the
- // external interface.
- // if(have_browser)
- // _set_image.setValue(width, pixels);
- }
- }
-