diff --git a/Libs/Optimize/Domain/MeshDomain.cpp b/Libs/Optimize/Domain/MeshDomain.cpp index 20ada028a9..a695bc90ce 100644 --- a/Libs/Optimize/Domain/MeshDomain.cpp +++ b/Libs/Optimize/Domain/MeshDomain.cpp @@ -35,6 +35,19 @@ MeshDomain::PointType MeshDomain::UpdateParticlePosition(const PointType &point, return newPoint; } +//------------------------------------------------------------------- +MeshDomain::PointType MeshDomain::GetPositionAfterSplit(const PointType &pt, + const VectorDoubleType &local_direction, + const VectorDoubleType &global_direction, + double epsilon) const { + VectorDoubleType update; + for (unsigned int k = 0; k < DIMENSION; k++) { + // Negate here because UpdateParticlePosition negates before calling geodesic_walk + update[k] = -epsilon * local_direction[k] / 5.0; + } + return UpdateParticlePosition(pt, -1, update); +} + //------------------------------------------------------------------- double MeshDomain::GetMaxDiameter() const { // todo should this not be the length of the bounding box diagonal? diff --git a/Libs/Optimize/Domain/MeshDomain.h b/Libs/Optimize/Domain/MeshDomain.h index 0da464aa12..aaf7d0b768 100644 --- a/Libs/Optimize/Domain/MeshDomain.h +++ b/Libs/Optimize/Domain/MeshDomain.h @@ -17,6 +17,8 @@ class MeshDomain : public ParticleDomain { bool ApplyVectorConstraints(VectorDoubleType &gradE, const PointType &pos) const; VectorDoubleType ProjectVectorToSurfaceTangent(VectorDoubleType &gradE, const PointType &pos, int idx) const override; PointType UpdateParticlePosition(const PointType &point, int idx, VectorDoubleType &update) const override; + PointType GetPositionAfterSplit(const PointType &pt, const VectorDoubleType &local_direction, + const VectorDoubleType &global_direction, double epsilon) const override; virtual void InvalidateParticlePosition(int idx) const override;