EgtGeomKernel :
- ottimizzazione della triangolazione bezier.
This commit is contained in:
@@ -206,8 +206,8 @@ Tree::SetSurf( const SurfBezier* pSrfBz, bool bSplitPatches, const Point3d& ptMi
|
||||
// creo la cella Root
|
||||
Point3d ptTop( nSpanU * SBZ_TREG_COEFF, nSpanV * SBZ_TREG_COEFF) ;
|
||||
bool bLimited = false ;
|
||||
if ( ! AreSamePointExact( ptMax,ORIG)) {
|
||||
if ( ! AreSamePointExact( ptMax,ptTop))
|
||||
if ( ! AreSamePointXYExact( ptMax,ORIG)) {
|
||||
if ( ! AreSamePointXYExact( ptMax,ptTop))
|
||||
ptTop = ptMax ;
|
||||
bLimited = true ;
|
||||
}
|
||||
@@ -455,7 +455,7 @@ AddOrMergeBBox( const BBox3d& bBox3dA, vector<BBox3d>& vBBox, bool bAdd = true,
|
||||
BBox3d bBox3dB = vBBox[b] ;
|
||||
BBox3d b3Int ;
|
||||
// se sono celle diverse e ho un'intersezione faccio il merge
|
||||
if ( ! ( AreSamePointExact( ptMin, bBox3dB.GetMin()) && AreSamePointExact( ptMax, bBox3dB.GetMax())) &&
|
||||
if ( ! ( AreSamePointXYExact( ptMin, bBox3dB.GetMin()) && AreSamePointXYExact( ptMax, bBox3dB.GetMax())) &&
|
||||
bBox3dA.FindIntersectionXY( bBox3dB, b3Int)) {
|
||||
vBBox[b].Add( bBox3dA) ;
|
||||
if ( ! bAdd ) {
|
||||
@@ -500,7 +500,7 @@ Tree::GetIndependentTrees( BIPNTVECTOR& vTrees)
|
||||
Point3d ptTR( m_nSpanU * SBZ_TREG_COEFF, m_nSpanV * SBZ_TREG_COEFF) ;
|
||||
for ( int i = 0 ; i < int( vBBox.size()) ; ++ i) {
|
||||
BBox3d& bBox3d = vBBox[i] ;
|
||||
if ( AreSamePointEpsilon( bBox3d.GetMin(), ORIG, 10) && AreSamePointEpsilon( bBox3d.GetMax(), ptTR, 10)) {
|
||||
if ( AreSamePointXYEpsilon( bBox3d.GetMin(), ORIG, 10) && AreSamePointXYEpsilon( bBox3d.GetMax(), ptTR, 10)) {
|
||||
bIsRoot = true ;
|
||||
break ;
|
||||
}
|
||||
@@ -2318,7 +2318,7 @@ Tree::TraceLoopLabelCell( const POLYLINEVECTOR& vplPolygons)
|
||||
UpdateSplitLoop( plLoopSplit, nPtLoopSplit, vptInters.back()) ;
|
||||
}
|
||||
// controllo di aggiungere un punto abbastanza distante dal precedente
|
||||
if( ! AreSamePointEpsilon( vptInters.back(), ptCurr, 10 * EPS_SMALL)) {
|
||||
if( ! AreSamePointXYEpsilon( vptInters.back(), ptCurr, 10 * EPS_SMALL)) {
|
||||
// aggiungo la fine del segmento nel vettore delle intersezioni
|
||||
vptInters.push_back( ptCurr) ;
|
||||
// aggiorno la polyline splittata
|
||||
@@ -2586,7 +2586,7 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
else if ( nEdge == 7)
|
||||
ptInters = ptTR ;
|
||||
// aggiungo il nuovo punto al vettore delle intersezioni
|
||||
if ( (int)vptInters.size() == 0 || ! AreSamePointEpsilon( ptInters , vptInters.back(), 10 * EPS_SMALL))
|
||||
if ( (int)vptInters.size() == 0 || ! AreSamePointXYEpsilon( ptInters , vptInters.back(), 10 * EPS_SMALL))
|
||||
vptInters.push_back( ptInters) ;
|
||||
else {
|
||||
// se l'ultimo punto del vettore delle intersezioni è quasi uguale al punto che devo aggiungere allora lo sostituisco con quest'ultimo
|
||||
@@ -2624,9 +2624,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( ptInters.x > m_mTree[nId].GetBottomLeft().x + EPS_SMALL && ptInters.x < m_mTree[nId].GetTopRight().x - EPS_SMALL)
|
||||
m_mTree[nId].m_vInters.back().nIn = 2 ;
|
||||
else if ( AreSamePointApprox( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYApprox( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else if ( AreSamePointApprox( ptInters, ptBr))
|
||||
else if ( AreSamePointXYApprox( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 2 ;
|
||||
@@ -2644,9 +2644,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( ptInters.y > m_mTree[nId].GetBottomLeft().y + EPS_SMALL && ptInters.y < m_mTree[nId].GetTopRight().y - EPS_SMALL)
|
||||
m_mTree[nId].m_vInters.back().nIn = 3 ;
|
||||
else if ( AreSamePointApprox( ptInters, ptBr))
|
||||
else if ( AreSamePointXYApprox( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else if ( AreSamePointApprox( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYApprox( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 3 ;
|
||||
@@ -2663,9 +2663,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( ptInters.x > m_mTree[nId].GetBottomLeft().x + EPS_SMALL && ptInters.x < m_mTree[nId].GetTopRight().x - EPS_SMALL)
|
||||
m_mTree[nId].m_vInters.back().nIn = 0 ;
|
||||
else if ( AreSamePointApprox( ptInters, ptTl))
|
||||
else if ( AreSamePointXYApprox( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else if ( AreSamePointApprox( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYApprox( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 0 ;
|
||||
@@ -2682,9 +2682,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( ptInters.y > m_mTree[nId].GetBottomLeft().y + EPS_SMALL && ptInters.y < m_mTree[nId].GetTopRight().y - EPS_SMALL)
|
||||
m_mTree[nId].m_vInters.back().nIn = 1 ;
|
||||
else if ( AreSamePointApprox( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYApprox( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else if ( AreSamePointApprox( ptInters, ptTl))
|
||||
else if ( AreSamePointXYApprox( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 1 ;
|
||||
@@ -2702,9 +2702,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptBr))
|
||||
if ( AreSamePointXYExact( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 2 ;
|
||||
@@ -2715,9 +2715,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptBr))
|
||||
if ( AreSamePointXYExact( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 3 ;
|
||||
@@ -2753,9 +2753,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptBr))
|
||||
if ( AreSamePointXYExact( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 3 ;
|
||||
@@ -2766,9 +2766,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptTl))
|
||||
if ( AreSamePointXYExact( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 0 ;
|
||||
@@ -2804,9 +2804,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptTl))
|
||||
if ( AreSamePointXYExact( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetTopRight()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 7 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 0 ;
|
||||
@@ -2817,9 +2817,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptTl))
|
||||
if ( AreSamePointXYExact( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 1 ;
|
||||
@@ -2855,9 +2855,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptTl( m_mTree[nId].GetBottomLeft().x, m_mTree[nId].GetTopRight().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptTl))
|
||||
if ( AreSamePointXYExact( ptInters, ptTl))
|
||||
m_mTree[nId].m_vInters.back().nIn = 4 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 1 ;
|
||||
@@ -2868,9 +2868,9 @@ Tree::FindInters( int& nId, const CurveLine& clTrim, const PolyLine& plPolygon,
|
||||
m_mTree[nId].m_vInters.emplace_back() ;
|
||||
// controllo se entro in un vertice o a metà lato
|
||||
Point3d ptBr( m_mTree[nId].GetTopRight().x, m_mTree[nId].GetBottomLeft().y) ;
|
||||
if ( AreSamePointExact( ptInters, ptBr))
|
||||
if ( AreSamePointXYExact( ptInters, ptBr))
|
||||
m_mTree[nId].m_vInters.back().nIn = 6 ;
|
||||
else if ( AreSamePointExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
else if ( AreSamePointXYExact( ptInters, m_mTree[nId].GetBottomLeft()))
|
||||
m_mTree[nId].m_vInters.back().nIn = 5 ;
|
||||
else
|
||||
m_mTree[nId].m_vInters.back().nIn = 2 ;
|
||||
@@ -2956,12 +2956,12 @@ Tree::CreateCellPolygons( int nLeafId, POLYLINEMATRIX& vPolygons, POLYLINEMATRIX
|
||||
case 3 : ptNextVert = ptBr ; break ;
|
||||
}
|
||||
if ( ! bForTriangulation) {
|
||||
while ( plCell.GetNextPoint( ptToAdd) && ! AreSamePointExact( ptToAdd, ptNextVert))
|
||||
while ( plCell.GetNextPoint( ptToAdd) && ! AreSamePointXYExact( ptToAdd, ptNextVert))
|
||||
vEdgeVertex[j].push_back( ptToAdd) ;
|
||||
}
|
||||
else {
|
||||
double dPar = 0 ;
|
||||
while ( plCell.GetNextUPoint( &dPar, &ptToAdd) && ! AreSamePointExact( ptToAdd, ptNextVert)) {
|
||||
while ( plCell.GetNextUPoint( &dPar, &ptToAdd) && ! AreSamePointXYExact( ptToAdd, ptNextVert)) {
|
||||
vEdgeVertex[j].push_back( ptToAdd) ;
|
||||
if ( dPar > 0)
|
||||
plCell3d.GetNextPoint( pt3d) ;
|
||||
@@ -3528,10 +3528,10 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
// se è il primo punto della PolyLine lo aggiungo
|
||||
if ( plTrimmedPoly.GetPointNbr() == 0) {
|
||||
// se cerco di aggiungere il vertice che devo saltare, non faccio nulla
|
||||
if( ( nVertToSkip == 0 && AreSamePointApprox( ptToAdd, ptBL)) ||
|
||||
( nVertToSkip == 1 && AreSamePointApprox( ptToAdd, ptBr)) ||
|
||||
( nVertToSkip == 2 && AreSamePointApprox( ptToAdd, ptTR)) ||
|
||||
( nVertToSkip == 3 && AreSamePointApprox( ptToAdd, ptTl))) {
|
||||
if( ( nVertToSkip == 0 && AreSamePointXYApprox( ptToAdd, ptBL)) ||
|
||||
( nVertToSkip == 1 && AreSamePointXYApprox( ptToAdd, ptBr)) ||
|
||||
( nVertToSkip == 2 && AreSamePointXYApprox( ptToAdd, ptTR)) ||
|
||||
( nVertToSkip == 3 && AreSamePointXYApprox( ptToAdd, ptTl))) {
|
||||
// aggiorno l'ultimo punto aggiunto
|
||||
ptLast.Set( ptToAdd.x, ptToAdd.y, 0) ;
|
||||
return true ;
|
||||
@@ -3553,7 +3553,7 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
|
||||
// verifico di essere allineato con un lato, sennò aggiungo e basta
|
||||
Vector3d vDir ;
|
||||
if ( ! AreSamePointApprox( ptToAdd, ptLast))
|
||||
if ( ! AreSamePointXYApprox( ptToAdd, ptLast))
|
||||
vDir = ptToAdd - ptLast ;
|
||||
else
|
||||
return false ;
|
||||
@@ -3563,19 +3563,19 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
plTrimmedPoly3d.EraseLastUPoint() ;
|
||||
Point3d ptVert ;
|
||||
int nVert = -1 ;
|
||||
if ( AreSamePointApprox( ptToAdd, ptBr)){
|
||||
if ( AreSamePointXYApprox( ptToAdd, ptBr)){
|
||||
ptVert = ptBr ;
|
||||
nVert = 1 ;
|
||||
}
|
||||
else if ( AreSamePointApprox( ptToAdd, ptTR)) {
|
||||
else if ( AreSamePointXYApprox( ptToAdd, ptTR)) {
|
||||
ptVert = ptTR ;
|
||||
nVert = 2 ;
|
||||
}
|
||||
else if ( AreSamePointApprox( ptToAdd, ptTl)) {
|
||||
else if ( AreSamePointXYApprox( ptToAdd, ptTl)) {
|
||||
ptVert = ptTl ;
|
||||
nVert = 3 ;
|
||||
}
|
||||
else if ( AreSamePointApprox( ptToAdd, ptBL)) {
|
||||
else if ( AreSamePointXYApprox( ptToAdd, ptBL)) {
|
||||
ptVert = ptBL ;
|
||||
nVert = 0 ;
|
||||
}
|
||||
@@ -3610,7 +3610,7 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
++ c ;
|
||||
}
|
||||
}
|
||||
bool bVert = AreSamePointApprox( ptToAdd, ptTl) ;
|
||||
bool bVert = AreSamePointXYApprox( ptToAdd, ptTl) ;
|
||||
if ( ! ( nVertToSkip == 3 && bVert)) {
|
||||
plTrimmedPoly.AddUPoint( c, ptToAdd) ;
|
||||
if( bForTriangulation){
|
||||
@@ -3635,7 +3635,7 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
++ c ;
|
||||
}
|
||||
}
|
||||
bool bVert = AreSamePointApprox( ptToAdd, ptBL) ;
|
||||
bool bVert = AreSamePointXYApprox( ptToAdd, ptBL) ;
|
||||
if ( ! ( nVertToSkip == 0 && bVert)) {
|
||||
plTrimmedPoly.AddUPoint( c, ptToAdd) ;
|
||||
if( bForTriangulation) {
|
||||
@@ -3660,7 +3660,7 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
++ c ;
|
||||
}
|
||||
}
|
||||
bool bVert = AreSamePointApprox( ptToAdd, ptBr) ;
|
||||
bool bVert = AreSamePointXYApprox( ptToAdd, ptBr) ;
|
||||
if ( ! ( nVertToSkip == 1 && bVert)) {
|
||||
plTrimmedPoly.AddUPoint( c, ptToAdd) ;
|
||||
if( bForTriangulation){
|
||||
@@ -3685,7 +3685,7 @@ Tree::AddVertex( int nId, const PNTMATRIX& vEdgeVertex, const PNTMATRIX& vEdgeVe
|
||||
++ c ;
|
||||
}
|
||||
}
|
||||
bool bVert = AreSamePointApprox( ptToAdd, ptTR) ;
|
||||
bool bVert = AreSamePointXYApprox( ptToAdd, ptTR) ;
|
||||
if ( ! ( nVertToSkip == 2 && bVert)) {
|
||||
plTrimmedPoly.AddUPoint( c, ptToAdd) ;
|
||||
if( bForTriangulation) {
|
||||
@@ -4123,13 +4123,13 @@ Tree::OnWhichEdge( int nId, const Point3d& ptToAssign, int& nEdge) const
|
||||
Point3d ptTl ( ptBL.x, ptTR.y) ;
|
||||
Point3d ptBr ( ptTR.x, ptBL.y) ;
|
||||
|
||||
if ( AreSamePointApprox( ptToAssign, ptTR))
|
||||
if ( AreSamePointXYApprox( ptToAssign, ptTR))
|
||||
nEdge = 7 ;
|
||||
else if ( AreSamePointApprox( ptToAssign, ptTl))
|
||||
else if ( AreSamePointXYApprox( ptToAssign, ptTl))
|
||||
nEdge = 4 ;
|
||||
else if ( AreSamePointApprox( ptToAssign, ptBL))
|
||||
else if ( AreSamePointXYApprox( ptToAssign, ptBL))
|
||||
nEdge = 5 ;
|
||||
else if ( AreSamePointApprox( ptToAssign, ptBr))
|
||||
else if ( AreSamePointXYApprox( ptToAssign, ptBr))
|
||||
nEdge = 6 ;
|
||||
else if ( ptToAssign.x > ptBL.x && ptToAssign.x < ptTR.x && abs( ptToAssign.y - ptTR.y) < EPS_SMALL)
|
||||
nEdge = 0 ;
|
||||
@@ -4189,13 +4189,13 @@ Tree::GetEdges3D( POLYLINEMATRIX& mPLEdges)
|
||||
Point3d pt3d ;
|
||||
// a seconda del lato controllo di stare scorrendo il poligono prendendo solo i punti su quel lato
|
||||
if ( i == 0) {
|
||||
while ( ! AreSamePointApprox(pt, m_mTree.at(vEdges[0][c]).GetTopRight()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
while ( ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[0][c]).GetTopRight()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
continue ;
|
||||
}
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, m_mVert.at(vEdges[0][c])[2]) ;
|
||||
++ nPtCount ;
|
||||
// scorro fino alla fine di quel lato
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointApprox(pt, m_mTree.at(vEdges[0][c]).GetTopLeft())) {
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[0][c]).GetTopLeft())) {
|
||||
m_pSrfBz->GetPointD1D2( pt.x / SBZ_TREG_COEFF, pt.y / SBZ_TREG_COEFF, ISurfBezier::FROM_MINUS, ISurfBezier::FROM_MINUS, pt3d) ;
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, pt3d) ;
|
||||
++ nPtCount ;
|
||||
@@ -4204,13 +4204,13 @@ Tree::GetEdges3D( POLYLINEMATRIX& mPLEdges)
|
||||
++ nPtCount ;
|
||||
}
|
||||
else if ( i == 1 ) {
|
||||
while ( ! AreSamePointApprox(pt, m_mTree.at(vEdges[1][c]).GetTopLeft()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
while ( ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[1][c]).GetTopLeft()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
continue ;
|
||||
}
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, m_mVert.at(vEdges[1][c])[3]) ;
|
||||
++ nPtCount ;
|
||||
// scorro fino alla fine di quel lato
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointApprox(pt, m_mTree.at(vEdges[1][c]).GetBottomLeft())) {
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[1][c]).GetBottomLeft())) {
|
||||
m_pSrfBz->GetPointD1D2( pt.x / SBZ_TREG_COEFF, pt.y / SBZ_TREG_COEFF, ISurfBezier::FROM_MINUS, ISurfBezier::FROM_MINUS, pt3d) ;
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, pt3d) ;
|
||||
++ nPtCount ;
|
||||
@@ -4219,13 +4219,13 @@ Tree::GetEdges3D( POLYLINEMATRIX& mPLEdges)
|
||||
++ nPtCount ;
|
||||
}
|
||||
else if ( i == 2) {
|
||||
while ( ! AreSamePointApprox(pt, m_mTree.at(vEdges[2][c]).GetBottomLeft()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
while ( ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[2][c]).GetBottomLeft()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
continue ;
|
||||
}
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, m_mVert.at(vEdges[2][c])[0]) ;
|
||||
++ nPtCount ;
|
||||
// scorro fino alla fine di quel lato
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointApprox(pt, m_mTree.at(vEdges[2][c]).GetBottomRight())) {
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[2][c]).GetBottomRight())) {
|
||||
m_pSrfBz->GetPointD1D2( pt.x / SBZ_TREG_COEFF, pt.y / SBZ_TREG_COEFF, ISurfBezier::FROM_MINUS, ISurfBezier::FROM_MINUS, pt3d) ;
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, pt3d) ;
|
||||
++ nPtCount ;
|
||||
@@ -4234,13 +4234,13 @@ Tree::GetEdges3D( POLYLINEMATRIX& mPLEdges)
|
||||
++ nPtCount ;
|
||||
}
|
||||
else if ( i == 3) {
|
||||
while ( ! AreSamePointApprox(pt, m_mTree.at(vEdges[3][c]).GetBottomRight()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
while ( ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[3][c]).GetBottomRight()) && mPL[i][c].GetNextPoint( pt)) {
|
||||
continue ;
|
||||
}
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, m_mVert.at(vEdges[3][c])[1]) ;
|
||||
++ nPtCount ;
|
||||
// scorro fino alla fine di quel lato
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointApprox(pt, m_mTree.at(vEdges[3][c]).GetTopRight())) {
|
||||
while ( mPL[i][c].GetNextPoint( pt) && ! AreSamePointXYApprox(pt, m_mTree.at(vEdges[3][c]).GetTopRight())) {
|
||||
m_pSrfBz->GetPointD1D2( pt.x / SBZ_TREG_COEFF, pt.y / SBZ_TREG_COEFF, ISurfBezier::FROM_MINUS, ISurfBezier::FROM_MINUS, pt3d) ;
|
||||
mPLEdges.back().back().AddUPoint( nPtCount, pt3d) ;
|
||||
++ nPtCount ;
|
||||
|
||||
Reference in New Issue
Block a user