ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/SHAPES/SHAPE.cpp
Revision: 1290
Committed: Wed Jun 23 20:53:17 2004 UTC (20 years ago) by gezelter
File size: 6353 byte(s)
Log Message:
Adding visualization parts

File Contents

# Content
1 #include "SHAPE.hpp"
2
3 SHAPE::SHAPE(void) {
4 int i, j;
5
6 mass = 0.0;
7 for (i=0; i<3; i++)
8 for (j=0; j<3; j++)
9 I[i][j] = 0.0;
10
11 }
12
13 SHAPE::~SHAPE(void) {
14 }
15
16 void SHAPE::getI(double theI[3][3]) {
17 int i, j;
18
19 for (i=0; i<3; i++)
20 for (j=0; j<3; j++)
21 theI[i][j] = I[i][j];
22 }
23
24
25 void SHAPE::readSHAPEfile(const char *fname) {
26
27 int lineNum, nTokens;
28 char* eof_test;
29 char* foo;
30 char readLine[500];
31 SHFunc* shf;
32
33 shapeFile = fopen(fname, "r");
34 if (shapeFile == NULL) {
35 printf("Could not open SHAPE file %s\n", fname);
36 exit(-1);
37 }
38 rewind(shapeFile);
39 lineNum = 0;
40 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
41 lineNum++;
42 if( eof_test == NULL ){
43 printf("Error in reading SHAPE from SHAPE file at line %d.\n",
44 lineNum );
45 exit(-1);
46 }
47 // first find the shape name:
48 while( eof_test != NULL ){
49 // toss comment lines
50 if( readLine[0] != '!' && readLine[0] != '#' ){
51
52 nTokens = count_tokens(readLine, " ,;\t");
53 if (nTokens < 5) {
54 printf("Not enough data on information line in SHAPE file.\n");
55 exit(-1);
56 }
57
58 foo = strtok(readLine, " ,;\t");
59 setType(foo);
60 foo = strtok(NULL, " ,;\t");
61 mass = atof(foo);
62 foo = strtok(NULL, " ,;\t");
63 I[0][0] = atof(foo);
64 foo = strtok(NULL, " ,;\t");
65 I[1][1] = atof(foo);
66 foo = strtok(NULL, " ,;\t");
67 I[2][2] = atof(foo);
68 break;
69 }
70 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
71 lineNum++;
72 }
73
74 findBegin( "ContactFunctions" );
75
76 while( eof_test != NULL ){
77 // toss comment lines
78 if( readLine[0] != '!' && readLine[0] != '#' ){
79
80 foo = strtok(readLine, " ,;\t");
81 if (!strcasecmp(foo, "end")) break;
82
83 nTokens = count_tokens(readLine, " ,;\t");
84 if (nTokens != 4) {
85 printf("incorrect number of tokens on sigmaFunc line in SHAPE file\n");
86 exit(-1);
87 }
88
89 shf = new SHFunc();
90 foo = strtok(readLine, " ,;\t");
91 shf->setL(atoi(foo));
92 foo = strtok(NULL, " ,;\t");
93 shf->setM(atoi(foo));
94 foo = strtok(NULL, " ,;\t");
95 if (!strcasecmp(foo, "cos"))
96 shf->makeCosFunc();
97 else {
98 if (!strcasecmp(foo, "sin"))
99 shf->makeSinFunc();
100 else {
101 printf("unknown function type in shape file!");
102 exit(-1);
103 }
104 }
105 foo = strtok(NULL, " ,;\t");
106 shf->setCoefficient(atof(foo));
107 sigmaFuncs.push_back(shf);
108 }
109 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
110 }
111
112 findBegin( "RangeFunctions" );
113
114 while( eof_test != NULL ){
115 // toss comment lines
116 if( readLine[0] != '!' && readLine[0] != '#' ){
117
118 foo = strtok(readLine, " ,;\t");
119 if (!strcasecmp(foo, "end")) break;
120
121 nTokens = count_tokens(readLine, " ,;\t");
122 if (nTokens != 4) {
123 printf("incorrect number of tokens on sigmaFunc line in SHAPE file\n");
124 exit(-1);
125 }
126
127 shf = new SHFunc();
128 foo = strtok(readLine, " ,;\t");
129 shf->setL(atoi(foo));
130 foo = strtok(NULL, " ,;\t");
131 shf->setM(atoi(foo));
132 foo = strtok(NULL, " ,;\t");
133 if (!strcasecmp(foo, "cos"))
134 shf->makeCosFunc();
135 else {
136 if (!strcasecmp(foo, "sin"))
137 shf->makeSinFunc();
138 else {
139 printf("unknown function type in shape file!");
140 exit(-1);
141 }
142 }
143 foo = strtok(NULL, " ,;\t");
144 shf->setCoefficient(atof(foo));
145 sFuncs.push_back(shf);
146 }
147 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
148 }
149
150 findBegin( "StrengthFunctions" );
151
152 while( eof_test != NULL ){
153 // toss comment lines
154 if( readLine[0] != '!' && readLine[0] != '#' ){
155
156 foo = strtok(readLine, " ,;\t");
157 if (!strcasecmp(foo, "end")) break;
158
159 nTokens = count_tokens(readLine, " ,;\t");
160 if (nTokens != 4) {
161 printf("incorrect number of tokens on sigmaFunc line in SHAPE file\n");
162 exit(-1);
163 }
164
165 shf = new SHFunc();
166 foo = strtok(readLine, " ,;\t");
167 shf->setL(atoi(foo));
168 foo = strtok(NULL, " ,;\t");
169 shf->setM(atoi(foo));
170 foo = strtok(NULL, " ,;\t");
171 if (!strcasecmp(foo, "cos"))
172 shf->makeCosFunc();
173 else {
174 if (!strcasecmp(foo, "sin"))
175 shf->makeSinFunc();
176 else {
177 printf("unknown function type in shape file!");
178 exit(-1);
179 }
180 }
181 foo = strtok(NULL, " ,;\t");
182 shf->setCoefficient(atof(foo));
183 epsFuncs.push_back(shf);
184 }
185 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
186 }
187 fclose(shapeFile);
188 }
189
190 void SHAPE::findBegin( char* startText ){
191
192 int foundText = 0;
193 int lineNum;
194 char* the_token;
195 char* eof_test;
196 char readLine[500];
197
198 rewind( shapeFile );
199 lineNum = 0;
200
201 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
202 lineNum++;
203 if( eof_test == NULL ){
204 printf( "Error fast forwarding SHAPE file: file is empty.\n");
205 exit(-1);
206 }
207
208 while( !foundText ){
209 while( eof_test != NULL) {
210 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
211 lineNum++;
212 }
213
214 if( eof_test == NULL ){
215 printf("Error fast forwarding file at line %d: "
216 "file ended unexpectedly.\n", lineNum);
217 exit(-1);
218 }
219
220 the_token = strtok( readLine, " ,;\t" );
221 if (!strcasecmp("begin", the_token)) {
222
223 the_token = strtok( NULL, " ,;\t" );
224 foundText = !strcmp( startText, the_token );
225
226 }
227
228 if( !foundText ){
229 eof_test = fgets( readLine, sizeof(readLine), shapeFile );
230 lineNum++;
231
232
233 if (eof_test == NULL) {
234 printf("Error fast forwarding file at line %d: "
235 "file ended unexpectedly.\n", lineNum);
236 exit(-1);
237 }
238 }
239 }
240 }
241
242 int SHAPE::count_tokens(char *line, char *delimiters) {
243 /* PURPOSE: RETURN A COUNT OF THE NUMBER OF TOKENS ON THE LINE. */
244
245 char *working_line; /* WORKING COPY OF LINE. */
246 int ntokens; /* NUMBER OF TOKENS FOUND IN LINE. */
247 char *strtok_ptr; /* POINTER FOR STRTOK. */
248
249 strtok_ptr= working_line= strdup(line);
250
251 ntokens=0;
252 while (strtok(strtok_ptr,delimiters)!=NULL)
253 {
254 ntokens++;
255 strtok_ptr=NULL;
256 }
257
258 free(working_line);
259 return(ntokens);
260 }