为所有openvdb :: Grid节点设置/取消设置活动状态

时间:2014-09-19 13:47:15

标签: c++ sparse-matrix voxel

我有一个openvdb网格,我想重置所有不是背景的体素的活动状态。

目前我正在使用一个运算符和函数openvdb :: tools :: foreach,它遍历所有值节点。 特别是我可能只想对给定边界框内的元素进行操作

openvdb::CoordBBox myBoundingBox;

struct Activator {
    static inline void op(const openvdb::FloatGrid::ValueAllIter& iter) {

        if ( [not background] )
          iter->setActiveState(myBoundingBox.isInside(iter->getCoord()));
    }
};

// Apply the function to all values.
openvdb::tools::foreach(grid->beginValueAll(), Activator ::op);

1)是否有更好的方法可以开启/关闭所有这些体素?

2)此外,可以快速设置打开(或关闭)与给定轴对齐的边界框并且不是背景的所有体素?

例如

openvdb::tree::setActiveState(const CoordBBox &bbox, bool on)

1 个答案:

答案 0 :(得分:0)

openvdb :: Grid公开了以下可能在这种情况下有用的方法

void clear()

清空此网格,以便所有体素变为非活动背景体素。

void fill   (   const CoordBBox &   bbox,
                const ValueType &   value,
                bool                active = true 
             ) 

将给定轴对齐框内的所有体素设置为常量值。