From f2761b77bf8f25d0dbefd4a92f0fa22d36dd2422 Mon Sep 17 00:00:00 2001 From: Hugo Talbot Date: Fri, 8 Apr 2022 16:51:41 +0200 Subject: [PATCH 1/6] [SofaBaseMechanics] Fix point topological changes for UniformMass --- .../src/sofa/component/mass/UniformMass.inl | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl index 321cb32ebc2..da5770748b1 100644 --- a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl +++ b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl @@ -179,7 +179,28 @@ 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) { + /// Computations to be done when points are added + d_indices.addTopologyEventCallBack(sofa::core::topology::TopologyChangeType::POINTSADDED, [this](const core::topology::TopologyChange* eventTopo) { + WriteAccessor > indices = d_indices; + const core::topology::PointsAdded* pointsAdded = static_cast(eventTopo); + auto& addedIndices = pointsAdded->getIndexArray(); + + for (unsigned i = 0; i > indices = d_indices; + const core::topology::PointsRemoved* pointsRemoved = static_cast(eventTopo); + auto& removedIndices = pointsRemoved->getArray(); + + for (unsigned i = 0; i Date: Fri, 8 Apr 2022 16:51:58 +0200 Subject: [PATCH 2/6] add override to avoid massive warnings --- .../Core/src/sofa/core/topology/TopologySubsetIndices.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From b5e22660e80283f9e65881bbdde47a19855d8cf0 Mon Sep 17 00:00:00 2001 From: Hugo Talbot Date: Fri, 8 Apr 2022 16:52:37 +0200 Subject: [PATCH 3/6] add box in scene to allow seeing the mesh --- .../TopologicalModifiers/AddingPointInTriangleProcess.scn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 @@ - + From 4d23438f22a5affb3106869d636f7943b3dfa28c Mon Sep 17 00:00:00 2001 From: epernod Date: Thu, 14 Apr 2022 11:00:18 +0200 Subject: [PATCH 4/6] [Mass] Fix UniformMass callback when adding new points. --- .../src/sofa/component/mass/UniformMass.inl | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl index da5770748b1..9a83da8d333 100644 --- a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl +++ b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl @@ -179,28 +179,22 @@ void UniformMass::initDefaultImpl() msg_info() << "Topology path used: '" << l_topology.getLinkedPath() << "'"; d_indices.createTopologyHandler(meshTopology); - /// Computations to be done when points are added - d_indices.addTopologyEventCallBack(sofa::core::topology::TopologyChangeType::POINTSADDED, [this](const core::topology::TopologyChange* eventTopo) { - WriteAccessor > indices = d_indices; - const core::topology::PointsAdded* pointsAdded = static_cast(eventTopo); - auto& addedIndices = pointsAdded->getIndexArray(); + d_indices.supportNewElements(true); - for (unsigned i = 0; i& ancestors, + const sofa::type::vector< SReal >& coefs) + { + SOFA_UNUSED(point); + SOFA_UNUSED(ancestors); + SOFA_UNUSED(coefs); + valueIndex = dataIndex; }); - /// Computations to be done when points are removed - d_indices.addTopologyEventCallBack(sofa::core::topology::TopologyChangeType::POINTSREMOVED, [this](const core::topology::TopologyChange* eventTopo) { - WriteAccessor > indices = d_indices; - const core::topology::PointsRemoved* pointsRemoved = static_cast(eventTopo); - auto& removedIndices = pointsRemoved->getArray(); - for (unsigned i = 0; i Date: Thu, 14 Apr 2022 10:36:14 +0200 Subject: [PATCH 5/6] [Mass] Update scene and tests, handleTopologicalChanges is not anymore an option of UniformMass. Support is automatic if the mass is linked to a dynamic topology --- .../SolidMechanics/FEM/Elastic/tests/BeamFEMForceField_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 0367737943c6fb9718b4dc6457765e8a0cfc9622 Mon Sep 17 00:00:00 2001 From: erik pernod Date: Fri, 13 May 2022 20:01:51 +0200 Subject: [PATCH 6/6] Fix bad merge --- Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl b/Sofa/Component/Mass/src/sofa/component/mass/UniformMass.inl index 9a83da8d333..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,7 @@ void UniformMass::initDefaultImpl() msg_info() << "Topology path used: '" << l_topology.getLinkedPath() << "'"; d_indices.createTopologyHandler(meshTopology); - d_indices.supportNewElements(true); + 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,