EgtGeomKernel 1.6f2 :
- ObjUser rinominati UserObj - aggiunta RemoveUserObj - aggiunte a GdbIterator le funzioni di trsformazione.
This commit is contained in:
+324
@@ -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 ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user