KHalfEdgeMeshPrivate::FaceIndex KHalfEdgeMeshPrivate::addFace(index_array &v1, index_array &v2, index_array &v3) { // Normalize Indices size_t size = m_vertices.size() + 1; // Normalize Indices normalizeIndex(v1[0], size); normalizeIndex(v2[0], size); normalizeIndex(v3[0], size); // Create edges HalfEdgeIndex edgeA = getHalfEdge(v1, v2); HalfEdgeIndex edgeB = getHalfEdge(v2, v3); HalfEdgeIndex edgeC = getHalfEdge(v3, v1); // Create Face m_faces.emplace_back(edgeA); FaceIndex faceIdx = FaceIndex(static_cast<index_type>(m_faces.size())); // Initialize Inner Half Edges initializeInnerHalfEdge(edgeA, faceIdx, edgeB); initializeInnerHalfEdge(edgeB, faceIdx, edgeC); initializeInnerHalfEdge(edgeC, faceIdx, edgeA); // Set Vertex half edges if (vertex(v1[0])->to == 0) vertex(v1[0])->to = edgeA; if (vertex(v2[0])->to == 0) vertex(v2[0])->to = edgeB; if (vertex(v3[0])->to == 0) vertex(v3[0])->to = edgeC; return faceIdx; }
void CircularBuffer::showList( void ) { for( int i = 0; i < m_itemCount; ++i ) { int thisIndex = normalizeIndex( m_insertPoint - m_itemCount + i ); std::cout << m_buf[ thisIndex ] << std::endl; } }
void CircularBuffer::append( const std::list<std::string> list ) { // we want an ordered append so avoid for_each for( std::list<std::string>::const_iterator i = list.begin(); i != list.end(); ++i ) { m_buf[ m_insertPoint ] = *i; m_insertPoint = normalizeIndex( m_insertPoint + 1 ); m_itemCount = std::min( m_itemCount + 1, m_maxSize ); } }
void Neighbors::sliceNeighbors(int id) { rowNeighbors(id, true); // linha atual if (id % sliceSize >= tableRows) // linha acima rowNeighbors(id - tableRows, false); else rowNeighbors(sliceSize - tableRows + id, false); if (id % sliceSize < (sliceSize - tableRows)) // linha abaixo rowNeighbors(id + tableRows, false); else rowNeighbors(normalizeIndex(sliceSize - tableRows - id), false); }
T get(index_t index) const { index = normalizeIndex(index); if ( ! indexInRange(index) ) return errorValue(); return _data[index]; }