EgtMachKernel 2.6j2 :
- aggiunta gestione assi ausiliari di tavola da comandi Disp (MoveDispAxis e RemoveDispAxis) - aggiunta funzione per avere dati eventuali utensile, testa e uscita associato a disposizione.
This commit is contained in:
+146
-23
@@ -27,16 +27,17 @@
|
||||
using namespace std ;
|
||||
|
||||
//------------------------------ Errors --------------------------------------
|
||||
// 2001 = "Error adding fixture xx"
|
||||
// 2002 = "Error placing fixture xx"
|
||||
// 2003 = "Error in MoveToCornerRawPart xx"
|
||||
// 2004 = "Error in MoveToCenterRawPart xx"
|
||||
// 2005 = "Error in ApplyRotationToRawPart xx"
|
||||
// 2006 = "Error in OnSpecialApplyDisposition (xxx)"
|
||||
// 2007 = "Error in Disposition : axes values not calculable"
|
||||
// 2008 = "Error in Disposition : outstroke xxx"
|
||||
// 2009 = "Error in Disposition : link movements not calculable"
|
||||
// 2010 = "Error in Disposition : link outstroke xxx"
|
||||
// 2001 = "Error moving axis xx"
|
||||
// 2002 = "Error adding fixture xx"
|
||||
// 2003 = "Error placing fixture xx"
|
||||
// 2004 = "Error in MoveToCornerRawPart xx"
|
||||
// 2005 = "Error in MoveToCenterRawPart xx"
|
||||
// 2006 = "Error in ApplyRotationToRawPart xx"
|
||||
// 2007 = "Error in OnSpecialApplyDisposition (xxx)"
|
||||
// 2008 = "Error in Disposition : axes values not calculable"
|
||||
// 2009 = "Error in Disposition : outstroke xxx"
|
||||
// 2010 = "Error in Disposition : link movements not calculable"
|
||||
// 2011 = "Error in Disposition : link outstroke xxx"
|
||||
// 2051 = "Table Ref1 changed : (xyz) -> (XYZ)"
|
||||
// 2052 = "Warning in Disposition : No shifts"
|
||||
// 2053 = "Warning in OnSpecialApplyDisposition (xxx)"
|
||||
@@ -46,6 +47,9 @@ static string DIS_TABLE = "Tab" ;
|
||||
static string DIS_PHASE = "Ph" ;
|
||||
static string DIS_REF1 = "Ref1" ;
|
||||
static string DIS_AREA1 = "Area1" ;
|
||||
static string DIS_AXD_TOT = "AxT" ;
|
||||
static string DIS_AXD_NAME = "AxN" ;
|
||||
static string DIS_AXD_POS = "AxP" ;
|
||||
static string DIS_FXD_TOT = "FxT" ;
|
||||
static string DIS_FXD_NAME = "FxN" ;
|
||||
static string DIS_FXD_POS = "FxP" ;
|
||||
@@ -92,6 +96,7 @@ Disposition::Clone( void) const
|
||||
pDisp->m_b3Area1 = m_b3Area1 ;
|
||||
pDisp->m_dAreaOffset = m_dAreaOffset ;
|
||||
pDisp->m_bTabOk = m_bTabOk ;
|
||||
pDisp->m_vAxData = m_vAxData ;
|
||||
pDisp->m_vFixData = m_vFixData ;
|
||||
pDisp->m_vMvrData = m_vMvrData ;
|
||||
pDisp->m_sHead = m_sHead ;
|
||||
@@ -120,6 +125,10 @@ Disposition::Dump( string& sOut, bool bMM, const char* szNewLine) const
|
||||
sOut += DIS_REF1 + EQUAL + "(" + ToString( m_ptRef1, 3) + ")" + szNewLine ;
|
||||
sOut += DIS_AREA1 + EQUAL + "(" + ToString( m_b3Area1, 3) + ")" + szNewLine ;
|
||||
sOut += DIS_AREA1_OFFS + EQUAL + "(" + ToString( m_dAreaOffset) + ")" + szNewLine ;
|
||||
for ( const auto& AxData : m_vAxData) {
|
||||
sOut += "AxD=" + AxData.sName + "," +
|
||||
ToString( AxData.dPos) + szNewLine ;
|
||||
}
|
||||
for ( const auto& FixData : m_vFixData) {
|
||||
sOut += "FxD=" + FixData.sName + "," +
|
||||
ToString( FixData.nId) + ",(" +
|
||||
@@ -159,12 +168,14 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
{
|
||||
try {
|
||||
int k = - 1 ;
|
||||
int nAxdTot = int( m_vAxData.size()) ;
|
||||
int nAxdLines = ( nAxdTot == 0 ? 0 : 1 + 2 * nAxdTot) ;
|
||||
int nFxdTot = int( m_vFixData.size()) ;
|
||||
int nFxdLines = 1 + 4 * nFxdTot ;
|
||||
int nMvdTot = int( m_vMvrData.size()) ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
int nOther = 7 ;
|
||||
vString.insert( vString.begin(), 4 + nFxdLines + nMvdLines + nOther, "") ;
|
||||
vString.insert( vString.begin(), 4 + nAxdLines + nFxdLines + nMvdLines + nOther, "") ;
|
||||
// Nome
|
||||
if ( ! SetVal( DIS_TABLE, m_sTabName, vString[++k]))
|
||||
return false ;
|
||||
@@ -177,6 +188,16 @@ Disposition::Save( int nBaseId, STRVECTOR& vString) const
|
||||
// Prima area
|
||||
if ( ! SetVal( DIS_AREA1, m_b3Area1, vString[++k]))
|
||||
return false ;
|
||||
// Dati assi (se presenti)
|
||||
if ( nAxdTot > 0) {
|
||||
if ( ! SetVal( DIS_AXD_TOT, nAxdTot, vString[++k]))
|
||||
return false ;
|
||||
for ( const auto& AxData : m_vAxData) {
|
||||
if ( ! SetVal( DIS_AXD_NAME, AxData.sName, vString[++k]) ||
|
||||
! SetVal( DIS_AXD_POS, AxData.dPos, vString[++k]))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// Dati sottopezzi
|
||||
if ( ! SetVal( DIS_FXD_TOT, nFxdTot, vString[++k]))
|
||||
return false ;
|
||||
@@ -237,12 +258,27 @@ Disposition::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
// prima area
|
||||
if ( ! GetVal( vString[++k], DIS_AREA1, m_b3Area1))
|
||||
return false ;
|
||||
// dati assi opzionali
|
||||
int nAxdTot = 0 ;
|
||||
if ( ! GetVal( vString[++k], DIS_AXD_TOT, nAxdTot))
|
||||
-- k ;
|
||||
int nAxdLines = ( nAxdTot == 0 ? 0 : 1 + 2 * nAxdTot) ;
|
||||
if ( nAxdTot > 0) {
|
||||
if ( int( vString.size()) < 3 + nAxdLines + 1)
|
||||
return false ;
|
||||
m_vAxData.insert( m_vAxData.begin(), nAxdTot, AxisData()) ;
|
||||
for ( auto& AxData : m_vAxData) {
|
||||
if ( ! GetVal( vString[++k], DIS_AXD_NAME, AxData.sName) ||
|
||||
! GetVal( vString[++k], DIS_AXD_POS, AxData.dPos))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
// dati sottopezzi
|
||||
int nFxdTot ;
|
||||
if ( ! GetVal( vString[++k], DIS_FXD_TOT, nFxdTot))
|
||||
return false ;
|
||||
int nFxdLines = 1 + 3 * nFxdTot ;
|
||||
if ( int( vString.size()) < 3 + nFxdLines + 1)
|
||||
if ( int( vString.size()) < 3 + nAxdLines + nFxdLines + 1)
|
||||
return false ;
|
||||
m_vFixData.insert( m_vFixData.begin(), nFxdTot, FixtureData()) ;
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
@@ -262,7 +298,7 @@ Disposition::Load( const STRVECTOR& vString, int nBaseGdbId)
|
||||
if ( ! GetVal( vString[++k], DIS_MVD_TOT, nMvdTot))
|
||||
return false ;
|
||||
int nMvdLines = 1 + 4 * nMvdTot ;
|
||||
if ( int( vString.size()) < 3 + nFxdLines + nMvdLines)
|
||||
if ( int( vString.size()) < 3 + nAxdLines + nFxdLines + nMvdLines)
|
||||
return false ;
|
||||
m_vMvrData.insert( m_vMvrData.begin(), nMvdTot, MoveRawData()) ;
|
||||
for ( auto& MvrData : m_vMvrData) {
|
||||
@@ -435,6 +471,14 @@ Disposition::Apply( bool bVerifyTab)
|
||||
if ( ( ! m_bTabOk || bVerifyTab) && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
bool bOk = true ;
|
||||
// aggiornamento movimenti assi
|
||||
for ( auto& AxData : m_vAxData) {
|
||||
if ( ! m_pMchMgr->SetAxisPos( AxData.sName, AxData.dPos)) {
|
||||
string sOut = "Error moving axis " + AxData.sName ;
|
||||
m_pMchMgr->SetLastError( 2001, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// aggiornamento sottopezzi
|
||||
for ( auto& FixData : m_vFixData) {
|
||||
// se sottopezzo da caricare
|
||||
@@ -442,7 +486,7 @@ Disposition::Apply( bool bVerifyTab)
|
||||
int nId = AddFixture( FixData.sName, GDB_ID_NULL, FixData.ptPos, FixData.dAng, FixData.dMov, false) ;
|
||||
if ( nId == GDB_ID_NULL) {
|
||||
string sOut = "Error adding fixture " + FixData.sName ;
|
||||
m_pMchMgr->SetLastError( 2001, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2002, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
else
|
||||
@@ -452,7 +496,7 @@ Disposition::Apply( bool bVerifyTab)
|
||||
else {
|
||||
if ( ! PlaceFixture( FixData.nId, FixData.ptPos, FixData.dAng, FixData.dMov)) {
|
||||
string sOut = "Error placing fixture " + ToString( FixData.nId) ;
|
||||
m_pMchMgr->SetLastError( 2002, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2003, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
@@ -474,21 +518,21 @@ Disposition::Apply( bool bVerifyTab)
|
||||
case MoveRawData::COR :
|
||||
if ( ! MoveToCornerRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false, false)) {
|
||||
string sOut = "Error in MoveToCornerRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2003, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2004, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::CEN :
|
||||
if ( ! MoveToCenterRawPart( vMvrData.nRawId, vMvrData.ptP, vMvrData.nFlag, false, false)) {
|
||||
string sOut = "Error in MoveToCenterRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2004, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2005, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
case MoveRawData::ROT :
|
||||
if ( ! ApplyRotationToRawPart( vMvrData.nRawId, vMvrData.ptP.x, vMvrData.ptP.y, vMvrData.ptP.z, false)) {
|
||||
string sOut = "Error in ApplyRotationToRawPart " + ToString( vMvrData.nRawId) ;
|
||||
m_pMchMgr->SetLastError( 2005, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2006, sOut) ;
|
||||
bOk = false ;
|
||||
}
|
||||
break ;
|
||||
@@ -520,6 +564,69 @@ Disposition::IsInTable( const BBox3d& b3B)
|
||||
return b3AllArea.EnclosesXY( b3B) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::MoveAxis( const string& sName, double dPos)
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// verifico esistenza asse
|
||||
if ( m_pMchMgr->GetAxisId( sName) == GDB_ID_NULL)
|
||||
return false ;
|
||||
// cerco eventuale movimento dello stesso asse già inserito
|
||||
int nInd = -1 ;
|
||||
for ( int i = 0 ; i < int( m_vAxData.size()) ; ++ i) {
|
||||
if ( m_vAxData[i].sName == sName) {
|
||||
nInd = i ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// eseguo movimento
|
||||
if ( ! m_pMchMgr->SetAxisPos( sName, dPos))
|
||||
return false ;
|
||||
// salvo movimento
|
||||
if ( nInd < 0)
|
||||
m_vAxData.emplace_back( sName, dPos) ;
|
||||
else
|
||||
m_vAxData[nInd].dPos = dPos ;
|
||||
m_nStatus |= MCH_ST_GEO_MODIF ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::RemoveAxis( const string& sName)
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico tavola
|
||||
if ( ! m_bTabOk && ! SetTable( m_sTabName))
|
||||
return false ;
|
||||
// verifico esistenza asse
|
||||
if ( m_pMchMgr->GetAxisId( sName) == GDB_ID_NULL)
|
||||
return false ;
|
||||
// cerco eventuale movimento dello stesso asse già inserito
|
||||
int nInd = -1 ;
|
||||
for ( int i = 0 ; i < int( m_vAxData.size()) ; ++ i) {
|
||||
if ( m_vAxData[i].sName == sName) {
|
||||
nInd = i ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
// se non trovato, non devo fare alcunché
|
||||
if ( nInd < 0)
|
||||
return true ;
|
||||
// rimetto asse in home e rimuovo movimento dalla lista
|
||||
m_pMchMgr->ResetAxisPos( sName) ;
|
||||
m_vAxData.erase( m_vAxData.begin() + nInd) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Disposition::AddFixture( const string& sName, int nId, const Point3d& ptPos, double dAngDeg,
|
||||
@@ -1246,6 +1353,22 @@ Disposition::RemoveRawPart( int nRawId)
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::GetMoveAxisData( int nInd, string& sName, double& dPos) const
|
||||
{
|
||||
// verifico MachMgr e GeomDB
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// verifico l'indice
|
||||
if ( nInd < 0 || nInd >= int( m_vAxData.size()))
|
||||
return false ;
|
||||
// recupero i dati
|
||||
sName = m_vAxData[nInd].sName ;
|
||||
dPos = m_vAxData[nInd].dPos ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Disposition::GetFixtureData( int nInd, string& sName, int& nId, Point3d& ptPos,
|
||||
@@ -1377,7 +1500,7 @@ Disposition::SpecialApply( bool bRecalc)
|
||||
string sOut = sMsg ;
|
||||
if ( IsEmptyOrSpaces( sOut))
|
||||
sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
|
||||
m_pMchMgr->SetLastError( 2006, sOut) ;
|
||||
m_pMchMgr->SetLastError( 2007, sOut) ;
|
||||
return false ;
|
||||
}
|
||||
// recupero eventuale warning
|
||||
@@ -1421,18 +1544,18 @@ Disposition::SpecialUpdate( void)
|
||||
if ( ! CalculateAxesValues( "", false)) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
|
||||
m_pMchMgr->SetLastError( 2008, "Error in Disposition : axes values not calculable") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2008, "Error in Disposition : outstroke ") ;
|
||||
m_pMchMgr->SetLastError( 2009, "Error in Disposition : outstroke ") ;
|
||||
return false ;
|
||||
}
|
||||
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
|
||||
if ( ! AdjustStartEndMovements()) {
|
||||
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
|
||||
if ( sInfo.empty())
|
||||
m_pMchMgr->SetLastError( 2009, "Error in Disposition : link movements not calculable") ;
|
||||
m_pMchMgr->SetLastError( 2010, "Error in Disposition : link movements not calculable") ;
|
||||
else
|
||||
m_pMchMgr->SetLastError( 2010, "Error in Disposition : link outstroke ") ;
|
||||
m_pMchMgr->SetLastError( 2011, "Error in Disposition : link outstroke ") ;
|
||||
return false ;
|
||||
}
|
||||
// assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
|
||||
|
||||
@@ -15,6 +15,18 @@
|
||||
|
||||
#include "Operation.h"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct AxisData
|
||||
{
|
||||
std::string sName ; // nome dell'asse ausiliario da muovere
|
||||
double dPos ; // posizione dell'asse
|
||||
AxisData( void)
|
||||
: sName(), dPos( 0) {}
|
||||
AxisData( const std::string& sN, double dP)
|
||||
: sName( sN), dPos( dP) {}
|
||||
} ;
|
||||
typedef std::vector<AxisData> AXDATAVECTOR ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct FixtureData
|
||||
{
|
||||
@@ -88,6 +100,8 @@ class Disposition : public Operation
|
||||
bool GetTableRef1( Point3d& ptRef1) const ;
|
||||
bool GetTableArea1( BBox3d& b3Area1) const ;
|
||||
bool GetTableAreaOffset1( BBox3d& b3AreaOffs1) const ;
|
||||
bool MoveAxis( const std::string& sName, double dPos) ;
|
||||
bool RemoveAxis( const std::string& sName) ;
|
||||
int AddFixture( const std::string& sName, int nId, const Point3d& ptPos, double dAngDeg = 0,
|
||||
double dMov = 0, bool bAddToList = true) ;
|
||||
int GetFirstFixture( void) ;
|
||||
@@ -104,6 +118,7 @@ class Disposition : public Operation
|
||||
bool ApplyRotationToRawPart( int nRawId, double dAngCDeg, double dAngADeg, double dAngC1Deg, bool bAddToList = true) ;
|
||||
bool UpdateRawPartId( int nRawId, int nNewRawId) ;
|
||||
bool RemoveRawPart( int nRawId) ;
|
||||
bool GetMoveAxisData( int nInd, std::string& sName, double& dPos) const ;
|
||||
bool GetFixtureData( int nInd, std::string& sName, int& nId, Point3d& ptPos,
|
||||
double& dAngDeg, double& dMov) const ;
|
||||
bool GetMoveRawData( int nInd, int& nRawId, int& nType, Point3d& ptPos, int& nFlag) const ;
|
||||
@@ -126,6 +141,7 @@ class Disposition : public Operation
|
||||
Point3d m_ptRef1 ; // origine 1 della tavola
|
||||
BBox3d m_b3Area1 ; // area utile 1 della tavola
|
||||
std::array<double,4> m_dAreaOffset ; // eventuali allargamenti dell'area sui 4 lati (0=XP, 1=YP, 2=XM, 3=YM)
|
||||
AXDATAVECTOR m_vAxData ; // elenco movimenti assi ausiliari
|
||||
FIXDATAVECTOR m_vFixData ; // elenco posizionamento bloccaggi
|
||||
MVRDATAVECTOR m_vMvrData ; // elenco movimenti grezzi
|
||||
std::string m_sHead ; // eventuale testa usata per muovere i pezzi
|
||||
|
||||
Binary file not shown.
@@ -156,6 +156,8 @@ class MachMgr : public IMachMgr
|
||||
bool GetTableAreaOffset( int nInd, BBox3d& b3AreaOffs) const override ;
|
||||
bool ChangeTable( const std::string& sTable, bool bUpdateDisp) override ;
|
||||
bool ShowOnlyTable( bool bVal) override ;
|
||||
bool MoveDispAxis( const std::string& sName, double dPos) override ;
|
||||
bool RemoveDispAxis( const std::string& sName) override ;
|
||||
int AddFixture( const std::string& sName, const Point3d& ptPos, double dAngRotDeg, double dMov) override ;
|
||||
bool KeepFixture( int nFxtId, int nSouPhase) override ;
|
||||
bool RemoveFixture( int nFxtId) override ;
|
||||
@@ -279,6 +281,7 @@ class MachMgr : public IMachMgr
|
||||
int GetPhaseDisposition( int nPhase) const override ;
|
||||
bool DispositionSpecialApply( int nId, bool bRecalc) override ;
|
||||
bool DispositionSpecialUpdate( int nId) override ;
|
||||
bool GetDispositionToolData( int nId, std::string& sName, std::string& sHead, int& nExit, std::string& sTcPos) override ;
|
||||
// Operations : machinings
|
||||
int AddMachining( const std::string& sName, const std::string& sMachining) override ;
|
||||
int AddMachining( const std::string& sName, int nMchType, const std::string& sTool) override ;
|
||||
|
||||
@@ -135,6 +135,30 @@ MachMgr::ShowOnlyTable( bool bVal)
|
||||
return pMch->SetLook( bVal ? MCH_LOOK_TAB : MCH_LOOK_ALL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::MoveDispAxis( const string& sName, double dPos)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->MoveAxis( sName, dPos) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::RemoveDispAxis( const string& sName)
|
||||
{
|
||||
// recupero l'oggetto disposizione corrente
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( m_nCurrDispId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// eseguo l'operazione
|
||||
return pDisp->RemoveAxis( sName) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
MachMgr::AddFixture( const string& sName, const Point3d& ptPos, double dAngRotDeg, double dMov)
|
||||
|
||||
@@ -672,6 +672,18 @@ MachMgr::DispositionSpecialUpdate( int nId)
|
||||
return pDisp->SpecialUpdate() ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetDispositionToolData( int nId, string& sName, string& sHead, int& nExit, string& sTcPos)
|
||||
{
|
||||
// recupero la disposizione
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( nId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
return false ;
|
||||
// recupero i dati utensile
|
||||
return pDisp->GetToolData( sName, sHead, nExit, sTcPos) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Machinings
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
+24
-6
@@ -2310,6 +2310,10 @@ Operation::VerifyLineMidPoint( const Point3d& ptPrec, const Vector3d& vtDirPrec,
|
||||
bAxError = false ;
|
||||
Machine* pMachine = m_pMchMgr->GetCurrMachine() ;
|
||||
|
||||
// se disposizione non vanno fatti controlli
|
||||
if ( GetType() == OPER_DISP)
|
||||
return true ;
|
||||
|
||||
// se superato il limite di ricursioni, non devo fare alcunché
|
||||
const int MAX_RECURSION = 6 ;
|
||||
if ( nCnt > MAX_RECURSION)
|
||||
@@ -2352,14 +2356,27 @@ Operation::VerifyLineMidPoint( const Point3d& ptPrec, const Vector3d& vtDirPrec,
|
||||
// Va inserito il punto medio
|
||||
Point3d ptMid = Media( ptPrec, ptP) ;
|
||||
Vector3d vtDirMid = Media( vtDirPrec, vtDir) ;
|
||||
if ( ! vtDirMid.Normalize())
|
||||
return ( nMoveType == 0) ;
|
||||
if ( ! vtDirMid.Normalize()) {
|
||||
if ( ! pMachine->GetBackToolDirFromAngles( vAxRotMid, vtDirMid))
|
||||
return ( nMoveType == 0) ;
|
||||
}
|
||||
Vector3d vtAuxMid = Media( vtAuxPrec, vtAux) ;
|
||||
if ( ! vtAuxPrec.IsSmall() && ! vtAux.IsSmall() && ! vtAuxMid.Normalize())
|
||||
return ( nMoveType == 0) ;
|
||||
if ( ! vtAuxPrec.IsSmall() && ! vtAux.IsSmall() && ! vtAuxMid.Normalize()) {
|
||||
if ( ! pMachine->GetBackAuxDirFromAngles( vAxRotMid, vtAuxMid))
|
||||
return ( nMoveType == 0) ;
|
||||
}
|
||||
Vector3d vtCorrMid = Media( vtCorrPrec, vtCorr) ;
|
||||
if ( ! vtCorrPrec.IsSmall() && ! vtCorr.IsSmall() && ! vtCorrMid.Normalize())
|
||||
return ( nMoveType == 0) ;
|
||||
if ( ! vtCorrPrec.IsSmall() && ! vtCorr.IsSmall() && ! vtCorrMid.Normalize()) {
|
||||
// riferimenti precedente e sul medio da direzioni fresa (Z) e ausiliaria (X)
|
||||
Frame3d refPrec, refMid ;
|
||||
if ( ! refPrec.Set( ORIG, vtDirPrec, vtAuxPrec) ||
|
||||
! refMid.Set( ORIG, vtDirMid, vtAuxMid))
|
||||
return ( nMoveType == 0) ;
|
||||
// versore correzione in locale al precente coincide con quello in locale al corrente
|
||||
vtCorrMid = vtCorrPrec ;
|
||||
vtCorrMid.ToLoc( refPrec) ;
|
||||
vtCorrMid.ToGlob( refMid) ;
|
||||
}
|
||||
// inserisco nuova entità e modifico vecchia
|
||||
int nMidEntId = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ;
|
||||
if ( nMidEntId == GDB_ID_NULL)
|
||||
@@ -2376,6 +2393,7 @@ Operation::VerifyLineMidPoint( const Point3d& ptPrec, const Vector3d& vtDirPrec,
|
||||
pMidCamData->SetEndPoint( ptMid) ;
|
||||
pMidCamData->SetToolDir( vtDirMid) ;
|
||||
pMidCamData->SetAuxDir( vtAuxMid) ;
|
||||
pMidCamData->SetCorrDir( vtCorrMid) ;
|
||||
pMidCamData->SetFlag2( -1) ;
|
||||
// calcolo gli assi rotanti per il punto medio
|
||||
DBLVECTOR vAxRotHome( int( vAxVal.size() - 3)) ;
|
||||
|
||||
Reference in New Issue
Block a user