VCG文档 - 曲面元素标记位 (Bit Flags on mesh elements)

Bit Flags

对每一个曲面, 都有一个叫做 BitFlags 的组件. 这个组件存储了一个固定尺寸的32bit的 vector . 管理 Flags 的相关类:

  • vcg::tri::UpdateFlags , 定义在 flag.h
  • vcg::tri::UpdateSelection, 定义在 selection.h

Delete Bit

IsD(),
ClearD(); // deprecated
SetD()    // deprecated

这个位标记是经常使用的. 示例见 Allocating and Deleting mesh elements.

Border Bit

IsB(),
ClearB(),
SetB()

用来标记一个顶点或者面在边界上. 这些标记位默认是不会计算的. 使用或者不使用拓扑结构都可以计算这个标记位(显然, 使用 FF 邻接关系计算这些标记位会很快).

这些位的理由是有很多算法只需要边界信息进行正确的计算,所以计算一次就足够了,而不需要用整个FF拓扑结构来加载所有的东西。

Selection Bit

IsS(), ClearS(), SetS()

Visiting Bit

IsV(), ClearV(), SetV() 是很有用的标记位. 但是不要太依赖于这个位的状态. 因为其他算法可能会更改它. 使用 tri::UpdateFlags<YourMeshClass>::VertexClear(yourMesh) 清理所有标记位.

用户自定义 Bits

如果要在存储的网格元素中分配一些私有标记位,您可以通过返回一个可用于设置,清除和测试元素的掩码的NewBitFlag()函数来执行此操作. 下面的例子为每一个面开辟和清理了三个新的标记位:

int e0bit = MyFace::NewBitFlag();
int e1bit = MyFace::NewBitFlag();
int e2bit = MyFace::NewBitFlag();
int ebit[3] = {e0bit,e1bit,e2bit};

for(MyMesh::FaceIterator fi=m.face.begin();fi!=m.face.end();++fi)
    for(int i=0;i<3;++i)
        (*fi).ClearUserBit(ebit[i]);

清理所有面的标记位可以通过
tri::UpdateFlags<YourMeshClass>::FaceClear(yourMesh,e0bit|e1bit|e2bit);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值