EgtGeomKernel 1.6f2 :

- ObjUser rinominati UserObj
- aggiunta RemoveUserObj
- aggiunte a GdbIterator le funzioni di trsformazione.
This commit is contained in:
Dario Sassi
2015-06-16 07:36:32 +00:00
parent 33877913b1
commit af49f942d3
16 changed files with 560 additions and 157 deletions
+324
View File
@@ -847,6 +847,275 @@ GdbIterator::GetRefBBox( const Frame3d& frRef, BBox3d& b3Ref, int nFlag) const
return m_pCurrObj->GetBBox( frGlob, b3Ref, nFlag) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::Translate( const Vector3d& vtMove)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// eseguo la traslazione
return m_pCurrObj->Translate( vtMove) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::TranslateGlob( const Vector3d& vtMove)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// recupero il riferimento in cui è immerso l'oggetto
Frame3d frObj ;
if ( ! GetGlobFrame( frObj))
return false ;
// porto il movimento in locale
Vector3d vtMoveLoc = vtMove ;
if ( ! vtMoveLoc.ToLoc( frObj))
return false ;
// eseguo la traslazione
return m_pCurrObj->Translate( vtMoveLoc) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::TranslateGroup( const Vector3d& vtMove)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// deve essere un gruppo di cui utilizzo il riferimento proprio
GdbGroup* pGdbGroup = GetGdbGroup( m_pCurrObj) ;
if ( pGdbGroup == nullptr)
return false ;
// porto il movimento in questo nel riferimento in cui è immerso il gruppo
Vector3d vtMoveLoc = vtMove ;
if ( ! vtMoveLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
// eseguo la traslazione
return m_pCurrObj->Translate( vtMoveLoc) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// eseguo la rotazione
return m_pCurrObj->Rotate( ptAx, vtAx, dCosAng, dSinAng) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::RotateGlob( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// recupero il riferimento in cui è immerso l'oggetto
Frame3d frObj ;
if ( ! GetGlobFrame( frObj))
return false ;
// porto i parametri di rotazione in locale
Point3d ptAxLoc = ptAx ;
if ( ! ptAxLoc.ToLoc( frObj))
return false ;
Vector3d vtAxLoc = vtAx ;
if ( ! vtAxLoc.ToLoc( frObj))
return false ;
// eseguo la rotazione
return m_pCurrObj->Rotate( ptAxLoc, vtAxLoc, dCosAng, dSinAng) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::RotateGroup( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// deve essere un gruppo di cui utilizzo il riferimento proprio
GdbGroup* pGdbGroup = GetGdbGroup( m_pCurrObj) ;
if ( pGdbGroup == nullptr)
return false ;
// porto i parametri di rotazione nel riferimento in cui è immerso il gruppo
Point3d ptAxLoc = ptAx ;
if ( ! ptAxLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
Vector3d vtAxLoc = vtAx ;
if ( ! vtAxLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
// eseguo la rotazione
return m_pCurrObj->Rotate( ptAxLoc, vtAxLoc, dCosAng, dSinAng) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// eseguo la scalatura
return m_pCurrObj->Scale( frRef, dCoeffX, dCoeffY, dCoeffZ) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::ScaleGlob( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// recupero il riferimento in cui è immerso l'oggetto
Frame3d frObj ;
if ( ! GetGlobFrame( frObj))
return false ;
// porto il riferimento di scalatura in locale
Frame3d frRefLoc = frRef ;
if ( ! frRefLoc.ToLoc( frObj))
return false ;
// eseguo la scalatura
return m_pCurrObj->Scale( frRefLoc, dCoeffX, dCoeffY, dCoeffZ) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::ScaleGroup( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// deve essere un gruppo di cui utilizzo il riferimento proprio
GdbGroup* pGdbGroup = GetGdbGroup( m_pCurrObj) ;
if ( pGdbGroup == nullptr)
return false ;
// porto il riferimento di scalatura nel riferimento in cui è immerso il gruppo
Frame3d frRefLoc = frRef ;
if ( ! frRefLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
// eseguo la scalatura
return m_pCurrObj->Scale( frRefLoc, dCoeffX, dCoeffY, dCoeffZ) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::Mirror( const Point3d& ptOn, const Vector3d& vtNorm)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// eseguo la specchiatura
return m_pCurrObj->Mirror( ptOn, vtNorm) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::MirrorGlob( const Point3d& ptOn, const Vector3d& vtNorm)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// recupero il riferimento in cui è immerso l'oggetto
Frame3d frObj ;
if ( ! GetGlobFrame( frObj))
return false ;
// porto i parametri di mirror in locale
Point3d ptOnLoc = ptOn ;
if ( ! ptOnLoc.ToLoc( frObj))
return false ;
Vector3d vtNormLoc = vtNorm ;
if ( ! vtNormLoc.ToLoc( frObj))
return false ;
// eseguo la specchiatura
return m_pCurrObj->Mirror( ptOnLoc, vtNormLoc) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::MirrorGroup( const Point3d& ptOn, const Vector3d& vtNorm)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// deve essere un gruppo di cui utilizzo il riferimento proprio
GdbGroup* pGdbGroup = GetGdbGroup( m_pCurrObj) ;
if ( pGdbGroup == nullptr)
return false ;
// porto i parametri di mirror nel riferimento in cui è immerso il gruppo
Point3d ptOnLoc = ptOn ;
if ( ! ptOnLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
Vector3d vtNormLoc = vtNorm ;
if ( ! vtNormLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
// eseguo la specchiatura
return m_pCurrObj->Mirror( ptOnLoc, vtNormLoc) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// eseguo la deformazione
return m_pCurrObj->Shear( ptOn, vtNorm, vtDir, dCoeff) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::ShearGlob( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// recupero il riferimento in cui è immerso l'oggetto
Frame3d frObj ;
if ( ! GetGlobFrame( frObj))
return false ;
// porto i parametri di shear in locale
Point3d ptOnLoc = ptOn ;
if ( ! ptOnLoc.ToLoc( frObj))
return false ;
Vector3d vtNormLoc = vtNorm ;
if ( ! vtNormLoc.ToLoc( frObj))
return false ;
Vector3d vtDirLoc = vtDir ;
if ( ! vtDirLoc.ToLoc( frObj))
return false ;
// eseguo la deformazione
return m_pCurrObj->Shear( ptOnLoc, vtNormLoc, vtDirLoc, dCoeff) ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::ShearGroup( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr || m_pCurrObj->m_nId == GDB_ID_ROOT)
return false ;
// deve essere un gruppo di cui utilizzo il riferimento proprio
GdbGroup* pGdbGroup = GetGdbGroup( m_pCurrObj) ;
if ( pGdbGroup == nullptr)
return false ;
// porto i parametri di shear nel riferimento in cui è immerso il gruppo
Point3d ptOnLoc = ptOn ;
if ( ! ptOnLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
Vector3d vtNormLoc = vtNorm ;
if ( ! vtNormLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
Vector3d vtDirLoc = vtDir ;
if ( ! vtDirLoc.ToGlob( pGdbGroup->GetFrame()))
return false ;
// eseguo la deformazione
return m_pCurrObj->Shear( ptOnLoc, vtNormLoc, vtDirLoc, dCoeff) ;
}
//----------------------------------------------------------------------------
// Attributes
//----------------------------------------------------------------------------
@@ -1346,3 +1615,58 @@ GdbIterator::RemoveInfo( const string& sKey)
// rimuovo l'Info
return m_pCurrObj->RemoveInfo( sKey) ;
}
//----------------------------------------------------------------------------
// UserObj
//----------------------------------------------------------------------------
bool
GdbIterator::SetUserObj( IUserObj* pUserObj)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return false ;
// cancello eventuale precedente UserObj
if ( m_pCurrObj->m_pUserObj != nullptr)
delete m_pCurrObj->m_pUserObj ;
// assegno nuovo UserObj
if ( pUserObj != nullptr)
pUserObj->SetOwner( m_pCurrObj->m_nId, m_pGDB) ;
m_pCurrObj->m_pUserObj = pUserObj ;
return true ;
}
//----------------------------------------------------------------------------
IUserObj*
GdbIterator::GetUserObj( void)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return nullptr ;
// restituisco il puntatore a IUserObj
return m_pCurrObj->m_pUserObj ;
}
//----------------------------------------------------------------------------
const IUserObj*
GdbIterator::GetUserObj( void) const
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return nullptr ;
// restituisco il puntatore a IUserObj
return m_pCurrObj->m_pUserObj ;
}
//----------------------------------------------------------------------------
bool
GdbIterator::RemoveUserObj( void)
{
if ( m_pGDB == nullptr || m_pCurrObj == nullptr)
return nullptr ;
// cancello eventuale precedente UserObj
if ( m_pCurrObj->m_pUserObj != nullptr)
delete m_pCurrObj->m_pUserObj ;
// reset puntatore a UserObj
m_pCurrObj->m_pUserObj = nullptr ;
return true ;
}