本文整理汇总了C++中GenericChunkedArray::currentSize方法的典型用法代码示例。如果您正苦于以下问题:C++ GenericChunkedArray::currentSize方法的具体用法?C++ GenericChunkedArray::currentSize怎么用?C++ GenericChunkedArray::currentSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GenericChunkedArray
的用法示例。
在下文中一共展示了GenericChunkedArray::currentSize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: samplePoints
ccPointCloud* ccGenericMesh::samplePoints( bool densityBased,
double samplingParameter,
bool withNormals,
bool withRGB,
bool withTexture,
CCLib::GenericProgressCallback* pDlg/*=0*/)
{
bool withFeatures = (withNormals || withRGB || withTexture);
GenericChunkedArray<1,unsigned>* triIndices = (withFeatures ? new GenericChunkedArray<1,unsigned> : 0);
CCLib::SimpleCloud* sampledCloud = 0;
if (densityBased)
{
sampledCloud = CCLib::MeshSamplingTools::samplePointsOnMesh(this,samplingParameter,pDlg,triIndices);
}
else
{
sampledCloud = CCLib::MeshSamplingTools::samplePointsOnMesh(this,static_cast<unsigned>(samplingParameter),pDlg,triIndices);
}
//convert to real point cloud
ccPointCloud* cloud = 0;
if (sampledCloud)
{
cloud = ccPointCloud::From(sampledCloud);
delete sampledCloud;
sampledCloud = 0;
}
if (!cloud)
{
if (triIndices)
triIndices->release();
ccLog::Warning("[ccGenericMesh::samplePoints] Not enough memory!");
return 0;
}
if (withFeatures && triIndices && triIndices->currentSize() >= cloud->size())
{
//generate normals
if (withNormals && hasNormals())
{
if (cloud->reserveTheNormsTable())
{
for (unsigned i=0; i<cloud->size(); ++i)
{
unsigned triIndex = triIndices->getValue(i);
const CCVector3* P = cloud->getPoint(i);
CCVector3 N(0,0,1);
interpolateNormals(triIndex,*P,N);
cloud->addNorm(N);
}
cloud->showNormals(true);
}
else
{
ccLog::Warning("[ccGenericMesh::samplePoints] Failed to interpolate normals (not enough memory?)");
}
}
//generate colors
if (withTexture && hasMaterials())
{
if (cloud->reserveTheRGBTable())
{
for (unsigned i=0; i<cloud->size(); ++i)
{
unsigned triIndex = triIndices->getValue(i);
const CCVector3* P = cloud->getPoint(i);
colorType C[3]={MAX_COLOR_COMP,MAX_COLOR_COMP,MAX_COLOR_COMP};
getColorFromMaterial(triIndex,*P,C,withRGB);
cloud->addRGBColor(C);
}
cloud->showColors(true);
}
else
{
ccLog::Warning("[ccGenericMesh::samplePoints] Failed to export texture colors (not enough memory?)");
}
}
else if (withRGB && hasColors())
{
if (cloud->reserveTheRGBTable())
{
for (unsigned i=0; i<cloud->size(); ++i)
{
unsigned triIndex = triIndices->getValue(i);
const CCVector3* P = cloud->getPoint(i);
colorType C[3] = { MAX_COLOR_COMP, MAX_COLOR_COMP, MAX_COLOR_COMP };
interpolateColors(triIndex,*P,C);
cloud->addRGBColor(C);
}
//.........这里部分代码省略.........