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

Go to the documentation of this file.
00001 // $Id: objectarray.h,v 1.37 2006/05/24 16:52:41 sean Exp $
00002 // $Copyright: (c)2001 National Biocomputation Center, Stanford University $
00003 
00004 #ifndef ObjectArray_H
00005 #define ObjectArray_H
00006 
00007 #include "util.h"
00008 #include "point3d.h"
00009 #include "object.h"
00010 #include "timer.h"
00011 #include <string.h>
00012 #include <stdio.h>
00013 #include "screen.h"
00014 #include "geometryreplicator.h"
00015 
00016 class Object;
00017 
00018 class ObjectArray
00019 {
00020 private:
00021     int numgroups;
00022     int numobjects;
00023     int numscreens;
00024     enum { maxobjects = 1000 };
00025     Object *objects_p[maxobjects];
00026     
00027     enum { maxscreens = 100 };
00028     Screen *screens_p[maxscreens];
00029     int ScreenTrace[maxscreens];
00030     
00031     Point3D min, max;           // global bounding box
00032     
00033     unsigned char** PatientScans;
00034     int numscan;
00035     char PatientName[40];
00036     
00037 public:
00038     ObjectArray();
00039     ~ObjectArray();
00040     static const char* rcsid;
00041     
00042     void reset(void);
00043     int getNumObjects(void);
00044     int getNumScreens(void);
00045     int getNumGroups(void);
00046     
00047     void getScanBox(Screen* scr);
00048     unsigned char* getPatientScan(int i) { return PatientScans[i]; }
00049     void LoadPatient(char* filename, int *width, int* height, int* depth, 
00050                         Screen* scr = NULL);
00051     int getNumScan() { return numscan; }
00052     void RefreshPatient(int index);
00053     
00054     
00055     // public variables
00056     static int debug;
00057     
00058     // statistics/useful values
00059     void computeStats();
00060     void getBoundingBox(Point3D* min_p, Point3D* max_p);
00061     Point3D getCenter();
00062     
00063     int getIndex(Object* obj);
00064     int getIndexScreen(Screen* scr);
00065     
00066     // I/O routines
00067     int Read(char* filename);
00068     void Save(int format, ostream& os);// format: 0=mesh,1=smf,2=vrml
00069     friend ostream& operator<<(ostream& os, ObjectArray &oa);
00070     
00071     // dynamic creation routines
00072     Object* addObject(char* name, int index=-1);        // -1 implies append
00073     void DeleteObject(Object* obj);
00074     Screen* addScreen(char* name);
00075     void DeleteScreen(Screen* scr);
00076     void DeleteAllObjects();
00077     Object* duplicateObject(Object* obj);
00078     Object* findObject(char* name);
00079     Object *getObject(int i);
00080     Screen *getScreen(int i);
00081     
00082         // methods which iterate over all numobjects of the Objects in objects_p[]
00083         void Draw();
00084     void Update();
00085     void SetVisible(int on);
00086         
00087         // collisions
00088     void ConstructCollisions();         // +constructor
00089         void DestructCollisions();              // +destructor  
00090     void ResetCollisions();                     // update collision stuff + reset previous collisions
00091         void DetectCollisions();                // detect only
00092         void MarkCollisions();                  // mark only
00093     void ResolveCollisions();           // collision response
00094 
00095     void printInfo(void);
00096         
00097         // interactions
00098     void HandleBehaviors();
00099     Node* FindClosestUnlinkedNode2(Point3D pt, double thresh = 1.0);
00100     Node* FindClosestUnlinkedNode(Point3D pt);
00101     void CreateArticulationsBetweenObjects(double dist_allowed);
00102     Object* TesselateSurface(Object* obj);
00103         void GeometryReplicate(GeometryReplicator* gr);
00104 };
00105 
00106 inline int ObjectArray::getNumObjects(void) 
00107 {return numobjects;}
00108 
00109 inline void ObjectArray::getBoundingBox(Point3D* min_p, Point3D* max_p) 
00110 { computeStats();  *min_p = min, *max_p = max; }
00111 
00112 inline Object* ObjectArray::getObject(int i) 
00113 { return(objects_p[i]); }
00114 
00115 inline Point3D ObjectArray::getCenter()
00116 { return( (min+max)/2.0 ); }
00117 
00118 inline int ObjectArray::getNumScreens(void) 
00119 {return numscreens;}
00120 
00121 inline Screen* ObjectArray::getScreen(int i) 
00122 {return (screens_p[i]);}
00123 
00124 inline int ObjectArray::getNumGroups(void)
00125 { return numgroups;}
00126 
00127 #endif

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