EgtGeomKernel :
- migliorata gestione della triangolazione per le bezier.
This commit is contained in:
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user