diff --git a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl index 321cb32ebc2..ca54f3bcfb0 100644 --- a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl +++ b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl @@ -179,7 +179,22 @@ void UniformMass::initDefaultImpl() msg_info() << "Topology path used: '" << l_topology.getLinkedPath() << "'"; d_indices.createTopologyHandler(meshTopology); - d_indices.addTopologyEventCallBack(sofa::core::topology::TopologyChangeType::ENDING_EVENT, [this](const core::topology::TopologyChange* eventTopo) { + d_indices.supportNewTopologyElements(true); + + // Need to create a call back to assign index of new point into the topologySubsetData. Deletion is automatically handle. + d_indices.setCreationCallback([this](Index dataIndex, Index& valueIndex, + const core::topology::BaseMeshTopology::Point& point, + const sofa::type::vector< Index >& ancestors, + const sofa::type::vector< SReal >& coefs) + { + SOFA_UNUSED(point); + SOFA_UNUSED(ancestors); + SOFA_UNUSED(coefs); + valueIndex = dataIndex; + }); + + d_indices.addTopologyEventCallBack(sofa::core::topology::TopologyChangeType::ENDING_EVENT, [this](const core::topology::TopologyChange* eventTopo) + { updateMassOnResize(d_indices.getValue().size()); }); } diff --git a/Sofa/Component/SolidMechanics/FEM/Elastic/tests/BeamFEMForceField_test.cpp b/Sofa/Component/SolidMechanics/FEM/Elastic/tests/BeamFEMForceField_test.cpp index 474bacb79ed..844cc71ef4c 100644 --- a/Sofa/Component/SolidMechanics/FEM/Elastic/tests/BeamFEMForceField_test.cpp +++ b/Sofa/Component/SolidMechanics/FEM/Elastic/tests/BeamFEMForceField_test.cpp @@ -92,7 +92,7 @@ class BeamFEMForceField_test : public BaseTest createObject(m_root, "EdgeSetGeometryAlgorithms", { {"template","Rigid3d"} }); createObject(m_root, "BeamFEMForceField", { {"Name","Beam"}, {"template", "Rigid3d"}, {"radius", str(radius)}, {"youngModulus", str(youngModulus)}, {"poissonRatio", str(poissonRatio)} }); - createObject(m_root, "UniformMass", { {"name","mass"}, {"totalMass","1.0"}, {"handleTopologicalChanges", "1" } }); + createObject(m_root, "UniformMass", { {"name","mass"}, {"totalMass","1.0"} }); createObject(m_root, "FixedConstraint", { {"name","fix"}, {"indices","0"} }); /// Init simulation diff --git a/Sofa/framework/Core/src/sofa/core/topology/TopologySubsetIndices.h b/Sofa/framework/Core/src/sofa/core/topology/TopologySubsetIndices.h index f46e27c5705..2ecc3bdb390 100644 --- a/Sofa/framework/Core/src/sofa/core/topology/TopologySubsetIndices.h +++ b/Sofa/framework/Core/src/sofa/core/topology/TopologySubsetIndices.h @@ -50,7 +50,7 @@ class SOFA_CORE_API TopologySubsetIndices : public sofa::core::topology::Topolog void createTopologyHandler(sofa::core::topology::BaseMeshTopology* _topology) override; SOFA_ATTRIBUTE_DISABLED("v21.12 (PR#2393)", "v21.12 (PR#2393)", "This method has been removed, TopologyHandler is now created internally. Method createTopologyHandler(BaseMeshTopology*) should be used.") - void createTopologyHandler(sofa::core::topology::BaseMeshTopology* _topology, sofa::core::topology::TopologyDataHandler < core::topology::BaseMeshTopology::Point, type::vector >* topoEngine) = delete; + void createTopologyHandler(sofa::core::topology::BaseMeshTopology* _topology, sofa::core::topology::TopologyDataHandler < core::topology::BaseMeshTopology::Point, type::vector >* topoEngine) override = delete; protected: void swapPostProcess(Index i1, Index i2) override; diff --git a/examples/Components/topology/TopologicalModifiers/AddingPointInTriangleProcess.scn b/examples/Components/topology/TopologicalModifiers/AddingPointInTriangleProcess.scn index 152a5c4a6c7..2f35ed4f015 100644 --- a/examples/Components/topology/TopologicalModifiers/AddingPointInTriangleProcess.scn +++ b/examples/Components/topology/TopologicalModifiers/AddingPointInTriangleProcess.scn @@ -1,4 +1,4 @@ - +