//---------------------------------------------------------------------------- // EgalTech 2014-2014 //---------------------------------------------------------------------------- // File : API_GeoTransform.cpp Data : 30.09.14 Versione : 1.5i5 // Contenuto : Funzioni di trasformazione geometrica per API. // // // // Modifiche : 30.09.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "API.h" #include "API_Macro.h" #include "/EgtDev/Include/EInAPI.h" #include "/EgtDev/Include/EGkStringUtils3d.h" using namespace std ; //------------------------------------------------------------------------------- BOOL __stdcall EgtMove( int nId, double vVtMove[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo traslazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->Translate( nId, vVtMove) ; } // eseguo traslazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->Translate( nI, vVtMove)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtMove(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Vector3d( vVtMove)) + "})" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMoveGlob( int nId, double vVtMove[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo traslazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->TranslateGlob( nId, vVtMove) ; } // eseguo traslazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->TranslateGlob( nI, vVtMove)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtMoveGlob(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Vector3d( vVtMove)) + "})" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMoveGroup( int nId, double vVtMove[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo traslazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->TranslateGroup( nId, vVtMove) ; } // eseguo traslazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->TranslateGroup( nI, vVtMove)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtRotate( int nId, double vPtAx[3], double vVtAx[3], double dAngRotDeg) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo rotazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->Rotate( nId, vPtAx, vVtAx, dAngRotDeg) ; } // eseguo rotazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->Rotate( nI, vPtAx, vVtAx, dAngRotDeg)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtRotate(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPtAx)) + "},{" + ToString( Vector3d( vVtAx)) + "}," + ToString( dAngRotDeg) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtRotateGlob( int nId, double vPtAx[3], double vVtAx[3], double dAngRotDeg) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo rotazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->RotateGlob( nId, vPtAx, vVtAx, dAngRotDeg) ; } // eseguo rotazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->RotateGlob( nI, vPtAx, vVtAx, dAngRotDeg)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtRotateGlob(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPtAx)) + "},{" + ToString( Vector3d( vVtAx)) + "}," + ToString( dAngRotDeg) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtRotateGroup( int nId, double vPtAx[3], double vVtAx[3], double dAngRotDeg) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo rotazione singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->RotateGroup( nId, vPtAx, vVtAx, dAngRotDeg) ; } // eseguo rotazione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->RotateGroup( nI, vPtAx, vVtAx, dAngRotDeg)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtScale( int nId, const double vOrig[3], const double vX[3], const double vY[3], const double vZ[3], double dCoeffX, double dCoeffY, double dCoeffZ) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // costruisco il riferimento di scalatura Frame3d frFrame ; if ( ! frFrame.Set( vOrig, vX, vY, vZ)) bOk = false ; // eseguo scalatura singola if ( nId != GDB_ID_SEL) { bOk = bOk && pGeomDB->Scale( nId, frFrame, dCoeffX, dCoeffY, dCoeffZ) ; } // eseguo scalatura dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->Scale( nI, frFrame, dCoeffX, dCoeffY, dCoeffZ)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtScale(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{{" + ToString( frFrame.Orig()) + "},{" + ToString( frFrame.VersX()) + "},{" + ToString( frFrame.VersY()) + "},{" + ToString( frFrame.VersZ()) + "}}," + ToString( dCoeffX) + "," + ToString( dCoeffY) + "," + ToString( dCoeffZ) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtScaleGlob( int nId, const double vOrig[3], const double vX[3], const double vY[3], const double vZ[3], double dCoeffX, double dCoeffY, double dCoeffZ) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // costruisco il riferimento di scalatura Frame3d frFrame ; if ( ! frFrame.Set( vOrig, vX, vY, vZ)) bOk = false ; // eseguo scalatura singola if ( nId != GDB_ID_SEL) { bOk = bOk && pGeomDB->ScaleGlob( nId, frFrame, dCoeffX, dCoeffY, dCoeffZ) ; } // eseguo scalatura dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->ScaleGlob( nI, frFrame, dCoeffX, dCoeffY, dCoeffZ)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtScaleGlob(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{{" + ToString( frFrame.Orig()) + "},{" + ToString( frFrame.VersX()) + "},{" + ToString( frFrame.VersY()) + "},{" + ToString( frFrame.VersZ()) + "}}," + ToString( dCoeffX) + "," + ToString( dCoeffY) + "," + ToString( dCoeffZ) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtScaleGroup( int nId, const double vOrig[3], const double vX[3], const double vY[3], const double vZ[3], double dCoeffX, double dCoeffY, double dCoeffZ) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // costruisco il riferimento di scalatura Frame3d frFrame ; if ( ! frFrame.Set( vOrig, vX, vY, vZ)) bOk = false ; // eseguo scalatura singola if ( nId != GDB_ID_SEL) { bOk = bOk && pGeomDB->ScaleGroup( nId, frFrame, dCoeffX, dCoeffY, dCoeffZ) ; } // eseguo scalatura dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->ScaleGroup( nI, frFrame, dCoeffX, dCoeffY, dCoeffZ)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMirror( int nId, const double vPnt[3], const double vN[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo specularità singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->Mirror( nId, vPnt, vN) ; } // eseguo specularità dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->Mirror( nI, vPnt, vN)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtMirror(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPnt)) + "},{" + ToString( Vector3d( vN)) + "})" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMirrorGlob( int nId, const double vPnt[3], const double vN[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo specularità singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->MirrorGlob( nId, vPnt, vN) ; } // eseguo specularità dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->MirrorGlob( nI, vPnt, vN)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtMirrorGlob(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPnt)) + "},{" + ToString( Vector3d( vN)) + "})" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMirrorGroup( int nId, const double vPnt[3], const double vN[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo specularità singola if ( nId != GDB_ID_SEL) { bOk = pGeomDB->MirrorGroup( nId, vPnt, vN) ; } // eseguo specularità dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->MirrorGroup( nI, vPnt, vN)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtShear( int nId, const double vPnt[3], const double vN[3], const double vDir[3], double dCoeff) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo stiramento singolo if ( nId != GDB_ID_SEL) { bOk = pGeomDB->Shear( nId, vPnt, vN, vDir, dCoeff) ; } // eseguo stiramento dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->Shear( nI, vPnt, vN, vDir, dCoeff)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtShear(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPnt)) + "},{" + ToString( Vector3d( vN)) + "},{" + ToString( Vector3d( vDir)) + "}," + ToString( dCoeff) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtShearGlob( int nId, const double vPnt[3], const double vN[3], const double vDir[3], double dCoeff) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo stiramento singolo if ( nId != GDB_ID_SEL) { bOk = pGeomDB->ShearGlob( nId, vPnt, vN, vDir, dCoeff) ; } // eseguo stiramento dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->ShearGlob( nI, vPnt, vN, vDir, dCoeff)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtShearGlob(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ",{" + ToString( Point3d( vPnt)) + "},{" + ToString( Vector3d( vN)) + "},{" + ToString( Vector3d( vDir)) + "}," + ToString( dCoeff) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtShearGroup( int nId, const double vPnt[3], const double vN[3], const double vDir[3], double dCoeff) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo stiramento singolo if ( nId != GDB_ID_SEL) { bOk = pGeomDB->ShearGroup( nId, vPnt, vN, vDir, dCoeff) ; } // eseguo stiramento dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { if ( ! pGeomDB->ShearGroup( nI, vPnt, vN, vDir, dCoeff)) bOk = false ; nI = pGeomDB->GetNextSelectedObj() ; } } // restituisco risultato return ( bOk ? TRUE : FALSE) ; }