Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/interface/readtetmesh.cpp
3206 views
1
2
//
3
// Read CST file format
4
//
5
6
#include <mystdlib.h>
7
8
#include <myadt.hpp>
9
#include <linalg.hpp>
10
#include <csg.hpp>
11
#include <meshing.hpp>
12
#include <sys/stat.h>
13
14
15
namespace netgen
16
{
17
#include "writeuser.hpp"
18
19
20
21
22
void ReadTETFormat (Mesh & mesh,
23
const string & hfilename)
24
{
25
const char * filename = hfilename.c_str();
26
27
cout << "Reading .tet mesh" << endl;
28
29
ifstream in (filename);
30
31
int inputsection = 0;
32
bool done = false;
33
34
char ch;
35
string str;
36
37
string version;
38
39
int unitcode;
40
double tolerance;
41
double dS1, dS2, alphaDeg, x3D, y3D, z3D;
42
int nelts,nfaces,nedges,nnodes;
43
int nperiodicmasternodes,ncornerperiodicmasternodes,ncubicperiodicmasternodes;
44
int nperiodicmasteredges,ncornerperiodicmasteredges;
45
int nperiodicmasterfaces;
46
int nodeid,type,pid;
47
int dummyint;
48
int modelverts,modeledges,modelfaces,modelcells;
49
Point3d p;
50
int numObj3D,numObj2D,numObj1D,numObj0D;
51
bool nullstarted;
52
ARRAY<int> eldom;
53
int minId3D,minId2D;
54
int maxId3D(-1), maxId2D(-1), maxId1D(-1), maxId0D(-1);
55
ARRAY<ARRAY<int> *> segmentdata;
56
ARRAY<Element2d* > tris;
57
58
ARRAY<int> userdata_int; // just save data for 1:1 output
59
ARRAY<double> userdata_double;
60
ARRAY<int> point_pids;
61
ARRAY<int> tetfacedata;
62
ARRAY<int> uid_to_group_3D, uid_to_group_2D, uid_to_group_1D, uid_to_group_0D;
63
64
while(!done)
65
{
66
// skip "//" comment
67
bool comment = true;
68
while(comment)
69
{
70
ch = in.get();
71
while(ch == ' ' || ch == '\n' || ch == '\t' || ch =='\r')
72
ch = in.get();
73
74
if(ch != '/')
75
{
76
comment = false;
77
in.putback(ch);
78
}
79
else
80
{
81
ch = in.get();
82
if(ch != '/')
83
{
84
comment = false;
85
in.putback(ch);
86
in.putback('/');
87
}
88
else
89
{
90
in.ignore(10000,'\n');
91
}
92
}
93
}
94
95
96
switch(inputsection)
97
{
98
case 0:
99
// version number
100
in >> version;
101
cout << "Version number " << version << endl;
102
if(version != "1.1" && version != "2" && version != "2.0")
103
{
104
cerr << "WARNING: import only tested for versions 1.1 and 2" << endl;
105
//done = true;
106
}
107
userdata_double.Append(atof(version.c_str()));
108
break;
109
110
case 1:
111
// unit code (1=CM 2=MM 3=M 4=MIC 5=NM 6=FT 7=IN 8=MIL)
112
in >> unitcode;
113
cout << "unit code " << unitcode << endl;
114
userdata_int.Append(unitcode);
115
break;
116
117
case 2:
118
// Geometric coord "zero" tolerance threshold
119
in >> tolerance;
120
cout << "tolerance " << tolerance << endl;
121
userdata_double.Append(tolerance);
122
break;
123
124
case 3:
125
// Periodic UnitCell dS1 , dS2 , alphaDeg
126
in >> dS1 >> dS2 >> alphaDeg;
127
userdata_double.Append(dS1);
128
userdata_double.Append(dS2);
129
userdata_double.Append(alphaDeg);
130
break;
131
132
case 4:
133
// Periodic UnitCell origin in global coords (x3D,y3D,z3D)
134
in >> x3D >> y3D >> z3D;
135
userdata_double.Append(x3D);
136
userdata_double.Append(y3D);
137
userdata_double.Append(z3D);
138
break;
139
140
case 5:
141
// Model entity count: Vertices, Edges, Faces, Cells (Version 2)
142
in >> modelverts >> modeledges >> modelfaces >> modelcells;
143
userdata_int.Append(modelverts);
144
userdata_int.Append(modeledges);
145
userdata_int.Append(modelfaces);
146
userdata_int.Append(modelcells);
147
break;
148
149
case 6:
150
// Topological mesh-entity counts (#elements,#faces,#edges,#nodes)
151
in >> nelts >> nfaces >> nedges >> nnodes;
152
cout << nelts << " elements, " << nfaces << " faces, " << nedges << " edges, " << nnodes << " nodes" << endl;
153
mesh.SetAllocSize(nnodes,2*nedges,nfaces,nelts);
154
break;
155
156
case 7:
157
// NodeID, X, Y, Z, Type (0=Reg 1=PMaster 2=PSlave 3=CPMaster 4=CPSlave), PID:
158
{
159
cout << "read nodes" << endl;
160
for(int i=0; i<nnodes; i++)
161
{
162
in >> nodeid >> p.X() >> p.Y() >> p.Z() >> type >> pid;
163
mesh.AddPoint(p);
164
point_pids.Append(pid);
165
if(pid > maxId0D)
166
maxId0D = pid;
167
//(*testout) << "point " << p << " type " << type << " mastersexist " << mastersexist << endl;
168
}
169
}
170
break;
171
172
case 8:
173
// Number of Periodic Master Nodes
174
in >> nperiodicmasternodes;
175
break;
176
177
case 9:
178
// MasterNodeID, SlaveNodeID, TranslCode (1=dS1 2=dS2 3=dS1+dS2)
179
for(int i=0; i<nperiodicmasternodes; i++)
180
{
181
for(int j=0; j<2; j++)
182
in >> dummyint;
183
184
in >> dummyint;
185
}
186
break;
187
188
case 10:
189
// Number of Corner Periodic Master Nodes
190
in >> ncornerperiodicmasternodes;
191
break;
192
193
case 11:
194
// MasterNodeID, 3-SlaveNodeID's, 3-TranslCodes (1=dS1 2=dS2 3=dS1+dS2)
195
for(int i=0; i<ncornerperiodicmasternodes; i++)
196
{
197
for(int j=0; j<4; j++)
198
in >> dummyint;
199
200
for(int j=0; j<3; j++)
201
in >> dummyint;
202
}
203
break;
204
205
case 12:
206
// Number of Cubic Periodic Master Nodes
207
in >> ncubicperiodicmasternodes;
208
break;
209
210
case 13:
211
//MasterNodeID, 7-SlaveNodeID's, TranslCodes
212
for(int i=0; i<ncubicperiodicmasternodes; i++)
213
{
214
for(int j=0; j<8; j++)
215
in >> dummyint;
216
217
for(int j=0; j<7; j++)
218
in >> dummyint;
219
}
220
break;
221
222
case 14:
223
// EdgeID, NodeID0, NodeID1, Type (0=Reg 1=PMaster 2=PSlave 3=CPMaster 4=CPSlave), PID
224
cout << "read edges" << endl;
225
nullstarted = false;
226
segmentdata.SetSize(nedges);
227
for(int i=0; i<nedges; i++)
228
{
229
segmentdata[i] = new ARRAY<int>(7);
230
*segmentdata[i] = -1;
231
in >> dummyint;
232
in >> (*segmentdata[i])[0] >> (*segmentdata[i])[1];
233
in >> type;
234
in >> (*segmentdata[i])[2];
235
if((*segmentdata[i])[2] > maxId1D)
236
maxId1D = (*segmentdata[i])[2];
237
}
238
break;
239
240
case 15:
241
// Number of Periodic Master Edges
242
in >> nperiodicmasteredges;
243
break;
244
245
case 16:
246
// MasterEdgeID, SlaveEdgeID, TranslCode (1=dS1 2=dS2 3=dS1+dS2)
247
for(int i=0; i<nperiodicmasteredges; i++)
248
in >> dummyint >> dummyint >> dummyint;
249
break;
250
251
case 17:
252
// Number of Corner Periodic Master Edges
253
in >> ncornerperiodicmasteredges;
254
break;
255
256
case 18:
257
// MasterEdgeID, 3 SlaveEdgeID's, 3 TranslCode (1=dS1 2=dS2 3=dS1+dS2)
258
for(int i=0; i<ncornerperiodicmasteredges; i++)
259
{
260
in >> dummyint;
261
for(int j=0; j<3; j++)
262
in >> dummyint;
263
for(int j=0; j<3; j++)
264
in >> dummyint;
265
}
266
break;
267
268
case 19:
269
// FaceID, EdgeID0, EdgeID1, EdgeID2, FaceType (0=Reg 1=PMaster 2=PSlave), PID
270
{
271
//Segment seg;
272
int segnum_ng[3];
273
bool neg[3];
274
cout << "read faces" << endl;
275
nullstarted = false;
276
for(int i=0; i<nfaces; i++)
277
{
278
int trinum;
279
int segnum;
280
281
tris.Append(new Element2d(TRIG));
282
283
in >> trinum;
284
for(int j=0; j<3; j++)
285
{
286
in >> segnum;
287
neg[j] = (segnum<0);
288
if(!neg[j])
289
segnum_ng[j] = segnum-1;
290
else
291
segnum_ng[j] = -segnum-1;
292
293
if(neg[j])
294
tris.Last()->PNum(j+1) = (*segmentdata[segnum_ng[j]])[1];
295
else
296
tris.Last()->PNum(j+1) = (*segmentdata[segnum_ng[j]])[0];
297
298
tris.Last()->GeomInfoPi(j+1).trignum = trinum;
299
}
300
in >> type;
301
int faceid;
302
in >> faceid;
303
304
if(faceid > maxId2D)
305
maxId2D = faceid;
306
307
if(i==0 || faceid < minId2D)
308
minId2D = faceid;
309
310
tris.Last()->SetIndex(faceid);
311
312
if(faceid > 0)
313
{
314
//if(nullstarted)
315
// {
316
// cout << "Faces: Assumption about index 0 wrong (face"<<trinum <<")" << endl;
317
// }
318
//mesh.AddSurfaceElement(tri);
319
320
for(int j=0; j<3; j++)
321
{
322
if(neg[j])
323
{
324
(*segmentdata[segnum_ng[j]])[4] = faceid;
325
(*segmentdata[segnum_ng[j]])[6] = trinum;
326
}
327
else
328
{
329
(*segmentdata[segnum_ng[j]])[3] = faceid;
330
(*segmentdata[segnum_ng[j]])[5] = trinum;
331
}
332
}
333
}
334
else
335
nullstarted = true;
336
}
337
}
338
break;
339
340
case 20:
341
// Number of Periodic Master Faces
342
in >> nperiodicmasterfaces;
343
break;
344
345
case 21:
346
// MasterFaceID, SlaveFaceID, TranslCode (1=dS1 2=dS2)
347
{
348
Vec<3> randomvec(-1.32834,3.82399,0.5429151);
349
int maxtransl = -1;
350
for(int i=0; i<nperiodicmasterfaces; i++)
351
{
352
int tri1,tri2,transl;
353
ARRAY<PointIndex> nodes1(3),nodes2(3);
354
ARRAY<double> sortval1(3),sortval2(3);
355
in >> tri1 >> tri2 >> transl;
356
357
if(transl > maxtransl)
358
maxtransl = transl;
359
360
361
for(int j=0; j<3; j++)
362
{
363
nodes1[j] = tris[tri1-1]->PNum(j+1);
364
sortval1[j] = Vec<3>(mesh[nodes1[j]])*randomvec;
365
nodes2[j] = tris[tri2-1]->PNum(j+1);
366
sortval2[j] = Vec<3>(mesh[nodes2[j]])*randomvec;
367
}
368
369
BubbleSort(sortval1,nodes1);
370
BubbleSort(sortval2,nodes2);
371
372
for(int j=0; j<3; j++)
373
mesh.GetIdentifications().Add(nodes1[j],nodes2[j],transl);
374
375
}
376
for(int i=1; i<= maxtransl; i++)
377
mesh.GetIdentifications().SetType(i,Identifications::PERIODIC);
378
}
379
break;
380
381
case 22:
382
// ElemID, FaceID0, FaceID1, FaceID2, FaceID3, PID
383
{
384
cout << "read elements (1)" << endl;
385
386
//SurfaceElementIndex surf[4];
387
bool neg[4];
388
int elemid;
389
int domain;
390
391
eldom.SetSize(nelts);
392
393
for(int i=0; i<nelts; i++)
394
{
395
if(int(100.*i/nelts) % 5 == 0)
396
cout << int(100.*i/nelts)
397
#ifdef WIN32
398
<< "%%\r"
399
#else
400
<< "\%\r"
401
#endif
402
<< flush;
403
in >> elemid;
404
for(int j=0; j<4;j++)
405
{
406
in >> dummyint;
407
neg[j] = (dummyint < 0);
408
if(neg[j])
409
tetfacedata.Append(-dummyint-1);
410
//surf[j] = -dummyint-1;
411
else
412
tetfacedata.Append(dummyint-1);
413
tetfacedata.Append(((neg[j]) ? 1 : 0));
414
//surf[j] = dummyint-1;
415
}
416
417
in >> domain;
418
eldom[i] = domain;
419
tetfacedata.Append(domain);
420
421
if(i==0 || domain < minId3D)
422
minId3D = domain;
423
424
if(domain > maxId3D)
425
maxId3D = domain;
426
427
// for(int j=0; j<4; j++)
428
// {
429
// if(mesh.GetNSE() <= surf[j])
430
// continue;
431
432
// int faceind = 0;
433
// for(int k=1; k<=mesh.GetNFD(); k++)
434
// {
435
// if(mesh.GetFaceDescriptor(k).SurfNr() == mesh[surf[j]].GetIndex())
436
// faceind = k;
437
// }
438
// if(faceind)
439
// {
440
// if(neg[j])
441
// mesh.GetFaceDescriptor(faceind).SetDomainOut(domain);
442
// else
443
// mesh.GetFaceDescriptor(faceind).SetDomainIn(domain);
444
// }
445
// else
446
// {
447
// if(neg[j])
448
// faceind = mesh.AddFaceDescriptor(FaceDescriptor(mesh[surf[j]].GetIndex(),0,domain,0));
449
// else
450
// faceind = mesh.AddFaceDescriptor(FaceDescriptor(mesh[surf[j]].GetIndex(),domain,0,0));
451
// mesh.GetFaceDescriptor(faceind).SetBCProperty(mesh[surf[j]].GetIndex());
452
// }
453
// }
454
}
455
cout << endl;
456
457
458
// ARRAY<int> indextodescriptor(maxId2D+1);
459
460
// for(int i=1; i<=mesh.GetNFD(); i++)
461
// indextodescriptor[mesh.GetFaceDescriptor(i).SurfNr()] = i;
462
463
464
// for(SurfaceElementIndex i=0; i<mesh.GetNSE(); i++)
465
// mesh[i].SetIndex(indextodescriptor[mesh[i].GetIndex()]);
466
}
467
break;
468
469
case 23:
470
// ElemID, NodeID0, NodeID1, NodeID2, NodeID3
471
{
472
cout << "read elements (2)" << endl;
473
Element el(TET);
474
for(ElementIndex i=0; i<nelts; i++)
475
{
476
in >> dummyint;
477
for(int j=1; j<=4; j++)
478
in >> el.PNum(j);
479
swap(el.PNum(1),el.PNum(2));
480
481
el.SetIndex(eldom[i]);
482
mesh.AddVolumeElement(el);
483
}
484
}
485
break;
486
487
case 24:
488
// Physical Object counts (#Obj3D,#Obj2D,#Obj1D,#Obj0D)
489
{
490
in >> numObj3D;
491
userdata_int.Append(numObj3D);
492
in >> numObj2D;
493
userdata_int.Append(numObj2D);
494
in >> numObj1D;
495
userdata_int.Append(numObj1D);
496
in >> numObj0D;
497
userdata_int.Append(numObj0D);
498
}
499
break;
500
501
case 25:
502
// Number of Ports (Ports are a subset of Object2D list)
503
{
504
in >> dummyint;
505
//userdata_int.Append(dummyint);
506
}
507
break;
508
509
case 26:
510
// Object3D GroupID, #Elems <immediately followed by> ElemID List
511
{
512
uid_to_group_3D.SetSize(maxId3D+1);
513
uid_to_group_3D = -1;
514
for(int i=0; i<numObj3D; i++)
515
{
516
int groupid;
517
in >> groupid;
518
(*testout) << "3d groupid " << groupid << endl;
519
//userdata_int.Append(groupid);
520
int nelems;
521
in >> nelems;
522
//userdata_int.Append(nelems);
523
for(int j=0; j<nelems; j++)
524
{
525
in >> dummyint;
526
527
(*testout) << "read " << dummyint << endl;
528
//userdata_int.Append(dummyint);
529
530
if(dummyint < 0)
531
dummyint *= -1;
532
uid_to_group_3D[eldom[dummyint-1]] = groupid;
533
}
534
}
535
}
536
break;
537
538
case 27:
539
// Object2D GroupID, #Faces <immediately followed by> FaceID List
540
{
541
ARRAY<int> ports;
542
//int totnum = 0;
543
uid_to_group_2D.SetSize(maxId2D+1);
544
uid_to_group_2D = -1;
545
546
for(int i=0; i<numObj2D; i++)
547
{
548
int groupid;
549
in >> groupid;
550
(*testout) << "2d groupid " << groupid << endl;
551
//userdata_int.Append(groupid);
552
int nelems;
553
in >> nelems;
554
//userdata_int.Append(nelems);
555
for(int j=0; j<nelems; j++)
556
{
557
in >> dummyint;
558
char port;
559
while((port = in.get()) == ' ')
560
;
561
562
(*testout) << "read " << dummyint << endl;
563
if(dummyint < 0)
564
dummyint *= -1;
565
int uid = tris[dummyint-1]->GetIndex();
566
567
if(port == 'P' || port == 'p')
568
{
569
if(!ports.Contains(uid))
570
ports.Append(uid);
571
}
572
else
573
in.putback(port);
574
575
//userdata_int.Append(dummyint);
576
577
uid_to_group_2D[uid] = groupid;
578
(*testout) << "setting " << uid << endl;
579
580
//totnum++;
581
}
582
}
583
mesh.SetUserData("TETmesh:ports",ports);
584
}
585
break;
586
587
case 28:
588
// Object1D GroupID, #Edges <immediately followed by> EdgeID List
589
{
590
uid_to_group_1D.SetSize(maxId1D+1);
591
uid_to_group_1D = -1;
592
593
for(int i=0; i<numObj1D; i++)
594
{
595
int groupid;
596
in >> groupid;
597
//userdata_int.Append(groupid);
598
int nelems;
599
in >> nelems;
600
//userdata_int.Append(nelems);
601
for(int j=0; j<nelems; j++)
602
{
603
in >> dummyint;
604
//userdata_int.Append(dummyint);
605
606
if(dummyint < 0)
607
dummyint *= -1;
608
uid_to_group_1D[(*segmentdata[dummyint-1])[2]] = groupid;
609
}
610
}
611
}
612
break;
613
614
case 29:
615
// Object0D GroupID, #Nodes <immediately followed by> NodeID List
616
{
617
uid_to_group_0D.SetSize(maxId0D+1);
618
uid_to_group_0D = -1;
619
for(int i=0; i<numObj0D; i++)
620
{
621
int groupid;
622
in >> groupid;
623
//userdata_int.Append(groupid);
624
int nelems;
625
in >> nelems;
626
//userdata_int.Append(nelems);
627
for(int j=0; j<nelems; j++)
628
{
629
in >> dummyint;
630
//userdata_int.Append(dummyint);
631
632
if(dummyint < 0)
633
dummyint *= -1;
634
uid_to_group_0D[point_pids[dummyint-1]] = groupid;
635
}
636
}
637
}
638
break;
639
640
641
642
default:
643
done = true;
644
645
}
646
647
if(inputsection == 4 && version == "1.1")
648
inputsection++;
649
650
inputsection++;
651
}
652
in.close();
653
654
655
mesh.SetUserData("TETmesh:double",userdata_double);
656
userdata_int.Append(minId2D);
657
userdata_int.Append(minId3D);
658
mesh.SetUserData("TETmesh:int",userdata_int);
659
//if(version == "1.1")
660
mesh.SetUserData("TETmesh:point_id",point_pids);
661
662
mesh.SetUserData("TETmesh:uid_to_group_3D",uid_to_group_3D);
663
mesh.SetUserData("TETmesh:uid_to_group_2D",uid_to_group_2D);
664
mesh.SetUserData("TETmesh:uid_to_group_1D",uid_to_group_1D);
665
mesh.SetUserData("TETmesh:uid_to_group_0D",uid_to_group_0D);
666
667
668
ARRAY<SurfaceElementIndex> surfindices(tris.Size());
669
surfindices = -1;
670
671
for(int i=0; i<tris.Size(); i++)
672
{
673
if(atof(version.c_str()) <= 1.999999)
674
{
675
if(tris[i]->GetIndex() > 0)
676
surfindices[i] = mesh.AddSurfaceElement(*tris[i]);
677
}
678
else
679
{
680
if(tris[i]->GetIndex() > 0 &&
681
tris[i]->GetIndex() < minId3D)
682
{
683
tris[i]->SetIndex(tris[i]->GetIndex()-minId2D+1);
684
surfindices[i] = mesh.AddSurfaceElement(*tris[i]);
685
}
686
}
687
delete tris[i];
688
}
689
690
691
mesh.ClearFaceDescriptors();
692
if(atof(version.c_str()) <= 1.999999)
693
for(int i = 1; i <= maxId2D; i++)
694
mesh.AddFaceDescriptor(FaceDescriptor(i,0,0,0));
695
else
696
for(int i=minId2D; i<minId3D; i++)
697
mesh.AddFaceDescriptor(FaceDescriptor(i,0,0,0));
698
699
700
for(int i=0; i<tetfacedata.Size(); i+=9)
701
{
702
for(int j=0; j<4; j++)
703
{
704
SurfaceElementIndex surf = surfindices[tetfacedata[i+2*j]];
705
706
//if(mesh.GetNSE() <= surf)
707
if(surf == -1)
708
continue;
709
710
if(tetfacedata[i+2*j+1] == 1)
711
mesh.GetFaceDescriptor(mesh[surf].GetIndex()).SetDomainOut(tetfacedata[i+8]);
712
else
713
mesh.GetFaceDescriptor(mesh[surf].GetIndex()).SetDomainIn(tetfacedata[i+8]);
714
715
716
/*
717
int faceind = 0;
718
for(int k=1; k<=mesh.GetNFD(); k++)
719
{
720
if(mesh.GetFaceDescriptor(k).SurfNr() == mesh[surf].GetIndex())
721
faceind = k;
722
}
723
if(faceind)
724
{
725
if(tetfacedata[i+4+j] == 1)
726
mesh.GetFaceDescriptor(faceind).SetDomainOut(tetfacedata[i+8]);
727
else
728
mesh.GetFaceDescriptor(faceind).SetDomainIn(tetfacedata[i+8]);
729
}
730
else
731
{
732
if(tetfacedata[i+4+j] == 1)
733
faceind = mesh.AddFaceDescriptor(FaceDescriptor(mesh[surf].GetIndex(),0,tetfacedata[i+8],0));
734
else
735
faceind = mesh.AddFaceDescriptor(FaceDescriptor(mesh[surf].GetIndex(),tetfacedata[i+8],0,0));
736
mesh.GetFaceDescriptor(faceind).SetBCProperty(mesh[surf].GetIndex());
737
}
738
*/
739
}
740
741
}
742
743
// ARRAY<int> indextodescriptor(maxId2D+1);
744
745
// for(int i=1; i<=mesh.GetNFD(); i++)
746
// indextodescriptor[mesh.GetFaceDescriptor(i).SurfNr()] = i;
747
748
749
// for(SurfaceElementIndex i=0; i<mesh.GetNSE(); i++)
750
// mesh[i].SetIndex(indextodescriptor[mesh[i].GetIndex()]);
751
752
753
for(int i=0; i<segmentdata.Size(); i++)
754
{
755
Segment seg;
756
757
758
if((atof(version.c_str()) <= 1.999999 && (*segmentdata[i])[2] > 0) ||
759
(atof(version.c_str()) > 1.999999 && (*segmentdata[i])[2] > 0 && (*segmentdata[i])[2] < minId2D))
760
{
761
seg.p1 = (*segmentdata[i])[0];
762
seg.p2 = (*segmentdata[i])[1];
763
seg.edgenr = (*segmentdata[i])[2];
764
seg.epgeominfo[0].edgenr = (*segmentdata[i])[2];
765
seg.epgeominfo[1].edgenr = (*segmentdata[i])[2];
766
seg.si = (*segmentdata[i])[3]-minId2D+1;
767
seg.surfnr1 = -1;//(*segmentdata[i])[3];
768
seg.surfnr2 = -1;//(*segmentdata[i])[4];
769
seg.geominfo[0].trignum = (*segmentdata[i])[5];
770
seg.geominfo[1].trignum = (*segmentdata[i])[5];
771
mesh.AddSegment(seg);
772
773
seg.p1 = (*segmentdata[i])[1];
774
seg.p2 = (*segmentdata[i])[0];
775
seg.si = (*segmentdata[i])[4]-minId2D+1;
776
seg.surfnr1 = -1;//(*segmentdata[i])[3];
777
seg.surfnr2 = -1;//(*segmentdata[i])[4];
778
seg.geominfo[0].trignum = (*segmentdata[i])[6];
779
seg.geominfo[1].trignum = (*segmentdata[i])[6];
780
mesh.AddSegment(seg);
781
}
782
delete segmentdata[i];
783
}
784
785
/*
786
for(int i=mesh.GetNSeg(); i>=1; i--)
787
if(mesh.LineSegment(i).epgeominfo[0].edgenr == 0 ||
788
mesh.LineSegment(i).epgeominfo[1].edgenr == 0)
789
mesh.FullDeleteSegment(i);
790
*/
791
792
mesh.CalcSurfacesOfNode();
793
794
}
795
}
796
797
798
799