Remove Segment::bcname, fix Mesh::operator=

Remap the 'string* bcname' members in the FaceDescriptor objects in
Mesh::operator= to the new mesh
This commit is contained in:
Matthias Hochsteger 2020-07-23 16:01:34 +02:00
parent ba5e741ad3
commit 2f88502729
6 changed files with 12 additions and 57 deletions

View File

@ -458,9 +458,6 @@ namespace netgen
for ( int sindex = 0; sindex < maxsegmentindex; sindex++ ) for ( int sindex = 0; sindex < maxsegmentindex; sindex++ )
mesh->SetBCName ( sindex, geometry.GetBCName( sindex+1 ) ); mesh->SetBCName ( sindex, geometry.GetBCName( sindex+1 ) );
for (SegmentIndex si = 0; si < mesh->GetNSeg(); si++)
(*mesh)[si].SetBCName ( (*mesh).GetBCNamePtr( (*mesh)[si].si-1 ) );
mesh->CalcLocalH(mp.grading); mesh->CalcLocalH(mp.grading);
int bnp = mesh->GetNP(); // boundary points int bnp = mesh->GetNP(); // boundary points

View File

@ -560,7 +560,7 @@ char * Ng_GetSurfaceElementBCName (int ei)
if ( mesh->GetDimension() == 3 ) if ( mesh->GetDimension() == 3 )
return const_cast<char *>(mesh->GetFaceDescriptor(mesh->SurfaceElement(ei).GetIndex()).GetBCName().c_str()); return const_cast<char *>(mesh->GetFaceDescriptor(mesh->SurfaceElement(ei).GetIndex()).GetBCName().c_str());
else else
return const_cast<char *>(mesh->LineSegment(ei).GetBCName().c_str()); return const_cast<char *>(mesh->GetBCName(mesh->LineSegment(ei).si).c_str());
} }

View File

@ -313,7 +313,6 @@ namespace netgen
ednr = mesh.AddEdgeDescriptor(ed); ednr = mesh.AddEdgeDescriptor(ed);
mesh.SetCD2Name(bcpr, name); mesh.SetCD2Name(bcpr, name);
auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]);
mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names()));
mesh[nr].edgenr = ednr+1; mesh[nr].edgenr = ednr+1;
} }
else if(dim == 2) else if(dim == 2)
@ -321,7 +320,6 @@ namespace netgen
Segment & seg = mesh.LineSegment(get<0>(element_map[index])); Segment & seg = mesh.LineSegment(get<0>(element_map[index]));
seg.si = bccounter + 1; seg.si = bccounter + 1;
mesh.SetBCName(bccounter, name); mesh.SetBCName(bccounter, name);
seg.SetBCName(mesh.GetBCNamePtr(bccounter));
bccounter++; bccounter++;
} }
break; break;
@ -353,13 +351,11 @@ namespace netgen
{ {
auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]); auto nr = mesh.AddSegment(tmp_segments[get<0>(element_map[index])-1]);
mesh[nr].edgenr = ednr+1; mesh[nr].edgenr = ednr+1;
mesh[nr].SetBCName(mesh.GetCD2NamePtr(mesh.GetNCD2Names()));
} }
else if(dim == 2) else if(dim == 2)
{ {
Segment & seg = mesh.LineSegment(get<0>(element_map[index])); Segment & seg = mesh.LineSegment(get<0>(element_map[index]));
seg.si = bccounter; seg.si = bccounter;
seg.SetBCName(mesh.GetBCNamePtr(bccounter-1));
} }
break; break;
default: default:
@ -388,7 +384,6 @@ namespace netgen
if(seg.si == -1){ if(seg.si == -1){
seg.si = bccounter + 1; seg.si = bccounter + 1;
if(bccounter_tmp == bccounter) mesh.SetBCName(bccounter, "default"); // could be more efficient if(bccounter_tmp == bccounter) mesh.SetBCName(bccounter, "default"); // could be more efficient
seg.SetBCName(mesh.GetBCNamePtr(bccounter));
bccounter_tmp++; bccounter_tmp++;
} }
} }

View File

