00001 // $Id: edgearray.h,v 1.39 2006/05/24 16:52:42 sean Exp $ 00002 // $Copyright: (c)2001 National Biocomputation Center, Stanford University $ 00003 00004 #ifndef EdgeArray_H 00005 #define EdgeArray_H 00006 00007 #include "util.h" 00008 #include "edge.h" 00009 #include "nodearray.h" 00010 #include <string.h> 00011 00012 class NodeArray; 00013 class Object; 00014 00015 class EdgeArray 00016 { 00017 private: 00018 int numedges; // number currently used 00019 int maxedges; // number allocated in memory 00020 Edge* *edges; 00021 char edgefilename[MAXLINE]; 00022 00023 // links to parallel arrays 00024 NodeArray* nodearray_p; 00025 00026 public: 00027 EdgeArray(NodeArray* nodearray_p_in); 00028 ~EdgeArray(); 00029 static const char* rcsid; 00030 static int debug; 00031 00032 int do_nonlinear; 00033 void reset(void); 00034 void setEdgeFilename(char *s); 00035 int getNumEdges(); 00036 int getIndex(Edge* e); 00037 Object* getObject(); 00038 NodeArray* getNodeArray(); 00039 void SaveFrdEdgeData(ostream& os); 00040 int getFRDEdgeData(FILE *meshfile); 00041 00042 // dynamic allocation routines 00043 // called by facearray when using mesh files 00044 void allocateEdges(int maxedges); 00045 int addEdge(int i0, int i1, double restLength=-1.0, 00046 double springConstant=1.0, double dampConstant=0.5); 00047 int addEdge(Node* n0, Node* n1, double restLength=-1.0, 00048 double springConstant=1.0, double dampConstant=0.5); 00049 00050 // called by spring when using node/edge files 00051 int getEdgeData(void); 00052 Edge *getEdge(int i); 00053 00054 // methods which iterate over all numedges of the Edges in edges[] 00055 void addTorsions(void); 00056 void DrawEdges(); 00057 void drawinitial(); 00058 void KnotIdentify(int testing); 00059 void setSpringConstants(double value, int restLengthScale = 0); 00060 void setDampConstants(double value); 00061 void drawover(double scale); 00062 void drawlabels(float offset); 00063 double getEnergy(void); 00064 void DeleteEdge(int index); 00065 void DeleteEdge(Edge* e); 00066 void EraseEdge(Edge* e); 00067 void DeleteAllEdges(); 00068 void DeleteFacelessEdges(); 00069 void SanityCheck(); 00070 void Cleanup(); 00071 int CompressDuplicateEdges(); 00072 void scaleRestLengths(double scalefactor); 00073 void computeNewRestLengths(); 00074 00075 void ComputeForceVectors(int dampingType); 00076 void ComputeForceVectorsNonlinear(int dampingType); 00077 }; 00078 00079 inline int EdgeArray::getNumEdges() 00080 {return (numedges);} 00081 00082 inline Edge* EdgeArray::getEdge(int i) 00083 {return (edges[i]);} 00084 00085 inline NodeArray* EdgeArray::getNodeArray() 00086 {return (nodearray_p);} 00087 00088 inline Object* EdgeArray::getObject() 00089 { return (nodearray_p->getObject()); } 00090 00091 #endif
1.5.3