EgtMachKernel 1.9g1 :

- possibilità di variare la feed all'inizio e fine di tagli di lama lineari a singolo step, mediante note (Fsta:200=0.3;Fend:300=0.4).
This commit is contained in:
Dario Sassi
2018-07-27 07:47:23 +00:00
parent b6657d56a5
commit db12d64998
3 changed files with 77 additions and 7 deletions
BIN
View File
Binary file not shown.
+75 -6
View File
@@ -56,6 +56,15 @@ using namespace std ;
// 2218 = "Error in Sawing : link outstroke xxx"
// 2219 = "Error in Sawing : post apply not calculable"
//----------------------------------------------------------------------------
struct FseVar {
double dLenStart ;
double dPuStart ;
double dLenEnd ;
double dPuEnd ;
FseVar( void) : dLenStart( 0), dPuStart( 0), dLenEnd( 0), dPuEnd( 0) {}
} ;
//----------------------------------------------------------------------------
USEROBJ_REGISTER( GetOperationClass( OPER_SAWING), Sawing) ;
@@ -1502,6 +1511,31 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
return true ;
}
// Eventuale variazioni di velocità all'inizio e alla fine del percorso
FseVar FvVar ;
if ( pCrvP == nullptr) {
string sFsta = ExtractInfo( m_Params.m_sUserNotes, "Fsta:") ;
if ( ! sFsta.empty()) {
string sLen, sPu ;
SplitFirst( sFsta, "=", sLen, sPu) ;
FromString( sLen, FvVar.dLenStart) ;
FvVar.dLenStart = max( FvVar.dLenStart, 0.) ;
FromString( sPu, FvVar.dPuStart) ;
FvVar.dPuStart = max( FvVar.dPuStart, 0.) ;
}
}
if ( pCrvN == nullptr) {
string sFend = ExtractInfo( m_Params.m_sUserNotes, "Fend:") ;
if ( ! sFend.empty()) {
string sLen, sPu ;
SplitFirst( sFend, "=", sLen, sPu) ;
FromString( sLen, FvVar.dLenEnd) ;
FvVar.dLenEnd = max( FvVar.dLenEnd, 0.) ;
FromString( sPu, FvVar.dPuEnd) ;
FvVar.dPuEnd = max( FvVar.dPuEnd, 0.) ;
}
}
// Se richiesto Preview
if ( nPvId != GDB_ID_NULL) {
if ( ! GenerateLinePv( pLine, vtTool, vtCorr, dElev, dExtraCut, dRbHeight, sName, nPvId))
@@ -1510,7 +1544,7 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
// Se richiesta geometria di lavorazione
if ( nClId != GDB_ID_NULL) {
if ( ! GenerateLineCl( pLine, vtTool, vtCorr, dElev, dExtraCut, sName, dDeltaLiExt, dDeltaLoExt, nClId))
if ( ! GenerateLineCl( pLine, vtTool, vtCorr, dElev, dExtraCut, sName, dDeltaLiExt, dDeltaLoExt, FvVar, nClId))
return false ;
}
@@ -1659,7 +1693,8 @@ Sawing::GenerateLinePv( const ICurveLine* pLine, const Vector3d& vtTool, const V
//----------------------------------------------------------------------------
bool
Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const Vector3d& vtCorr,
double dElev, double dExtraCut, const string& sName, double dDeltaLiExt, double dDeltaLoExt, int nClId)
double dElev, double dExtraCut, const string& sName,
double dDeltaLiExt, double dDeltaLoExt, const FseVar& FvVar, int nClId)
{
// creo gruppo per geometria di lavorazione della linea
int nPxId = m_pGeomDB->AddGroup( GDB_ID_NULL, nClId, Frame3d()) ;
@@ -1707,10 +1742,44 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
if ( AddLinearMove( ptP2) == GDB_ID_NULL)
return false ;
// 3 -> movimento di lato al punto finale
SetFeed( GetFeed()) ;
Point3d ptP3 = pLine->GetEnd() ;
if ( AddLinearMove( ptP3) == GDB_ID_NULL)
return false ;
if ( FvVar.dLenStart > EPS_SMALL || FvVar.dLenEnd > EPS_SMALL) {
// lunghezza del taglio
double dCutLen ; pLine->GetLength( dCutLen) ;
double dStartFraz = FvVar.dLenStart / dCutLen ;
double dEndFraz = FvVar.dLenEnd / dCutLen ;
double dMidFraz = 1 - dEndFraz ;
if ( dStartFraz + dEndFraz > 1) {
dStartFraz /= ( dStartFraz + dEndFraz) ;
dEndFraz = 1 - dStartFraz ;
dMidFraz = dStartFraz ;
}
// punto finale
Point3d ptP3 = pLine->GetEnd() ;
// 3a -> eventuale movimento di lato a feed ridotta di inizio percorso
if ( dStartFraz * dCutLen > EPS_SMALL) {
SetFeed( FvVar.dPuStart * GetFeed()) ;
if ( AddLinearMove( Media( ptP2, ptP3, dStartFraz)) == GDB_ID_NULL)
return false ;
}
// 3b -> eventuale movimento di lato a feed normale
if ( ( dMidFraz - dStartFraz) * dCutLen > EPS_SMALL) {
SetFeed( GetFeed()) ;
if ( AddLinearMove( Media( ptP2, ptP3, dMidFraz)) == GDB_ID_NULL)
return false ;
}
// 3c -> eventuale movimento di lato a feed ridotta di fine percorso
if ( dEndFraz * dCutLen > EPS_SMALL) {
SetFeed( FvVar.dPuEnd * GetFeed()) ;
if ( AddLinearMove( ptP3) == GDB_ID_NULL)
return false ;
}
}
else {
SetFeed( GetFeed()) ;
Point3d ptP3 = pLine->GetEnd() ;
if ( AddLinearMove( ptP3) == GDB_ID_NULL)
return false ;
}
// 4 -> retrazione
if ( ! AddRetract( pLine->GetEnd(), vtCorr, dSafeZ, dElev, dAppr))
return false ;
+2 -1
View File
@@ -22,6 +22,7 @@ class ICurve ;
class ICurveLine ;
class ICurveArc ;
class ICurveComposite ;
struct FseVar ;
//----------------------------------------------------------------------------
class Sawing : public Machining
@@ -82,7 +83,7 @@ class Sawing : public Machining
bool GenerateLinePv( const ICurveLine* pLine, const Vector3d& vtTool, const Vector3d& vtCorr,
double dElev, double dExtraCut, double dRbHeight, const string& sName, int nPvId) ;
bool GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const Vector3d& vtCorr,
double dElev, double dExtraCut, const string& sName, double dDeltaLiExt, double dDeltaLoExt, int nClId) ;
double dElev, double dExtraCut, const string& sName, double dDeltaLiExt, double dDeltaLoExt, const FseVar& FvVar, int nClId) ;
bool ProcessExtCurve( const ICurve* pCrvP, const ICurveComposite* pCrvC, const ICurve* pCrvN,
double dDepth, double dExtraCut, double dRbHeight, bool bIsFirst, bool bIsLast,
const string& sName, int nPvId, int nClId) ;