在 ODA SDK 21.3 版本之前,使用 OdGiProgressiveMeshGenerator 时需要从壳数据创建渐进式网格,并且在传输初始数据后需要检查生成器的状态。如果状态不正常,则无法构建渐进式网格,或者它可能丢失了数据。因此,您必须决定是生成渐进式网格还是将原始壳数据保留在某个位置。
从 21.3 版本开始,新的 OdGiProgressiveMeshEx 类封装了 OdGiProgressiveMeshGenerator 和 OdGiProgressiveMesh。如果渐进式网格生成被取消或由于数据非流形性而未生成网格,此类别还会保留初始壳数据。
OdGiProgressiveMeshEx 类通过相同的 API 提供对渐进式网格数据和初始数据的访问。
创建渐进式网格
要创建渐进式网格,请创建 OdGiProgressiveMeshEx 的实例,用初始数据填充它,然后调用 buildProgressiveMesh 方法:
OdGiProgressiveMeshExPtr pPM = OdGiProgressiveMeshEx::createObject();
pPM->setupInitialShell( pts.size(), pts.asArrayPtr(), faces.size(), faces.asArrayPtr() );
pPM->options().setMinVertices( nMinPoints );
pPM->options().setMinFaces( nMinFaces );
pPM->buildProgressiveMesh();
您可以使用 OdGiProgressiveMeshEx::options() 方法访问 OdGiProgressiveMeshGeneratorOptions。
使用 OdGiProgressiveMeshEx::buildProgressiveMesh() 方法指定顶点、面和边数据。
OdGiProgressiveMeshEx::setGenerationAbortFlags() 方法允许您指定一组 OdGiProgressiveMeshGenerator::Status 标志,如果它们出现,则中止渐进式网格生成。
如果成功生成渐进式网格,OdGiProgressiveMeshEx::isProgressiveMeshGenerated() 方法将返回 true。如果此方法返回 false,OdGiProgressiveMeshEx 将使用初始数据,并且所有渐进式网格特定的调用(setLOD() 等)都将被忽略。
如果生成了网格,可以通过 OdGiProgressiveMeshEx::progressiveMesh() 调用获取它。
VisualizeSDK
从 Visualize SDK 21.3 版本开始,OdTvProgressiveMeshData 类封装了 OdGiProgressiveMeshEx 而不是 OdGiProgressiveMesh。因此,即使未生成网格,它仍然保留初始数据并且可以渲染。
OdTvProgressiveMeshData 类有一个新的 isProgressiveMeshGenerated() 方法,如果成功生成网格,该方法将返回 true。