EgtGeomKernel 1.8j2 :
- aggiunte a Zmap GetVolume, GetPartVolume e RemovePart.
This commit is contained in:
+55
-7
@@ -899,12 +899,14 @@ VolZmap::ExpandFromZInterval( IntContaier& IntCont)
|
||||
VolZmap*
|
||||
VolZmap::ClonePart( int nPart) const
|
||||
{
|
||||
// Se è usata una sola griglia, i risultati non
|
||||
// sarebbero attendibili; restituisco nullptr.
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return nullptr ;
|
||||
// Se è definita una sola griglia non sono definibili le parti, errore
|
||||
if ( m_nMapNum == 1)
|
||||
return nullptr ;
|
||||
return nullptr ;
|
||||
// Se è richiesta una componente fuori intervallo restituisco nullptr.
|
||||
if ( nPart < 0 || nPart >= m_nConnectedCompoCount)
|
||||
if ( nPart < 0 || nPart >= m_nConnectedCompoCount)
|
||||
return nullptr ;
|
||||
// Se il numero di componenti è indefinito, lo ricalcolo.
|
||||
if ( m_nConnectedCompoCount == - 1)
|
||||
@@ -921,6 +923,7 @@ VolZmap::ClonePart( int nPart) const
|
||||
pVolume->m_dStep = m_dStep ;
|
||||
pVolume->m_nMapNum = m_nMapNum ;
|
||||
|
||||
// Minimi e massimi indici i,j della componente per le tre griglie
|
||||
int nMinIndI[3] ;
|
||||
int nMaxIndI[3] ;
|
||||
int nMinIndJ[3] ;
|
||||
@@ -928,15 +931,15 @@ VolZmap::ClonePart( int nPart) const
|
||||
// Coordinate dell'origine del sistema di riferimento
|
||||
// del nuovo Zmap
|
||||
double dNewOx, dNewOy, dNewOz ;
|
||||
// Ciclo sulle mappe
|
||||
// Ciclo sulle mappe
|
||||
for ( int nMap = 0 ; nMap < int( m_nMapNum) ; ++ nMap) {
|
||||
|
||||
nMinIndI[nMap] = m_nNx[nMap] ;
|
||||
nMinIndJ[nMap] = m_nNy[nMap] ;
|
||||
nMaxIndI[nMap] = 0 ;
|
||||
nMaxIndJ[nMap] = 0 ;
|
||||
// Della componente connessa in questione calcolo
|
||||
// indici i e j massimi e minimi.
|
||||
// Della componente connessa in questione calcolo
|
||||
// indici i e j massimi e minimi.
|
||||
for ( int nIndI = 0 ; nIndI < int( m_nNx[nMap]) ; ++ nIndI) {
|
||||
for ( int nIndJ = 0 ; nIndJ < int( m_nNy[nMap]) ; ++ nIndJ) {
|
||||
|
||||
@@ -1053,3 +1056,48 @@ VolZmap::ClonePart( int nPart) const
|
||||
// Restituisco il nuovo solido
|
||||
return Release( pVolume) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::RemovePart( int nPart)
|
||||
{
|
||||
// verifico lo stato
|
||||
if ( m_nStatus != OK)
|
||||
return false ;
|
||||
// Se è definita una sola griglia non sono definibili le parti, errore
|
||||
if ( m_nMapNum == 1)
|
||||
return false ;
|
||||
// Se il numero di componenti è indefinito, lo ricalcolo
|
||||
if ( m_nConnectedCompoCount == - 1)
|
||||
CheckMapConnection() ;
|
||||
// Se non vi sono componenti, abbiamo finito
|
||||
if ( m_nConnectedCompoCount == 0)
|
||||
return true ;
|
||||
|
||||
// Elimino i segmenti con indice nPart + 1 e aggiorno quelli con indice superiore
|
||||
// Ciclo sulle mappe.
|
||||
for ( int nMap = 0 ; nMap < int( m_nMapNum) ; ++ nMap) {
|
||||
// Ciclo sui dexel della mappa.
|
||||
for ( int nDex = 0 ; nDex < int( m_Values[nMap].size()) ; ++ nDex) {
|
||||
// Ciclo sugli intervalli del dexel.
|
||||
for ( int nInt = 0 ; nInt < int( m_Values[nMap][nDex].size()) ; ++ nInt) {
|
||||
// Se l'intervallo appartiene alla componente da eliminare, lo cancello.
|
||||
if ( m_Values[nMap][nDex][nInt].nCompo == nPart + 1) {
|
||||
m_Values[nMap][nDex].erase( m_Values[nMap][nDex].begin() + nInt) ;
|
||||
-- nInt ;
|
||||
}
|
||||
else if ( m_Values[nMap][nDex][nInt].nCompo > nPart + 1)
|
||||
m_Values[nMap][nDex][nInt].nCompo -= 1 ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Decremento il numero di componenti.
|
||||
m_nConnectedCompoCount -= 1 ;
|
||||
|
||||
// Imposto ricalcolo grafica
|
||||
m_OGrMgr.Reset() ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user