24static_assert(
sizeof( OutEdge2 ) == 1 );
26static const std::initializer_list<OutEdge2>
allOutEdges2 = { OutEdge2::PlusY, OutEdge2::MinusY, OutEdge2::PlusX, OutEdge2::MinusX };
30 const static std::array<OutEdge2, 5> map{ OutEdge2::Invalid, OutEdge2::MinusY, OutEdge2::PlusY, OutEdge2::MinusX, OutEdge2::PlusX };
31 return map[ (size_t)e + 1 ];
43 const Vector2i & dims()
const {
return dims_; }
44 size_t size()
const {
return size_; }
45 Vector2i toPos(
PixelId id )
const { assert(
id.valid() );
return toPos(
size_t(
int(
id ) ) ); }
50 bool areNeigbors(
PixelId v0,
PixelId v1 )
const {
return areNeigbors( toPos( v0 ), toPos( v1 ) ); }
51 bool areNeigbors(
const Vector2i & pos0,
const Vector2i & pos1 )
const {
return ( pos0 - pos1 ).lengthSq() == 1; }
53 PixelId getNeighbor(
PixelId v, OutEdge2 toNei )
const {
return getNeighbor( v, toPos( v ), toNei ); }
69 size_ = size_t( dims_.x ) * dims_.y;
72inline Vector2i RectIndexer::toPos(
size_t id )
const
74 int y = int(
id) / dims_.x;
75 int x = int(
id) % dims_.x;
81 return pos.x + pos.y * size_t(dims_.x);
#define MRMESH_API
Definition MRMeshFwd.h:80
unsafe void resize(in MR.Vector2i dims)
static constexpr int OutEdge2Count
Definition MRRectIndexer.h:34
MRMESH_API void expandPixelMask(PixelBitSet &mask, const RectIndexer &indexer, int expansion=1)
expands PixelBitSet with given number of steps
OutEdge2 opposite(OutEdge2 e)
Definition MRRectIndexer.h:28
OutEdge2
Definition MRRectIndexer.h:15
MRMESH_API void shrinkPixelMask(PixelBitSet &mask, const RectIndexer &indexer, int shrinkage=1)
shrinks PixelBitSet with given number of steps
size_t toIndex(const Vector2i &pos) const
Definition MRRectIndexer.h:79
static const std::initializer_list< OutEdge2 > allOutEdges2
Definition MRRectIndexer.h:26
Definition MRCameraOrientationPlugin.h:8