EgtGeomKernel 2.1k5 :
- correzioni alle booleane di superfici per facce risultanti con buchi - aggiunte a VolZmap funzioni GetPartLocalBBox e GetPartBBox.
This commit is contained in:
+110
@@ -491,6 +491,116 @@ VolZmap::GetBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::GetPartLocalBBox( int nPart, BBox3d& b3Loc, int nFlag) const
|
||||
{
|
||||
// Verifico lo stato.
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// Se una sola mappa o il numero di componenti è indefinito, vi è un errore.
|
||||
if ( m_nMapNum == 1 || m_nConnectedCompoCount == - 1)
|
||||
return false ;
|
||||
// Se la componente richiesta non esiste, vi è un errore.
|
||||
if ( nPart < 0 || nPart > m_nConnectedCompoCount - 1)
|
||||
return false ;
|
||||
// Calcolo Bounding-box
|
||||
for ( int nMap = 0 ; nMap < 3 ; ++ nMap) {
|
||||
for ( int nDex = 0 ; nDex < m_nDim[nMap] ; ++ nDex) {
|
||||
for ( int nInt = 0 ; nInt < int( m_Values[nMap][nDex].size()) ; ++ nInt) {
|
||||
if ( m_Values[nMap][nDex][nInt].nCompo == nPart) {
|
||||
// Indici del dexel
|
||||
int nI = nDex % m_nNx[nMap] ;
|
||||
int nJ = nDex / m_nNx[nMap] ;
|
||||
// Posizione del dexel
|
||||
double dX = ( nI + 0.5) * m_dStep ;
|
||||
double dY = ( nJ + 0.5) * m_dStep ;
|
||||
// Definisco i punti nel sistema locale
|
||||
Point3d ptP, ptPSt, ptPEn ;
|
||||
if ( nMap == 0) {
|
||||
ptP = m_MapFrame.Orig() + dX * m_MapFrame.VersX() + dY * m_MapFrame.VersY() ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * m_MapFrame.VersZ() ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * m_MapFrame.VersZ() ;
|
||||
}
|
||||
else if ( nMap == 1) {
|
||||
ptP = m_MapFrame.Orig() + dX * m_MapFrame.VersY() + dY * m_MapFrame.VersZ() ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * m_MapFrame.VersX() ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * m_MapFrame.VersX() ;
|
||||
}
|
||||
else {
|
||||
ptP = m_MapFrame.Orig() + dX * m_MapFrame.VersZ() + dY * m_MapFrame.VersX() ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * m_MapFrame.VersY() ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * m_MapFrame.VersY() ;
|
||||
}
|
||||
// Aggiungo i punti al bounding-box
|
||||
b3Loc.Add( ptPSt) ;
|
||||
b3Loc.Add( ptPEn) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::GetPartBBox( int nPart, const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
|
||||
{
|
||||
// Verifico lo stato.
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// Se una sola mappa o il numero di componenti è indefinito, vi è un errore.
|
||||
if ( m_nMapNum == 1 || m_nConnectedCompoCount == - 1)
|
||||
return false ;
|
||||
// Se la componente richiesta non esiste, vi è un errore.
|
||||
if ( nPart < 0 || nPart > m_nConnectedCompoCount - 1)
|
||||
return false ;
|
||||
// Calcolo Bounding-box
|
||||
Point3d ptMapFrameOrig = m_MapFrame.Orig() ;
|
||||
Vector3d vtMapFrameVersX = m_MapFrame.VersX() ;
|
||||
Vector3d vtMapFrameVersY = m_MapFrame.VersY() ;
|
||||
Vector3d vtMapFrameVersZ = m_MapFrame.VersZ() ;
|
||||
ptMapFrameOrig.ToGlob( frRef) ;
|
||||
vtMapFrameVersX.ToGlob( frRef) ;
|
||||
vtMapFrameVersY.ToGlob( frRef) ;
|
||||
vtMapFrameVersZ.ToGlob( frRef) ;
|
||||
for ( int nMap = 0 ; nMap < 3 ; ++ nMap) {
|
||||
for ( int nDex = 0 ; nDex < m_nDim[nMap] ; ++ nDex) {
|
||||
for ( int nInt = 0 ; nInt < int( m_Values[nMap][nDex].size()) ; ++ nInt) {
|
||||
if ( m_Values[nMap][nDex][nInt].nCompo == nPart) {
|
||||
// Indici del dexel
|
||||
int nI = nDex % m_nNx[nMap] ;
|
||||
int nJ = nDex / m_nNx[nMap] ;
|
||||
// Posizione del dexel
|
||||
double dX = ( nI + 0.5) * m_dStep ;
|
||||
double dY = ( nJ + 0.5) * m_dStep ;
|
||||
// Definisco i punti nel sistema locale
|
||||
Point3d ptP, ptPSt, ptPEn ;
|
||||
if ( nMap == 0) {
|
||||
ptP = ptMapFrameOrig + dX * vtMapFrameVersX + dY * vtMapFrameVersY ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * vtMapFrameVersZ ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * vtMapFrameVersZ ;
|
||||
}
|
||||
else if ( nMap == 1) {
|
||||
ptP = ptMapFrameOrig + dX * vtMapFrameVersY + dY * vtMapFrameVersZ ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * vtMapFrameVersX ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * vtMapFrameVersX ;
|
||||
}
|
||||
else {
|
||||
ptP = ptMapFrameOrig + dX * vtMapFrameVersZ + dY * vtMapFrameVersX ;
|
||||
ptPSt = ptP + m_Values[nMap][nDex][nInt].dMin * vtMapFrameVersY ;
|
||||
ptPEn = ptP + m_Values[nMap][nDex][nInt].dMax * vtMapFrameVersY ;
|
||||
}
|
||||
// Aggiungo i punti al bounding-box
|
||||
b3Ref.Add( ptPSt) ;
|
||||
b3Ref.Add( ptPEn) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::Translate( const Vector3d& vtMove)
|
||||
|
||||
Reference in New Issue
Block a user