checkpoint
[anneal.git] / src / edu / berkeley / qfat / StlFile.java
diff --git a/src/edu/berkeley/qfat/StlFile.java b/src/edu/berkeley/qfat/StlFile.java
deleted file mode 100644 (file)
index 5a283c9..0000000
+++ /dev/null
@@ -1,897 +0,0 @@
-package edu.berkeley.qfat;
-import com.sun.j3d.loaders.Loader;
-import com.sun.j3d.loaders.Scene;
-import com.sun.j3d.loaders.SceneBase;
-import com.sun.j3d.loaders.IncorrectFormatException;
-import com.sun.j3d.loaders.ParsingErrorException;
-import com.sun.j3d.utils.geometry.GeometryInfo;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import java.util.StringTokenizer;
-import java.util.ArrayList;
-
-import javax.vecmath.Point3f;
-import javax.vecmath.Vector3f;
-
-import javax.media.j3d.BranchGroup;
-import javax.media.j3d.Shape3D;
-
-// New from JDK 1.4 for endian related problems
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
-
-
-
-/**
- * Title:         STL Loader
- * Description:   STL files loader (Supports ASCII and binary files) for Java3D
- *                Needs JDK 1.4 due to endian problems
- * Company:       Universidad del Pais Vasco (UPV/EHU)
- * @author:       Carlos Pedrinaci Godoy
- * @version:      1.0
- *
- * Contact : xenicp@yahoo.es
- *
- *
- * Things TO-DO:
- *    1.-We can't read binary files over the net.
- *    2.-For binary files if size is lower than expected (calculated with the number of faces)
- *    the program will block.
- *    3.-Improve the way for detecting the kind of stl file?
- *    Can give us problems if the comment of the binary file begins by "solid"
- */
-
-public class StlFile implements Loader
-{
-  private static final int DEBUG = 0;     // Sets mode to Debug: outputs every action done
-
-  // Maximum length (in chars) of basePath
-  private static final int MAX_PATH_LENGTH = 1024;
-
-  // Global variables
-  private int flag;                         // Needed cause implements Loader
-
-  private URL baseUrl = null;               // Reading files over Internet
-  private String basePath = null;           // For local files
-
-  private boolean fromUrl = false;          // Usefull for binary files
-  private boolean Ascii = true;             // File type Ascii -> true o binary -> false
-  private String fileName = null;
-
-  // Arrays with coordinates and normals
-  // Needed for reading ASCII files because its size is unknown until the end
-  private ArrayList coordList;         // Holds Point3f
-  private ArrayList normList;          // Holds Vector3f
-
-  // GeometryInfo needs Arrays
-    public Point3f[] coordArray = null;
-    public Vector3f[] normArray = null;
-
-  // Needed because TRIANGLE_STRIP_ARRAY
-  // As the number of strips = the number of faces it's filled in objectToVectorArray
-    public int[] stripCounts = null;
-
-  // Default = Not available
-  private String objectName=new String("Not available");
-
-  /**
-  *  Constructor
-  */
-  public StlFile()
-  {
-  }
-
-  /**
-   * Method that reads the EOL
-   * Needed for verifying that the file has a correct format
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readEOL(StlFileParser parser)
-  {
-    try{
-    parser.nextToken();
-    }
-    catch (IOException e)
-    {
-      System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-    }
-    if(parser.ttype != StlFileParser.TT_EOL)
-    {
-      System.err.println("Format Error:expecting End Of Line on line " + parser.lineno());
-    }
-  }
-
-  /**
-   * Method that reads the word "solid" and stores the object name.
-   * It also detects what kind of file it is
-   * TO-DO:
-   *    1.- Better way control of exceptions?
-   *    2.- Better way to decide between Ascii and Binary?
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readSolid(StlFileParser parser)
-  {
-    if( !parser.sval.equals("solid"))
-    {
-      //System.out.println("Expecting solid on line " + parser.lineno());
-      // If the first word is not "solid" then we consider the file is binary
-      // Can give us problems if the comment of the binary file begins by "solid"
-      this.setAscii(false);
-    }
-    else  // It's an ASCII file
-    {
-      try{
-          parser.nextToken();
-          }
-      catch (IOException e)
-      {
-        System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-      }
-      if( parser.ttype != StlFileParser.TT_WORD)
-      {
-        // Is the object name always provided???
-        System.err.println("Format Error:expecting the object name on line " + parser.lineno());
-      }
-      else
-      { // Store the object Name
-        this.setObjectName(new String(parser.sval));
-        if(DEBUG==1)
-        {
-          System.out.println("Object Name:" + this.getObjectName().toString());
-        }
-        this.readEOL(parser);
-      }
-    }
-  }//End of readSolid
-
-  /**
-   * Method that reads a normal
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readNormal(StlFileParser parser)
-  {
-    Vector3f v = new Vector3f();
-
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("normal")))
-    {
-      System.err.println("Format Error:expecting 'normal' on line " + parser.lineno());
-    }
-    else
-    {
-      if (parser.getNumber())
-      {
-        v.x=(float)parser.nval;
-
-        if(DEBUG==1)
-        {
-          System.out.println("Normal:");
-          System.out.print("X=" + v.x + " ");
-        }
-
-        if (parser.getNumber())
-        {
-          v.y=(float)parser.nval;
-          if(DEBUG==1)
-            System.out.print("Y=" + v.y + " ");
-
-         if (parser.getNumber())
-          {
-            v.z=(float)parser.nval;
-            if(DEBUG==1)
-              System.out.println("Z=" + v.z);
-
-            // We add that vector to the Normal's array
-            this.normList.add(v);
-            this.readEOL(parser);
-         }
-          else System.err.println("Format Error:expecting coordinate on line " + parser.lineno());
-        }
-        else System.err.println("Format Error:expecting coordinate on line " + parser.lineno());
-      }
-      else System.err.println("Format Error:expecting coordinate on line " + parser.lineno());
-    }
-  }// End of Read Normal
-
-  /**
-   * Method that reads the coordinates of a vector
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readVertex(StlFileParser parser)
-  {
-    Point3f p = new Point3f();
-
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("vertex")))
-    {
-      System.err.println("Format Error:expecting 'vertex' on line " + parser.lineno());
-    }
-    else
-    {
-      if (parser.getNumber())
-      {
-        p.x=(float)parser.nval;
-
-        if(DEBUG==1)
-        {
-          System.out.println("Vertex:");
-          System.out.print("X=" + p.x + " ");
-        }
-
-        if (parser.getNumber())
-        {
-          p.y=(float)parser.nval;
-          if(DEBUG==1)
-            System.out.print("Y=" + p.y + " ");
-
-         if (parser.getNumber())
-          {
-           p.z=(float)parser.nval;
-            if(DEBUG==1)
-              System.out.println("Z=" + p.z);
-
-            // We add that vertex to the array of vertex
-            coordList.add(p);
-            readEOL(parser);
-         }
-          else System.err.println("Format Error: expecting coordinate on line " + parser.lineno());
-        }
-        else System.err.println("Format Error: expecting coordinate on line " + parser.lineno());
-      }
-      else System.err.println("Format Error: expecting coordinate on line " + parser.lineno());
-    }
-  }//End of read vertex
-
-  /**
-   * Method that reads "outer loop" and then EOL
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readLoop(StlFileParser parser)
-  {
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("outer")))
-    {
-      System.err.println("Format Error:expecting 'outer' on line " + parser.lineno());
-    }
-    else
-    {
-      try{
-          parser.nextToken();
-          }
-      catch (IOException e)
-      {
-        System.err.println("IO error on line " + parser.lineno() + ": " + e.getMessage());
-      }
-      if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("loop")))
-      {
-        System.err.println("Format Error:expecting 'loop' on line " + parser.lineno());
-      }
-      else readEOL(parser);
-    }
-  }//End of readLoop
-
-  /**
-   * Method that reads "endloop" then EOL
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readEndLoop(StlFileParser parser)
-  {
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("endloop")))
-    {
-      System.err.println("Format Error:expecting 'endloop' on line " + parser.lineno());
-    }
-    else readEOL(parser);
-  }//End of readEndLoop
-
-  /**
-   * Method that reads "endfacet" then EOL
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readEndFacet(StlFileParser parser)
-  {
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("endfacet")))
-    {
-      System.err.println("Format Error:expecting 'endfacet' on line " + parser.lineno());
-    }
-    else readEOL(parser);
-  }//End of readEndFacet
-
-  /**
-   * Method that reads a face of the object
-   * (Cares about the format)
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readFacet(StlFileParser parser)
-  {
-    if(!(parser.ttype==StlFileParser.TT_WORD && parser.sval.equals("facet")))
-    {
-      System.err.println("Format Error:expecting 'facet' on line " + parser.lineno());
-    }
-    else
-    {
-      try{
-          parser.nextToken();
-          readNormal(parser);
-
-          parser.nextToken();
-          readLoop(parser);
-
-          parser.nextToken();
-          readVertex(parser);
-
-          parser.nextToken();
-          readVertex(parser);
-
-          parser.nextToken();
-          readVertex(parser);
-
-          parser.nextToken();
-          readEndLoop(parser);
-
-          parser.nextToken();
-          readEndFacet(parser);
-      }
-      catch (IOException e)
-      {
-        System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-      }
-    }
-  }// End of readFacet
-
-  /**
-   * Method that reads a face in binary files
-   * All binary versions of the methods end by 'B'
-   * As in binary files we can read the number of faces, we don't need
-   * to use coordArray and normArray (reading binary files should be faster)
-   *
-   * @param in The ByteBuffer with the data of the object.
-   * @param index The facet index
-   *
-   * @throws IOException
-   */
-  private void readFacetB(ByteBuffer in, int index) throws IOException
-  {
-    //File structure: Normal Vertex1 Vertex2 Vertex3
-    Vector3f normal = new Vector3f();
-    Point3f vertex = new Point3f();
-
-    if(DEBUG==1)
-      System.out.println("Reading face number " + index);
-
-    // Read the Normal
-    normArray[index]=new Vector3f();
-    normArray[index].x=in.getFloat();
-    normArray[index].y=in.getFloat();
-    normArray[index].z=in.getFloat();
-
-    if(DEBUG==1)
-      System.out.println("Normal: X=" + normArray[index].x + " Y=" + normArray[index].y + " Z=" + normArray[index].z);
-
-    // Read vertex1
-    coordArray[index*3] = new Point3f();
-    coordArray[index*3].x=in.getFloat();
-    coordArray[index*3].y=in.getFloat();
-    coordArray[index*3].z=in.getFloat();
-
-    if(DEBUG==1)
-      System.out.println("Vertex 1: X=" + coordArray[index*3].x + " Y=" + coordArray[index*3].y + " Z=" + coordArray[index*3].z);
-
-    // Read vertex2
-    coordArray[index*3+1] = new Point3f();
-    coordArray[index*3+1].x=in.getFloat();
-    coordArray[index*3+1].y=in.getFloat();
-    coordArray[index*3+1].z=in.getFloat();
-
-    if(DEBUG==1)
-      System.out.println("Vertex 2: X=" + coordArray[index*3+1].x + " Y=" + coordArray[index*3+1].y + " Z=" + coordArray[index*3+1].z);
-
-    // Read vertex3
-    coordArray[index*3+2] = new Point3f();
-    coordArray[index*3+2].x=in.getFloat();
-    coordArray[index*3+2].y=in.getFloat();
-    coordArray[index*3+2].z=in.getFloat();
-
-    if(DEBUG==1)
-      System.out.println("Vertex 3: X=" + coordArray[index*3+2].x + " Y=" + coordArray[index*3+2].y + " Z=" + coordArray[index*3+2].z);
-
-  }// End of readFacetB
-
-  /**
-   * Method for reading binary files
-   * Execution is completly different
-   * It uses ByteBuffer for reading data and ByteOrder for retrieving the machine's endian
-   * (Needs JDK 1.4)
-   *
-   * TO-DO:
-   *  1.-Be able to read files over Internet
-   *  2.-If the amount of data expected is bigger than what is on the file then
-   *  the program will block forever
-   *
-   * @param file The name of the file
-   *
-   * @throws IOException
-   */
-    public void readBinaryFile(String file, InputStream data) throws IOException
-  {
-    ByteBuffer dataBuffer;                // For reading in the correct endian
-    byte[] Info=new byte[80];             // Header data
-    byte[] Array_number= new byte[4];     // Holds the number of faces
-    byte[] Temp_Info;                     // Intermediate array
-
-    int Number_faces; // First info (after the header) on the file
-
-    if(DEBUG==1)
-      System.out.println("Machine's endian: " + ByteOrder.nativeOrder());
-
-    // Get file's name
-    if(fromUrl)
-    {
-      // FileInputStream can only read local files!?
-      System.out.println("This version doesn't support reading binary files from internet");
-    }
-    else
-    { // It's a local file
-
-      // First 80 bytes aren't important
-      if(80 != data.read(Info))
-      { // File is incorrect
-        //System.out.println("Format Error: 80 bytes expected");
-        throw new IncorrectFormatException();
-      }
-      else
-      { // We must first read the number of faces -> 4 bytes int
-        // It depends on the endian so..
-
-        data.read(Array_number);                      // We get the 4 bytes
-        dataBuffer = ByteBuffer.wrap(Array_number);   // ByteBuffer for reading correctly the int
-        dataBuffer.order(ByteOrder.nativeOrder());    // Set the right order
-        Number_faces = dataBuffer.getInt();
-
-        Temp_Info = new byte[50*Number_faces];        // Each face has 50 bytes of data
-
-        data.read(Temp_Info);                         // We get the rest of the file
-
-        dataBuffer = ByteBuffer.wrap(Temp_Info);      // Now we have all the data in this ByteBuffer
-        dataBuffer.order(ByteOrder.nativeOrder());
-
-        if(DEBUG==1)
-          System.out.println("Number of faces= " + Number_faces);
-
-        // We can create that array directly as we know how big it's going to be
-        coordArray = new Point3f[Number_faces*3]; // Each face has 3 vertex
-        normArray = new Vector3f[Number_faces];
-        stripCounts = new int[Number_faces];
-
-        for(int i=0;i<Number_faces;i++)
-        {
-          stripCounts[i]=3;
-          try
-          {
-            readFacetB(dataBuffer,i);
-            // After each facet there are 2 bytes without information
-            // In the last iteration we dont have to skip those bytes..
-            if(i != Number_faces - 1)
-            {
-              dataBuffer.get();
-              dataBuffer.get();
-            }
-          }
-          catch (IOException e)
-          {
-            // Quitar
-            System.out.println("Format Error: iteration number " + i);
-            throw new IncorrectFormatException();
-          }
-        }//End for
-      }// End file reading
-    }// End else
-  }// End of readBinaryFile
-
-  /**
-   * Method that reads ASCII files
-   * Uses StlFileParser for correct reading and format checking
-   * The beggining of that method is common to binary and ASCII files
-   * We try to detect what king of file it is
-   *
-   * TO-DO:
-   *  1.- Find a best way to decide what kind of file it is
-   *  2.- Is that return (first catch) the best thing to do?
-   *
-   * @param parser The file parser. An instance of StlFileParser.
-   */
-  private void readFile(StlFileParser parser)
-  {
-    int t;
-
-    try{
-        parser.nextToken();
-        }
-    catch (IOException e)
-    {
-      System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-      System.err.println("File seems to be empty");
-      return;         // ????? Throw ?????
-    }
-
-    // Here we try to detect what kind of file it is (see readSolid)
-    readSolid(parser);
-
-    if(getAscii())
-    { // Ascii file
-      try
-      {
-          parser.nextToken();
-      }
-      catch (IOException e)
-      {
-       System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-      }
-
-      // Read all the facets of the object
-      while (parser.ttype != StlFileParser.TT_EOF && !parser.sval.equals("endsolid"))
-      {
-        readFacet(parser);
-        try
-        {
-          parser.nextToken();
-        }
-        catch (IOException e)
-        {
-          System.err.println("IO Error on line " + parser.lineno() + ": " + e.getMessage());
-        }
-      }// End while
-
-      // Why are we out of the while?: EOF or endsolid
-      if(parser.ttype == StlFileParser.TT_EOF)
-       System.err.println("Format Error:expecting 'endsolid', line " + parser.lineno());
-      else
-      {
-        if(DEBUG==1)
-          System.out.println("File readed");
-      }
-    }//End of Ascii reading
-
-    else
-    { // Binary file
-      try{
-          readBinaryFile(getFileName(), new FileInputStream(getFileName()));
-      }
-      catch(IOException e)
-      {
-        System.err.println("Format Error: reading the binary file");
-      }
-    }// End of binary file
-  }//End of readFile
-
-  /**
-   * The Stl File is loaded from the .stl file specified by
-   * the filename.
-   * To attach the model to your scene, call getSceneGroup() on
-   * the Scene object passed back, and attach the returned
-   * BranchGroup to your scene graph.  For an example, see
-   * $J3D/programs/examples/ObjLoad/ObjLoad.java.
-   *
-   * @param filename The name of the file with the object to load
-   *
-   * @return Scene The scene with the object loaded.
-   *
-   * @throws FileNotFoundException
-   * @throws IncorrectFormatException
-   * @throws ParsingErrorException
-   */
-  public Scene load(String filename) throws FileNotFoundException,
-                                           IncorrectFormatException,
-                                           ParsingErrorException
-  {
-    setBasePathFromFilename(filename);
-    setFileName(filename);     // For binary files
-
-    Reader reader = new BufferedReader(new FileReader(filename));
-    return load(reader);
-  } // End of load(String)
-
-   /**
-   * The Stl file is loaded off of the web.
-   * To attach the model to your scene, call getSceneGroup() on
-   * the Scene object passed back, and attach the returned
-   * BranchGroup to your scene graph.  For an example, see
-   * $J3D/programs/examples/ObjLoad/ObjLoad.java.
-   *
-   * @param url The url to load the onject from
-   *
-   * @return Scene The scene with the object loaded.
-   *
-   * @throws FileNotFoundException
-   * @throws IncorrectFormatException
-   * @throws ParsingErrorException
-   */
-  public Scene load(URL url) throws FileNotFoundException,
-                                   IncorrectFormatException,
-                                   ParsingErrorException
-  {
-    BufferedReader reader;
-
-    setBaseUrlFromUrl(url);
-
-    try {
-      reader = new BufferedReader(new InputStreamReader(url.openStream()));
-    }
-    catch (IOException e) {
-      throw new FileNotFoundException();
-    }
-    fromUrl = true;
-    return load(reader);
-  } // End of load(URL)
-
-  /**
-   * The Stl File is loaded from the already opened file.
-   * To attach the model to your scene, call getSceneGroup() on
-   * the Scene object passed back, and attach the returned
-   * BranchGroup to your scene graph.  For an example, see
-   * $J3D/programs/examples/ObjLoad/ObjLoad.java.
-   *
-   * @param reader The reader to read the object from
-   *
-   * @return Scene The scene with the object loaded.
-   *
-   * @throws FileNotFoundException
-   * @throws IncorrectFormatException
-   * @throws ParsingErrorException
-   */
-  public Scene load(Reader reader) throws FileNotFoundException,
-                                          IncorrectFormatException,
-                                          ParsingErrorException
-  {
-    // That method calls the method that loads the file for real..
-    // Even if the Stl format is not complicated I've decided to use
-    // a parser as in the Obj's loader included in Java3D
-
-    StlFileParser st=new StlFileParser(reader);
-
-    // Initialize data
-    coordList = new ArrayList();
-    normList = new ArrayList();
-    setAscii(true);      // Default ascii
-
-    readFile(st);
-    return makeScene();
-  }
-
-  /**
-   * Method that takes the info from an ArrayList of Point3f
-   * and returns a Point3f[].
-   * Needed for ASCII files as we don't know the number of facets until the end
-   *
-   * @param inList The list to transform into Point3f[]
-   *
-   * @return Point3f[] The result.
-   */
-  private Point3f[] objectToPoint3Array(ArrayList inList)
-  {
-    Point3f outList[] = new Point3f[inList.size()];
-
-    for (int i = 0 ; i < inList.size() ; i++) {
-      outList[i] = (Point3f)inList.get(i);
-    }
-    return outList;
-  } // End of objectToPoint3Array
-
-  /**
-   * Method that takes the info from an ArrayList of Vector3f
-   * and returns a Vector3f[].
-   * Needed for ASCII files as we don't know the number of facets until the end
-   *
-   * TO-DO:
-   *  1.- Here we fill stripCounts...
-   *      Find a better place to do it?
-   *
-   * @param inList The list to transform into Point3f[]
-   *
-   * @return Vector3f[] The result.
-   */
-  private Vector3f[] objectToVectorArray(ArrayList inList)
-  {
-    Vector3f outList[] = new Vector3f[inList.size()];
-
-    if(DEBUG==1)
-      System.out.println("Number of facets of the object=" + inList.size());
-
-    // To-do
-    stripCounts = new int[inList.size()];
-    for (int i = 0 ; i < inList.size() ; i++) {
-      outList[i] = (Vector3f)inList.get(i);
-      // To-do
-      stripCounts[i]=3;
-    }
-    return outList;
-  } // End of objectToVectorArray
-
-  /**
-   * Method that creates the SceneBase with the stl file info
-   *
-   * @return SceneBase The scene
-   */
-  private SceneBase makeScene()
-  {
-    // Create Scene to pass back
-    SceneBase scene = new SceneBase();
-    BranchGroup group = new BranchGroup();
-    scene.setSceneGroup(group);
-
-    // Store the scene info on a GeometryInfo
-    GeometryInfo gi = new GeometryInfo(GeometryInfo.TRIANGLE_STRIP_ARRAY);
-
-    // Convert ArrayLists to arrays: only needed if file was not binary
-    if(this.Ascii)
-    {
-      coordArray = objectToPoint3Array(coordList);
-      normArray = objectToVectorArray(normList);
-    }
-
-    gi.setCoordinates(coordArray);
-    gi.setNormals(normArray);
-    gi.setStripCounts(stripCounts);
-
-    // Put geometry into Shape3d
-    Shape3D shape = new Shape3D();
-    shape.setGeometry(gi.getGeometryArray());
-
-    group.addChild(shape);
-    scene.addNamedObject(objectName, shape);
-
-    return scene;
-  } // end of makeScene
-
-  /////////////////////// Accessors and Modifiers ///////////////////////////
-
-  public URL getBaseUrl()
-  {
-    return baseUrl;
-  }
-
-  /**
-   * Modifier for baseUrl, if accessing internet.
-   *
-   * @param url The new url
-   */
-  public void setBaseUrl(URL url)
-  {
-    baseUrl = url;
-  }
-
-  private void setBaseUrlFromUrl(URL url)
-  {
-    StringTokenizer stok =
-      new StringTokenizer(url.toString(), "/\\", true);
-    int tocount = stok.countTokens() - 1;
-    StringBuffer sb = new StringBuffer(MAX_PATH_LENGTH);
-    for(int i = 0; i < tocount ; i++) {
-       String a = stok.nextToken();
-       sb.append(a);
-//     if((i == 0) && (!a.equals("file:"))) {
-//         sb.append(a);
-//         sb.append(java.io.File.separator);
-//         sb.append(java.io.File.separator);
-//     } else {
-//         sb.append(a);
-//         sb.append( java.io.File.separator );
-//     }
-    }
-    try {
-      baseUrl = new URL(sb.toString());
-    }
-    catch (MalformedURLException e) {
-      System.err.println("Error setting base URL: " + e.getMessage());
-    }
-  } // End of setBaseUrlFromUrl
-
-
-  public String getBasePath()
-  {
-    return basePath;
-  }
-
-  /**
-   * Set the path where files associated with this .stl file are
-   * located.
-   * Only needs to be called to set it to a different directory
-   * from that containing the .stl file.
-   *
-   * @param pathName The new Path to the file
-   */
-  public void setBasePath(String pathName)
-  {
-    basePath = pathName;
-    if (basePath == null || basePath == "")
-       basePath = "." + java.io.File.separator;
-    basePath = basePath.replace('/', java.io.File.separatorChar);
-    basePath = basePath.replace('\\', java.io.File.separatorChar);
-    if (!basePath.endsWith(java.io.File.separator))
-       basePath = basePath + java.io.File.separator;
-  } // End of setBasePath
-
-  /*
-   * Takes a file name and sets the base path to the directory
-   * containing that file.
-   */
-  private void setBasePathFromFilename(String fileName)
-  {
-    // Get ready to parse the file name
-    StringTokenizer stok =
-      new StringTokenizer(fileName, java.io.File.separator);
-
-    //  Get memory in which to put the path
-    StringBuffer sb = new StringBuffer(MAX_PATH_LENGTH);
-
-    // Check for initial slash
-    if (fileName!= null && fileName.startsWith(java.io.File.separator))
-      sb.append(java.io.File.separator);
-
-    // Copy everything into path except the file name
-    for(int i = stok.countTokens() - 1 ; i > 0 ; i--) {
-      String a = stok.nextToken();
-      sb.append(a);
-      sb.append(java.io.File.separator);
-    }
-    setBasePath(sb.toString());
-  } // End of setBasePathFromFilename
-
-  public int getFlags()
-  {
-    return flag;
-  }
-
-  public void setFlags(int parm)
-  {
-    this.flag=parm;
-  }
-
-  public boolean getAscii()
-  {
-    return this.Ascii;
-  }
-
-  public void setAscii(boolean tipo)
-  {
-    this.Ascii = tipo;
-  }
-
-
-  public String getFileName()
-  {
-    return this.fileName;
-  }
-
-  public void setFileName(String filename)
-  {
-    this.fileName=new String(filename);
-  }
-
-
-  public String getObjectName()
-  {
-    return this.objectName;
-  }
-
-  public void setObjectName(String name)
-  {
-    this.objectName = name;
-  }
-
-} // End of package stl_loader
\ No newline at end of file