//---------------------------------------------------------------------------- // EgalTech 2014-2014 //---------------------------------------------------------------------------- // File : API_GdbModify.cpp Data : 06.10.14 Versione : 1.5i5 // Contenuto : Funzioni di modifica geometrica per API. // // // // Modifiche : 06.10.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "API.h" #include "API_Macro.h" #include "/EgtDev/Include/EInAPI.h" #include "/EgtDev/Include/EgkGeoPoint3d.h" #include "/EgtDev/Include/EgkGeoVector3d.h" #include "/EgtDev/Include/EgkSurfTriMesh.h" #include "/EgtDev/Include/EgkExtText.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGnStringConverter.h" #include "/EgtDev/Include/EgtPointerOwner.h" using namespace std ; //------------------------------------------------------------------------------- BOOL __stdcall EgtChangeGroupFrame( int nId, double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il riferimento del gruppo Frame3d* pFrame = pGeomDB->GetGroupFrame( nId) ; if ( pFrame == nullptr) return FALSE ; // imposto il nuovo riferimento Frame3d frNew ; if ( ! frNew.Set( ptOrig, vtX, vtY, vtZ)) return FALSE ; *pFrame = frNew ; return TRUE ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtChangeVectorBase( int nId, const double ptB[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il vettore IGeoVector3d* pGVect = GetGeoVector3d( pGeomDB->GetGeoObj( nId)) ; if ( pGVect == nullptr) return FALSE ; // imposto il nuovo punto di base return ( pGVect->ChangeBase( ptB) ? TRUE : FALSE) ; } //---------------------------------------------------------------------------- BOOL __stdcall EgtInvertSurface( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // eseguo inversione singola if ( nId != GDB_ID_SEL) { // recupero la superficie e la inverto ISurf* pSurf = GetSurf( pGeomDB->GetGeoObj( nId)) ; if ( pSurf != nullptr && ! pSurf->Invert()) bOk = false ; } // eseguo inversione dei selezionati else { int nI = pGeomDB->GetFirstSelectedObj() ; while ( nI != GDB_ID_NULL && bOk) { // recupero la superficie e la inverto ISurf* pSurf = GetSurf( pGeomDB->GetGeoObj( nI)) ; if ( pSurf != nullptr && ! pSurf->Invert()) bOk = false ; // passo alla successiva nI = pGeomDB->GetNextSelectedObj() ; } } // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtInvertSurf(" + ( nId != GDB_ID_SEL ? ToString( nId) : "GDB_ID_SEL") + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtModifyText( int nId, const wchar_t* wsNewText) { return EgtModifyText( nId, wstrztoA( wsNewText)) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtModifyText( int nId, const string& sNewText) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) return FALSE ; // eseguo l'operazione return ( pTXT->ModifyText( sNewText) ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtChangeTextFont( int nId, const wchar_t* wsNewFont) { return EgtChangeTextFont( nId, wstrztoA( wsNewFont)) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtChangeTextFont( int nId, const string& sNewFont) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) return FALSE ; // eseguo l'operazione return ( pTXT->ChangeFont( sNewFont) ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtFlipText( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) return FALSE ; // eseguo l'operazione return ( pTXT->Flip() ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtMirrorText( int nId, BOOL bOnL) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) return FALSE ; // eseguo l'operazione return ( pTXT->Mir( ( bOnL ? true : false)) ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtExplodeText( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) bOk = false ; // recupero l'outline del testo ICURVEPLIST lstPCRV ; bOk = bOk && pTXT->GetOutline( lstPCRV) ; // inserisco le curve nella stessa posizione del testo ICURVEPLIST::iterator iIter ; for ( iIter = lstPCRV.begin() ; bOk && iIter != lstPCRV.end() ; ++ iIter) { // inserisco la curva nello stesso gruppo e nello stesso posto del GeomDB int nCrvId = pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, (*iIter)) ; if ( nCrvId == GDB_ID_NULL) bOk = false ; // copio gli attributi if ( ! pGeomDB->CopyAttributes( nId, nCrvId)) bOk = false ; } // elimino il testo originale bOk = bOk && pGeomDB->Erase( nId) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtExplodeText(" + ToString( nId) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; } //------------------------------------------------------------------------------- BOOL __stdcall EgtSplitText( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) bool bOk = true ; // recupero il testo IExtText* pTXT = GetExtText( pGeomDB->GetGeoObj( nId)) ; if ( pTXT == nullptr) bOk = false ; // recupero l'esplosione del testo in linee singole IEXTTEXTPVECTOR vTxt ; bOk = bOk && pTXT->SplitOnLineBreak( vTxt) ; // inserisco i nuovi testi nella stessa posizione del testo for ( int i = 0 ; bOk && i < int( vTxt.size()) ; ++ i) { // inserimento int nCrvId = pGeomDB->InsertGeoObj( GDB_ID_NULL, nId, GDB_BEFORE, vTxt[i]) ; // se errore if ( nCrvId == GDB_ID_NULL) { delete vTxt[i] ; bOk = false ; } // altrimenti copio gli attributi else { if ( ! pGeomDB->CopyAttributes( nId, nCrvId)) bOk = false ; } } // elimino il testo originale bOk = bOk && pGeomDB->Erase( nId) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtSplitText(" + ToString( nId) + ")" + " -- Ok=" + ToString( bOk) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco risultato return ( bOk ? TRUE : FALSE) ; }