Skip to content

Commit

Permalink
Use single level set in lsToSurfaceMeshRefined
Browse files Browse the repository at this point in the history
  • Loading branch information
tobre1 committed Nov 18, 2024
1 parent c0008d9 commit 2e03455
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions include/viennals/lsToSurfaceMeshRefined.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ class ToSurfaceMeshRefined {
typedef typename Domain<LsNT, D>::DomainType hrleDomainType;
typedef KDTree<LsNT, std::array<LsNT, 3>> kdTreeType;

std::vector<SmartPointer<lsDomainType>> levelSets;
SmartPointer<Mesh<MeshNT>> mesh{nullptr};
SmartPointer<kdTreeType> kdTree{nullptr};
SmartPointer<lsDomainType> levelSet = nullptr;
SmartPointer<Mesh<MeshNT>> mesh = nullptr;
SmartPointer<kdTreeType> kdTree = nullptr;

const MeshNT epsilon;
const MeshNT minNodeDistanceFactor = 0.2;
Expand All @@ -38,17 +38,16 @@ class ToSurfaceMeshRefined {
SmartPointer<Mesh<MeshNT>> passedMesh,
SmartPointer<kdTreeType> passedKdTree = nullptr,
double eps = 1e-12)
: mesh(passedMesh), epsilon(eps), kdTree(passedKdTree) {
levelSets.push_back(passedLevelSet);
}
: levelSet(passedLevelSet), mesh(passedMesh), kdTree(passedKdTree),
epsilon(eps) {}

ToSurfaceMeshRefined(SmartPointer<Mesh<MeshNT>> passedMesh,
SmartPointer<kdTreeType> passedKdTree = nullptr,
double eps = 1e-12)
: mesh(passedMesh), epsilon(eps), kdTree(passedKdTree) {}
: mesh(passedMesh), kdTree(passedKdTree), epsilon(eps) {}

void insertNextLevelSet(SmartPointer<lsDomainType> passedLevelSet) {
levelSets.push_back(passedLevelSet);
void setLevelSet(SmartPointer<lsDomainType> passedLevelSet) {
levelSet = passedLevelSet;
}

void setMesh(SmartPointer<Mesh<MeshNT>> passedMesh) { mesh = passedMesh; }
Expand All @@ -62,9 +61,9 @@ class ToSurfaceMeshRefined {
}

void apply() {
if (levelSets.empty()) {
if (levelSet == nullptr) {
Logger::getInstance()
.addWarning("No level sets were passed to ToSurfaceMeshRefined.")
.addWarning("No level set was passed to ToSurfaceMeshRefined.")
.print();
return;
}
Expand All @@ -76,7 +75,7 @@ class ToSurfaceMeshRefined {
}

mesh->clear();
const auto gridDelta = levelSets.back()->getGrid().getGridDelta();
const auto gridDelta = levelSet->getGrid().getGridDelta();
const MeshNT minNodeDistance = gridDelta * minNodeDistanceFactor;
mesh->minimumExtent = Vec3D<MeshNT>{std::numeric_limits<MeshNT>::max(),
std::numeric_limits<MeshNT>::max(),
Expand All @@ -91,7 +90,7 @@ class ToSurfaceMeshRefined {

// test if level set function consists of at least 2 layers of
// defined grid points
if (levelSets.back()->getLevelSetWidth() < 2) {
if (levelSet->getLevelSetWidth() < 2) {
Logger::getInstance()
.addWarning("Levelset is less than 2 layers wide. Export might fail!")
.print();
Expand All @@ -111,7 +110,7 @@ class ToSurfaceMeshRefined {

// iterate over all active surface points
for (hrleConstSparseCellIterator<hrleDomainType> cellIt(
levelSets.back()->getDomain());
levelSet->getDomain());
!cellIt.isFinished(); cellIt.next()) {

for (int u = 0; u < D; u++) {
Expand Down

0 comments on commit 2e03455

Please sign in to comment.