diff --git a/python_test/bitSetTest.py b/python_test/bitSetTest.py new file mode 100644 index 000000000000..cb567ed9edc5 --- /dev/null +++ b/python_test/bitSetTest.py @@ -0,0 +1,19 @@ +from helper import * + +torus = mrmesh.make_components_test_torus(2, 1, 10, 10, None) + +components = mrmesh.get_mesh_components_verts(torus, None) + +assert(len(components) == 5) +assert(components[0].count() != 0) +comp0Flip = mrmesh.VertBitSet() +comp0Flip |= components[0] +comp0Flip.flip() + +assert(comp0Flip.size() == components[0].size()) +assert(comp0Flip.count() == (components[0].size() - components[0].count())) + +xorRes = comp0Flip ^ components[0] + +assert(xorRes.size() == components[0].size()) +assert(xorRes.count() == components[0].size()) \ No newline at end of file diff --git a/python_test/shrinkExpandTest.py b/python_test/shrinkExpandTest.py new file mode 100644 index 000000000000..eff030aea331 --- /dev/null +++ b/python_test/shrinkExpandTest.py @@ -0,0 +1,24 @@ +from helper import * + +torus = mrmesh.make_components_test_torus(2, 1, 10, 10, None) + +components = mrmesh.get_mesh_components_verts(torus, None) + +assert(len(components) == 5) + +prevCount = components[0].count() +assert(prevCount != 0) + +for v in range(components[0].size()): + if components[0].test(mrmesh.VertId(v)): + components[0].set(mrmesh.VertId(v),False) + break; + +assert(components[0].count() == prevCount -1) +prevCount = components[0].count() +mrmesh.shrink_verts(torus.topology,components[0],1) +assert(components[0].count() < prevCount) + +prevCount = components[0].count() +mrmesh.expand_verts(torus.topology,components[0],1) +assert(components[0].count() > prevCount) diff --git a/source/mrmeshpy/MRPythonBaseExposing.cpp b/source/mrmeshpy/MRPythonBaseExposing.cpp index 6e33f3442569..007384a377eb 100644 --- a/source/mrmeshpy/MRPythonBaseExposing.cpp +++ b/source/mrmeshpy/MRPythonBaseExposing.cpp @@ -207,6 +207,7 @@ MR_ADD_PYTHON_CUSTOM_DEF( mrmeshpy, BoostBitSet, [] ( pybind11::module_& m ) using type = boost::dynamic_bitset; pybind11::class_( m, "BoostBitSet" ). def( "size", &type::size ). + def( "flip", ( type& ( type::* )( ) )& type::flip, pybind11::return_value_policy::reference ). def( "count", &type::count ); } ) @@ -217,7 +218,15 @@ MR_ADD_PYTHON_CUSTOM_DEF( mrmeshpy, name, [] (pybind11::module_& m)\ def( pybind11::init<>() ).\ def( "test", &type::test ).\ def( "resize", &type::resize ).\ - def( "set",( type& ( type::* )( type::IndexType, bool ) )& type::set, pybind11::return_value_policy::reference );\ + def( "set",( type& ( type::* )( type::IndexType, bool ) )& type::set, pybind11::return_value_policy::reference ).\ + def( pybind11::self & pybind11::self ).\ + def( pybind11::self | pybind11::self ).\ + def( pybind11::self ^ pybind11::self ).\ + def( pybind11::self - pybind11::self ).\ + def( pybind11::self &= pybind11::self ).\ + def( pybind11::self |= pybind11::self ).\ + def( pybind11::self ^= pybind11::self ).\ + def( pybind11::self -= pybind11::self );\ } ) ADD_PYTHON_BITSET( VertBitSet, MR::VertBitSet ) diff --git a/source/mrmeshpy/MRPythonMeshExposing.cpp b/source/mrmeshpy/MRPythonMeshExposing.cpp index bf6ebe6ef6d1..355b0cf88014 100644 --- a/source/mrmeshpy/MRPythonMeshExposing.cpp +++ b/source/mrmeshpy/MRPythonMeshExposing.cpp @@ -12,6 +12,7 @@ #include "MRMesh/MRBoolean.h" #include "MRMesh/MRMeshMetrics.h" #include "MRMesh/MRMeshBuilder.h" +#include "MRMesh/MRExpandShrink.h" using namespace MR; @@ -41,6 +42,12 @@ MR_ADD_PYTHON_FUNCTION( mrmeshpy, get_selected_mesh, pythonGetSelectedMesh, "get MR_ADD_PYTHON_FUNCTION( mrmeshpy, set_mesh_to_selected, pythonSetMeshToSelected, "sets mesh to selected ObjectMesh" ) +MR_ADD_PYTHON_FUNCTION( mrmeshpy, expand_verts, ( void( * )( const MeshTopology&, VertBitSet&, int ) )& expand, "expand vert bit set" ) +MR_ADD_PYTHON_FUNCTION( mrmeshpy, shrink_verts, ( void( * )( const MeshTopology&, VertBitSet&, int ) )& shrink, "shrink vert bit set" ) + +MR_ADD_PYTHON_FUNCTION( mrmeshpy, expand_faces, ( void( * )( const MeshTopology&, FaceBitSet&, int ) )& expand, "expand face bit set" ) +MR_ADD_PYTHON_FUNCTION( mrmeshpy, shrink_faces, ( void( * )( const MeshTopology&, FaceBitSet&, int ) )& shrink, "shrink face bit set" ) + MR_ADD_PYTHON_CUSTOM_DEF( mrmeshpy, MeshTopology, [] ( pybind11::module_& m ) { pybind11::class_( m, "MeshTopology" ).