Skip to content

Commit b820083

Browse files
committed
Multiblock objects can be cloned.
1 parent 4f13ebc commit b820083

File tree

4 files changed

+22
-19
lines changed

4 files changed

+22
-19
lines changed

GeomLib/GMultiBox.cpp

+11-3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ GMultiBox::GMultiBox(GObject *po) : GObject(GMULTI_BLOCK)
4949
// copy the name
5050
SetName(po->GetName());
5151

52+
// copy the transform
53+
GetTransform() = po->GetTransform();
54+
5255
// creating a new object has increased the object counter
5356
// so we need to decrease it again
5457
GItem_T<GBaseObject>::DecreaseCounter();
@@ -64,7 +67,7 @@ GMultiBox::GMultiBox(GObject *po) : GObject(GMULTI_BLOCK)
6467
bool b = mb->BuildMultiBlock(); assert(b);
6568

6669
// copy it to the multiblock mesh
67-
mbMesher->SetMultiBlockMesh(*mb);
70+
mbMesher->CopyFrom(*mb);
6871

6972
// next, we pull the geometry info from the multiblock
7073
// --- Nodes ---
@@ -306,11 +309,16 @@ bool GMultiBox::DeletePart(GPart* pg)
306309
FEMultiBlockMesher* mbMesher = dynamic_cast<FEMultiBlockMesher*>(GetFEMesher()); assert(mbMesher);
307310

308311
// Get the multiblock mesh
309-
FEMultiBlockMesh& mb = mbMesher->GetMultiBlockMesh();
310-
mb.DeleteBlock(lid);
312+
mbMesher->DeleteBlock(lid);
311313

312314
// rebuild the GMesh
313315
BuildGMesh();
314316

315317
return true;
316318
}
319+
320+
GObject* GMultiBox::Clone()
321+
{
322+
GMultiBox* clone = new GMultiBox(this);
323+
return clone;
324+
}

GeomLib/GMultiBox.h

+1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,5 @@ class GMultiBox : public GObject
4343

4444
FEMeshBase* GetEditableMesh() override;
4545

46+
GObject* Clone() override;
4647
};

MeshTools/FEMultiBlockMesh.cpp

+6-10
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ void FEMultiBlockMesh::operator = (const FEMultiBlockMesh& mb)
7979
//-----------------------------------------------------------------------------
8080
void FEMultiBlockMesh::CopyFrom(const FEMultiBlockMesh& mb)
8181
{
82-
Clear();
82+
ClearMB();
8383
m_MBNode = mb.m_MBNode;
8484
m_MBEdge = mb.m_MBEdge;
8585
m_MBFace = mb.m_MBFace;
@@ -1747,22 +1747,18 @@ FEMultiBlockMesher::FEMultiBlockMesher(GMultiBox* po) : m_po(po)
17471747
AddIntParam(0, "elem", "Element Type")->SetEnumNames("Hex8\0Hex20\0Hex27\0");
17481748
}
17491749

1750-
void FEMultiBlockMesher::SetMultiBlockMesh(const FEMultiBlockMesh& mb)
1750+
bool FEMultiBlockMesher::BuildMultiBlock()
17511751
{
1752-
m_mb = mb;
1753-
}
1754-
1755-
FEMultiBlockMesh& FEMultiBlockMesher::GetMultiBlockMesh()
1756-
{
1757-
return m_mb;
1752+
// we assume that the MB is valid
1753+
return true;
17581754
}
17591755

17601756
FEMesh* FEMultiBlockMesher::BuildMesh()
17611757
{
17621758
if (m_po == nullptr) return nullptr;
17631759
GMultiBox& o = *m_po;
17641760

1765-
FEMultiBlockMesh& mb = m_mb;
1761+
FEMultiBlockMesh& mb = *this;
17661762
int nd = GetIntValue(DIVS);
17671763
for (int i = 0; i < mb.Blocks(); ++i)
17681764
{
@@ -1787,5 +1783,5 @@ FEMesh* FEMultiBlockMesher::BuildMesh()
17871783
assert(false);
17881784
}
17891785

1790-
return m_mb.BuildMesh();
1786+
return FEMultiBlockMesh::BuildMesh();
17911787
}

MeshTools/FEMultiBlockMesh.h

+4-6
Original file line numberDiff line numberDiff line change
@@ -395,19 +395,17 @@ class Sampler1D
395395

396396
class GMultiBox;
397397

398-
class FEMultiBlockMesher : public FEMesher
398+
class FEMultiBlockMesher : public FEMultiBlockMesh
399399
{
400400
enum { DIVS, ELEM_TYPE };
401401

402402
public:
403403
FEMultiBlockMesher(GMultiBox* po);
404404

405-
void SetMultiBlockMesh(const FEMultiBlockMesh& mb);
406-
407-
FEMultiBlockMesh& GetMultiBlockMesh();
408-
409405
// build the mesh
410-
FEMesh* BuildMesh();
406+
FEMesh* BuildMesh() override;
407+
408+
bool BuildMultiBlock() override;
411409

412410
private:
413411
GMultiBox* m_po;

0 commit comments

Comments
 (0)