From 7bd3465ec3375d9cfaa21f3c9bfe09f2f3a80b36 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 22 Nov 2018 14:31:25 +0000 Subject: [PATCH] EgtMachKernel : - aggiunta gestione dei layer da visualizzare solo con un particolare gruppo di lavoro - aggiunta gestione dei pezzi nascosti (GDB_MD.HIDDEN). --- MachMgr.h | 1 + MachMgrParts.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/MachMgr.h b/MachMgr.h index 4f30aea..de730fe 100644 --- a/MachMgr.h +++ b/MachMgr.h @@ -430,6 +430,7 @@ class MachMgr : public IMachMgr bool SwapParts( bool bToRawPart) ; bool SwapRawPartParts( int nRawId, bool bToRawPart) ; int SwapRawPartPart( int nId, bool bToRawPart) ; + bool UpdateStatusMgoLayers( int nPartId, bool bToRawPart) ; bool ShowRootParts( bool bShow) ; // Operations : dispositions int AddDisposition( const std::string& sName) ; diff --git a/MachMgrParts.cpp b/MachMgrParts.cpp index cde147c..2f568a2 100644 --- a/MachMgrParts.cpp +++ b/MachMgrParts.cpp @@ -106,6 +106,8 @@ MachMgr::AddPartToRawPart( int nPartId, const Point3d& ptPos, int nRawId) // mi assicuro sia visibile il pezzo e nascosto il gruppo m_pGeomDB->SetStatus( nPartId, GDB_ST_ON) ; m_pGeomDB->SetStatus( nGroup, GDB_ST_OFF) ; + // gestisco la visualizzazione dei layer legati ai gruppi di lavoro + UpdateStatusMgoLayers( nPartId, true) ; return true ; } @@ -143,6 +145,8 @@ MachMgr::RemovePartFromRawPart( int nPartId) m_pGeomDB->GroupSwap( nPartId, nBase, true, true) ; // mi assicuro sia nascosto m_pGeomDB->SetStatus( nPartId, GDB_ST_OFF) ; + // nascondo tutti i layer del pezzo legati ai gruppi di lavoro + UpdateStatusMgoLayers( nPartId, false) ; // cancello il gruppo di riferimento m_pGeomDB->Erase( nBase) ; return true ; @@ -241,7 +245,14 @@ MachMgr::SwapRawPartPart( int nId, bool bToRawPart) if ( m_pGeomDB->GetInfo( nId, GDB_SI_SOURCE, nSou)) { m_pGeomDB->GroupSwap( nSou, nId, true, true) ; // mi assicuro sia visibile + int nMode = GDB_MD_STD ; m_pGeomDB->GetMode( nSou, nMode) ; + if ( nMode != GDB_MD_STD) { + m_pGeomDB->SetMode( nSou, GDB_MD_STD) ; + m_pGeomDB->SetInfo( nSou, GDB_SI_DRAWMODE, nMode) ; + } m_pGeomDB->SetStatus( nSou, GDB_ST_ON) ; + // gestisco la visualizzazione dei layer legati ai gruppi di lavoro + UpdateStatusMgoLayers( nSou, bToRawPart) ; return nSou ; } } @@ -251,15 +262,51 @@ MachMgr::SwapRawPartPart( int nId, bool bToRawPart) int nBase ; if ( m_pGeomDB->GetInfo( nId, GDB_SI_BASE, nBase)) { m_pGeomDB->GroupSwap( nId, nBase, true, true) ; + // se necessario, ripristino il modo precedente + int nMode ; + if ( m_pGeomDB->GetInfo( nId, GDB_SI_DRAWMODE, nMode)) { + m_pGeomDB->RemoveInfo( nId, GDB_SI_DRAWMODE) ; + m_pGeomDB->SetMode( nId, nMode) ; + } // mi assicuro sia nascosto e di livello utente m_pGeomDB->SetStatus( nId, GDB_ST_OFF) ; m_pGeomDB->SetLevel( nId, GDB_LV_USER) ; + // nascondo tutti i layer del pezzo legati ai gruppi di lavoro + UpdateStatusMgoLayers( nId, bToRawPart) ; return nBase ; } } return GDB_ID_NULL ; } +//---------------------------------------------------------------------------- +bool +MachMgr::UpdateStatusMgoLayers( int nPartId, bool bToRawPart) +{ + // se dalla radice al grezzo + if ( bToRawPart) { + // gestisco la visualizzazione dei layer legati ai gruppi di lavoro + int nLayId = m_pGeomDB->GetFirstGroupInGroup( nPartId) ; + while ( nLayId != GDB_ID_NULL) { + int nMgoId ; + if ( m_pGeomDB->GetInfo( nLayId, GDB_SI_MGRPONLY, nMgoId)) + m_pGeomDB->SetStatus( nLayId, ( nMgoId == m_nCurrMGrpId ? GDB_ST_ON : GDB_ST_OFF)) ; + nLayId = m_pGeomDB->GetNextGroup( nLayId) ; + } + } + // altrimenti dal grezzo alla radice + else { + // nascondo tutti i layer del pezzo legati ai gruppi di lavoro + int nLayId = m_pGeomDB->GetFirstGroupInGroup( nPartId) ; + while ( nLayId != GDB_ID_NULL) { + if ( m_pGeomDB->ExistsInfo( nLayId, GDB_SI_MGRPONLY)) + m_pGeomDB->SetStatus( nLayId, GDB_ST_OFF) ; + nLayId = m_pGeomDB->GetNextGroup( nLayId) ; + } + } + return true ; +} + //---------------------------------------------------------------------------- bool MachMgr::ShowRootParts( bool bShow)