From fc49751d76605b80cb3e375e66ca9b8766530b88 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 10:47:56 +0100 Subject: [PATCH 1/6] deactivate checks so that the component can be used with a MeshTopology component --- .../mapping/Hexa2TetraTopologicalMapping.cpp | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp index 28e13d64e9b..ee181ef2d54 100644 --- a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp +++ b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp @@ -68,34 +68,34 @@ void Hexa2TetraTopologicalMapping::init() Inherit1::init(); - if (!this->checkTopologyInputTypes()) // method will display error message if false - { - this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - return; - } - - TetrahedronSetTopologyModifier* to_tstm { nullptr }; - toModel->getContext()->get(to_tstm); - if (!to_tstm) - { - msg_error() << "No TetrahedronSetTopologyModifier found in the Tetrahedron topology Node."; - this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - return; - } + // if (!this->checkTopologyInputTypes()) // method will display error message if false + // { + // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); + // return; + // } + + // TetrahedronSetTopologyModifier* to_tstm { nullptr }; + // toModel->getContext()->get(to_tstm); + // if (!to_tstm) + // { + // msg_error() << "No TetrahedronSetTopologyModifier found in the Tetrahedron topology Node."; + // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); + // return; + // } // INITIALISATION of TETRAHEDRAL mesh from HEXAHEDRAL mesh : - TetrahedronSetTopologyContainer *to_tstc { nullptr }; - toModel->getContext()->get(to_tstc); - if (!to_tstc) - { - msg_error() << "No TetrahedronSetTopologyContainer found in the Tetrahedron topology Node."; - this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - return; - } + // TetrahedronSetTopologyContainer *toModel { nullptr }; + // toModel->getContext()->get(toModel); + // if (!toModel) + // { + // msg_error() << "No TetrahedronSetTopologyContainer found in the Tetrahedron topology Node."; + // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); + // return; + // } // Clear output topology - to_tstc->clear(); + toModel->clear(); // Set the same number of points toModel->setNbPoints(fromModel->getNbPoints()); @@ -165,21 +165,21 @@ void Hexa2TetraTopologicalMapping::init() if(!swapped) { - to_tstc->addTetra(c[0],c[5],c[1],c[6]); - to_tstc->addTetra(c[0],c[1],c[3],c[6]); - to_tstc->addTetra(c[1],c[3],c[6],c[2]); - to_tstc->addTetra(c[6],c[3],c[0],c[7]); - to_tstc->addTetra(c[6],c[7],c[0],c[5]); - to_tstc->addTetra(c[7],c[5],c[4],c[0]); + toModel->addTetra(c[0],c[5],c[1],c[6]); + toModel->addTetra(c[0],c[1],c[3],c[6]); + toModel->addTetra(c[1],c[3],c[6],c[2]); + toModel->addTetra(c[6],c[3],c[0],c[7]); + toModel->addTetra(c[6],c[7],c[0],c[5]); + toModel->addTetra(c[7],c[5],c[4],c[0]); } else { - to_tstc->addTetra(c[0],c[5],c[6],c[1]); - to_tstc->addTetra(c[0],c[1],c[6],c[3]); - to_tstc->addTetra(c[1],c[3],c[2],c[6]); - to_tstc->addTetra(c[6],c[3],c[7],c[0]); - to_tstc->addTetra(c[6],c[7],c[5],c[0]); - to_tstc->addTetra(c[7],c[5],c[0],c[4]); + toModel->addTetra(c[0],c[5],c[6],c[1]); + toModel->addTetra(c[0],c[1],c[6],c[3]); + toModel->addTetra(c[1],c[3],c[2],c[6]); + toModel->addTetra(c[6],c[3],c[7],c[0]); + toModel->addTetra(c[6],c[7],c[5],c[0]); + toModel->addTetra(c[7],c[5],c[0],c[4]); } for (int j = 0; j < numberTetraInHexa; j++) { From 740e03260dc25e9b9f2d39a9e2ae0e33ac88ae64 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 11:51:33 +0100 Subject: [PATCH 2/6] the componente never use the topology modifer. It can be removed --- .../topology/mapping/Hexa2TetraTopologicalMapping.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp index ee181ef2d54..851c99c3072 100644 --- a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp +++ b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp @@ -74,15 +74,6 @@ void Hexa2TetraTopologicalMapping::init() // return; // } - // TetrahedronSetTopologyModifier* to_tstm { nullptr }; - // toModel->getContext()->get(to_tstm); - // if (!to_tstm) - // { - // msg_error() << "No TetrahedronSetTopologyModifier found in the Tetrahedron topology Node."; - // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - // return; - // } - // INITIALISATION of TETRAHEDRAL mesh from HEXAHEDRAL mesh : // TetrahedronSetTopologyContainer *toModel { nullptr }; From e46a0f10123d755c7a3373231c2f0fc6d8349ada Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 11:52:25 +0100 Subject: [PATCH 3/6] the output model does not need to be a TetrahedronSetTopologyContainer as we already have a BaseMeshTopology --- .../topology/mapping/Hexa2TetraTopologicalMapping.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp index 851c99c3072..4ee617f24ee 100644 --- a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp +++ b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp @@ -76,15 +76,6 @@ void Hexa2TetraTopologicalMapping::init() // INITIALISATION of TETRAHEDRAL mesh from HEXAHEDRAL mesh : - // TetrahedronSetTopologyContainer *toModel { nullptr }; - // toModel->getContext()->get(toModel); - // if (!toModel) - // { - // msg_error() << "No TetrahedronSetTopologyContainer found in the Tetrahedron topology Node."; - // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - // return; - // } - // Clear output topology toModel->clear(); From 8b00dcf0e8d2bc98849c3cce47509a46e3216e5e Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 11:54:15 +0100 Subject: [PATCH 4/6] check pointer --- .../topology/mapping/Hexa2TetraTopologicalMapping.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp index 4ee617f24ee..71383919cfd 100644 --- a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp +++ b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp @@ -68,6 +68,13 @@ void Hexa2TetraTopologicalMapping::init() Inherit1::init(); + if (toModel == nullptr) + { + msg_error() << "No target topology container found."; + this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); + return; + } + // if (!this->checkTopologyInputTypes()) // method will display error message if false // { // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); From 5846a1df9842d04701d76e2155a6f078b95ac73d Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 11:55:52 +0100 Subject: [PATCH 5/6] don't check topology input types because it can be an empty MeshTopology --- .../topology/mapping/Hexa2TetraTopologicalMapping.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp index 71383919cfd..e42d04d76a0 100644 --- a/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp +++ b/Sofa/Component/Topology/Mapping/src/sofa/component/topology/mapping/Hexa2TetraTopologicalMapping.cpp @@ -75,12 +75,6 @@ void Hexa2TetraTopologicalMapping::init() return; } - // if (!this->checkTopologyInputTypes()) // method will display error message if false - // { - // this->d_componentState.setValue(sofa::core::objectmodel::ComponentState::Invalid); - // return; - // } - // INITIALISATION of TETRAHEDRAL mesh from HEXAHEDRAL mesh : // Clear output topology From edf21ca44c98d04db8ffdcb91c5baa30422e8181 Mon Sep 17 00:00:00 2001 From: Alex Bilger Date: Mon, 9 Feb 2026 12:01:47 +0100 Subject: [PATCH 6/6] Replace TetrahedronSetTopology components with MeshTopology in scene files --- ...etrahedronHyperelasticityFEMForceField.scn | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/examples/Component/SolidMechanics/FEM/TetrahedronHyperelasticityFEMForceField.scn b/examples/Component/SolidMechanics/FEM/TetrahedronHyperelasticityFEMForceField.scn index 278dcc80140..fa3fdef7756 100644 --- a/examples/Component/SolidMechanics/FEM/TetrahedronHyperelasticityFEMForceField.scn +++ b/examples/Component/SolidMechanics/FEM/TetrahedronHyperelasticityFEMForceField.scn @@ -51,9 +51,7 @@ - - - + @@ -75,9 +73,7 @@ - - - + @@ -100,9 +96,7 @@ - - - + @@ -125,9 +119,7 @@ - - - + @@ -149,9 +141,7 @@ - - - +