本文整理汇总了C++中sofa::helper::vector::size方法的典型用法代码示例。如果您正苦于以下问题:C++ vector::size方法的具体用法?C++ vector::size怎么用?C++ vector::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sofa::helper::vector
的用法示例。
在下文中一共展示了vector::size方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: removeQuadsProcess
void QuadSetTopologyModifier::removeQuadsProcess(const sofa::helper::vector<unsigned int> &indices,
const bool removeIsolatedEdges,
const bool removeIsolatedPoints)
{
if(!m_container->hasQuads()) // this method should only be called when quads exist
{
#ifndef NDEBUG
sout << "Error. [QuadSetTopologyModifier::removeQuadsProcess] quad array is empty." << sendl;
#endif
return;
}
if(m_container->hasEdges() && removeIsolatedEdges)
{
if(!m_container->hasEdgesInQuad())
m_container->createEdgesInQuadArray();
if(!m_container->hasQuadsAroundEdge())
m_container->createQuadsAroundEdgeArray();
}
if(removeIsolatedPoints)
{
if(!m_container->hasQuadsAroundVertex())
m_container->createQuadsAroundVertexArray();
}
sofa::helper::vector<unsigned int> edgeToBeRemoved;
sofa::helper::vector<unsigned int> vertexToBeRemoved;
helper::WriteAccessor< Data< sofa::helper::vector<Quad> > > m_quad = m_container->d_quad;
unsigned int lastQuad = m_container->getNumberOfQuads() - 1;
for(unsigned int i=0; i<indices.size(); ++i, --lastQuad)
{
const Quad &t = m_quad[ indices[i] ];
const Quad &q = m_quad[ lastQuad ];
// first check that the quad vertex shell array has been initialized
if(m_container->hasQuadsAroundVertex())
{
for(unsigned int v=0; v<4; ++v)
{
sofa::helper::vector< unsigned int > &shell = m_container->m_quadsAroundVertex[ t[v] ];
shell.erase(remove(shell.begin(), shell.end(), indices[i]), shell.end());
if(removeIsolatedPoints && shell.empty())
vertexToBeRemoved.push_back(t[v]);
}
}
if(m_container->hasQuadsAroundEdge())
{
for(unsigned int e=0; e<4; ++e)
{
sofa::helper::vector< unsigned int > &shell = m_container->m_quadsAroundEdge[ m_container->m_edgesInQuad[indices[i]][e]];
shell.erase(remove(shell.begin(), shell.end(), indices[i]), shell.end());
if(removeIsolatedEdges && shell.empty())
edgeToBeRemoved.push_back(m_container->m_edgesInQuad[indices[i]][e]);
}
}
if(indices[i] < lastQuad)
{
// now updates the shell information of the quad at the end of the array
if(m_container->hasQuadsAroundVertex())
{
for(unsigned int v=0; v<4; ++v)
{
sofa::helper::vector< unsigned int > &shell = m_container->m_quadsAroundVertex[ q[v] ];
replace(shell.begin(), shell.end(), lastQuad, indices[i]);
}
}
if(m_container->hasQuadsAroundEdge())
{
for(unsigned int e=0; e<4; ++e)
{
sofa::helper::vector< unsigned int > &shell = m_container->m_quadsAroundEdge[ m_container->m_edgesInQuad[lastQuad][e]];
replace(shell.begin(), shell.end(), lastQuad, indices[i]);
}
}
}
// removes the edgesInQuads from the edgesInQuadsArray
if(m_container->hasEdgesInQuad())
{
m_container->m_edgesInQuad[ indices[i] ] = m_container->m_edgesInQuad[ lastQuad ]; // overwriting with last valid value.
m_container->m_edgesInQuad.resize( lastQuad ); // resizing to erase multiple occurence of the quad.
}
// removes the quad from the quadArray
m_quad[ indices[i] ] = m_quad[ lastQuad ]; // overwriting with last valid value.
m_quad.resize( lastQuad ); // resizing to erase multiple occurence of the quad.
}
if(!edgeToBeRemoved.empty())
{
/// warn that edges will be deleted
removeEdgesWarning(edgeToBeRemoved);
propagateTopologicalChanges();
/// actually remove edges without looking for isolated vertices
//.........这里部分代码省略.........