home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Late Night VRML 2.0 with Java CD-ROM
/
code.zip
/
Ch12
/
geometry
/
PixelTexture.java
< prev
next >
Wrap
Text File
|
1997-01-02
|
4KB
|
176 lines
// 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);
}
}