e0c2b9dacd
- aggiunta funzione exe/lua DuplicateGeomDB.
708 lines
24 KiB
C++
708 lines
24 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2014-2015
|
|
//----------------------------------------------------------------------------
|
|
// File : EXE_GdbObjects.cpp Data : 04.05.15 Versione : 1.6e1
|
|
// Contenuto : Funzioni iterazione di DB geometrico per EXE.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 02.09.14 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "EXE.h"
|
|
#include "EXE_Macro.h"
|
|
#include "GeoTools.h"
|
|
#include "AuxTools.h"
|
|
#include "/EgtDev/Include/EXeExecutor.h"
|
|
#include "/EgtDev/Include/EGkMultiGeomDB.h"
|
|
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
|
#include "/EgtDev/Include/EGkUiUnits.h"
|
|
#include "/EgtDev/Include/EgtStringConverter.h"
|
|
#include "/EgtDev/Include/EgtPointerOwner.h"
|
|
|
|
using namespace std ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeExistsObj( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// verifico se esiste l'oggetto
|
|
return pGeomDB->ExistsObj( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetParent( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// verifico se esiste l'oggetto
|
|
return pGeomDB->GetParentId( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetGlobFrame( int nId, Frame3d& frGlob)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il riferimento globale in cui è immerso l'oggetto
|
|
return pGeomDB->GetGlobFrame( nId, frGlob) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetGroupGlobFrame( int nId, Frame3d& frGlob)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il riferimento globale del gruppo (in cui sono immersi i suoi oggetti figli)
|
|
return pGeomDB->GetGroupGlobFrame( nId, frGlob) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetGroupObjs( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, 0)
|
|
// recupero il numero di oggetti nel gruppo
|
|
return pGeomDB->GetGroupObjs( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetAllInGroup( int nGroupId, INTVECTOR& vIds)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il numero di oggetti nel gruppo
|
|
if ( ! pGeomDB->ExistsObj( nGroupId))
|
|
return false ;
|
|
// preparo il riempimento del vettore
|
|
vIds.clear() ;
|
|
int nCount = pGeomDB->GetGroupObjs( nGroupId) ;
|
|
if ( nCount == 0)
|
|
return true ;
|
|
vIds.reserve( nCount) ;
|
|
// eseguo il riempimento
|
|
int nEntId = pGeomDB->GetFirstInGroup( nGroupId) ;
|
|
while ( nEntId != GDB_ID_NULL) {
|
|
vIds.emplace_back( nEntId) ;
|
|
nEntId = pGeomDB->GetNext( nEntId) ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetFirstInGroup( int nGroupId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il primo oggetto nel gruppo
|
|
return pGeomDB->GetFirstInGroup( nGroupId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetNext( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il prossimo oggetto nello stesso gruppo
|
|
return pGeomDB->GetNext( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetLastInGroup( int nGroupId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero l'ultimo oggetto nel gruppo
|
|
return pGeomDB->GetLastInGroup( nGroupId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetPrev( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il precedente oggetto nello stesso gruppo
|
|
return pGeomDB->GetPrev( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetFirstGroupInGroup( int nGroupId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il primo gruppo nel gruppo
|
|
return pGeomDB->GetFirstGroupInGroup( nGroupId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetNextGroup( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il prossimo gruppo nello stesso gruppo
|
|
return pGeomDB->GetNextGroup( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetLastGroupInGroup( int nGroupId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero l'ultimo gruppo nel gruppo
|
|
return pGeomDB->GetLastGroupInGroup( nGroupId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetPrevGroup( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il precedente gruppo nello stesso gruppo
|
|
return pGeomDB->GetPrevGroup( nId) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetFirstNameInGroup( int nGroupId, const string& sName)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il primo oggetto con il nome desiderato nel gruppo
|
|
return pGeomDB->GetFirstNameInGroup( nGroupId, sName) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetNextName( int nId, const string& sName)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il prossimo oggetto nello stesso gruppo con il nome voluto
|
|
return pGeomDB->GetNextName( nId, sName) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetLastNameInGroup( int nGroupId, const string& sName)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero l'ultimo oggetto con il nome desiderato nel gruppo
|
|
return pGeomDB->GetLastNameInGroup( nGroupId, sName) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetPrevName( int nId, const string& sName)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// recupero il precedente oggetto nello stesso gruppo con il nome voluto
|
|
return pGeomDB->GetPrevName( nId, sName) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetNameInGroup( int nGroupId, const string& sName, INTVECTOR& vIds)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
if ( ! pGeomDB->ExistsObj( nGroupId))
|
|
return false ;
|
|
// recupero gli oggetti con il nome desiderato
|
|
vIds.clear() ;
|
|
int nId = pGeomDB->GetFirstNameInGroup( nGroupId, sName) ;
|
|
while ( nId != GDB_ID_NULL) {
|
|
vIds.push_back( nId) ;
|
|
nId = pGeomDB->GetNextName( nId, sName) ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetInfoInGroup( int nGroupId, const string& sKey, INTVECTOR& vIds)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
if ( ! pGeomDB->ExistsObj( nGroupId))
|
|
return false ;
|
|
// recupero gli oggetti con l'info desiderata
|
|
vIds.clear() ;
|
|
int nId = pGeomDB->GetFirstInGroup( nGroupId) ;
|
|
while ( nId != GDB_ID_NULL) {
|
|
if ( pGeomDB->ExistsInfo( nId, sKey))
|
|
vIds.push_back( nId) ;
|
|
nId = pGeomDB->GetNext( nId) ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetBBox( int nId, int nFlag, BBox3d& b3Box)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il bounding box dell'oggetto in locale
|
|
return pGeomDB->GetLocalBBox( nId, b3Box, nFlag) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetBBoxGlob( int nId, int nFlag, BBox3d& b3Box)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il bounding box dell'oggetto in globale
|
|
return pGeomDB->GetGlobalBBox( nId, b3Box, nFlag) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGetBBoxRef( int nId, int nFlag, const Frame3d& frRef, BBox3d& b3Box)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// recupero il bounding box dell'oggetto nel riferimento
|
|
return pGeomDB->GetRefBBox( nId, frRef, b3Box, nFlag) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeCopy( int nSouId, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
nRefId = AdjustId( nRefId) ;
|
|
// eseguo la copia
|
|
int nNewId = pGeomDB->Copy( nSouId, GDB_ID_NULL, nRefId, nSonBeforeAfter) ;
|
|
pGeomDB->RemoveInfo( nNewId, GDB_SI_LIST) ;
|
|
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtCopy(" + ToString( nSouId) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Id=" + ToString( nNewId) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return nNewId ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeCopyEx( int nSouCtx, int nSouId, int nDestCtx, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
// recupero i due GeomDB
|
|
IGeomDB* pSouGeomDB = GetGeomDB( nSouCtx) ;
|
|
VERIFY_GEOMDB( pSouGeomDB, GDB_ID_NULL)
|
|
IGeomDB* pDstGeomDB = GetGeomDB( nDestCtx) ;
|
|
VERIFY_GEOMDB( pDstGeomDB, GDB_ID_NULL)
|
|
// risolvo l'Id di riferimento per destinazione
|
|
nRefId = AdjustId( nRefId, nDestCtx) ;
|
|
// eseguo la copia
|
|
int nNewId = Copy( pSouGeomDB, nSouId, pDstGeomDB, GDB_ID_NULL, nRefId, nSonBeforeAfter) ;
|
|
pDstGeomDB->RemoveInfo( nNewId, GDB_SI_LIST) ;
|
|
pDstGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtCopyEx(" + ToString( nSouCtx) + "," +
|
|
ToString( nSouId) + "," +
|
|
ToString( nDestCtx) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Id=" + ToString( nNewId) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return nNewId ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeCopyGlob( int nSouId, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
nRefId = AdjustId( nRefId) ;
|
|
// eseguo la copia mantenendo la posizione in globale
|
|
int nNewId = pGeomDB->CopyGlob( nSouId, GDB_ID_NULL, nRefId, nSonBeforeAfter) ;
|
|
pGeomDB->RemoveInfo( nNewId, GDB_SI_LIST) ;
|
|
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtCopyGlob(" + ToString( nSouId) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Id=" + ToString( nNewId) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return nNewId ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeCopyGlobEx( int nSouCtx, int nSouId, int nDestCtx, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
// recupero i due GeomDB
|
|
IGeomDB* pSouGeomDB = GetGeomDB( nSouCtx) ;
|
|
VERIFY_GEOMDB( pSouGeomDB, GDB_ID_NULL)
|
|
IGeomDB* pDstGeomDB = GetGeomDB( nDestCtx) ;
|
|
VERIFY_GEOMDB( pDstGeomDB, GDB_ID_NULL)
|
|
// risolvo l'Id di riferimento per destinazione
|
|
nRefId = AdjustId( nRefId, nDestCtx) ;
|
|
// eseguo la copia
|
|
int nNewId = CopyGlob( pSouGeomDB, nSouId, pDstGeomDB, GDB_ID_NULL, nRefId, nSonBeforeAfter) ;
|
|
pDstGeomDB->RemoveInfo( nNewId, GDB_SI_LIST) ;
|
|
pDstGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtCopyGlobEx(" + ToString( nSouCtx) + "," +
|
|
ToString( nSouId) + "," +
|
|
ToString( nDestCtx) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Id=" + ToString( nNewId) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return nNewId ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeDuplicateGeomDB( int nSouCtx, int nDestCtx, bool bSkipTemp)
|
|
{
|
|
// recupero i due GeomDB
|
|
IGeomDB* pSouGeomDB = GetGeomDB( nSouCtx) ;
|
|
VERIFY_GEOMDB( pSouGeomDB, GDB_ID_NULL)
|
|
IGeomDB* pDstGeomDB = GetGeomDB( nDestCtx) ;
|
|
VERIFY_GEOMDB( pDstGeomDB, GDB_ID_NULL)
|
|
// eseguo la duplicazione del primo GeomDB nel secondo
|
|
bool bOk = DuplicateGeomDB( pSouGeomDB, pDstGeomDB, bSkipTemp) ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtDuplicateGeomDB(" + ToString( nSouCtx) + "," +
|
|
ToString( nDestCtx) + "," +
|
|
( bSkipTemp ? "true" : "false") + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeRelocate( int nSouId, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
nRefId = AdjustId( nRefId) ;
|
|
// eseguo la rilocazione
|
|
bool bOk = pGeomDB->Relocate( nSouId, nRefId, nSonBeforeAfter) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtRelocate(" + ToString( nSouId) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeRelocateGlob( int nSouId, int nRefId, int nSonBeforeAfter)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
nRefId = AdjustId( nRefId) ;
|
|
// eseguo la rilocazione mantenendo la posizione in globale
|
|
bool bOk = pGeomDB->RelocateGlob( nSouId, nRefId, nSonBeforeAfter) ;
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtRelocateGlob(" + ToString( nSouId) + "," +
|
|
IdToString( nRefId) + "," +
|
|
InsToString( nSonBeforeAfter) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGroupSwap( int nId1, int nId2, bool bSwapRef, bool bMark)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// eseguo swap
|
|
return pGeomDB->GroupSwap( nId1, nId2, bSwapRef, bMark) ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetNewId( void)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
|
// richiedo valore nuovo Id
|
|
return pGeomDB->GetNewId() ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeChangeId( int nId, int nNewId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// eseguo cambio di Id
|
|
bool bOk = pGeomDB->ChangeId( nId, nNewId) ;
|
|
// se pezzo corrente o layer corrente
|
|
if ( bOk) {
|
|
if ( nId == ExeGetCurrPart())
|
|
ExeSetCurrPartLayer( nNewId, ExeGetCurrLayer()) ;
|
|
else if ( nId == ExeGetCurrLayer())
|
|
ExeSetCurrPartLayer( ExeGetCurrPart(), nNewId) ;
|
|
}
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtChangeId(" + ToString( nId) + "," +
|
|
ToString( nNewId) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeErase( const INTVECTOR& vIds)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// eseguo cancellazione
|
|
bool bOk = true ;
|
|
bool bErasedCurrPart = false ;
|
|
bool bErasedCurrLayer = false ;
|
|
int nCurrPartId = ExeGetCurrPart() ;
|
|
int nCurrLayerId = ExeGetCurrLayer() ;
|
|
for ( size_t i = 0 ; i < vIds.size() ; ++ i) {
|
|
int nId = (( vIds[i] != GDB_ID_SEL) ? vIds[i] : pGeomDB->GetFirstSelectedObj()) ;
|
|
while ( nId != GDB_ID_NULL) {
|
|
// se pezzo con duplicati, cancello anche questi
|
|
if ( ExeIsPart( nId)) {
|
|
INTVECTOR vnRef ;
|
|
pGeomDB->GetInfo( nId, GDB_SI_DUPLIST, vnRef) ;
|
|
for ( int nDupId : vnRef)
|
|
pGeomDB->Erase( nDupId) ;
|
|
}
|
|
// se altrimenti duplicato di pezzo, lo tolgo da lista duplicati nell'originale
|
|
else if ( ExeIsDuplo( nId)) {
|
|
int nOrigId ;
|
|
pGeomDB->GetInfo( nId, GDB_SI_DUPSOU, nOrigId) ;
|
|
INTVECTOR vnRef ;
|
|
pGeomDB->GetInfo( nOrigId, GDB_SI_DUPLIST, vnRef) ;
|
|
vnRef.erase( remove( vnRef.begin(), vnRef.end(), nId), vnRef.end()) ;
|
|
pGeomDB->SetInfo( nOrigId, GDB_SI_DUPLIST, vnRef) ;
|
|
}
|
|
// cancello
|
|
if ( ! pGeomDB->Erase( nId))
|
|
bOk = false ;
|
|
// verifico se cancellato pezzo corrente o layer corrente
|
|
if ( nId == nCurrPartId)
|
|
bErasedCurrPart = true ;
|
|
else if ( nId == nCurrLayerId)
|
|
bErasedCurrLayer = true ;
|
|
// passo al successivo
|
|
nId = (( vIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetFirstSelectedObj()) ;
|
|
}
|
|
}
|
|
// se cancellato pezzo corrente o layer corrente
|
|
bool bPrevCmdLog = SetCmdLog( false) ;
|
|
if ( bErasedCurrPart)
|
|
ExeResetCurrPartLayer() ;
|
|
else if ( bErasedCurrLayer)
|
|
ExeSetCurrPartLayer( nCurrPartId, ExeGetFirstLayer( nCurrPartId, true)) ;
|
|
SetCmdLog( bPrevCmdLog) ;
|
|
// dichiaro progetto modificato
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtErase({" + IdListToString( vIds) + "})" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeEmptyGroup( int nId)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// svuoto il gruppo
|
|
bool bOk = pGeomDB->EmptyGroup( nId) ;
|
|
// se cancellato pezzo corrente o layer corrente
|
|
bool bPrevCmdLog = SetCmdLog( false) ;
|
|
int nCurrPartId = ExeGetCurrPart() ;
|
|
int nCurrLayerId = ExeGetCurrLayer() ;
|
|
if ( ! pGeomDB->ExistsObj( nCurrPartId))
|
|
ExeResetCurrPartLayer() ;
|
|
else if ( ! pGeomDB->ExistsObj( nCurrLayerId))
|
|
ExeSetCurrPartLayer( nCurrPartId, ExeGetFirstLayer( nCurrPartId, true)) ;
|
|
SetCmdLog( bPrevCmdLog) ;
|
|
// dichiaro progetto modificato
|
|
ExeSetModified() ;
|
|
// se richiesto, salvo il comando Lua equivalente
|
|
if ( IsCmdLog()) {
|
|
string sLua = "EgtEmptyGroup(" + ToString( nId) + ")" +
|
|
" -- Ok=" + ToString( bOk) ;
|
|
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
|
}
|
|
// restituisco risultato
|
|
return bOk ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
int
|
|
ExeGetType( 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
|
|
ExeGetTitle( int nId, string& sTitle)
|
|
{
|
|
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
|
|
sTitle = pGeoObj->GetTitle() ;
|
|
return true ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGroupDump( int nId, string& sDump)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// flag per unità di misura di uscita
|
|
bool bMM = ExeUiUnitsAreMM() ;
|
|
// preparo l'intestazione
|
|
sDump = "Group " + ToString( nId) + "\r\n" ;
|
|
// preparo gli attributi
|
|
pGeomDB->DumpAttributes( nId, sDump, bMM, "\r\n") ;
|
|
// preparo TextureData
|
|
pGeomDB->DumpTextureData( nId, sDump, bMM, "\r\n") ;
|
|
// preparo UserObj
|
|
pGeomDB->DumpUserObj( nId, sDump, bMM, "\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( GetInUiUnits( frGlob.Orig(), bMM)) + ")\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( GetInUiUnits( ptMin, bMM)) + ")\r\n" ;
|
|
sDump += " M(" + ToString( GetInUiUnits( ptMax, bMM)) + ")\r\n" ;
|
|
}
|
|
else {
|
|
sDump += " Empty\r\n" ;
|
|
}
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
bool
|
|
ExeGeoObjDump( int nId, string& sDump)
|
|
{
|
|
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
|
VERIFY_GEOMDB( pGeomDB, false)
|
|
// flag per unità di misura di uscita
|
|
bool bMM = ExeUiUnitsAreMM() ;
|
|
// recupero l'oggetto geometrico
|
|
const IGeoObj* pGeoObj = pGeomDB->GetGeoObj( nId) ;
|
|
if ( pGeoObj == nullptr)
|
|
return false ;
|
|
// preparo l'intestazione
|
|
sDump = pGeoObj->GetTitle() + " " + ToString( nId) + "\r\n" ;
|
|
// preparo gli attributi
|
|
pGeomDB->DumpAttributes( nId, sDump, bMM, "\r\n") ;
|
|
// preparo stipple
|
|
pGeomDB->DumpStipple( nId, sDump, bMM, "\r\n") ;
|
|
// preparo TextureData
|
|
pGeomDB->DumpTextureData( nId, sDump, bMM, "\r\n") ;
|
|
// preparo UserObj
|
|
pGeomDB->DumpUserObj( nId, sDump, bMM, "\r\n") ;
|
|
// recupero i dati geometrici
|
|
if ( ! pGeoObj->Dump( sDump, bMM, "\r\n"))
|
|
return false ;
|
|
return true ;
|
|
}
|