EgtExchange :

- in BeamMgr aggiunta funzione UpdatePart
- in BeamMgr sviluppata la funzione EnableProcess
- migliorie varie in BtlGeom.
This commit is contained in:
Dario Sassi
2020-12-31 17:36:35 +00:00
parent 50720d68bf
commit 7dca18130b
6 changed files with 112 additions and 23 deletions
+50 -9
View File
@@ -100,6 +100,17 @@ BeamMgr::ErasePart( void)
return m_BtlGeom.ErasePart() ;
}
//----------------------------------------------------------------------------
bool
BeamMgr::UpdatePart( void)
{
// Verifico validità GDB
if ( m_pGDB == nullptr)
return false ;
// Forzo aggiornamento del pezzo corrente
return ( m_BtlGeom.UpdateOutLine() && m_BtlGeom.ResetPartSolid()) ;
}
//----------------------------------------------------------------------------
bool
BeamMgr::SetPartProdNbr( int nProdNbr)
@@ -143,9 +154,11 @@ BeamMgr::SetPartBox( double dLength, double dHeight, double dWidth, bool bUpdate
// Imposto le dimensioni al pezzo corrente
if ( ! m_BtlGeom.AddPartBox( dLength, dHeight, dWidth))
return false ;
// Se richiesto, aggiorno Outline
if ( bUpdate)
// Se richiesto, aggiorno Outline e cancello Solido
if ( bUpdate) {
m_BtlGeom.UpdateOutLine() ;
m_BtlGeom.ResetPartSolid() ;
}
return true ;
}
@@ -175,9 +188,11 @@ BeamMgr::AddProcess( int nGroup, int nProc, int nSide, const string& sDes, int n
// Aggiungo la feature
if ( ! m_BtlGeom.AddProcess( nGroup, nProc, nSide, sDes, nProcId,frRef, vnDPar, nSPar, vdBtlPar, sBtlPar, vsUAtt, 0))
return GDB_ID_NULL ;
// Se richiesto, aggiorno Outline
if ( bUpdate)
// Se richiesto, aggiorno Outline e cancello Solido
if ( bUpdate) {
m_BtlGeom.UpdateOutLine() ;
m_BtlGeom.ResetPartSolid() ;
}
// ritorno Id
return m_BtlGeom.GetLastProcessId() ;
}
@@ -207,7 +222,7 @@ BeamMgr::ModifyProcess( int nGeomId, int nGroup, int nProc, int nSide, const str
m_pGDB->Relocate( nNewId + nAux, nGeomId, GDB_BEFORE) ;
}
// Cancello il vecchio processo
EraseProcess( nGeomId, true) ;
EraseProcess( nGeomId, bUpdate) ;
// Restituisco nuovo Id
return nNewId ;
}
@@ -231,9 +246,11 @@ BeamMgr::EraseProcess( int nGeomId, bool bUpdate)
m_pGDB->Erase( nGeomId + nAux) ;
}
m_pGDB->Erase( nGeomId) ;
// Se richiesto, aggiorno Outline
if ( bUpdate)
// Se richiesto, aggiorno Outline e cancello Solido
if ( bUpdate) {
m_BtlGeom.UpdateOutLine() ;
m_BtlGeom.ResetPartSolid() ;
}
return true ;
}
@@ -241,8 +258,32 @@ BeamMgr::EraseProcess( int nGeomId, bool bUpdate)
bool
BeamMgr::EnableProcess( int nGeomId, bool bEnable, bool bUpdate)
{
return false ;
// Verifico validità GDB
if ( m_pGDB == nullptr)
return false ;
// Recupero il pezzo di appartenenza
int nLayId = m_pGDB->GetParentId( nGeomId) ;
int nPartId = m_pGDB->GetParentId( nLayId) ;
if ( ! m_BtlGeom.SetPart( nPartId) || m_BtlGeom.GetCurrProcsLayId() != nLayId)
return false ;
// Recupero lo stato corrente
bool bDo = true ;
m_pGDB->GetInfo( nGeomId, IKEY_DO, bDo) ;
// Se lo stato non cambia, esco
if ( bEnable == bDo)
return true ;
// Imposto il nuovo stato e il colore
if ( bEnable)
m_pGDB->RemoveInfo( nGeomId, IKEY_DO) ;
else
m_pGDB->SetInfo( nGeomId, IKEY_DO, 0) ;
m_BtlGeom.SetProcessColor( nGeomId, bEnable) ;
// Se richiesto, aggiorno Outline e cancello Solido
if ( bUpdate) {
m_BtlGeom.UpdateOutLine() ;
m_BtlGeom.ResetPartSolid() ;
}
return true ;
}
//----------------------------------------------------------------------------
+1
View File
@@ -24,6 +24,7 @@ class BeamMgr : public IBeamMgr
int CreatePart( void) override ;
bool SetPart( int nPartId) override ;
bool ErasePart( void) override ;
bool UpdatePart( void) override ;
bool SetPartProdNbr( int nProdNbr) override ;
bool SetPartName( const std::string& sName) override ;
bool SetPartCount( int nCount) override ;
+31 -10
View File
@@ -37,6 +37,7 @@ BtlGeom::BtlGeom( void)
m_BoxCol = Color( 255, 128, 0, 15) ;
m_OutsCol = Color( 224, 128, 0, 50) ;
m_ProcsCol = Color( 80, 160, 160, 100) ;
m_ProcsOffCol = Color( 160, 160, 160, 100) ;
m_MarkCol = Color( 96, 192, 192, 100) ;
m_SolidCol = Color(255, 160, 32, 100) ;
m_nInfoId = GDB_ID_NULL ;
@@ -188,8 +189,18 @@ BtlGeom::SetPart( int nPartId)
if ( nProcsId == GDB_ID_NULL)
return false ;
int nSolidsId = m_pGDB->GetFirstNameInGroup( nPartId, SOLID_LAYER_NAME) ;
if ( nSolidsId == GDB_ID_NULL)
return false ;
if ( nSolidsId == GDB_ID_NULL) {
// nei vecchi progetti può non esserci, quindi lo creo
int nOldPartId = m_nPartId ;
int nOldSolidsId = m_nSolidsId ;
m_nPartId = nPartId ;
if ( ! ResetPartSolid()) {
m_nPartId = nOldPartId ;
m_nSolidsId = nOldSolidsId ;
return false ;
}
nSolidsId = m_nSolidsId ;
}
// assegnazione identificativi
m_nPartId = nPartId ;
m_nAuxId = nAuxId ;
@@ -217,12 +228,9 @@ BtlGeom::SetPart( int nPartId)
bool
BtlGeom::ErasePart( void)
{
// se non c'è il DB geometrico, errore
if ( m_pGDB == nullptr)
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
// se non esiste un pezzo corrente, esco
if ( m_nPartId == GDB_ID_NULL)
return true ;
// cancello il pezzo
m_pGDB->Erase( m_nPartId) ;
// annullo tutti gli identificativi del pezzo
@@ -239,8 +247,10 @@ BtlGeom::ErasePart( void)
bool
BtlGeom::SetPartProdNbr( int nProdNbr)
{
if ( m_pGDB == nullptr)
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
// assegno il numero di produzione del pezzo
if ( ! m_pGDB->SetInfo( m_nPartId, IKEY_PROD_NBR, nProdNbr))
return false ;
string sName = ToString( nProdNbr) ;
@@ -252,8 +262,10 @@ BtlGeom::SetPartProdNbr( int nProdNbr)
bool
BtlGeom::SetPartName( const string& sDes)
{
if ( m_pGDB == nullptr)
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
// assegno il nome del pezzo
if ( ! m_pGDB->SetInfo( m_nPartId, IKEY_NAME, sDes))
return false ;
int nProdNbr = 0 ;
@@ -269,7 +281,8 @@ BtlGeom::SetPartName( const string& sDes)
string
BtlGeom::GetPartName( void)
{
if ( m_pGDB == nullptr)
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return "" ;
string sName ;
m_pGDB->GetName( m_nPartId, sName) ;
@@ -280,6 +293,9 @@ BtlGeom::GetPartName( void)
bool
BtlGeom::SetPartCount( int nCount)
{
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
m_nCount = nCount ;
return ( m_pGDB != nullptr && m_pGDB->SetInfo( m_nPartId, IKEY_COUNT, nCount)) ;
}
@@ -288,6 +304,9 @@ BtlGeom::SetPartCount( int nCount)
bool
BtlGeom::AddPartBox( double dLength, double dHeight, double dWidth)
{
// se non c'è il DB geometrico o il pezzo corrente, errore
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
// creo il solido (parallelepipedo)
PtrOwner<ISurfTriMesh> pStm( GetSurfTriMeshBox( dLength, dHeight, dWidth)) ;
if ( IsNull( pStm))
@@ -450,6 +469,7 @@ BtlGeom::ReadUserAttribute( const string& sString, string& sKey, string& sVal)
bool
BtlGeom::SetUserAttribute( int nUAttrDest, const string& sString)
{
// se non c'è il DB geometrico, errore
if ( m_pGDB == nullptr)
return false ;
// recupero chiave e valore
@@ -467,6 +487,7 @@ BtlGeom::SetUserAttribute( int nUAttrDest, const string& sString)
bool
BtlGeom::SetUserAttribute( int nUAttrDest, const string& sKey, const string& sVal)
{
// se non c'è il DB geometrico, errore
if ( m_pGDB == nullptr)
return false ;
// li assegno
+2
View File
@@ -58,6 +58,7 @@ class BtlGeom
const INTVECTOR& vnDPar, int nSPar, const DBLVECTOR& vdPar, const std::string& sPar, const STRVECTOR& vsUAtt, int nLine) ;
int GetLastProcessId( void) { return m_nProcId ; }
bool CreateFreeContours( void) ;
bool SetProcessColor( int nId, bool bEnable) ;
private :
bool CreateInfoGroup( void) ;
@@ -220,6 +221,7 @@ class BtlGeom
Color m_BoxCol ; // colore per box pezzi
Color m_OutsCol ; // colore per outline pezzi
Color m_ProcsCol ; // colore per lavorazioni pezzi
Color m_ProcsOffCol ; // colore per lavorazioni pezzi disabilitate
Color m_MarkCol ; // colore per linee di marcatura e testi
Color m_SolidCol ; // colore per il solido
int m_nInfoId ; // identificativo gruppo per informazioni varie
+3
View File
@@ -454,6 +454,9 @@ BtlGeom::AddPartCustomOutline( void)
bool
BtlGeom::UpdateOutLine( void)
{
// verifiche
if ( m_pGDB == nullptr || m_nPartId == GDB_ID_NULL)
return false ;
// pulisco il gruppo di Outline (elimino tutte le regioni)
int nOutId = m_pGDB->GetFirstInGroup( m_nOutsId) ;
while ( nOutId != GDB_ID_NULL) {
+25 -4
View File
@@ -7018,16 +7018,36 @@ BtlGeom::SetUserAttributes( int nId, const STRVECTOR& vsUAtt)
m_pGDB->SetInfo( nId, sKey, sVal) ;
// se disabilitazione, cambio colore
if ( sKey == IKEY_DO && sVal == "0") {
Color cCol ;
m_pGDB->GetCalcMaterial( nId, cCol) ;
cCol.Set( 160, 160, 160, cCol.GetIntAlpha()) ;
m_pGDB->SetMaterial( nId, cCol) ;
SetProcessColor( nId, false) ;
}
}
}
return true ;
}
//---------------------------------------------------------------------------
bool
BtlGeom::SetProcessColor( int nId, bool bEnable)
{
if ( nId == GDB_ID_NULL)
return false ;
// determino il nuovo colore
Color cOrigCol ;
m_pGDB->GetCalcMaterial( nId, cOrigCol) ;
Color cNewCol = ( bEnable ? m_ProcsCol : m_ProcsOffCol) ;
cNewCol.SetAlpha( cOrigCol.GetIntAlpha()) ;
// assegno il nuovo colore al processo
m_pGDB->SetMaterial( nId, cNewCol) ;
// se ci sono geometrie ausiliarie, assegno il nuovo colore anche a queste
INTVECTOR vAux ;
if ( m_pGDB->GetInfo( nId, IKEY_AUXID, vAux) && ! vAux.empty()) {
for ( auto nAux : vAux)
m_pGDB->SetMaterial( nId + nAux, cNewCol) ;
}
return true ;
}
//---------------------------------------------------------------------------
bool
BtlGeom::SetAuxId( int nId, const INTVECTOR& vnAuxId)
@@ -7108,6 +7128,7 @@ BtlGeom::InsertEmptySurface( int nGroup, int nProc, int nSide, const string& sDe
SetNameAndInfo( nId, nGroup, nProc, nSide, sDes, nProcId) ;
// aggiungo parametri
SetParams( nId, vnDPar, vdPar, vsUAtt) ;
m_nProcId = nId ;
return true ;
}