Skip to content

Commit 0da5a7a

Browse files
committed
[algorithm] Using containsPoint operations in the insertion algorithm class - no dynamic casts to elements
1 parent 0a932e0 commit 0da5a7a

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

src/sofa/collisionAlgorithm/algorithm/InsertionAlgorithm.h

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <sofa/collisionAlgorithm/operations/CreateCenterProximity.h>
77
#include <sofa/collisionAlgorithm/operations/FindClosestProximity.h>
88
#include <sofa/collisionAlgorithm/operations/Project.h>
9+
#include <sofa/collisionAlgorithm/operations/ContainsPoint.h>
910
#include <sofa/collisionAlgorithm/proximity/EdgeProximity.h>
1011
#include <sofa/collisionAlgorithm/proximity/TetrahedronProximity.h>
1112
#include <sofa/component/constraint/lagrangian/solver/ConstraintSolverImpl.h>
@@ -224,24 +225,17 @@ class InsertionAlgorithm : public BaseAlgorithm
224225
auto projectOnVol = Operations::Project::Operation::get(l_volGeom);
225226
const BaseProximity::SPtr volProx =
226227
findClosestProxOnVol(tipProx, l_volGeom.get(), projectOnVol, getFilterFunc());
228+
227229
// Proximity can be detected before the tip enters the tetra (e.g. near a boundary face)
228230
// Only accept proximities if the tip is inside the tetra during insertion
229231
if (volProx)
230232
{
231-
TetrahedronProximity::SPtr tetProx =
232-
dynamic_pointer_cast<TetrahedronProximity>(volProx);
233-
if (tetProx)
233+
auto containsPointInVol = Operations::ContainsPointInProximity::Operation::get(
234+
l_volGeom->getTypeInfo());
235+
if(containsPointInVol(tipProx->getPosition(), volProx))
234236
{
235-
double f0(tetProx->f0()), f1(tetProx->f1()), f2(tetProx->f2()),
236-
f3(tetProx->f3());
237-
bool isInTetra = toolbox::TetrahedronToolBox::isInTetra(
238-
tipProx->getPosition(), tetProx->element()->getTetrahedronInfo(), f0,
239-
f1, f2, f3);
240-
if (isInTetra)
241-
{
242-
volProx->normalize();
243-
m_couplingPts.push_back(volProx);
244-
}
237+
volProx->normalize();
238+
m_couplingPts.push_back(volProx);
245239
}
246240
}
247241
}

0 commit comments

Comments
 (0)