EgtGeomKernel 2.1.10.1 :
- nuova versione delle operazioni booleane sulle superfici trimesh.
This commit is contained in:
+138
-77
@@ -1,7 +1,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2013-2014
|
||||
// EgalTech 2013-2019
|
||||
//----------------------------------------------------------------------------
|
||||
// File : GdbExecutor.cpp Data : 24.04.14 Versione : 1.5a6
|
||||
// File : GdbExecutor.cpp Data : 01.10.19 Versione : 2.1i3
|
||||
// Contenuto : Implementazione della classe GdbExecutor.
|
||||
//
|
||||
//
|
||||
@@ -2177,6 +2177,15 @@ GdbExecutor::ExecuteSurfTriMesh( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
else if ( sCmd2 == "GENCUT") {
|
||||
return SurfTrimeshGenCut( vsParams) ;
|
||||
}
|
||||
else if ( sCmd2 == "ADD") {
|
||||
return SurfTrimeshAdd( vsParams) ;
|
||||
}
|
||||
else if ( sCmd2 == "INTERS") {
|
||||
return SurfTrimeshInters( vsParams) ;
|
||||
}
|
||||
else if ( sCmd2 == "SUBTRACT") {
|
||||
return SurfTrimeshSubtract( vsParams) ;
|
||||
}
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
@@ -2669,6 +2678,58 @@ GdbExecutor::SurfTrimeshGenCut( const STRVECTOR& vsParams)
|
||||
return pStmF->GeneralizedCut( *pCurve, true) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::SurfTrimeshAdd( const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri: nSurfId, nOtherSurfId
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// Recupero Id superficie
|
||||
int nIdSurf = GetIdParam( vsParams[0]) ;
|
||||
ISurfTriMesh* pStmM = GetSurfTriMesh( m_pGDB->GetGeoObj( nIdSurf)) ;
|
||||
SurfTriMesh* pStmF = static_cast <SurfTriMesh*> ( pStmM) ;
|
||||
int nIdOtherSurf = GetIdParam( vsParams[1]) ;
|
||||
ISurfTriMesh* pStmOtherM = GetSurfTriMesh( m_pGDB->GetGeoObj( nIdOtherSurf)) ;
|
||||
SurfTriMesh* pStmOtherF = static_cast <SurfTriMesh*> ( pStmOtherM) ;
|
||||
return pStmF->Add( *pStmOtherF) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::SurfTrimeshInters( const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri: nSurfId, nOtherSurfId
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// Recupero Id superficie
|
||||
int nIdSurf = GetIdParam( vsParams[0]) ;
|
||||
ISurfTriMesh* pStmM = GetSurfTriMesh( m_pGDB->GetGeoObj( nIdSurf)) ;
|
||||
SurfTriMesh* pStmF = static_cast <SurfTriMesh*> ( pStmM) ;
|
||||
int nIdOtherSurf = GetIdParam( vsParams[1]) ;
|
||||
ISurfTriMesh* pStmOtherM = GetSurfTriMesh( m_pGDB->GetGeoObj( nIdOtherSurf)) ;
|
||||
SurfTriMesh* pStmOtherF = static_cast <SurfTriMesh*> ( pStmOtherM) ;
|
||||
return pStmF->Intersect( *pStmOtherF) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::SurfTrimeshSubtract( const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri: nSurfId, nOtherSurfId
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// Recupero Id superficie
|
||||
int nIdSurf = GetIdParam( vsParams[0]) ;
|
||||
ISurfTriMesh* pStmM = GetSurfTriMesh( m_pGDB->GetGeoObj( nIdSurf)) ;
|
||||
SurfTriMesh* pStmF = static_cast <SurfTriMesh*> ( pStmM) ;
|
||||
int nIdOtherSurf = GetIdParam( vsParams[1]) ;
|
||||
SurfTriMesh* pStmOther = GetBasicSurfTriMesh( m_pGDB->GetGeoObj( nIdOtherSurf)) ;
|
||||
if ( pStmOther == nullptr)
|
||||
return false ;
|
||||
return pStmF->Subtract( *pStmOther) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteVolZmap( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
@@ -2705,15 +2766,15 @@ GdbExecutor::ExecuteVolZmap( const string& sCmd2, const STRVECTOR& vsParams)
|
||||
//else if ( sCmd2 == "TRIMESHZMAP") {
|
||||
// return VolZmapCreateFromTriMesh( vsParams) ;
|
||||
//}
|
||||
if ( sCmd2 == "CUT") {
|
||||
return ExecuteVolZmapCut( vsParams) ;
|
||||
}
|
||||
else if ( sCmd2 == "COMP") {
|
||||
return ExecuteVolZmapCompact( vsParams) ;
|
||||
}
|
||||
else if ( sCmd2 == "EDGES") {
|
||||
return ExecuteVolZmapEdges( vsParams) ;
|
||||
}
|
||||
//if ( sCmd2 == "CUT") {
|
||||
// return ExecuteVolZmapCut( vsParams) ;
|
||||
//}
|
||||
//else if ( sCmd2 == "COMP") {
|
||||
// return ExecuteVolZmapCompact( vsParams) ;
|
||||
//}
|
||||
//else if ( sCmd2 == "EDGES") {
|
||||
// return ExecuteVolZmapEdges( vsParams) ;
|
||||
//}
|
||||
return false ;
|
||||
}
|
||||
/*
|
||||
@@ -3024,76 +3085,76 @@ GdbExecutor::VolZmapBBoxZmapIntersection( const STRVECTOR& vsParams)
|
||||
}*/
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteVolZmapCut( const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri : ZmapId, ParentId, ptP, vtN
|
||||
if ( vsParams.size() != 4)
|
||||
return false ;
|
||||
// Recupero Zmap
|
||||
int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
if ( pZmap == nullptr)
|
||||
return false ;
|
||||
// recupero il riferimento in cui è immerso lo Zmap
|
||||
Frame3d frRef ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
return false ;
|
||||
// Recupero punto piano
|
||||
Point3d ptP ;
|
||||
if ( ! GetPointParam( vsParams[2], frRef, ptP))
|
||||
return false ;
|
||||
// primo vettore frBBoxFrame
|
||||
Vector3d vtN ;
|
||||
if ( ! GetVectorParam( vsParams[3], frRef, vtN))
|
||||
return false ;
|
||||
vtN.Normalize() ;
|
||||
Plane3d plPlane ;
|
||||
plPlane.Set( ptP, vtN) ;
|
||||
pZmap->Cut( plPlane) ;
|
||||
return true ;
|
||||
}
|
||||
//bool
|
||||
//GdbExecutor::ExecuteVolZmapCut( const STRVECTOR& vsParams)
|
||||
//{
|
||||
// // Parametri : ZmapId, ParentId, ptP, vtN
|
||||
// if ( vsParams.size() != 4)
|
||||
// return false ;
|
||||
// // Recupero Zmap
|
||||
// int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
// VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
// if ( pZmap == nullptr)
|
||||
// return false ;
|
||||
// // recupero il riferimento in cui è immerso lo Zmap
|
||||
// Frame3d frRef ;
|
||||
// if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
// return false ;
|
||||
// // Recupero punto piano
|
||||
// Point3d ptP ;
|
||||
// if ( ! GetPointParam( vsParams[2], frRef, ptP))
|
||||
// return false ;
|
||||
// // primo vettore frBBoxFrame
|
||||
// Vector3d vtN ;
|
||||
// if ( ! GetVectorParam( vsParams[3], frRef, vtN))
|
||||
// return false ;
|
||||
// vtN.Normalize() ;
|
||||
// Plane3d plPlane ;
|
||||
// plPlane.Set( ptP, vtN) ;
|
||||
// pZmap->Cut( plPlane) ;
|
||||
// return true ;
|
||||
//}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteVolZmapCompact( const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri : ZmapId
|
||||
if ( vsParams.size() != 1)
|
||||
return false ;
|
||||
// Recupero Zmap
|
||||
int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
if ( pZmap == nullptr)
|
||||
return false ;
|
||||
pZmap->Compact() ;
|
||||
return true ;
|
||||
}
|
||||
//bool
|
||||
//GdbExecutor::ExecuteVolZmapCompact( const STRVECTOR& vsParams)
|
||||
//{
|
||||
// // Parametri : ZmapId
|
||||
// if ( vsParams.size() != 1)
|
||||
// return false ;
|
||||
// // Recupero Zmap
|
||||
// int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
// VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
// if ( pZmap == nullptr)
|
||||
// return false ;
|
||||
// pZmap->Compact() ;
|
||||
// return true ;
|
||||
//}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
GdbExecutor::ExecuteVolZmapEdges(const STRVECTOR& vsParams)
|
||||
{
|
||||
// Parametri : ZmapId, ParentId
|
||||
if ( vsParams.size() != 2)
|
||||
return false ;
|
||||
// Recupero Zmap
|
||||
int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
if ( pZmap == nullptr)
|
||||
return false;
|
||||
// recupero il riferimento in cui è immerso lo Zmap
|
||||
Frame3d frRef ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
return false ;
|
||||
ICURVEPOVECTOR vpLoop ;
|
||||
pZmap->GetEdges( vpLoop) ;
|
||||
bool bOk = true ;
|
||||
for ( int n = 0 ; n < int( vpLoop.size()) && bOk ; ++ n) {
|
||||
bOk = bOk && AddGeoObj( "$NN", vsParams[1], Release( vpLoop[n])) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
//bool
|
||||
//GdbExecutor::ExecuteVolZmapEdges(const STRVECTOR& vsParams)
|
||||
//{
|
||||
// // Parametri : ZmapId, ParentId
|
||||
// if ( vsParams.size() != 2)
|
||||
// return false ;
|
||||
// // Recupero Zmap
|
||||
// int nZmapId = GetIdParam( vsParams[0]) ;
|
||||
// VolZmap* pZmap = GetBasicVolZmap( m_pGDB->GetGeoObj( nZmapId)) ;
|
||||
// if ( pZmap == nullptr)
|
||||
// return false;
|
||||
// // recupero il riferimento in cui è immerso lo Zmap
|
||||
// Frame3d frRef ;
|
||||
// if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frRef))
|
||||
// return false ;
|
||||
// ICURVEPOVECTOR vpLoop ;
|
||||
// pZmap->GetEdges( vpLoop) ;
|
||||
// bool bOk = true ;
|
||||
// for ( int n = 0 ; n < int( vpLoop.size()) && bOk ; ++ n) {
|
||||
// bOk = bOk && AddGeoObj( "$NN", vsParams[1], Release( vpLoop[n])) ;
|
||||
// }
|
||||
// return bOk ;
|
||||
//}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
|
||||
Reference in New Issue
Block a user