EgtGeomKernel 1.4a1 : gli oggetti non hanno più un nome ma un Id.

This commit is contained in:
Dario Sassi
2013-11-28 07:46:29 +00:00
parent cc2db726db
commit bf3e8b5ff9
7 changed files with 147 additions and 89 deletions
+71 -27
View File
@@ -110,7 +110,9 @@ GdbExecutor::Execute( const string& sCmd1, const string& sCmd2, const STRVECTOR&
cout << "]" << endl ;
// esecuzione comando
if ( sCmd1 == "P" || sCmd1 == "POINT")
if ( sCmd1 == "ALIAS")
return ExecuteAlias( sCmd2, vsParams) ;
else if ( sCmd1 == "P" || sCmd1 == "POINT")
return ExecutePoint( sCmd2, vsParams) ;
else if ( sCmd1 == "V" || sCmd1 == "VECTOR")
return ExecuteVector( sCmd2, vsParams) ;
@@ -144,11 +146,31 @@ GdbExecutor::Execute( const string& sCmd1, const string& sCmd2, const STRVECTOR&
return false ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::ExecuteAlias( const string& sCmd2, const STRVECTOR& vsParams)
{
// analisi ed esecuzione dei comandi
if ( sCmd2 == "") {
int nId ;
// 2 parametri : stringa alias e Id
if ( vsParams.size() != 2)
return false ;
// recupero Id
if ( ! FromString( vsParams[1], nId))
return false ;
// inserisco le stringhe in coda alla lista
return m_AliasMap.insert( pair< string, int>( vsParams[0], nId)).second ;
}
return false ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::ExecutePoint( const string& sCmd2, const STRVECTOR& vsParams)
{
// analisi ed esecuzione dei comandi
// analisi ed esecuzione dei comandi
if ( sCmd2 == "MAKE" || sCmd2 == "") {
Point3d Pnt ;
// 4 parametri : un nome e 3 coordinate
@@ -164,7 +186,7 @@ GdbExecutor::ExecutePoint( const string& sCmd2, const STRVECTOR& vsParams)
if ( pGPnt == nullptr)
return false ;
pGPnt->Set( Pnt) ;
return m_pGDB->AddGeoObj( vsParams[0], pGPnt) ;
return m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), pGPnt) ;
}
return false ;
@@ -174,7 +196,7 @@ GdbExecutor::ExecutePoint( const string& sCmd2, const STRVECTOR& vsParams)
bool
GdbExecutor::ExecuteVector( const string& sCmd2, const STRVECTOR& vsParams)
{
// analisi ed esecuzione dei comandi
// analisi ed esecuzione dei comandi
if ( sCmd2 == "MAKE" || sCmd2 == "") {
Vector3d Vect ;
// 4 parametri
@@ -190,7 +212,7 @@ GdbExecutor::ExecuteVector( const string& sCmd2, const STRVECTOR& vsParams)
if ( pGVect == nullptr)
return false ;
pGVect->Set( Vect) ;
return m_pGDB->AddGeoObj( vsParams[0], pGVect) ;
return m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), pGVect) ;
}
return false ;
@@ -200,7 +222,7 @@ GdbExecutor::ExecuteVector( const string& sCmd2, const STRVECTOR& vsParams)
bool
GdbExecutor::ExecuteCurveLine( const string& sCmd2, const STRVECTOR& vsParams)
{
// analisi ed esecuzione dei comandi
// analisi ed esecuzione dei comandi
if ( sCmd2 == "MAKE" || sCmd2 == "") {
Point3d ptStart ;
Point3d ptEnd ;
@@ -215,7 +237,7 @@ GdbExecutor::ExecuteCurveLine( const string& sCmd2, const STRVECTOR& vsParams)
ReleasePtr<ICurveLine> pCrvLine( CreateCurveLine()) ;
if ( ! IsValid( pCrvLine) || ! pCrvLine->Set( ptStart, ptEnd))
return false ;
return m_pGDB->AddGeoObj( vsParams[0], Release( pCrvLine)) ;
return m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), Release( pCrvLine)) ;
}
return false ;
@@ -297,7 +319,7 @@ GdbExecutor::ExecuteCurveArc( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
// inserisco l'arco nel DB
return m_pGDB->AddGeoObj( vsParams[0], Release( pCrvArc)) ;
return m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), Release( pCrvArc)) ;
}
//----------------------------------------------------------------------------
@@ -357,7 +379,7 @@ GdbExecutor::ExecuteCurveBez( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
// inserisco la curva di Bezier nel DB
return m_pGDB->AddGeoObj( vsParams[0], Release( pCrvBez)) ;
return m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), Release( pCrvBez)) ;
}
//----------------------------------------------------------------------------
@@ -385,7 +407,7 @@ GdbExecutor::ExecuteCurveCompo( const string& sCmd2, const STRVECTOR& vsParams)
// esecuzione
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
// recupero la curva
pCrv = GetCurve( m_pGDB->GetGeoObj( *Iter)) ;
pCrv = GetCurve( m_pGDB->GetGeoObj( GetIdParam( *Iter))) ;
if ( pCrv == nullptr)
return false ;
// aggiungo questa curva
@@ -393,11 +415,11 @@ GdbExecutor::ExecuteCurveCompo( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
}
// inserisco la curva composita nel DB
if ( m_pGDB->AddGeoObj( vsParams[0], Release( pCrvCompo))) {
if ( m_pGDB->AddGeoObj( GetIdParam( vsParams[0]), Release( pCrvCompo))) {
// se richiesto, cancello le curve originali
if ( bErase) {
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Erase( (*Iter)))
if ( ! m_pGDB->Erase( GetIdParam(*Iter)))
return false ;
}
}
@@ -410,6 +432,26 @@ GdbExecutor::ExecuteCurveCompo( const string& sCmd2, const STRVECTOR& vsParams)
return false ;
}
//----------------------------------------------------------------------------
int
GdbExecutor::GetIdParam( const std::string& sParam)
{
int nVal ;
AliasMap::iterator Iter ;
// sostituisco eventuali Alias
Iter = m_AliasMap.find( sParam) ;
if ( Iter != m_AliasMap.end())
return Iter->second ;
// converto in identificatore numerico
else if ( FromString( sParam, nVal))
return nVal ;
// altrimenti errore
else
return 0 ;
}
//----------------------------------------------------------------------------
bool
GdbExecutor::GetNamesParam( const std::string& sParam, STRVECTOR& vsNames)
@@ -447,7 +489,7 @@ GdbExecutor::GetVectorParam( const std::string& sParam, Vector3d& vtV)
// altrimenti nome di vettore già nel DB
else {
const IGeoVector3d* pV ;
if ( ( pV = GetGeoVector3d( m_pGDB->GetGeoObj( sParam))) == nullptr)
if ( ( pV = GetGeoVector3d( m_pGDB->GetGeoObj( GetIdParam( sParam)))) == nullptr)
return false ;
vtV = pV->GetVector() ;
return true ;
@@ -476,7 +518,7 @@ GdbExecutor::GetPointParam( const std::string& sParam, Point3d& ptP)
// altrimenti nome di punto già nel DB
else {
const IGeoPoint3d* pPt ;
if ( ( pPt = GetGeoPoint3d( m_pGDB->GetGeoObj( sParam))) == nullptr)
if ( ( pPt = GetGeoPoint3d( m_pGDB->GetGeoObj( GetIdParam( sParam)))) == nullptr)
return false ;
ptP = pPt->GetPoint() ;
return true ;
@@ -511,7 +553,7 @@ GdbExecutor::GetPointWeParam( const std::string& sParam, Point3d& ptP, double& d
else if ( vsParams.size() == 2) {
const IGeoPoint3d* pPt ;
// recupero il punto
if ( ( pPt = GetGeoPoint3d( m_pGDB->GetGeoObj( vsParams[0]))) == nullptr)
if ( ( pPt = GetGeoPoint3d( m_pGDB->GetGeoObj( GetIdParam( vsParams[0])))) == nullptr)
return false ;
ptP = pPt->GetPoint() ;
// recupero il peso
@@ -530,7 +572,7 @@ GdbExecutor::ExecuteCopy( const STRVECTOR& vsParams)
if ( vsParams.size() != 2)
return false ;
// esecuzione copia
return m_pGDB->Copy( vsParams[0], vsParams[1]) ;
return m_pGDB->Copy( GetIdParam( vsParams[0]), GetIdParam( vsParams[1])) ;
}
//----------------------------------------------------------------------------
@@ -549,7 +591,7 @@ GdbExecutor::ExecuteErase( const STRVECTOR& vsParams)
return false ;
// esecuzione cancellazioni
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Erase( (*Iter)))
if ( ! m_pGDB->Erase( GetIdParam( *Iter)))
return false ;
}
@@ -576,7 +618,7 @@ GdbExecutor::ExecuteTranslate( const STRVECTOR& vsParams)
return false ;
// esecuzione traslazioni
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Translate( (*Iter), vtVN))
if ( ! m_pGDB->Translate( GetIdParam( *Iter), vtVN))
return false ;
}
@@ -611,7 +653,7 @@ GdbExecutor::ExecuteRotate( const STRVECTOR& vsParams)
return false ;
// esecuzione rotazioni
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Rotate( (*Iter), ptPC, vtVN, dAngDeg))
if ( ! m_pGDB->Rotate( GetIdParam( *Iter), ptPC, vtVN, dAngDeg))
return false ;
}
@@ -646,7 +688,7 @@ GdbExecutor::ExecuteScale( const STRVECTOR& vsParams)
return false ;
// esecuzione scalature
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Scale( (*Iter), ptPC, dCoeffX, dCoeffY, dCoeffZ))
if ( ! m_pGDB->Scale( GetIdParam( *Iter), ptPC, dCoeffX, dCoeffY, dCoeffZ))
return false ;
}
@@ -677,7 +719,7 @@ GdbExecutor::ExecuteMirror( const STRVECTOR& vsParams)
return false ;
// esecuzione specchiature
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
if ( ! m_pGDB->Mirror( (*Iter), ptPC, vtVN))
if ( ! m_pGDB->Mirror( GetIdParam( *Iter), ptPC, vtVN))
return false ;
}
@@ -754,6 +796,7 @@ GdbExecutor::ExecuteOutScl( const string& sCmd2, const STRVECTOR& vsParams)
// emetto entità
else if ( sCmd2 == "PUT") {
bool bCrvVsPolyg ;
int nId ;
STRVECTOR vsNames ;
STRVECTOR::iterator Iter ;
// almeno un parametro
@@ -770,27 +813,28 @@ GdbExecutor::ExecuteOutScl( const string& sCmd2, const STRVECTOR& vsParams)
// esecuzione
for ( Iter = vsNames.begin() ; Iter != vsNames.end() ; Iter++) {
// recupero l'oggetto ed eseguo l'output
switch ( m_pGDB->GetObjType( *Iter)) {
nId = GetIdParam( *Iter) ;
switch ( m_pGDB->GetObjType( nId)) {
case CRV_LINE :
if ( ! m_OutScl.PutCurveLine( *GetCurveLine( m_pGDB->GetGeoObj(*Iter))))
if ( ! m_OutScl.PutCurveLine( *GetCurveLine( m_pGDB->GetGeoObj( nId))))
return false ;
break ;
case CRV_ARC :
if ( ! m_OutScl.PutCurveArc( *GetCurveArc( m_pGDB->GetGeoObj(*Iter))))
if ( ! m_OutScl.PutCurveArc( *GetCurveArc( m_pGDB->GetGeoObj( nId))))
return false ;
break ;
case CRV_BEZ :
if ( bCrvVsPolyg) {
if ( ! m_OutScl.PutCurveBez( *GetCurveBezier( m_pGDB->GetGeoObj(*Iter))))
if ( ! m_OutScl.PutCurveBez( *GetCurveBezier( m_pGDB->GetGeoObj( nId))))
return false ;
}
else {
if ( ! m_OutScl.PutPolygBez( *GetCurveBezier( m_pGDB->GetGeoObj(*Iter))))
if ( ! m_OutScl.PutPolygBez( *GetCurveBezier( m_pGDB->GetGeoObj( nId))))
return false ;
}
break ;
case CRV_COMPO :
if ( ! m_OutScl.PutCurveCompo( *GetCurveComposite( m_pGDB->GetGeoObj(*Iter))))
if ( ! m_OutScl.PutCurveCompo( *GetCurveComposite( m_pGDB->GetGeoObj( nId))))
return false ;
break ;
default :