EgtGeomKernel :

- a Frame3d aggiunto Set con angolidi eulero (CAC')
- corretta geometria da disegnare per vettore nullo
- ObjUser ora ha anche puntatore a GeomDB.
This commit is contained in:
Dario Sassi
2015-05-31 14:04:45 +00:00
parent dc29bb23af
commit b5e1e40a05
8 changed files with 54 additions and 20 deletions
+24 -8
View File
@@ -204,6 +204,23 @@ Frame3d::Set( const Point3d& ptOrig, Type nType)
return ( m_nType != ERR) ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Set( const Point3d& ptOrig, double dAngCDeg, double dAngADeg, double dAngC1Deg)
{
// imposto riferimento identità
Reset() ;
// rotazioni attorno ad assi fissi, quindi in ordine inverso
Rotate( ORIG, Z_AX, dAngC1Deg) ;
Rotate( ORIG, X_AX, dAngADeg) ;
Rotate( ORIG, Z_AX, dAngCDeg) ;
// imposto l'origine
m_ptOrig = ptOrig ;
// ne determino il tipo
CalculateType() ;
return true ;
}
//----------------------------------------------------------------------------
bool
Frame3d::Reset( void)
@@ -505,30 +522,29 @@ Frame3d::CalculateType( void)
bool
Frame3d::GetRotationsCAC1( double& dAngCDeg, double& dAngADeg, double& dAngC1Deg) const
{
bool bDet ;
double dAngVertDeg ;
double dAngOrizzDeg ;
Vector3d vtXnoC1 ;
// verifico validità riferimento
if ( m_nType == ERR)
return false ;
// calcolo angoli sferici del versore Z
double dAngVertDeg, dAngOrizzDeg ;
m_vtVersZ.ToSpherical( nullptr, &dAngVertDeg, &dAngOrizzDeg) ;
dAngADeg = dAngVertDeg ;
// ricavo la prima rotazione attorno a Z
if ( dAngADeg > EPS_ANG_SMALL)
if ( dAngADeg > EPS_ANG_SMALL) {
dAngCDeg = dAngOrizzDeg + ANG_RIGHT ;
if ( dAngCDeg >= ANG_FULL)
dAngCDeg -= ANG_FULL ;
}
else
m_vtVersX.ToSpherical( nullptr, nullptr, &dAngCDeg) ;
// calcolo l'asse X senza la rotazione attorno a C'
vtXnoC1 = FromPolar( 1, dAngCDeg) ;
Vector3d vtXnoC1 = FromPolar( 1, dAngCDeg) ;
// calcolo la rotazione attorno a C'
bool bDet ;
if ( ! vtXnoC1.GetRotation( m_vtVersX, m_vtVersZ, dAngC1Deg, bDet) || ! bDet)
dAngC1Deg = 0 ;
+3 -2
View File
@@ -20,6 +20,7 @@
#include "NgeWriter.h"
#include "NgeReader.h"
#include "GeoObjRW.h"
#include "GeomDB.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkGdbFunct.h"
#include "/EgtDev/Include/EGkObjUser.h"
@@ -58,8 +59,8 @@ GdbGeo::Clone( int nId) const
pGdbGeo->m_nId = nId ;
// l'aggiornamento del manager di Id viene fatto all'inserimento nel DB
// aggiorno eventuale ObjUser
if ( m_pObjUser != nullptr)
m_pObjUser->SetOwner( nId) ;
if ( pGdbGeo->m_pObjUser != nullptr)
pGdbGeo->m_pObjUser->SetOwner( nId, m_pGDB) ;
// assegno il riferimento al DB geometrico
pGdbGeo->SetGeomDB( m_pGDB) ;
+1 -1
View File
@@ -98,7 +98,7 @@ GdbGroup::Clone( int nId) const
m_pGDB->m_IdManager.UpdateMaxId( nId) ;
// aggiorno eventuale ObjUser
if ( m_pObjUser != nullptr)
m_pObjUser->SetOwner( nId) ;
m_pObjUser->SetOwner( nId, m_pGDB) ;
// assegno il riferimento al DB geometrico
pGdbGroup->SetGeomDB( m_pGDB) ;
+2 -3
View File
@@ -125,7 +125,7 @@ GdbObj::CopyObjUserFrom( const GdbObj* pSou)
m_pObjUser = pSou->m_pObjUser->Clone() ;
if ( m_pObjUser == nullptr)
return false ;
m_pObjUser->SetOwner( m_nId) ;
m_pObjUser->SetOwner( m_nId, m_pGDB) ;
}
// altrimenti lo cancello
else {
@@ -1060,7 +1060,6 @@ GdbObj::LoadObjUser( NgeReader& ngeIn)
// carico i dati nell'oggetto
if ( ! m_pObjUser->Load( vString))
return false ;
// imposto Id dell'oggetto proprietario
m_pObjUser->SetOwner( m_nId) ;
// impostazione Id e GeomDB fatte successivamente
return true ;
}
+3
View File
@@ -217,6 +217,9 @@ GeoVector3d::ChangeBase( const Point3d& ptBase)
bool
GeoVector3d::GetDrawWithArrowHead( double dFrazLenAH, double dMaxDimA, PolyLine& PL) const
{
// se vettore nullo non è disegnabile
if ( m_vtV.IsSmall())
return false ;
// vettore
PL.AddUPoint( 0, m_ptBase) ;
Point3d ptTip = m_ptBase + m_vtV ;
+5 -2
View File
@@ -249,8 +249,11 @@ GeomDB::LoadOneObj( NgeReader& ngeIn, int nGroupId, int nBaseGdbId, const INTVEC
}
}
// se inserimento nel DB va bene, ritorno con successo
if ( InsertInGeomDB( pGdbObj, nParentId, GDB_LAST_SON))
if ( InsertInGeomDB( pGdbObj, nParentId, GDB_LAST_SON)) {
if ( pGdbObj->m_pObjUser != nullptr)
pGdbObj->m_pObjUser->SetOwner( pGdbObj->m_nId, this) ;
return true ;
}
}
// altrimenti errore
delete pGdbObj ;
@@ -2592,7 +2595,7 @@ GeomDB::SetObjUser( int nId, IObjUser* pObjUser)
if ( pGdbObj->m_pObjUser != nullptr)
delete pGdbObj->m_pObjUser ;
// assegno
pObjUser->SetOwner( nId) ;
pObjUser->SetOwner( nId, this) ;
pGdbObj->m_pObjUser = pObjUser ;
return true ;
}
+13 -3
View File
@@ -28,6 +28,7 @@ ObjUserDefault::ObjUserDefault( const string& sName)
{
m_sName = sName ;
m_nOwnerId = GDB_ID_NULL ;
m_pGeomDB = nullptr ;
}
//----------------------------------------------------------------------------
@@ -40,7 +41,8 @@ ObjUserDefault::Clone( void) const
if ( pOUD != nullptr) {
try { pOUD->m_sName = m_sName ;
pOUD->m_vData = m_vData ;
pOUD->m_nOwnerId = GDB_ID_NULL ;
pOUD->m_nOwnerId = GDB_ID_NULL ;
pOUD->m_pGeomDB = nullptr ;
}
catch( ...) {
delete pOUD ;
@@ -87,10 +89,11 @@ ObjUserDefault::Load( const STRVECTOR& vString)
//----------------------------------------------------------------------------
bool
ObjUserDefault::SetOwner( int nId)
ObjUserDefault::SetOwner( int nId, IGeomDB* pGDB)
{
m_nOwnerId = nId ;
return true ;
m_pGeomDB = pGDB ;
return ( m_nOwnerId != GDB_ID_NULL && m_pGeomDB != nullptr) ;
}
//----------------------------------------------------------------------------
@@ -99,3 +102,10 @@ ObjUserDefault::GetOwner( void) const
{
return m_nOwnerId ;
}
//----------------------------------------------------------------------------
IGeomDB*
ObjUserDefault::GetGeomDB( void) const
{
return m_pGeomDB ;
}
+3 -1
View File
@@ -26,8 +26,9 @@ class ObjUserDefault : public IObjUser
virtual bool ToSave( void) const { return true ; }
virtual bool Save( STRVECTOR& vString) const ;
virtual bool Load( const STRVECTOR& vString) ;
virtual bool SetOwner( int nId) ;
virtual bool SetOwner( int nId, IGeomDB* pGDB) ;
virtual int GetOwner( void) const ;
virtual IGeomDB* GetGeomDB( void) const ;
public :
ObjUserDefault( void) {}
@@ -35,6 +36,7 @@ class ObjUserDefault : public IObjUser
private :
int m_nOwnerId ;
IGeomDB* m_pGeomDB ;
std::string m_sName ;
STRVECTOR m_vData ;
} ;