//---------------------------------------------------------------------------- // EgalTech 2014-2014 //---------------------------------------------------------------------------- // File : API_GdbObjects.cpp Data : 02.09.14 Versione : 1.5i1 // Contenuto : Funzioni iterazione di DB geometrico per API. // // // // Modifiche : 02.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" #include "/EgtDev/Include/EGnStringConverter.h" #include "/EgtDev/Include/EgtPointerOwner.h" using namespace std ; //----------------------------------------------------------------------------- BOOL __stdcall EgtExistsObj( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // verifico se esiste l'oggetto return ( pGeomDB->ExistsObj( nId) ? TRUE : FALSE) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetGroupObjs( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il numero di oggetti nel gruppo return ( pGeomDB->GetGroupObjs( nId)) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetFirstInGroup( int nGroupId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il primo oggetto nel gruppo return pGeomDB->GetFirstInGroup( nGroupId) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetNext( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il prossimo oggetto nello stesso gruppo return pGeomDB->GetNext( nId) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetLastInGroup( int nGroupId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero l'ultimo oggetto nel gruppo return pGeomDB->GetLastInGroup( nGroupId) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetPrev( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il precedente oggetto nello stesso gruppo return pGeomDB->GetPrev( nId) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtGetBBox( int nId, int nFlag, double ptMin[3], double ptMax[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il bounding box locale dell'oggetto BBox3d b3Loc ; if ( ! pGeomDB->GetLocalBBox( nId, b3Loc, nFlag)) return FALSE ; ptMin[0] = b3Loc.GetMin().x ; ptMin[1] = b3Loc.GetMin().y ; ptMin[2] = b3Loc.GetMin().z ; ptMax[0] = b3Loc.GetMax().x ; ptMax[1] = b3Loc.GetMax().y ; ptMax[2] = b3Loc.GetMax().z ; return TRUE ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtGetBBoxGlob( int nId, int nFlag, double ptMin[3], double ptMax[3]) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // recupero il bounding box globale dell'oggetto BBox3d b3Loc ; if ( ! pGeomDB->GetGlobalBBox( nId, b3Loc, nFlag)) return FALSE ; ptMin[0] = b3Loc.GetMin().x ; ptMin[1] = b3Loc.GetMin().y ; ptMin[2] = b3Loc.GetMin().z ; ptMax[0] = b3Loc.GetMax().x ; ptMax[1] = b3Loc.GetMax().y ; ptMax[2] = b3Loc.GetMax().z ; return TRUE ; } //----------------------------------------------------------------------------- int __stdcall EgtCopy( int nSouId, int nRefId, int nSonBeforeAfter) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // eseguo la copia return pGeomDB->Copy( nSouId, GDB_ID_NULL, nRefId, nSonBeforeAfter) ; } //----------------------------------------------------------------------------- int __stdcall EgtCopyGlob( int nSouId, int nRefId, int nSonBeforeAfter) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // eseguo la copia mantenendo la posizione in globale return pGeomDB->CopyGlob( nSouId, GDB_ID_NULL, nRefId, nSonBeforeAfter) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtRelocate( int nSouId, int nRefId, int nSonBeforeAfter) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // eseguo la rilocazione return ( pGeomDB->Relocate( nSouId, nRefId, nSonBeforeAfter) ? TRUE : FALSE) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtRelocateGlob( int nSouId, int nRefId, int nSonBeforeAfter) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // eseguo la rilocazione mantenendo la posizione in globale return ( pGeomDB->RelocateGlob( nSouId, nRefId, nSonBeforeAfter) ? TRUE : FALSE) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtErase( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) // eseguo la cancellazione return ( pGeomDB->Erase( nId) ? TRUE : FALSE) ; } //----------------------------------------------------------------------------- int __stdcall EgtGetType( int nId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_TY_NONE) // recupero il tipo GDB int nType = pGeomDB->GetGdbType( nId) ; if ( nType == GDB_TY_GEO) { // recupero il tipo Geo const IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nId) ; if ( pGeoObj == nullptr) return GDB_TY_NONE ; else return pGeoObj->GetType() ; } else if ( nType == GDB_TY_GROUP) return GDB_TY_GROUP ; else return GDB_TY_NONE ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtGetTitle( int nId, wchar_t*& wsTitle) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero l'oggetto geometrico const IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nId) ; if ( pGeoObj == nullptr) return FALSE ; // recupero la stringa del titolo wsTitle = _wcsdup( stringtoW( pGeoObj->GetTitle())) ; return (( wsTitle == nullptr) ? FALSE : TRUE) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtGroupDump( int nId, wchar_t*& wsDump) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // preparo l'intestazione string sDump = "Group " + ToString( nId) + "\r\n" ; // preparo gli attributi pGeomDB->DumpAttributes( nId, sDump, "\r\n") ; // numero di nodi (figli) int nNodes = pGeomDB->GetGroupObjs( nId) ; sDump += "Nodes : " + ToString( nNodes) + "\r\n" ; // riferimento in globale Frame3d frGlob ; if ( pGeomDB->GetGroupGlobFrame( nId, frGlob)) { sDump += "GlobFrame :\r\n" ; sDump += " O(" + ToString( frGlob.Orig()) + ")\r\n" ; sDump += " X(" + ToString( frGlob.VersX()) + ")\r\n" ; sDump += " Y(" + ToString( frGlob.VersY()) + ")\r\n" ; sDump += " Z(" + ToString( frGlob.VersZ()) + ")\r\n" ; } // ingombro in globale BBox3d b3Glob ; if ( pGeomDB->GetGlobalBBox( nId, b3Glob, BBF_EXACT)) { sDump += "GlobBBox :\r\n" ; Point3d ptMin, ptMax ; if ( b3Glob.GetMinMax( ptMin, ptMax)) { sDump += " m(" + ToString( ptMin) + ")\r\n" ; sDump += " M(" + ToString( ptMax) + ")\r\n" ; } else { sDump += " Empty\r\n" ; } } // alloco buffer di ritorno ed eseguo copia wsDump = _wcsdup( stringtoW( sDump)) ; return (( wsDump == nullptr) ? FALSE : TRUE) ; } //----------------------------------------------------------------------------- BOOL __stdcall EgtGeoObjDump( int nId, wchar_t*& wsDump) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, FALSE) // recupero l'oggetto geometrico const IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nId) ; if ( pGeoObj == nullptr) return FALSE ; // preparo l'intestazione string sDump = pGeoObj->GetTitle() + " " + ToString( nId) + "\r\n" ; // preparo gli attributi pGeomDB->DumpAttributes( nId, sDump, "\r\n") ; // recupero i dati geometrici if ( ! pGeoObj->Dump( sDump, "\r\n")) return FALSE ; // alloco buffer di ritorno ed eseguo copia wsDump = _wcsdup( stringtoW( sDump)) ; return (( wsDump == nullptr) ? FALSE : TRUE) ; }