/Users/craigcornelius/Projects/SPRING Mac Release 0.2/facearray.h

Go to the documentation of this file.
00001 // $Id: facearray.h,v 1.44 2004/08/25 22:47:06 kevin Exp $
00002 // $Copyright: (c)2001 National Biocomputation Center, Stanford University $
00003 
00004 #ifndef Facearray_H
00005 #define Facearray_H
00006 
00007 #include <stdio.h>
00008 #include "face.h"
00009 #include "nodearray.h"
00010 #include "edgearray.h"
00011 #include "geometryreplicator.h"
00012 
00013 #ifdef __APPLE__
00014 #include <OpenGL/gl.h>
00015 #else
00016 #include <GL/gl.h>
00017 #endif // __APPLE__
00018 
00019 class NodeArray;
00020 class EdgeArray;
00021 class Object;
00022 
00023 class FaceArray
00024 {
00025 private:
00026     int numfaces, maxfaces;
00027     Face* *faces;
00028     
00029     // links to parallel arrays
00030     NodeArray* nodearray_p;
00031     EdgeArray* edgearray_p;
00032     
00033 public:
00034     FaceArray(NodeArray* nodearray_p_in, EdgeArray* edgearray_p_in);
00035     ~FaceArray();
00036     static const char* rcsid;
00037     static int debug;
00038     NodeArray* getNodeArray();
00039                 
00040     // handy stuff
00041     void reset(void);
00042     int getMeshFaceData(FILE *meshfile);
00043     int getSMFFaceData(FILE *meshfile);
00044     int getOBJFaceData(FILE *meshfile);
00045     void SaveMeshFaceData(ostream& os);
00046     void SaveSMFFaceData(ostream& os);
00047     void SaveVRMLFaceData(ostream& os);
00048     void SaveSTLFaceData(ostream& os);
00049     int getNumFaces();
00050     Face* getFace(int i);
00051     Face* getFace(Edge* e, Node* n);
00052     int getIndex(Face* f);
00053     Object* getObject();
00054     double getVolume();
00055     double getExactZVolume(int Num_Face_Surface);
00056     double getSurfaceArea();
00057     friend ostream& operator<<(ostream& os, const FaceArray& fa);
00058     
00059     // dynamic allocation routines
00060     void allocateFaces(int i);
00061     int addFace();
00062     int addFace(int i1, int i2, int i3);
00063     
00064     // methods which iterate over all numfaces of the Faces in faces[]
00065     void DrawFaces(int do_texture);
00066     void drawlabels(float offset);
00067     void drawnormals();
00068     void drawmarkers();
00069     void computeIsobarys();
00070     void computeNormals(void);
00071     void DeleteFace(int index);
00072     void DeleteFace(Face *f);
00073     void EraseFace(Face *f);
00074     void EraseFacesOfColor(int color);
00075     void DeleteAllFaces();
00076     void WriteDXF(ostream& os);
00077     Node* subdivideFace(Face *initial_p, Node* node_S, Face* *t1_p = NULL, 
00078         Face* *t2_p = NULL, Face* *t3_p = NULL);
00079     Node* subdivideFace(Face *initial_p, Point3D S, Face* *t1_p = NULL, 
00080         Face* *t2_p = NULL, Face* *t3_p = NULL);
00081     Face* unSubdivideFace(Node* n_in);
00082     void SanityCheck(NodeArray* real_na_p, EdgeArray* real_ea_p);
00083     void Cleanup();
00084     double DistanceToNearestFace(Point3D p);
00085     Face* ClosestFaceToPoint(Point3D pt);
00086     void ReorderFacesBasedOnViewingMatrix(double* model, double* proj, 
00087                         GLint* view);
00088     void GeometryReplicate(GeometryReplicator* gr);
00089 };
00090 
00091 inline int FaceArray::getNumFaces()
00092 { return (numfaces); }
00093 
00094 inline Face* FaceArray::getFace(int i) 
00095 { if ((i < 0) || (i >= getNumFaces())) return(NULL);
00096   else return (faces[i]); 
00097 }
00098 
00099 inline Object* FaceArray::getObject()
00100 { return (nodearray_p->getObject()); }
00101 
00102 inline NodeArray* FaceArray::getNodeArray()
00103 { return (nodearray_p); }
00104 
00105 #endif

Generated on Thu Aug 30 11:03:13 2007 for SPRING Mac by  doxygen 1.5.3