EgtGeomKernel 1.5d3 :

- aggiunte Move, Rot, Mirror e Scale di gruppo espresse nel suo proprio rif.
This commit is contained in:
Dario Sassi
2014-04-10 07:02:37 +00:00
parent 9b564445cd
commit cc86dbd73d
5 changed files with 163 additions and 28 deletions
+72 -28
View File
@@ -1542,18 +1542,29 @@ GdbExecutor::ExecuteTranslate( const std::string& sCmd2, const STRVECTOR& vsPara
Vector3d vtVN ;
if ( ! GetVectorParam( vsParams[1], vtVN))
return false ;
// recupero flag per globale
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
// recupero flag per locale/globale/gruppo
enum { TRA_LOC = 0, TRA_GLOB = 1, TRA_GROUP = 2} ;
int nTraType = TRA_LOC ;
if ( sCmd2 == "GLOB" || sCmd2 == "G")
nTraType = TRA_GLOB ;
else if ( sCmd2 == "GROUP" || sCmd2 == "GR")
nTraType = TRA_GROUP ;
// esecuzione traslazioni
INTVECTOR::iterator Iter ;
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
if ( bGlob) {
if ( ! m_pGDB->TranslateGlob( *Iter, vtVN))
return false ;
}
else {
switch ( nTraType) {
case TRA_LOC :
if ( ! m_pGDB->Translate( *Iter, vtVN))
return false ;
break ;
case TRA_GLOB :
if ( ! m_pGDB->TranslateGlob( *Iter, vtVN))
return false ;
break ;
case TRA_GROUP :
if ( ! m_pGDB->TranslateGroup( *Iter, vtVN))
return false ;
break ;
}
}
@@ -1583,18 +1594,29 @@ GdbExecutor::ExecuteRotate( const std::string& sCmd2, const STRVECTOR& vsParams)
double dAngDeg ;
if ( ! FromString( vsParams[3], dAngDeg))
return false ;
// recupero flag per globale
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
// recupero flag per locale/globale/gruppo
enum { ROT_LOC = 0, ROT_GLOB = 1, ROT_GROUP = 2} ;
int nRotType = ROT_LOC ;
if ( sCmd2 == "GLOB" || sCmd2 == "G")
nRotType = ROT_GLOB ;
else if ( sCmd2 == "GROUP" || sCmd2 == "GR")
nRotType = ROT_GROUP ;
// esecuzione rotazioni
INTVECTOR::iterator Iter ;
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
if ( bGlob) {
if ( ! m_pGDB->RotateGlob( *Iter, ptPC, vtVN, dAngDeg))
return false ;
}
else {
switch ( nRotType) {
case ROT_LOC :
if ( ! m_pGDB->Rotate( *Iter, ptPC, vtVN, dAngDeg))
return false ;
break ;
case ROT_GLOB :
if ( ! m_pGDB->RotateGlob( *Iter, ptPC, vtVN, dAngDeg))
return false ;
break ;
case ROT_GROUP :
if ( ! m_pGDB->RotateGroup( *Iter, ptPC, vtVN, dAngDeg))
return false ;
break ;
}
}
@@ -1629,18 +1651,29 @@ GdbExecutor::ExecuteScale( const std::string& sCmd2, const STRVECTOR& vsParams)
! FromString( vsParams[3], dCoeffY) ||
! FromString( vsParams[4], dCoeffZ))
return false ;
// recupero flag per globale
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
// recupero flag per locale/globale/gruppo
enum { SCA_LOC = 0, SCA_GLOB = 1, SCA_GROUP = 2} ;
int nScaType = SCA_LOC ;
if ( sCmd2 == "GLOB" || sCmd2 == "G")
nScaType = SCA_GLOB ;
else if ( sCmd2 == "GROUP" || sCmd2 == "GR")
nScaType = SCA_GROUP ;
// esecuzione scalature
INTVECTOR::iterator Iter ;
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
if ( bGlob) {
if ( ! m_pGDB->ScaleGlob( *Iter, frRef, dCoeffX, dCoeffY, dCoeffZ))
return false ;
}
else {
switch ( nScaType) {
case SCA_LOC :
if ( ! m_pGDB->Scale( *Iter, frRef, dCoeffX, dCoeffY, dCoeffZ))
return false ;
break ;
case SCA_GLOB :
if ( ! m_pGDB->ScaleGlob( *Iter, frRef, dCoeffX, dCoeffY, dCoeffZ))
return false ;
break ;
case SCA_GROUP :
if ( ! m_pGDB->ScaleGroup( *Iter, frRef, dCoeffX, dCoeffY, dCoeffZ))
return false ;
break ;
}
}
@@ -1666,18 +1699,29 @@ GdbExecutor::ExecuteMirror( const std::string& sCmd2, const STRVECTOR& vsParams)
Vector3d vtVN ;
if ( ! GetVectorParam( vsParams[2], vtVN))
return false ;
// recupero flag per globale
bool bGlob = ( sCmd2 == "GLOB" || sCmd2 == "G") ;
// recupero flag per locale/globale/gruppo
enum { MIR_LOC = 0, MIR_GLOB = 1, MIR_GROUP = 2} ;
int nMirType = MIR_LOC ;
if ( sCmd2 == "GLOB" || sCmd2 == "G")
nMirType = MIR_GLOB ;
else if ( sCmd2 == "GROUP" || sCmd2 == "GR")
nMirType = MIR_GROUP ;
// esecuzione specchiature
INTVECTOR::iterator Iter ;
for ( Iter = vnNames.begin() ; Iter != vnNames.end() ; ++Iter) {
if ( bGlob) {
if ( ! m_pGDB->MirrorGlob( *Iter, ptPC, vtVN))
return false ;
}
else {
switch ( nMirType) {
case MIR_LOC :
if ( ! m_pGDB->Mirror( *Iter, ptPC, vtVN))
return false ;
break ;
case MIR_GLOB :
if ( ! m_pGDB->MirrorGlob( *Iter, ptPC, vtVN))
return false ;
break ;
case MIR_GROUP :
if ( ! m_pGDB->MirrorGroup( *Iter, ptPC, vtVN))
return false ;
break ;
}
}