Mesh: change pointer to mesh object when copying or swapping segments

This commit is contained in:
wmayer
2020-02-27 18:45:35 +01:00
parent 9ab7f49541
commit 33e87d5b2b
2 changed files with 25 additions and 3 deletions

View File

@@ -83,7 +83,7 @@ MeshObject::MeshObject(const MeshObject& mesh)
: _Mtrx(mesh._Mtrx),_kernel(mesh._kernel)
{
// copy the mesh structure
this->_segments = mesh._segments;
copySegments(mesh);
}
MeshObject::~MeshObject()
@@ -161,13 +161,33 @@ Base::BoundBox3d MeshObject::getBoundBox(void)const
return Bnd2;
}
void MeshObject::copySegments(const MeshObject& mesh)
{
// After copying the segments the mesh pointers must be adjusted
this->_segments = mesh._segments;
std::for_each(this->_segments.begin(), this->_segments.end(), [this](Segment& s) {
s._mesh = this;
});
}
void MeshObject::swapSegments(MeshObject& mesh)
{
this->_segments.swap(mesh._segments);
std::for_each(this->_segments.begin(), this->_segments.end(), [this](Segment& s) {
s._mesh = this;
});
std::for_each(mesh._segments.begin(), mesh._segments.end(), [&mesh](Segment& s) {
s._mesh = &mesh;
});
}
void MeshObject::operator = (const MeshObject& mesh)
{
if (this != &mesh) {
// copy the mesh structure
setTransform(mesh._Mtrx);
this->_kernel = mesh._kernel;
this->_segments = mesh._segments;
copySegments(mesh);
}
}
@@ -188,7 +208,7 @@ void MeshObject::swap(MeshCore::MeshKernel& Kernel)
void MeshObject::swap(MeshObject& mesh)
{
this->_kernel.Swap(mesh._kernel);
this->_segments.swap(mesh._segments);
swapSegments(mesh);
Base::Matrix4D tmp=this->_Mtrx;
this->_Mtrx = mesh._Mtrx;
mesh._Mtrx = tmp;

View File

@@ -386,6 +386,8 @@ private:
void updateMesh(const std::vector<unsigned long>&);
void updateMesh();
void swapKernel(MeshCore::MeshKernel& m, const std::vector<std::string>& g);
void copySegments(const MeshObject&);
void swapSegments(MeshObject&);
private:
Base::Matrix4D _Mtrx;