@ -105,11 +105,18 @@ namespace netgen
if ( mesh2.materials[i] ) materials[i] = new string ( *mesh2.materials[i] ); if ( mesh2.materials[i] ) materials[i] = new string ( *mesh2.materials[i] );
else materials[i] = 0; else materials[i] = 0;
std::map<const string*, string*> bcmap;
bcnames.SetSize( mesh2.bcnames.Size() ); bcnames.SetSize( mesh2.bcnames.Size() );
for ( int i = 0; i < mesh2.bcnames.Size(); i++ ) for ( int i = 0; i < mesh2.bcnames.Size(); i++ )
{
if ( mesh2.bcnames[i] ) bcnames[i] = new string ( *mesh2.bcnames[i] ); if ( mesh2.bcnames[i] ) bcnames[i] = new string ( *mesh2.bcnames[i] );
else bcnames[i] = 0; else bcnames[i] = 0;
bcmap[mesh2.bcnames[i]] = bcnames[i];
}
// Remap string* members in FaceDescriptor to new mesh
for (auto & f : facedecoding)
f.SetBCName( bcmap[&f.GetBCName()] );
cd2names.SetSize(mesh2.cd2names.Size()); cd2names.SetSize(mesh2.cd2names.Size());
@ -1112,18 +1119,7 @@ namespace netgen
bcnames[bcnrs[i-1]-1] = new string(nextbcname); bcnames[bcnrs[i-1]-1] = new string(nextbcname);
} }
if ( GetDimension() == 2 ) if ( GetDimension() == 3 )
{
for (i = 1; i <= GetNSeg(); i++)
{
Segment & seg = LineSegment (i);
if ( seg.si <= n )
seg.SetBCName (bcnames[seg.si-1]);
else
seg.SetBCName(0);
}
}
else
{ {
for (SurfaceElementIndex sei = 0; sei < GetNSE(); sei++) for (SurfaceElementIndex sei = 0; sei < GetNSE(); sei++)
{ {
@ -1156,17 +1152,6 @@ namespace netgen
{ {
throw NgException("co dim 2 elements not implemented for dimension 2"); throw NgException("co dim 2 elements not implemented for dimension 2");
} }
else
{
for (i = 1; i<= GetNSeg(); i++)
{
Segment & seg = LineSegment(i);
if ( seg.edgenr <= n )
seg.SetBCName (cd2names[seg.edgenr-1]);
else
seg.SetBCName(0);
}
}
} }
if (strcmp (str, "singular_points") == 0) if (strcmp (str, "singular_points") == 0)

View File

@ -80,8 +80,6 @@ namespace netgen
epgeominfo[1].edgenr = 1; epgeominfo[1].edgenr = 1;
epgeominfo[1].dist = 0; epgeominfo[1].dist = 0;
*/ */
bcname = nullptr;
} }
Segment::Segment (const Segment & other) Segment::Segment (const Segment & other)
@ -109,7 +107,6 @@ namespace netgen
geominfo[1] = other.geominfo[1]; geominfo[1] = other.geominfo[1];
epgeominfo[0] = other.epgeominfo[0]; epgeominfo[0] = other.epgeominfo[0];
epgeominfo[1] = other.epgeominfo[1]; epgeominfo[1] = other.epgeominfo[1];
bcname = other.bcname;
} }
Segment& Segment::operator=(const Segment & other) Segment& Segment::operator=(const Segment & other)
@ -135,7 +132,6 @@ namespace netgen
pnums[2] = other.pnums[2]; pnums[2] = other.pnums[2];
meshdocval = other.meshdocval; meshdocval = other.meshdocval;
hp_elnr = other.hp_elnr; hp_elnr = other.hp_elnr;
bcname = other.bcname;
is_curved = other.is_curved; is_curved = other.is_curved;
} }
@ -144,11 +140,12 @@ namespace netgen
void Segment :: DoArchive (Archive & ar) void Segment :: DoArchive (Archive & ar)
{ {
string * bcname_dummy = nullptr;
ar & pnums[0] & pnums[1] & pnums[2] ar & pnums[0] & pnums[1] & pnums[2]
& edgenr & singedge_left & singedge_right & edgenr & singedge_left & singedge_right
& si & cd2i & domin & domout & tlosurf & si & cd2i & domin & domout & tlosurf
& surfnr1 & surfnr2 & surfnr1 & surfnr2
& bcname & bcname_dummy // keep this for backward compatiblity
& epgeominfo[0].edgenr & epgeominfo[1].edgenr; & epgeominfo[0].edgenr & epgeominfo[1].edgenr;
} }

View File

@ -1031,7 +1031,6 @@ namespace netgen
// #endif // #endif
private: private:
string* bcname;
bool is_curved; bool is_curved;
public: public:
@ -1048,24 +1047,6 @@ namespace netgen
int hp_elnr; int hp_elnr;
void SetBCName ( string * abcname )
{
bcname = abcname;
}
string * BCNamePtr ()
{ return bcname; }
const string * BCNamePtr () const
{ return bcname; }
const string & GetBCName () const
{
static string defaultstring = "default";
if (! bcname ) return defaultstring;
return *bcname;
}
int GetNP() const int GetNP() const
{ {
return pnums[2].IsValid() ? 3 : 2; return pnums[2].IsValid() ? 3 : 2;