diff --git a/doxygen/examples/MeshResolveDegenerations.dox b/doxygen/examples/MeshResolveDegenerations.dox
index 0746028634e5..a32832e615e4 100644
--- a/doxygen/examples/MeshResolveDegenerations.dox
+++ b/doxygen/examples/MeshResolveDegenerations.dox
@@ -8,6 +8,9 @@ Example of resolving degenerated faces
- C
\include MeshResolveDegenerations.dox.c
+- Python
+\include MeshResolveDegenerations.dox.py
+
*/
\ No newline at end of file
diff --git a/examples/python-examples/MeshModification.dox.py b/examples/python-examples/MeshModification.dox.py
index b3d53c704da0..e976eaa12873 100644
--- a/examples/python-examples/MeshModification.dox.py
+++ b/examples/python-examples/MeshModification.dox.py
@@ -2,7 +2,7 @@
import meshlib.mrmeshpy as mrmeshpy
-mesh = mrmeshpy.loadMesh("mesh.stl")
+mesh = mrmeshpy.makeTorus()
relax_params = mrmeshpy.MeshRelaxParams()
relax_params.iterations = 5
diff --git a/examples/python-examples/MeshResolveDegenerations.dox.py b/examples/python-examples/MeshResolveDegenerations.dox.py
new file mode 100644
index 000000000000..ea22fd9d8684
--- /dev/null
+++ b/examples/python-examples/MeshResolveDegenerations.dox.py
@@ -0,0 +1,18 @@
+import meshlib.mrmeshpy as mrmeshpy
+
+mesh = mrmeshpy.loadMesh("mesh.ctm")
+
+# You can set various parameters for the resolving process; see the documentation for more info
+params = mrmeshpy.ResolveMeshDegenSettings()
+# maximum permitted deviation
+params.maxDeviation = 1e-5 * mesh.computeBoundingBox().diagonal()
+# maximum length of edges to be collapsed
+params.tinyEdgeLength = 1e-3
+
+is_changed = mrmeshpy.resolveMeshDegenerations(mesh, params)
+
+if is_changed:
+ print("Mesh was changed, saving")
+ mrmeshpy.saveMesh(mesh, "mesh_fixed.ctm")
+else:
+ print("Mesh was not changed")
diff --git a/test_regression/test_doc_samples/test_doc_samples.py b/test_regression/test_doc_samples/test_doc_samples.py
index aaf40b2d9136..06db010a81e0 100644
--- a/test_regression/test_doc_samples/test_doc_samples.py
+++ b/test_regression/test_doc_samples/test_doc_samples.py
@@ -32,7 +32,7 @@
'output_meshes': ['meshA_icp.stl']}, id="MeshICP.dox.py"),
pytest.param({'sample': "MeshLoadSave.dox.py", 'input_meshes': ['mesh.stl'],
'output_meshes': ['mesh.ply']}, id="MeshLoadSave.dox.py"),
- pytest.param({'sample': "MeshModification.dox.py", 'input_meshes': ['mesh.stl'],
+ pytest.param({'sample': "MeshModification.dox.py", 'input_meshes': [],
'output_meshes': []}, id="MeshModification.dox.py"),
pytest.param({'sample': "MeshOffset.dox.py", 'input_meshes': ['mesh.stl'],
'output_meshes': ['offsetMesh.stl']}, id="MeshOffset.dox.py"),
@@ -43,6 +43,10 @@
'output_meshes': ['noised_mesh.stl', 'denoised_mesh.stl']},
id="NoiseDenoiseExample.dox.py",
marks=pytest.mark.bindingsV3),
+ pytest.param({'sample': "MeshResolveDegenerations.dox.py", 'input_meshes': ['mesh.ctm'],
+ 'output_meshes': ['mesh_fixed.ctm']},
+ id="MeshResolveDegenerations.dox.py",
+ marks=pytest.mark.bindingsV3),
pytest.param({'sample': "Numpy.dox.py", 'input_meshes': [], 'output_meshes': []},
id="Numpy.dox.py"),
pytest.param(