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:
+24
-8
@@ -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
@@ -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
@@ -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
@@ -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 ;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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 ;
|
||||
} ;
|
||||
|
||||
Reference in New Issue
Block a user