74{
75 char *
name =
new char [*LTITR * 3];
76 int * ifiltmp = new int [*LTITR];
77 char * name_part=new char [*LTITR * 3 ];
78 char * name_sub=new char [*LTITR * 3 ];
79 int * assembly_father = new int [*NSUBS];
80
81 try {
82
83 int i,j,k,cpt,ipid,igtyp,isid;
84 unsigned char red[] = {255, 0, 0};
85 unsigned char green[] = {0, 255, 0};
86 unsigned char blue[] = {0, 0, 255};
87 H3D_COMPONENT_ATTRIBS wireframe = H3D_COMP_ATTR_WIREFRAME;
88 H3D_COMPONENT_ATTRIBS opaque = H3D_COMP_ATTR_OPAQUE;
89 H3D_COMPONENT_ATTRIBS transparent = H3D_COMP_ATTR_TRANSPARENT;
90 H3D_COMPONENT_ATTRIBS meshlines = H3D_COMP_ATTR_MESHLINES;
91
92 H3D_ID RigidElem = H3D_NULL_ID;
93
94
98
101
104
105 char SHELLPOOL[] = "Shell";
108
109 char SOLIDPOOL[] = "Solid";
112
113 char QUADPOOL[] = "QUAD";
116
117 char SKINPOOL[] = "SKIN";
120
121 char ONEDELEMPOOL[] = "1D";
124
125 char RIGIDPOOL[] = "Rigid";
128
129 char SPHCELLPOOL[] = "SPHCELL";
132
133 char SPHNODEPOOL[] = "SPHNodes";
136
137 char RBODYPOOL[] = "Rbody";
140
141 char RBE2POOL[] = "Rbe2";
144
145 char RBE3POOL[] = "Rbe3";
148
149 char RWALLPOOL[] = "Rwall";
152
156
157 for(i=0;i<*NSUBS;i++)
158 {
159 assembly_father[i] = -1;
160 }
161
162
163
164
165
166
167
168
169
170
171
172 int current_son = 0;
173 for(i=0;i<*NSUBS;i++)
174 {
175 int nbson_sub = SUB_NCHILD[i];
176 for(j=0;j<nbson_sub;j++)
177 {
178 assembly_father[SUB_CHILD[current_son]-1] = i ;
179 current_son++ ;
180 }
181 }
182
183 int level_max = 0;
184 int id_max = 0;
185 for(int isu=0;isu<*NSUBS;isu++)
186 {
187
188
189 if(level_max < SUB_LEVEL[isu]) level_max = SUB_LEVEL[isu];
190 if(id_max < SUB_ID[isu]) id_max = SUB_ID[isu];
191 }
192
193
194 for(int ilevel=1;ilevel <= level_max;ilevel++)
195 {
196 for(int isu=0;isu<*NSUBS;isu++)
197 {
198
199 if( SUB_LEVEL[isu] == ilevel)
200 {
201 k = 0;
202 cpt = 0;
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220 for(j=0;j < *LTITR ; j=j+1)
221 {
222 name[k]=(char) (SUB_TITLE[*LTITR * (isu) + j]/65536);
223 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
224 k++;
225 name[k]=(char) ((SUB_TITLE[*LTITR * (isu) + j]%65536)/256);
226 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
227 k++;
228 name[k]=(char) (SUB_TITLE[*LTITR * (isu) + j]%256);
229 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
230 k++;
231 }
232
233 for(j=0;j < *LTITR * 3 - cpt; j++) name_sub[j] = name[j];
234 name_sub[*LTITR * 3 - cpt] = '\0' ;
235
236
237
238
239
240 H3D_ID
assm_id = SUB_ID[ isu ];
242
245
248
251
252 }
253 }
254 }
255
256
257
258 for(i=0;i<*NPART;i++)
259 {
260 ipid = IPART[ *LIPART1 * i + 1 ] ;
261 isid = IPART[ *LIPART1 * i + 2 ] ;
262 igtyp = IGEO[*NPROPGI * (ipid - 1) + 10 ] ;
263
264 if(H3D_PART[i] == 1)
265 {
266
267
268
269 if(igtyp == 1 || igtyp == 9|| igtyp == 10 || igtyp == 11 || igtyp == 16|| igtyp == 17|| igtyp == 19 || igtyp == 51)
270 {
272 }
273 else if(*N2D != 0 &&(igtyp == 6 || igtyp == 14 || igtyp == 15 || igtyp == 20 || igtyp == 21 || igtyp == 22 || igtyp == 43))
274 {
276 }
277 else if(igtyp == 6 || igtyp == 14 || igtyp == 15 || igtyp == 20 || igtyp == 21 || igtyp == 22 || igtyp == 43)
278 {
280 }
281 else if(igtyp == 2 || igtyp == 3 || igtyp == 4 || igtyp == 8 || igtyp == 12 || igtyp == 13 || igtyp == 18 ||
282 igtyp == 25 || igtyp == 26 || igtyp == 28 || igtyp == 32|| igtyp == 33 || igtyp == 35 || igtyp == 36 ||
283 igtyp == 44 || igtyp == 45 || igtyp == 46 )
284 {
286 }
287 else if(igtyp == 34)
288 {
290 }
291 else
292 {
294 }
295
296
298
299 k = 0;
300 cpt = 0;
301 for(j=0;j < *LTITR ; j=j+1)
302 {
303 name[k]=(char) (IPART[ *LIPART1 * (i+1) - *LTITR + j]/65536);
304 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
305 k++;
306 name[k]=(char) ((IPART[ *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
307 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
308 k++;
309 name[k]=(char) (IPART[ *LIPART1 * (i+1) - *LTITR + j]%256);
310 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
311 k++;
312 }
313
314 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
315 name_part[*LTITR * 3 - cpt] = '\0' ;
316
317 if(strlen(name_part) == 0) sprintf(name_part,"no part name");
318
319 if(igtyp == 1 || igtyp == 9|| igtyp == 10 || igtyp == 11 || igtyp == 16|| igtyp == 17|| igtyp == 19 || igtyp == 51)
320 {
322
324
325 }
326 else if(igtyp == 6 || igtyp == 14 || igtyp == 15 || igtyp == 20 || igtyp == 21 || igtyp == 22 || igtyp == 43)
327 {
329
331 }
332 else if(igtyp == 2 || igtyp == 3 || igtyp == 4 || igtyp == 8 || igtyp == 12 || igtyp == 13 || igtyp == 18 ||
333 igtyp == 25 || igtyp == 26 || igtyp == 28 || igtyp == 32|| igtyp == 33 || igtyp == 35 || igtyp == 36 ||
334 igtyp == 44 || igtyp == 45 || igtyp == 46 )
335 {
337
339 }
340 else if(igtyp == 34)
341 {
343
345 }
346 else
347 {
349
351 }
352
354
357
358 }
359
360 }
361 for(i=0;i<*NPART;i++)
362 {
363 ipid = IPART[ *LIPART1 * i + 1 ] ;
364 isid = IPART[ *LIPART1 * i + 2 ] ;
365 igtyp = IGEO[*NPROPGI * (ipid - 1) + 10 ] ;
366
367 if(H3D_PART[i] == 1 || igtyp == 6 || igtyp == 14 || igtyp == 20 || igtyp == 21 || igtyp == 22)
368 {
369
370
371
373
375
376 k = 0;
377 cpt = 0;
378 for(j=0;j < *LTITR ; j=j+1)
379 {
380 name[k]=(char) (IPART[ *LIPART1 * (i+1) - *LTITR + j]/65536);
381 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
382 k++;
383 name[k]=(char) ((IPART[ *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
384 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
385 k++;
386 name[k]=(char) (IPART[ *LIPART1 * (i+1) - *LTITR + j]%256);
387 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
388 k++;
389 }
390
391 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
392 name_part[*LTITR * 3 - cpt] = '\0' ;
393
394 if(strlen(name_part) == 0) sprintf(name_part,"no part name");
395
398
400
403 }
404
405 }
406
407
408 int id_rbody;
409 if(*NRBODY > 0)
410 {
411 const char *name_rbody = "RBODIES MODEL" ;
412
413 id_max ++;
414 id_rbody = id_max;
415
418
421
422
425 }
426
427
428 if(*COMPID_RBODIES != 0)
429 {
430 if(*NRBODY != 0)
431 {
432
435
439
442 }
443 }
444 else
445 {
446 for(i=0;i<*NRBODY;i++)
447 {
448
451
452 k = 0;
453 cpt = 0;
454 for(j=0;j < *LTITR ; j=j+1)
455 {
456 name[k]=(char) (NOM_OPT[ *LNOPT1 * (i+1) - *LTITR + j]/65536);
457 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
458 k++;
459 name[k]=(char) ((NOM_OPT[ *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
460 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
461 k++;
462 name[k]=(char) (NOM_OPT[ *LIPART1 * (i+1) - *LTITR + j]%256);
463 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
464 k++;
465 }
466
467 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
468 name_part[*LTITR * 3 - cpt] = '\0' ;
469
470 if(strlen(name_part) == 0) sprintf(name_part,"RBODY");
471
475
478 }
479 }
480
481
482 int id_rbe2;
483 if(*NRBE2 > 0)
484 {
485 const char *name_rbe2 = "RBE2 MODEL" ;
486
487 id_max ++;
488 id_rbe2 = id_max;
489
492
495
496
499 }
500
501 if(*COMPID_RBE2S != 0)
502 {
503 if(*NRBE2 != 0)
504 {
505
508
512
515 }
516 }
517 else
518 {
519 for(i=0;i<*NRBE2;i++)
520 {
521
524
525 k = 0;
526 cpt = 0;
527 for(j=0;j < *LTITR ; j=j+1)
528 {
529 name[k]=(char) (NOM_OPT[*I16E-1 + *LNOPT1 * (i+1) - *LTITR + j]/65536);
530 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
531 k++;
532 name[k]=(char) ((NOM_OPT[*I16E-1 + *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
533 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
534 k++;
535 name[k]=(char) (NOM_OPT[*I16E-1 + *LIPART1 * (i+1) - *LTITR + j]%256);
536 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
537 k++;
538 }
539
540 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
541 name_part[*LTITR * 3 - cpt] = '\0' ;
542
543 if(strlen(name_part) == 0) sprintf(name_part,"RBE2");
544
548
549
552 }
553 }
554
555 int id_rbe3;
556 if(*NRBE3 > 0)
557 {
558 const char *name_rbe3 = "RBE3 MODEL" ;
559
560 id_max ++;
561 id_rbe3 = id_max;
562
565
568
571 }
572
573
574 if(*COMPID_RBE3S != 0)
575 {
576 if(*NRBE3 != 0)
577 {
578
581
585
588 }
589 }
590 else
591 {
592 for(i=0;i<*NRBE3;i++)
593 {
594
597
598 k = 0;
599 cpt = 0;
600 for(j=0;j < *LTITR ; j=j+1)
601 {
602 name[k]=(char) (NOM_OPT[*I16F-1 + *LNOPT1 * (i+1) - *LTITR + j]/65536);
603 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
604 k++;
605 name[k]=(char) ((NOM_OPT[*I16F-1 + *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
606 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
607 k++;
608 name[k]=(char) (NOM_OPT[*I16F-1 + *LIPART1 * (i+1) - *LTITR + j]%256);
609 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
610 k++;
611 }
612
613 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
614 name_part[*LTITR * 3 - cpt] = '\0' ;
615
616 if(strlen(name_part) == 0) sprintf(name_part,"RBE3");
617
621
624 }
625 }
626
627
628 int id_rwall;
629 if(*NRWALL > 0)
630 {
631 const char *name_rwall = "RWALLS MODEL" ;
632
633 id_max ++;
634 id_rwall = id_max;
635
638
641
642
645 }
646
647 for(i=0;i<*NRWALL;i++)
648 {
649
650
653
654 k = 0;
655 cpt = 0;
656 for(j=0;j < *LTITR ; j=j+1)
657 {
658 name[k]=(char) (NOM_OPT[*I16D-1 + *LNOPT1 * (i+1) - *LTITR + j]/65536);
659 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
660 k++;
661 name[k]=(char) ((NOM_OPT[*I16D-1 + *LIPART1 * (i+1) - *LTITR + j]%65536)/256);
662 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
663 k++;
664 name[k]=(char) (NOM_OPT[*I16D-1 + *LIPART1 * (i+1) - *LTITR + j]%256);
665 if(name[k] == ' ' || name[k] == '\0'){cpt++;} else {cpt = 0;}
666 k++;
667 }
668
669 for(j=0;j < *LTITR * 3 - cpt; j++) name_part[j] = name[j];
670 name_part[*LTITR * 3 - cpt] = '\0' ;
671
675
678 }
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699 }
700
701 catch(...) {
703 }
705 delete [] ifiltmp;
706 delete [] name_part;
707 delete [] name_sub;
708 delete [] assembly_father;
709
710}
H3D_ID onedelem_poolname_id
H3D_ID elem1D_poolname_id
H3D_ID sphnode_poolname_id
H3D_ID sphcell_poolname_id
bool Hyper3DAssemblyEnd(H3DFileInfo *h3d_file)
bool Hyper3DAddString(H3DFileInfo *h3d_file, const char *const string, H3D_ID *const str_id)
bool Hyper3DExportClearError(H3DFileInfo *h3d_file)
bool Hyper3DComponentEnd(H3DFileInfo *h3d_file)
bool Hyper3DComponentWrite(H3DFileInfo *h3d_file, const char *label, H3D_ID id, H3D_ID node_poolname_id, H3D_ID parent_id)
bool Hyper3DAssemblyWrite(H3DFileInfo *h3d_file, const char *label, H3D_ID id, H3D_ID parent_id)
bool Hyper3DComponentBegin(H3DFileInfo *h3d_file, unsigned int count, H3D_ID poolname_id, H3D_ID parent_poolname_id)
bool Hyper3DAssemblyBegin(H3DFileInfo *h3d_file, unsigned int count, H3D_ID poolname_id, H3D_ID parent_poolname_id)