void QuadTreeNode::Partition() { assert(!m_hasChildren); const Vec2f &halfRegionDims(m_region.GetHalfDims()); const Vec2f ®ionLowerBound(m_region.GetLowerBound()); const Vec2f ®ionCenter(m_region.GetCenter()); int nextLowerLevel = m_level - 1; m_children = new std::vector<std::vector<QuadTreeNode>>(); // Create the children nodes (*m_children).resize(2); for(int x = 0; x < 2; x++) { (*m_children)[x].resize(2); for(int y = 0; y < 2; y++) { Vec2f offset(x * halfRegionDims.x, y * halfRegionDims.y); AABB childAABB(regionLowerBound + offset, regionCenter + offset); childAABB.SetHalfDims(childAABB.GetHalfDims() * m_oversizeMultiplier); // Scale up AABB by the oversize multiplier (*m_children)[x][y].Create(childAABB, nextLowerLevel, this, m_pQuadTree); } } m_hasChildren = true; }
PotreeWriterNode *PotreeWriterNode::createChild(int childIndex ){ stringstream childName; childName << name << childIndex; AABB cAABB = childAABB(aabb, childIndex); PotreeWriterNode *child = new PotreeWriterNode(potreeWriter, childName.str(), path, cAABB, spacing / 2.0f, level+1, maxLevel, scale); children[childIndex] = child; return child; }