EgtMachKernel 1.6f2 :
- aggiunto UserObj CamData per rappresentare dati tipo CL in entità geometriche - possibilità di ruotare i sottopezzi - aggiunto calcolo percorsi di lavorazione di fori - aggiunte prime versioni parziali di taglio con lama e fresatura.
This commit is contained in:
+87
-46
@@ -18,20 +18,33 @@
|
||||
#include "Disposition.h"
|
||||
#include "Table.h"
|
||||
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
||||
#include "/EgtDev/Include/EGkObjUserFactory.h"
|
||||
#include "/EgtDev/Include/EGkUserObjFactory.h"
|
||||
#include "/EgtDev/Include/EGnStringKeyVal.h"
|
||||
#include "/EgtDev/Include/EGnFileUtils.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
OBJUSER_REGISTER( "EMkDisposition", Disposition) ;
|
||||
static std::string DIS_TABLE = "Tab" ;
|
||||
static std::string DIS_FXD_TOT = "FxT" ;
|
||||
static std::string DIS_FXD_NAME = "FxN" ;
|
||||
static std::string DIS_FXD_POS = "FxP" ;
|
||||
static std::string DIS_FXD_ANG = "FxA" ;
|
||||
static std::string DIS_MVD_TOT = "MvT" ;
|
||||
static std::string DIS_MVD_ID = "MvI" ;
|
||||
static std::string DIS_MVD_TYPE = "MvT" ;
|
||||
static std::string DIS_MVD_PNT = "MvP" ;
|
||||
static std::string DIS_MVD_ANG = "MvA" ;
|
||||
static std::string DIS_MVD_FLAG = "MvF" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
USEROBJ_REGISTER( "EMkDisposition", Disposition) ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
const string&
|
||||
Disposition::GetClassName( void) const
|
||||
{
|
||||
return OBJUSER_GETNAME( Disposition) ;
|
||||
return USEROBJ_GETNAME( Disposition) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -64,25 +77,26 @@ Disposition::Dump( string& sOut, const char* szNewLine) const
|
||||
{
|
||||
sOut += GetClassName() + szNewLine ;
|
||||
sOut += "Tab=" + m_sTabName + ( m_bTabOk ? " (ok)" : " (to verify)") + szNewLine ;
|
||||
for ( int i = 0 ; i < int( m_vFixData.size()) ; ++ i) {
|
||||
sOut += "FxD=" + m_vFixData[i].sName + "," +
|
||||
ToString( m_vFixData[i].nId) + ",(" +
|
||||
ToString( m_vFixData[i].ptPos) + ")" + szNewLine ;
|
||||
for ( const auto& FixData : m_vFixData) {
|
||||
sOut += "FxD=" + FixData.sName + "," +
|
||||
ToString( FixData.nId) + ",(" +
|
||||
ToString( FixData.ptPos) + ")," +
|
||||
ToString( FixData.dAng) + szNewLine ;
|
||||
}
|
||||
for ( int i = 0 ; i < int( m_vMvrData.size()) ; ++ i) {
|
||||
sOut += "MvD=" + ToString( m_vMvrData[i].nRawId) + "," ;
|
||||
switch (m_vMvrData[i].nType) {
|
||||
for ( const auto& MvrData : m_vMvrData) {
|
||||
sOut += "MvD=" + ToString( MvrData.nRawId) + "," ;
|
||||
switch ( MvrData.nType) {
|
||||
case MoveRawData::NONE :
|
||||
sOut += string( " NONE") + szNewLine ;
|
||||
break ;
|
||||
case MoveRawData::COR :
|
||||
sOut += " COR,(" + ToString( m_vMvrData[i].ptP) + ")," + ToString( m_vMvrData[i].nFlag) + szNewLine ;
|
||||
sOut += " COR,(" + ToString( MvrData.ptP) + ")," + ToString( MvrData.nFlag) + szNewLine ;
|
||||
break ;
|
||||
case MoveRawData::CEN :
|
||||
sOut += " CEN,(" + ToString( m_vMvrData[i].ptP) + ")," + ToString( m_vMvrData[i].nFlag) + szNewLine ;
|
||||
sOut += " CEN,(" + ToString( MvrData.ptP) + ")," + ToString( MvrData.nFlag) + szNewLine ;
|
||||
break ;
|
||||
case MoveRawData::ROT :
|
||||
sOut += " ROT,(" + ToString( m_vMvrData[i].ptP) + ")" + szNewLine ;
|
||||
sOut += " ROT,(" + ToString( MvrData.ptP) + ")" + szNewLine ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
@@ -96,7 +110,7 @@ Disposition::Save( STRVECTOR& vString) const
|
||||
try {
|
||||
int k = - 1 ;
|
||||
int nFxdTot = int( m_vFixData.size()) ;
|
||||
int nFxdLines = 1 + 2 * nFxdTot ;
|
||||
int nFxdLines = 1 + 3 * nFxdTot ;
|
||||
int nMvdTot = int( m_vMvrData.size()) ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
vString.insert( vString.begin(), 1 + nFxdLines + nMvdLines, "") ;
|
||||
@@ -106,19 +120,20 @@ Disposition::Save( STRVECTOR& vString) const
|
||||
// dati sottopezzi
|
||||
if ( ! SetVal( DIS_FXD_TOT, nFxdTot, vString[++k]))
|
||||
return false ;
|
||||
for ( int i = 0 ; i < nFxdTot ; ++ i) {
|
||||
if ( ! SetVal( DIS_FXD_NAME, m_vFixData[i].sName, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_POS, m_vFixData[i].ptPos, vString[++k]))
|
||||
for ( const auto& FixData : m_vFixData) {
|
||||
if ( ! SetVal( DIS_FXD_NAME, FixData.sName, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_POS, FixData.ptPos, vString[++k]) ||
|
||||
! SetVal( DIS_FXD_ANG, FixData.dAng, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
// dati posizionamento grezzi
|
||||
if ( ! SetVal( DIS_MVD_TOT, nMvdTot, vString[++k]))
|
||||
return false ;
|
||||
for ( int i = 0 ; i < nMvdTot ; ++ i) {
|
||||
if ( ! SetVal( DIS_MVD_ID, m_vMvrData[i].nRawId, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_TYPE, m_vMvrData[i].nType, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_PNT, m_vMvrData[i].ptP, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_FLAG, m_vMvrData[i].nFlag, vString[++k]))
|
||||
for ( const auto& MvrData : m_vMvrData) {
|
||||
if ( ! SetVal( DIS_MVD_ID, MvrData.nRawId, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_TYPE, MvrData.nType, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_PNT, MvrData.ptP, vString[++k]) ||
|
||||
! SetVal( DIS_MVD_FLAG, MvrData.nFlag, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -140,13 +155,14 @@ Disposition::Load( const STRVECTOR& vString)
|
||||
int nFxdTot ;
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_TOT, nFxdTot))
|
||||
return false ;
|
||||
int nFxdLines = 1 + 2 * nFxdTot ;
|
||||
int nFxdLines = 1 + 3 * nFxdTot ;
|
||||
if ( int( vString.size()) < 1 + nFxdLines + 1)
|
||||
return false ;
|
||||
m_vFixData.insert( m_vFixData.begin(), nFxdTot, FixtureData()) ;
|
||||
for ( int i = 0 ; i < nFxdTot ; ++ i) {
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_NAME, m_vFixData[i].sName) ||
|
||||
! GetVal( vString[++k], DIS_FXD_POS, m_vFixData[i].ptPos))
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_NAME, FixData.sName) ||
|
||||
! GetVal( vString[++k], DIS_FXD_POS, FixData.ptPos) ||
|
||||
! GetVal( vString[++k], DIS_FXD_ANG, FixData.dAng))
|
||||
return false ;
|
||||
}
|
||||
// dati posizionamento grezzi
|
||||
@@ -157,11 +173,11 @@ Disposition::Load( const STRVECTOR& vString)
|
||||
if ( int( vString.size()) < 1 + nFxdLines + nMvdLines)
|
||||
return false ;
|
||||
m_vMvrData.insert( m_vMvrData.begin(), nMvdTot, MoveRawData()) ;
|
||||
for ( int i = 0 ; i < nMvdTot ; ++ i) {
|
||||
if ( ! GetVal( vString[++k], DIS_MVD_ID, m_vMvrData[i].nRawId) ||
|
||||
! GetVal( vString[++k], DIS_MVD_TYPE, m_vMvrData[i].nType) ||
|
||||
! GetVal( vString[++k], DIS_MVD_PNT, m_vMvrData[i].ptP) ||
|
||||
! GetVal( vString[++k], DIS_MVD_FLAG, m_vMvrData[i].nFlag))
|
||||
for ( auto& MvrData : m_vMvrData) {
|
||||
if ( ! GetVal( vString[++k], DIS_MVD_ID, MvrData.nRawId) ||
|
||||
! GetVal( vString[++k], DIS_MVD_TYPE, MvrData.nType) ||
|
||||
! GetVal( vString[++k], DIS_MVD_PNT, MvrData.ptP) ||
|
||||
! GetVal( vString[++k], DIS_MVD_FLAG, MvrData.nFlag))
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
@@ -244,36 +260,36 @@ bool
|
||||
Disposition::Apply(void)
|
||||
{
|
||||
// aggiornamento sottopezzi
|
||||
for ( auto iIter = m_vFixData.begin() ; iIter != m_vFixData.end() ; ++ iIter) {
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
// se sottopezzo da caricare
|
||||
if ( iIter->nId == GDB_ID_NULL) {
|
||||
int nId = AddSubPiece( iIter->sName, iIter->ptPos, false) ;
|
||||
if ( FixData.nId == GDB_ID_NULL) {
|
||||
int nId = AddSubPiece( FixData.sName, FixData.ptPos, false) ;
|
||||
if ( nId == GDB_ID_NULL) {
|
||||
string sOut = "Error adding subpiece " + iIter->sName ;
|
||||
string sOut = "Error adding subpiece " + FixData.sName ;
|
||||
LOG_ERROR( GetEMkLogger(), sOut.c_str()) ;
|
||||
}
|
||||
else
|
||||
iIter->nId = nId ;
|
||||
FixData.nId = nId ;
|
||||
}
|
||||
}
|
||||
// aggiornamento movimento pezzi
|
||||
for ( auto iIter = m_vMvrData.begin() ; iIter != m_vMvrData.end() ; ++ iIter) {
|
||||
switch ( iIter->nType) {
|
||||
for ( const auto& vMvrData : m_vMvrData) {
|
||||
switch ( vMvrData.nType) {
|
||||
case MoveRawData::COR :
|
||||
if ( ! MoveToCornerRawPart( iIter->nRawId, iIter->ptP, iIter->nFlag, false)) {
|
||||
string sOut = "Error in MoveToCornerRawPart " + ToString( iIter->nRawId) ;
|
||||
if ( ! MoveToCornerRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false)) {
|
||||
string sOut = "Error in MoveToCornerRawPart " + ToString( vMvrData.nRawId) ;
|
||||
LOG_ERROR( GetEMkLogger(), sOut.c_str()) ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::CEN :
|
||||
if ( ! MoveToCenterRawPart( iIter->nRawId, iIter->ptP, iIter->nFlag, false)) {
|
||||
string sOut = "Error in MoveToCenterRawPart " + ToString( iIter->nRawId) ;
|
||||
if ( ! MoveToCenterRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false)) {
|
||||
string sOut = "Error in MoveToCenterRawPart " + ToString( vMvrData.nRawId) ;
|
||||
LOG_ERROR( GetEMkLogger(), sOut.c_str()) ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::ROT :
|
||||
if ( ! ApplyRotationToRawPart( iIter->nRawId, iIter->ptP.x, iIter->ptP.y, iIter->ptP.z)) {
|
||||
string sOut = "Error in ApplyRotationToRawPart " + ToString( iIter->nRawId) ;
|
||||
if ( ! ApplyRotationToRawPart( vMvrData.nRawId, vMvrData.ptP.x, vMvrData.ptP.y, vMvrData.ptP.z)) {
|
||||
string sOut = "Error in ApplyRotationToRawPart " + ToString( vMvrData.nRawId) ;
|
||||
LOG_ERROR( GetEMkLogger(), sOut.c_str()) ;
|
||||
}
|
||||
break ;
|
||||
@@ -285,7 +301,7 @@ Disposition::Apply(void)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Disposition::AddSubPiece( const string& sName, const Point3d& ptPos, bool bAddToList)
|
||||
Disposition::AddSubPiece( const string& sName, const Point3d& ptPos, double dAngDeg, bool bAddToList)
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
@@ -312,9 +328,12 @@ Disposition::AddSubPiece( const string& sName, const Point3d& ptPos, bool bAddTo
|
||||
// la muovo nella posizione voluta
|
||||
Vector3d vtMove = ( m_ptRef1 + ptPos) - ORIG ;
|
||||
m_pGeomDB->TranslateGlob( nFixtId, vtMove) ;
|
||||
// la ruoto
|
||||
if ( fabs( dAngDeg) > EPS_ANG_SMALL)
|
||||
m_pGeomDB->RotateGroup( nFixtId, ORIG, Z_AX, dAngDeg) ;
|
||||
// se da aggiungere alla lista
|
||||
if ( bAddToList)
|
||||
m_vFixData.emplace_back( sName, nFixtId, ptPos) ;
|
||||
m_vFixData.emplace_back( sName, nFixtId, ptPos, 0) ;
|
||||
return nFixtId ;
|
||||
}
|
||||
|
||||
@@ -340,6 +359,28 @@ Disposition::MoveSubPiece( int nId, const Vector3d& vtMove)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::RotateSubPiece( int nId, double dAngDeg)
|
||||
{
|
||||
// verifica validità sottopezzo
|
||||
if ( ! VerifyFixture( nId))
|
||||
return false ;
|
||||
// verifico aggiornamento tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// muovo l'oggetto
|
||||
m_pGeomDB->RotateGroup( nId, ORIG, Z_AX, dAngDeg) ;
|
||||
// aggiorno la posizione dell'oggetto nel vettore dei comandi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
if ( FixData.nId == nId) {
|
||||
FixData.dAng += dAngDeg ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::RemoveSubPiece( int nId)
|
||||
|
||||
Reference in New Issue
Block a user