//---------------------------------------------------------------------------- // EgalTech 2014-2015 //---------------------------------------------------------------------------- // File : API_GdbCreate.cpp Data : 07.01.15 Versione : 1.6a1 // Contenuto : Funzioni di creazione oggetti del DB geometrico per API. // // // // Modifiche : 30.09.14 DS Creazione modulo. // 07.01.15 DS Agg. scrittura comandi Lua. // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "API.h" #include "API_Macro.h" #include "AuxTools.h" #include "/EgtDev/Include/EInAPI.h" #include "/EgtDev/Include/EInConst.h" #include "/EgtDev/Include/EgkGeoPoint3d.h" #include "/EgtDev/Include/EgkGeoVector3d.h" #include "/EgtDev/Include/EgkExtText.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGnStringConverter.h" #include "/EgtDev/Include/EgtPointerOwner.h" using namespace std ; //------------------------------------------------------------------------------- int __stdcall EgtCreateGroup( int nParentId, const double ptOrig[3], const double vX[3], const double vY[3], const double vZ[3], int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // costruisco il riferimento Frame3d frFrameL ; bOk = bOk && frFrameL.Set( ptOrig, vX, vY, vZ) ; // lo porto in locale if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) frFrameL.ToLoc( frLoc) ; else /* RTY_GRID */ frFrameL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } // creo il gruppo int nId = ( bOk ? pGeomDB->AddGroup( GDB_ID_NULL, nParentId, frFrameL) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua ; if ( AreSamePointApprox( ORIG, ptOrig) && AreSameVectorExact( X_AX, vX) && AreSameVectorExact( Y_AX, vY) && AreSameVectorExact( Z_AX, vZ)) sLua = "EgtGroup(" + ToString( nParentId) + "," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; else sLua = "EgtGroup(" + ToString( nParentId) + ",{{" + ToString( Point3d( ptOrig)) + "},{" + ToString( Vector3d( vX)) + "},{" + ToString( Vector3d( vY)) + "},{" + ToString( Vector3d( vZ)) + "}}," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo del nuovo gruppo return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateGeoPoint( int nParentId, const double ptP[3], int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale il punto Point3d ptPL( ptP) ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { ptPL.ToLoc( frLoc) ; } else /* RTY_GRID */ { ptPL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo il punto PtrOwner pGeoPnt( CreateGeoPoint3d()) ; bOk = bOk && ! IsNull( pGeoPnt) ; // setto il punto bOk = bOk && pGeoPnt->Set( ptPL) ; // inserisco il punto nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pGeoPnt)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtPoint(" + ToString( nParentId) + ",{" + ToString( Point3d( ptP)) + "}," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo della nuova entità return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateGeoVector( int nParentId, const double vtV[3], const double ptB[3], int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale il vettore e il punto Vector3d vtVL( vtV) ; Point3d ptBL( ptB) ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { vtVL.ToLoc( frLoc) ; ptBL.ToLoc( frLoc) ; } else /* RTY_GRID */ { vtVL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; ptBL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo il vettore PtrOwner pGeoVct( CreateGeoVector3d()) ; bOk = bOk && ! IsNull( pGeoVct) ; // setto il vettore (con il punto base) bOk = bOk && pGeoVct->Set( vtVL, ptBL) ; // inserisco il vettore nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pGeoVct)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua ; if ( Point3d( ptB).IsSmall()) sLua = "EgtVector(" + ToString( nParentId) + ",{" + ToString( Vector3d( vtV)) + "}," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; else sLua = "EgtVector(" + ToString( nParentId) + ",{" + ToString( Vector3d( vtV)) + "},{" + ToString( Point3d( ptB)) + "}," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo della nuova entità return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateGeoFrame( int nParentId, const double ptOrig[3], const double vX[3], const double vY[3], const double vZ[3], int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale l'origine e i versori Point3d ptOrigL( ptOrig) ; Vector3d vtXL( vX) ; Vector3d vtYL( vY) ; Vector3d vtZL( vZ) ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { ptOrigL.ToLoc( frLoc) ; vtXL.ToLoc( frLoc) ; vtYL.ToLoc( frLoc) ; vtZL.ToLoc( frLoc) ; } else /* RTY_GRID */ { ptOrigL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtXL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtYL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtZL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo e setto il riferimento PtrOwner pGeoFrm( CreateGeoFrame3d()) ; bOk = bOk & ! IsNull( pGeoFrm) ; bOk = bOk & pGeoFrm->Set( ptOrigL, vtXL, vtYL, vtZL) ; // inserisco il riferimento nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pGeoFrm)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtFrame(" + ToString( nParentId) + ",{{" + ToString( Point3d( ptOrig)) + "},{" + ToString( Vector3d( vX)) + "},{" + ToString( Vector3d( vY)) + "},{" + ToString( Vector3d( vZ)) + "}}," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo del nuovo gruppo return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateText( int nParentId, const double ptP[3], double dAngRotDeg, const wchar_t* wsText, double dH, int nRefType) { return EgtCreateText( nParentId, ptP, dAngRotDeg, wstrztoA( wsText), dH, nRefType) ; } //------------------------------------------------------------------------------- int EgtCreateText( int nParentId, const Point3d& ptP, double dAngRotDeg, const string& sText, double dH, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale l'origine e i versori Point3d ptPL( ptP) ; Vector3d vtNL = Z_AX ; Vector3d vtDL = X_AX ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { ptPL.ToLoc( frLoc) ; vtNL.ToLoc( frLoc) ; vtDL.ToLoc( frLoc) ; } else /* RTY_GRID */ { ptPL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtNL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtDL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo il testo e lo riempio PtrOwner pTXT( CreateExtText()) ; bOk = bOk && ! IsNull( pTXT) ; bOk = bOk && pTXT->Set( ptPL, vtNL, vtDL, sText, "", false, dH) ; // inserisco il testo nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pTXT)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtText(" + ToString( nParentId) + ",{" + ToString( ptP) + "}," + ToString( dAngRotDeg) + ",'" + sText + "','" + ToString( dH) + "," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo del oggetto return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateTextEx( int nParentId, const double ptP[3], const double vtN[3], const double vtD[3], const wchar_t* wsText, const wchar_t* wsFont, BOOL bItalic, double dH, int nRefType) { return EgtCreateTextEx( nParentId, ptP, vtN, vtD, wstrztoA( wsText), wstrztoA( wsFont), (bItalic != FALSE), dH, nRefType) ; } //------------------------------------------------------------------------------- int EgtCreateTextEx( int nParentId, const Point3d& ptP, const Vector3d& vtN, const Vector3d& vtD, const string& sText, const string& sFont, bool bItalic, double dH, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale l'origine e i versori Point3d ptPL( ptP) ; Vector3d vtNL( vtN) ; Vector3d vtDL( vtD) ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { ptPL.ToLoc( frLoc) ; vtNL.ToLoc( frLoc) ; vtDL.ToLoc( frLoc) ; } else /* RTY_GRID */ { ptPL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtNL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtDL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo il testo e lo riempio PtrOwner pTXT( CreateExtText()) ; bOk = bOk && ! IsNull( pTXT) ; bOk = bOk && pTXT->Set( ptPL, vtNL, vtDL, sText, sFont, bItalic, dH) ; // inserisco il testo nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pTXT)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtTextEx(" + ToString( nParentId) + ",{" + ToString( ptP) + "},{" + ToString( vtN) + "},{" + ToString( vtD) + "},'" + sText + "','" + sFont + "'," + ( bItalic ? "'I'" : "'S'") + "," + ToString( dH) + "," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo del oggetto return nId ; } //------------------------------------------------------------------------------- int __stdcall EgtCreateTextAdv( int nParentId, const double ptP[3], const double vtN[3], const double vtD[3], const wchar_t* wsText, const wchar_t* wsFont, int nW, BOOL bItalic, double dH, double dRat, double dAddAdv, int nInsPos, int nRefType) { return EgtCreateTextAdv( nParentId, ptP, vtN, vtD, wstrztoA( wsText), wstrztoA( wsFont), nW, ( bItalic != FALSE), dH, dRat, dAddAdv, nInsPos, nRefType) ; } //------------------------------------------------------------------------------- int EgtCreateTextAdv( int nParentId, const Point3d& ptP, const Vector3d& vtN, const Vector3d& vtD, const string& sText, const string& sFont, int nW, bool bItalic, double dH, double dRat, double dAddAdv, int nInsPos, int nRefType) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) bool bOk = true ; // porto in locale l'origine e i versori Point3d ptPL( ptP) ; Vector3d vtNL( vtN) ; Vector3d vtDL( vtD) ; if ( nRefType != RTY_LOC) { Frame3d frLoc ; bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ; if ( nRefType == RTY_GLOB) { ptPL.ToLoc( frLoc) ; vtNL.ToLoc( frLoc) ; vtDL.ToLoc( frLoc) ; } else /* RTY_GRID */ { ptPL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtNL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; vtDL.LocToLoc( pGeomDB->GetGridFrame(), frLoc) ; } } // creo il testo e lo imposto PtrOwner pTXT( CreateExtText()) ; bOk = bOk && ! IsNull( pTXT) ; bOk = bOk && pTXT->Set( ptPL, vtNL, vtDL, sText, sFont, nW, bItalic, dH, dRat, dAddAdv, nInsPos) ; // inserisco il testo nel DB int nId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pTXT)) : GDB_ID_NULL) ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { string sLua = "EgtTextAdv(" + ToString( nParentId) + ",{" + ToString( ptP) + "},{" + ToString( vtN) + "},{" + ToString( vtD) + "},'" + sText + "','" + sFont + "'," + ToString( nW) + "," + ( bItalic ? "'I'" : "'S'") + "," + ToString( dH) + "," + ToString( dRat) + "," + ToString( dAddAdv) + "," + ETxtInsPosToString( nInsPos) + "," + RefTypeToString( nRefType) + ")" + " -- Id=" + ToString( nId) ; LOG_INFO( GetCmdLogger(), sLua.c_str()) ; } // restituisco l'identificativo del oggetto return nId ; }