diff --git a/Tree.cpp b/Tree.cpp index 5e73b0f..fc0632b 100644 --- a/Tree.cpp +++ b/Tree.cpp @@ -455,10 +455,10 @@ Tree::Split( int nId, double dSplitValue) { Cell& cToSplit = m_mTree.at(nId) ; // controllo che lo split non venga fatto sul lato della cella - if ( ( cToSplit.IsSplitVert() && dSplitValue > cToSplit.GetBottomLeft().x + EPS_SMALL && - dSplitValue < cToSplit.GetTopRight().x - EPS_SMALL) || - ( ! cToSplit.IsSplitVert() && dSplitValue > cToSplit.GetBottomLeft().y + EPS_SMALL && - dSplitValue < cToSplit.GetTopRight().y - EPS_SMALL)) { + if ( ( cToSplit.IsSplitVert() && dSplitValue > cToSplit.GetBottomLeft().x + 10 * EPS_SMALL && + dSplitValue < cToSplit.GetTopRight().x - 10 * EPS_SMALL) || + ( ! cToSplit.IsSplitVert() && dSplitValue > cToSplit.GetBottomLeft().y + 10 * EPS_SMALL && + dSplitValue < cToSplit.GetTopRight().y - 10 * EPS_SMALL)) { // quando si implementerà lo split a parametro libero bisognerà impedire che si facciano split troppo vicini al bordo della cella!!!!!!!!!!!!!!!!!!! cToSplit.m_dSplit = dSplitValue ; Cell cChild1, cChild2 ; @@ -746,10 +746,11 @@ Tree::BuildTree( double dLinTol, double dSideMin, double dSideMax) if ( bSplit) { pcToSplit->SetSplitDirVert( bVert) ; // effettuo lo split - Split( nCToSplit) ; - // procedo con lo split del Child1 - nCToSplit = pcToSplit->m_nChild1 ; - pcToSplit = &m_mTree[nCToSplit] ; + if ( Split( nCToSplit)) { + // procedo con lo split del Child1 + nCToSplit = pcToSplit->m_nChild1 ; + pcToSplit = &m_mTree[nCToSplit] ; + } } else { // sono arrivato ad una cella Leaf, quindi salvo la cella @@ -858,22 +859,23 @@ Tree::BuildTree( double dLinTol, double dSideMin, double dSideMax) if ( dSideMinVal / 2 >= dSideMin && dSideMaxVal < dSideMax && dErr > dLinTol) { pcToSplit->SetSplitDirVert( bVert) ; // effettuo lo split - Split( nCToSplit) ; - - // procedo con lo split del Child1 - nCToSplit = pcToSplit->m_nChild1 ; - pcToSplit = &m_mTree[nCToSplit] ; + if ( Split( nCToSplit)){ + // procedo con lo split del Child1 + nCToSplit = pcToSplit->m_nChild1 ; + pcToSplit = &m_mTree[nCToSplit] ; + } } else { // sono arrivato ad una cella Leaf, quindi salvo la cella - m_vnLeaves.push_back( nCToSplit) ; pcToSplit->SetProcessed() ; if ( AreSamePointApprox( ptP00, ptP01) && AreSamePointApprox( ptP10, ptP11)) pcToSplit->m_nCollapsed = Cell::Collapsed::VERT_EDGES ; else if ( AreSamePointApprox( ptP00, ptP10) && AreSamePointApprox( ptP01, ptP11)) pcToSplit->m_nCollapsed = Cell::Collapsed::HORIZ_EDGES ; - else + else { pcToSplit->m_nCollapsed = Cell::Collapsed::NO_COLLAPSE ; + m_vnLeaves.push_back( nCToSplit) ; + } // risalgo i parent finché non trovo il primo Child2 da processare nCToSplit = pcToSplit->m_nParent ;