EgtMachKernel :

- in Preview utensile piccole modifiche e migliorie.
This commit is contained in:
Riccardo Elitropi
2026-04-03 16:21:53 +02:00
parent 0722c496ac
commit 79e1e9fefd
2 changed files with 88 additions and 16 deletions
+82 -13
View File
@@ -47,10 +47,12 @@ Machining::Machining( void)
m_nLookFlag = MCH_LOOK_TAB_HEAD ;
m_nPreviewHeadId = GDB_ID_NULL ;
m_nPreviewHeadIdDBL = GDB_ID_NULL ;
m_nPreviewExitId = GDB_ID_NULL ;
m_nPreviewExitIdDBL = GDB_ID_NULL ;
m_nPreviewToolTip = GDB_ID_NULL ;
m_nPreviewToolTipDBL = GDB_ID_NULL ;
m_vPreviewAxisIds = {} ;
m_vPreviewAxisIdsBBL = {} ;
m_vPreviewAxisIdsDBL = {} ;
}
//----------------------------------------------------------------------------
@@ -59,10 +61,12 @@ Machining::~Machining( void)
m_nLookFlag = MCH_LOOK_NONE ;
m_nPreviewHeadId = GDB_ID_NULL ;
m_nPreviewHeadIdDBL = GDB_ID_NULL ;
m_nPreviewExitId = GDB_ID_NULL ;
m_nPreviewExitIdDBL = GDB_ID_NULL ;
m_nPreviewToolTip = GDB_ID_NULL ;
m_nPreviewToolTipDBL = GDB_ID_NULL ;
m_vPreviewAxisIds.clear() ;
m_vPreviewAxisIdsBBL.clear() ;
m_vPreviewAxisIdsDBL.clear() ;
}
//----------------------------------------------------------------------------
@@ -165,17 +169,20 @@ Machining::MyChangeToolPreviewShow( int nLookFlag, bool bDouble)
// se non esiste il gruppo di Preview, errore
int nCurrStdId = GDB_ID_NULL ;
int nCurrHeadId = GDB_ID_NULL ;
int nCurrExitId = GDB_ID_NULL ;
if ( ! bDouble) {
nCurrStdId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST) ;
if ( nCurrStdId == GDB_ID_NULL || m_nPreviewHeadId == GDB_ID_NULL)
return false ;
nCurrHeadId = m_nPreviewHeadId ;
nCurrExitId = m_nPreviewExitId ;
}
else {
nCurrStdId = m_pGeomDB->GetFirstNameInGroup( GetOwner(), MCH_ST_DBL) ;
if ( nCurrStdId == GDB_ID_NULL || m_nPreviewHeadIdDBL == GDB_ID_NULL)
return false ;
nCurrHeadId = m_nPreviewHeadIdDBL ;
nCurrExitId = m_nPreviewExitIdDBL ;
}
// recupero la macchina corrente
@@ -198,8 +205,14 @@ Machining::MyChangeToolPreviewShow( int nLookFlag, bool bDouble)
int nIter = 0 ;
// se devo visualizzare solamente il gruppo della testa corrente
if ( nLookFlag == MCH_LOOK_TAB_TOOL) {
// la testa diventa visibile
// la testa diventa visibile ( solamente il gruppo dell'uscita corrente)
m_pGeomDB->SetStatus( nCurrHeadId, GDB_ST_ON) ;
int nHeadChildId = m_pGeomDB->GetFirstGroupInGroup( nCurrHeadId) ;
while ( nHeadChildId != GDB_ID_NULL) {
if ( nHeadChildId != nCurrExitId)
m_pGeomDB->SetStatus( nHeadChildId, GDB_ST_OFF) ;
nHeadChildId = m_pGeomDB->GetNext( nHeadChildId) ;
}
// tutti i gruppi che contengono la testa diventano visibili fino a "ST", l'unico loro
// figlio visibile deve essere quello che contiene la testa corrente
int nCurrId = nCurrHeadId ;
@@ -249,10 +262,17 @@ Machining::MyChangeToolPreviewShow( int nLookFlag, bool bDouble)
}
}
else {
// visualizzo tutti i gruppi in coda
for ( auto Iter = dqHierarchy.begin() ; Iter != dqHierarchy.end() ; ++ Iter) {
if ( m_pGeomDB->GetGdbType( *Iter) == GDB_TY_GROUP)
m_pGeomDB->SetStatus( *Iter, GDB_ST_ON) ;
}
// visualizzo tutti i sottogruppi della testa
int nHeadChild = m_pGeomDB->GetFirstGroupInGroup( nCurrHeadId) ;
while ( nHeadChild != GDB_ID_NULL) {
m_pGeomDB->SetStatus( nHeadChild, GDB_ST_ON) ;
nHeadChild = m_pGeomDB->GetNextGroup( nHeadChild) ;
}
}
++ nIter ;
}
@@ -379,7 +399,7 @@ Machining::MyPrepareToolPreview( bool bDouble)
if ( ! bDouble)
m_vPreviewAxisIds.push_back( nNewTabRotAxisId) ;
else
m_vPreviewAxisIdsBBL.push_back( nNewTabRotAxisId) ;
m_vPreviewAxisIdsDBL.push_back( nNewTabRotAxisId) ;
// aggiungo il versore invertito
int nChildId = m_pGeomDB->GetFirstInGroup( nParentId) ;
while ( nChildId != GDB_ID_NULL) {
@@ -478,7 +498,7 @@ Machining::MyPrepareToolPreview( bool bDouble)
if ( ! bDouble)
m_vPreviewAxisIds.push_back( nNewParentId) ;
else
m_vPreviewAxisIdsBBL.push_back( nNewParentId) ;
m_vPreviewAxisIdsDBL.push_back( nNewParentId) ;
// memorizzo la sua posizione iniziale
double dAxisPos = 0. ;
bOk = bOk && pMch->GetAxisPos( sParentName, dAxisPos) &&
@@ -551,10 +571,14 @@ Machining::MyPrepareToolPreview( bool bDouble)
bOk = bOk && m_pGeomDB->GetName( nExitGrpId, sExitGrpName) ;
int nFrId = GDB_ID_NULL ;
if ( bOk) {
if ( ! bDouble)
if ( ! bDouble) {
nFrId = m_pGeomDB->GetFirstNameInGroup( m_nPreviewHeadId, "_" + sExitGrpName) ;
else
m_nPreviewExitId = m_pGeomDB->GetFirstNameInGroup( m_nPreviewHeadId, sExitGrpName) ;
}
else {
nFrId = m_pGeomDB->GetFirstNameInGroup( m_nPreviewHeadIdDBL, "_" + sExitGrpName) ;
m_nPreviewExitIdDBL = m_pGeomDB->GetFirstNameInGroup( m_nPreviewHeadIdDBL, sExitGrpName) ;
}
}
bOk = bOk && ( nFrId != GDB_ID_NULL) ;
const IGeoFrame3d* frExit = ( bOk ? GetGeoFrame3d( m_pGeomDB->GetGeoObj( nFrId)) : nullptr) ;
@@ -631,7 +655,7 @@ Machining::PrepareToolPreview( void)
m_nPreviewToolTip = GDB_ID_NULL ;
m_nPreviewToolTipDBL = GDB_ID_NULL ;
m_vPreviewAxisIds.clear() ;
m_vPreviewAxisIdsBBL.clear() ;
m_vPreviewAxisIdsDBL.clear() ;
// preparo l'anteprima per il gruppo ST
bool bOk = true ;
@@ -680,10 +704,12 @@ Machining::RemoveToolPreview( void)
// reset delle variabili membro
m_nPreviewHeadId = GDB_ID_NULL ;
m_nPreviewHeadIdDBL = GDB_ID_NULL ;
m_nPreviewExitId = GDB_ID_NULL ;
m_nPreviewExitIdDBL = GDB_ID_NULL ;
m_nPreviewToolTip = GDB_ID_NULL ;
m_nPreviewToolTipDBL = GDB_ID_NULL ;
m_vPreviewAxisIds.clear() ;
m_vPreviewAxisIdsBBL.clear() ;
m_vPreviewAxisIdsDBL.clear() ;
return true ;
}
@@ -750,8 +776,10 @@ Machining::GetToolPreviewNext( int nEntId, int nParentId, int nStId) const
// se prima entità, eventuale attivazione uscite di gruppo a forare
if ( nEntId == GDB_ID_NULL && m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
INTVECTOR vActExit ;
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit)) {
ActivateDrillingUnit( m_nPreviewHeadId, vActExit) ;
MyShowMultiDrillingTool( vActExit) ;
}
}
return nNewId ;
}
@@ -760,8 +788,10 @@ Machining::GetToolPreviewNext( int nEntId, int nParentId, int nStId) const
// eventuale attivazione uscite di gruppo a forare
if ( m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
INTVECTOR vActExit ;
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit)) {
ActivateDrillingUnit( m_nPreviewHeadId, vActExit) ;
MyShowMultiDrillingTool( vActExit) ;
}
}
// recupero la prima entità del successivo gruppo
nNewId = m_pGeomDB->GetFirstInGroup( nNewParentId) ;
@@ -793,8 +823,10 @@ Machining::GetToolPreviewPrev( int nEntId, int nParentId, int nStId) const
// eventuale attivazione uscite di gruppo a forare
if ( m_pGeomDB->ExistsInfo( nNewParentId, KEY_DRACEX)) {
INTVECTOR vActExit ;
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit))
if ( m_pGeomDB->GetInfo( nNewParentId, KEY_DRACEX, vActExit)) {
ActivateDrillingUnit( m_nPreviewHeadId, vActExit) ;
MyShowMultiDrillingTool( vActExit) ;
}
}
// recupero l'ultima entità del precedente gruppo
nNewId = m_pGeomDB->GetLastInGroup( nNewParentId) ;
@@ -852,7 +884,7 @@ Machining::MyToolPreview( int nEntId, bool bDouble) const
}
// scorro gli assi dentro al gruppo "ST" ( considero solo quelli rotativi)
const INTVECTOR& vCurrPreviewAxisIds = ( ! bDouble ? m_vPreviewAxisIds : m_vPreviewAxisIdsBBL) ;
const INTVECTOR& vCurrPreviewAxisIds = ( ! bDouble ? m_vPreviewAxisIds : m_vPreviewAxisIdsDBL) ;
for ( auto Iter = vCurrPreviewAxisIds.begin() ; Iter != vCurrPreviewAxisIds.end() ; ++ Iter) {
// recupero l'Id dell'asse corrente
int nAxisId = *Iter ;
@@ -1169,6 +1201,43 @@ Machining::CalcMirrorByDouble( int nClId, const string& sUserNotes)
return true ;
}
//----------------------------------------------------------------------------
bool
Machining::MyShowMultiDrillingTool( const INTVECTOR& vActExit) const
{
// verifico validità del Flag
if ( m_nLookFlag != MCH_LOOK_NONE && m_nLookFlag != MCH_LOOK_TAB_TOOL && m_nLookFlag != MCH_LOOK_TAB_HEAD)
return false ;
// se non ho visibilità solo utensile, non faccio nulla
if ( m_nLookFlag != MCH_LOOK_TAB_TOOL)
return false ;
// verifico che il gruppo di preview della testa sia valido
if ( m_nPreviewHeadId == GDB_ID_NULL)
return false ;
// recupero i nomi delle uscite da visualizzare nella preview
STRVECTOR vsExit ; vsExit.resize( vActExit.size()) ;
for ( int i = 0 ; i < ssize( vActExit) ; ++ i)
vsExit[i] = MCH_EXIT + ToString( vActExit[i]) ;
// rendo visibili solo i gruppi nella preview inerenti
int nChildHeadId = m_pGeomDB->GetFirstInGroup( m_nPreviewHeadId) ;
while ( nChildHeadId != GDB_ID_NULL) {
// recupero il nome del gruppo corrente
string sName ;
m_pGeomDB->GetName( nChildHeadId, sName) ;
// verifico se attivare o meno il gruppo corrente
bool bStatusOn = ( find_if( vsExit.begin(), vsExit.end(), [&]( const string& sExitName) {
return EqualNoCase( sExitName, sName) ; }) != vsExit.end()) ;
m_pGeomDB->SetStatus( nChildHeadId, bStatusOn ? GDB_ST_ON : GDB_ST_OFF) ;
// passo al gruppo successivo
nChildHeadId = m_pGeomDB->GetNextGroup( nChildHeadId) ;
}
return true ;
}
//----------------------------------------------------------------------------
bool
Machining::ActivateDrillingUnit( int nHeadId, const INTVECTOR& vActExit) const