EgtMachKernel 1.6v7 :

- modifiche per bloccaggi su più fasi
This commit is contained in:
Dario Sassi
2016-10-15 10:06:51 +00:00
parent 64c0e3826c
commit d682572702
12 changed files with 198 additions and 80 deletions
+63 -68
View File
@@ -421,22 +421,46 @@ Disposition::AddFixture( const string& sName, const Point3d& ptPos, double dAngD
// verifico che la posizione sia nell'area della tavola
if ( ! m_b3Area1.EnclosesXY( m_ptRef1 + ptPos))
return GDB_ID_NULL ;
// recupero il gruppo delle fixtures nella macchinata corrente
int nFixtGrpId = m_pMchMgr->GetCurrFixtGroupId() ;
if ( nFixtGrpId == GDB_ID_NULL)
return GDB_ID_NULL ;
// verifico esistenza file sottopezzo
string sFixtFile = m_pMchMgr->GetCurrFixtDir() + "\\" + sName + ".Nge" ;
if ( ! ExistsFile( sFixtFile))
return GDB_ID_NULL ;
// inserisco il sottopezzo nel gruppo
if ( ! m_pGeomDB->Load( sFixtFile, nFixtGrpId))
return GDB_ID_NULL ;
int nFixtId = m_pGeomDB->GetLastGroupInGroup( nFixtGrpId) ;
if ( nFixtId == GDB_ID_NULL)
return GDB_ID_NULL ;
// imposto il livello a temporaneo
m_pGeomDB->SetLevel( nFixtId, GDB_LV_TEMP) ;
// Nome tutto maiuscolo
string sMyName = sName ;
ToUpper( sMyName) ;
// Se recuperabile dal gruppo dei bloccaggi
int nFixtId = m_pMchMgr->GetUnusedFixture( sMyName, m_nPhase) ;
if ( nFixtId != GDB_ID_NULL) {
// aggiungo la fase al bloccaggio
INTVECTOR vPhase ;
m_pMchMgr->GetFixturePhases( nFixtId, vPhase) ;
vPhase.push_back( m_nPhase) ;
m_pGeomDB->SetInfo( nFixtId, MACH_FXT_PHASE, vPhase) ;
// aggiorno visualizzazione
m_pGeomDB->SetStatus( nFixtId, GDB_ST_ON) ;
}
// altrimenti lo carico da file
else {
// recupero il gruppo delle fixtures nella macchinata corrente
int nFixtGrpId = m_pMchMgr->GetCurrFixtGroupId() ;
if ( nFixtGrpId == GDB_ID_NULL)
return GDB_ID_NULL ;
// verifico esistenza file sottopezzo
string sFixtFile = m_pMchMgr->GetCurrFixtDir() + "\\" + sName + ".Nge" ;
if ( ! ExistsFile( sFixtFile))
return GDB_ID_NULL ;
// inserisco il sottopezzo nel gruppo
if ( ! m_pGeomDB->Load( sFixtFile, nFixtGrpId))
return GDB_ID_NULL ;
nFixtId = m_pGeomDB->GetLastGroupInGroup( nFixtGrpId) ;
if ( nFixtId == GDB_ID_NULL)
return GDB_ID_NULL ;
// assegno il nome
m_pGeomDB->SetName( nFixtId, sMyName) ;
// imposto il livello a temporaneo
m_pGeomDB->SetLevel( nFixtId, GDB_LV_TEMP) ;
// aggiungo la fase al bloccaggio
m_pGeomDB->SetInfo( nFixtId, MACH_FXT_PHASE, m_nPhase) ;
}
// resetto il riferimento del gruppo
Frame3d* pfrFixt = m_pGeomDB->GetGroupFrame( nFixtId) ;
pfrFixt->Reset() ;
// la muovo nella posizione voluta
Vector3d vtMove = ( m_ptRef1 + ptPos) - ORIG ;
m_pGeomDB->TranslateGlob( nFixtId, vtMove) ;
@@ -469,7 +493,7 @@ Disposition::GetFirstFixture( void)
// recupero il primo
int nId = m_vFixData.front().nId ;
// ne verifico la validità
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return GDB_ID_NULL ;
return nId ;
}
@@ -478,9 +502,6 @@ Disposition::GetFirstFixture( void)
int
Disposition::GetNextFixture( int nId)
{
// verifica validità bloccaggio
if ( ! VerifyFixture( nId))
return GDB_ID_NULL ;
// ciclo sui bloccaggi
int nFxtTot = int( m_vFixData.size()) ;
for ( int i = 0 ; i < nFxtTot ; ++ i) {
@@ -488,7 +509,8 @@ Disposition::GetNextFixture( int nId)
if ( m_vFixData[i].nId == nId) {
// se esiste successivo e valido
int j = i + 1 ;
if ( j < nFxtTot && VerifyFixture( m_vFixData[j].nId))
if ( j < nFxtTot &&
m_pMchMgr != nullptr && m_pMchMgr->VerifyFixture( m_vFixData[j].nId, false))
return m_vFixData[j].nId ;
else
return GDB_ID_NULL ;
@@ -502,7 +524,7 @@ bool
Disposition::MoveFixture( int nId, const Vector3d& vtMove)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
@@ -529,7 +551,7 @@ bool
Disposition::RotateFixture( int nId, double dDeltaAngDeg)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
@@ -551,7 +573,7 @@ bool
Disposition::MoveFixtureMobile( int nId, double dDeltaMov)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
@@ -581,7 +603,7 @@ bool
Disposition::PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg, double dMov)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
@@ -627,13 +649,20 @@ bool
Disposition::RemoveFixture( int nId)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyFixture( nId, false))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
return false ;
// rimuovo l'oggetto dal DB
m_pGeomDB->Erase( nId) ;
// dichiaro l'oggetto non più usato dalla fase
INTVECTOR vPhase ;
if ( ! m_pMchMgr->GetFixturePhases( nId, vPhase))
return false ;
auto iIter = find( vPhase.begin(), vPhase.end(), m_nPhase) ;
if ( iIter != vPhase.end()) {
vPhase.erase( iIter) ;
m_pGeomDB->SetInfo( nId, MACH_FXT_PHASE, vPhase) ;
}
// rimuovo l'oggetto dal vettore dei comandi
while ( true) {
auto iIter = find_if( m_vFixData.begin(), m_vFixData.end(),
@@ -652,7 +681,7 @@ bool
Disposition::MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, bool bAddToList)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// recupero il solido
int nRawSolId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
@@ -708,7 +737,7 @@ bool
Disposition::MoveToCenterRawPart( int nRawId, const Point3d& ptP, int nFlag, bool bAddToList)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// recupero il solido
int nRawSolId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
@@ -764,7 +793,7 @@ bool
Disposition::MoveRawPart( int nRawId, const Vector3d& vtMove)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// se movimento nullo, non devo fare alcunché
if ( vtMove.IsSmall())
@@ -803,7 +832,7 @@ bool
Disposition::RotateRawPart( int nRawId, const Vector3d& vtAx, double dAngRotDeg)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// recupero centro del grezzo
Point3d ptAx ;
@@ -834,7 +863,7 @@ bool
Disposition::ApplyRotationToRawPart( int nRawId, double dAngCDeg, double dAngADeg, double dAngC1Deg)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// recupero centro del grezzo
Point3d ptCen ;
@@ -859,7 +888,7 @@ bool
Disposition::RemoveRawPart( int nRawId)
{
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
if ( m_pMchMgr == nullptr || ! m_pMchMgr->VerifyRawPart( nRawId, false))
return false ;
// elimino i movimenti registrati per questo grezzo
while ( true) {
@@ -874,40 +903,6 @@ Disposition::RemoveRawPart( int nRawId)
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::VerifyFixture( int nFixtId) const
{
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// recupero il gruppo delle fixtures nella macchinata corrente
int nFixtGrpId = m_pMchMgr->GetCurrFixtGroupId() ;
if ( nFixtGrpId == GDB_ID_NULL)
return false ;
// verifico che l'oggetto appartenga al gruppo delle fixtures
if ( m_pGeomDB->GetParentId( nFixtId) != nFixtGrpId)
return false ;
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::VerifyRawPart( int nRawId) const
{
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// recupero il gruppo dei grezzi nella macchinata corrente
int nRawGroupId = m_pMchMgr->GetCurrRawGroupId() ;
if ( nRawGroupId == GDB_ID_NULL)
return false ;
// verifico che questo grezzo ne faccia parte
if ( m_pGeomDB->GetParentId( nRawId) != nRawGroupId)
return false ;
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::GetFixtureData( int nInd, string& sName, int& nId, Point3d& ptPos, double& dAngDeg) const
-4
View File
@@ -105,10 +105,6 @@ class Disposition : public Operation
bool GetSomeByHand( void) const
{ return m_bSomeByHand ; }
private :
bool VerifyFixture( int nFixtId) const ;
bool VerifyRawPart( int nRawId) const ;
private :
bool m_bTabOk ; // flag di tavola verificata
std::string m_sTabName ; // nome della tavola di appartenenza
BIN
View File
Binary file not shown.
+1
View File
@@ -301,6 +301,7 @@ copy $(TargetPath) \EgtProg\Dll64</Command>
<ClInclude Include="SawingData.h" />
<ClInclude Include="SawRoughing.h" />
<ClInclude Include="SawRoughingData.h" />
<ClInclude Include="SetTempPhase.h" />
<ClInclude Include="Simulator.h" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="Head.h" />
+3
View File
@@ -302,6 +302,9 @@
<ClInclude Include="OutputConst.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SetTempPhase.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="EgtMachKernel.rc">
+2
View File
@@ -33,6 +33,8 @@ const std::string MACH_SETUP_GROUP = "Setup" ;
const std::string MACH_RAW_GROUP = "Raws" ;
// Gruppo delle operazioni in una macchinata
const std::string MACH_OPER_GROUP = "Opers" ;
// Chiave per info fase di appartenenza di una fixture
const std::string MACH_FXT_PHASE = "Ph" ;
// Nome del grezzo
const std::string MACH_RAW_PART = "RawPart" ;
// Chiave per info fase di appartenenza del grezzo
+5 -1
View File
@@ -304,8 +304,13 @@ class MachMgr : public IMachMgr
int GetCurrOperId( void) const
{ return ( ExistsCurrMachGroup() ? m_cCurrMGrp.OperGroupId : GDB_ID_NULL) ; }
// RawParts
bool VerifyRawPart( int nRawId, bool bLinkedAllowed = true) const ;
bool GetRawPartPhases( int nRawId, INTVECTOR& vPhase) const ;
bool GetRawPartCenter( int nRawId, Point3d& ptCen) ;
// Tables and Fixtures
bool VerifyFixture( int nFxtId, bool bLinkedAllowed = true) const ;
bool GetFixturePhases( int nFxtId, INTVECTOR& vPhase) const ;
int GetUnusedFixture( const string& sName, int nPhase) ;
// Machines
Machine* GetCurrMachine( void) const ;
ToolsMgr* GetCurrToolsMgr( void) const ;
@@ -348,7 +353,6 @@ class MachMgr : public IMachMgr
// RawParts
int AddRawPart( int nCrvId, double dOverMat, double dZmin, double dHeight, Color cCol) ;
int AddRawPart( int nSurfId, Color cCol) ;
bool VerifyRawPart( int nRawId) const ;
bool SetRawPartCenter( int nRawId) ;
bool ResetRawPartCenter( int nRawId) ;
// Parts
+59
View File
@@ -91,6 +91,65 @@ MachMgr::ShowOnlyTable( bool bVal)
return pMch->SetLook( bVal ? MCH_LOOK_TAB : MCH_LOOK_ALL) ;
}
//----------------------------------------------------------------------------
bool
MachMgr::VerifyFixture( int nFxtId, bool bLinkedAllowed) const
{
// se il bloccaggio fa parte del gruppo dei bloccaggi, va bene
int nFxtGroupId = GetCurrFixtGroupId() ;
if ( nFxtGroupId != GDB_ID_NULL && m_pGeomDB->GetParentId( nFxtId) == nFxtGroupId)
return true ;
// se consentito linkaggio ed il bloccaggio è linkato ad un gruppo della macchina corrente, va bene
if ( bLinkedAllowed) {
Machine* pMch = GetCurrMachine() ;
if ( pMch != nullptr && pMch->IsLinkedFixture( nFxtId))
return true ;
}
// altrimenti errore
return false ;
}
//----------------------------------------------------------------------------
bool
MachMgr::GetFixturePhases( int nFxtId, INTVECTOR& vPhase) const
{
// pulisco parametro di ritorno
vPhase.clear() ;
// verifica validità bloccaggio
if ( ! VerifyFixture( nFxtId))
return false ;
// recupero le fasi in cui è presente la fixture (se manca è fase 1)
if ( ! m_pGeomDB->GetInfo( nFxtId, MACH_FXT_PHASE, vPhase) || vPhase.empty())
vPhase.emplace_back( 1) ;
return true ;
}
//----------------------------------------------------------------------------
int
MachMgr::GetUnusedFixture( const string& sName, int nPhase)
{
// Verifico validità nome
if ( IsEmptyOrSpaces( sName))
return false ;
// Recupero il gruppo dei bloccaggi
int nFxtGroupId = GetCurrFixtGroupId() ;
// Cerco i bloccaggi non usati nella fase indicata
int nId = m_pGeomDB->GetFirstNameInGroup( nFxtGroupId, sName) ;
while ( nId != GDB_ID_NULL) {
// recupero le fasi in cui è già usato
INTVECTOR vPhase ;
if ( ! m_pGeomDB->GetInfo( nId, MACH_FXT_PHASE, vPhase) || vPhase.empty())
vPhase.emplace_back( 1) ;
// se non c'è la fase corrente, è libero
if ( find( vPhase.begin(), vPhase.end(), nPhase) == vPhase.end())
return nId ;
// passo al successivo
nId = m_pGeomDB->GetNextName( nId, sName) ;
}
// non trovato
return GDB_ID_NULL ;
}
//----------------------------------------------------------------------------
int
MachMgr::AddFixture( const string& sName, const Point3d& ptPos, double dAngRotDeg, double dMov)
+7
View File
@@ -18,6 +18,7 @@
#include "MachConst.h"
#include "Disposition.h"
#include "MachiningCreate.h"
#include "SetTempPhase.h"
#include "/EgtDev/Include/EMkOperationConst.h"
#include "/EgtDev/Include/EGkUserObjFactory.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
@@ -797,6 +798,8 @@ MachMgr::SetMachiningGeometry( const SELVECTOR& vIds)
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
if ( pMch == nullptr)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// imposto la geometria
return pMch->SetGeometry( vIds) ;
}
@@ -813,6 +816,8 @@ MachMgr::MachiningPreview( bool bRecalc)
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
if ( pMch == nullptr)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// calcolo l'anteprima della lavorazione
return pMch->Preview( bRecalc) ;
}
@@ -859,6 +864,8 @@ MachMgr::MachiningApply( bool bRecalc)
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
if ( pMch == nullptr)
return false ;
// imposto fase della lavorazione come temporaneamente corrente
SetTempPhase TmpPhase( this, pMch->GetPhase()) ;
// calcolo la lavorazione
return pMch->Apply( bRecalc) ;
}
+13 -1
View File
@@ -213,8 +213,20 @@ MachMgr::RemoveLastPhase( void)
}
// elimino la disposizione di fase
int nDispId = GetLastOperation() ;
if ( GetOperationType( nDispId) == OPER_DISP && GetOperationPhase( nDispId) == m_nPhasesCount)
if ( GetOperationType( nDispId) == OPER_DISP && GetOperationPhase( nDispId) == m_nPhasesCount) {
// elimino i bloccaggi della fase
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( nDispId)) ;
if ( pDisp != nullptr) {
int nFxtId = pDisp->GetFirstFixture() ;
while ( nFxtId != GDB_ID_NULL) {
if ( ! pDisp->RemoveFixture( nFxtId))
break ;
nFxtId = pDisp->GetFirstFixture() ;
}
}
// eliminazione dell'operazione
m_pGeomDB->Erase( nDispId) ;
}
// se era corrente, rendo corrente la precedente
if ( m_nCurrPhase == m_nPhasesCount)
SetCurrPhase( m_nCurrPhase - 1) ;
+8 -6
View File
@@ -573,7 +573,7 @@ MachMgr::RemoveRawPartFromCurrPhase( int nRawId)
if ( ! GetRawPartPhases( nRawId, vPhase))
return false ;
// se non appartiene alla fase corrente, non devo fare alcunché
auto iIter = find( vPhase.begin(), vPhase.end(), m_nPhasesCount) ;
auto iIter = find( vPhase.begin(), vPhase.end(), m_nCurrPhase) ;
if ( iIter == vPhase.end())
return true ;
// se appartiene solo a questa fase, lo elimino
@@ -617,16 +617,18 @@ MachMgr::RemoveRawPart( int nRawId)
//----------------------------------------------------------------------------
bool
MachMgr::VerifyRawPart( int nRawId) const
MachMgr::VerifyRawPart( int nRawId, bool bLinkedAllowed) const
{
// se il grezzo fa parte del gruppo dei grezzi, va bene
int nRawGroupId = GetCurrRawGroupId() ;
if ( nRawGroupId != GDB_ID_NULL && m_pGeomDB->GetParentId( nRawId) == nRawGroupId)
return true ;
// se il grezzo è linkato ad un gruppo della macchina corrente, va bene
Machine* pMch = GetCurrMachine() ;
if ( pMch != nullptr && pMch->IsLinkedRawPart( nRawId))
return true ;
// se consentito linkaggio ed il grezzo è linkato ad un gruppo della macchina corrente, va bene
if ( bLinkedAllowed) {
Machine* pMch = GetCurrMachine() ;
if ( pMch != nullptr && pMch->IsLinkedRawPart( nRawId))
return true ;
}
// altrimenti errore
return false ;
}
+37
View File
@@ -0,0 +1,37 @@
//----------------------------------------------------------------------------
// EgalTech 2016-2016
//----------------------------------------------------------------------------
// File : SetTempPhase.h Data : 14.10.16 Versione : 1.6v7
// Contenuto : Dichiarazione classe per impostazione temporanea
// della fase corrente.
//
//
// Modifiche : 14.10.16 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "MachMgr.h"
//----------------------------------------------------------------------------
class SetTempPhase
{
public :
SetTempPhase( MachMgr* pMachMgr, int nPhase)
{ m_pMachMgr = pMachMgr ;
if ( m_pMachMgr != nullptr) {
m_nPrevPhase = m_pMachMgr->GetCurrPhase() ;
m_pMachMgr->SetCurrPhase( nPhase) ;
} }
~SetTempPhase( void)
{ Reset() ; }
void Reset( void)
{ if ( m_pMachMgr != nullptr)
m_pMachMgr->SetCurrPhase( m_nPrevPhase) ; }
private :
int m_nPrevPhase ;
MachMgr* m_pMachMgr ;
} ;