diff --git a/Chiseling.cpp b/Chiseling.cpp
index a004756..fd457fd 100644
--- a/Chiseling.cpp
+++ b/Chiseling.cpp
@@ -620,6 +620,9 @@ Chiseling::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Drilling.cpp b/Drilling.cpp
index 95065d4..dfb43fd 100644
--- a/Drilling.cpp
+++ b/Drilling.cpp
@@ -639,6 +639,9 @@ Drilling::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc
index 34bc8f6..5f66eb4 100644
Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ
diff --git a/EgtMachKernel.vcxproj b/EgtMachKernel.vcxproj
index 36b6927..9463bdc 100644
--- a/EgtMachKernel.vcxproj
+++ b/EgtMachKernel.vcxproj
@@ -295,6 +295,7 @@ copy $(TargetPath) \EgtProg\Dll64
+
diff --git a/EgtMachKernel.vcxproj.filters b/EgtMachKernel.vcxproj.filters
index 2c3f52e..93369db 100644
--- a/EgtMachKernel.vcxproj.filters
+++ b/EgtMachKernel.vcxproj.filters
@@ -665,6 +665,9 @@
Header Files
+
+ Header Files\Include
+
diff --git a/GenMachining.cpp b/GenMachining.cpp
index f9af0c0..084f81b 100644
--- a/GenMachining.cpp
+++ b/GenMachining.cpp
@@ -664,6 +664,9 @@ GenMachining::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Milling.cpp b/Milling.cpp
index badb74e..05e15de 100644
--- a/Milling.cpp
+++ b/Milling.cpp
@@ -853,6 +853,9 @@ Milling::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Mortising.cpp b/Mortising.cpp
index de341a6..3b2e391 100644
--- a/Mortising.cpp
+++ b/Mortising.cpp
@@ -659,6 +659,9 @@ Mortising::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Operation.cpp b/Operation.cpp
index 513ba80..92f0ef1 100644
--- a/Operation.cpp
+++ b/Operation.cpp
@@ -20,6 +20,7 @@
#include "OutputConst.h"
#include "GeoConst.h"
#include "/EgtDev/Include/EGkAngle.h"
+#include "/EgtDev/Include/EGkBBox1d.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EGkCurveArc.h"
@@ -970,15 +971,13 @@ Operation::CalcAndSetBBox( int nClId)
double dDeltaN = pCamData->GetDeltaN() ;
// ricavo i punti
const double ANG_STEP = 15.0 ;
- int nStep = int( abs( dAngCen) / ANG_STEP) ;
- if ( nStep > 1) {
- double dCoeff = 1. / nStep ;
- for ( int i = 1 ; i < nStep ; ++ i) {
- Point3d ptT = ptP ;
- ptT.Rotate( ptCen, vtN, dAngCen * ( dCoeff - 1.)) ;
- ptT.Translate( vtN * ( dDeltaN * ( dCoeff - 1.))) ;
- b3Grp.Add( ptT) ;
- }
+ int nStep = 1 + int( abs( dAngCen) / ANG_STEP) ;
+ double dCoeff = -1. / nStep ;
+ for ( int i = 1 ; i < nStep ; ++ i) {
+ Point3d ptT = ptP ;
+ ptT.Rotate( ptCen, vtN, i * dCoeff * dAngCen) ;
+ ptT.Translate( vtN * ( i * dCoeff * dDeltaN)) ;
+ b3Grp.Add( ptT) ;
}
}
}
@@ -993,6 +992,76 @@ Operation::CalcAndSetBBox( int nClId)
return true ;
}
+//----------------------------------------------------------------------------
+bool
+Operation::CalcAndSetAxesBBox( void)
+{
+ if ( m_pGeomDB == nullptr || m_pMchMgr == nullptr)
+ return false ;
+ // recupero gruppo della geometria di lavorazione (Cutter Location)
+ int nClId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, MCH_CL) ;
+ if ( nClId == GDB_ID_NULL)
+ return false ;
+ // recupero numero totale assi correnti
+ int nLinAxes = m_pMchMgr->GetCurrLinAxes() ;
+ int nRotAxes = m_pMchMgr->GetCurrRotAxes() ;
+ int nTotAxes = nLinAxes + nRotAxes ;
+ // assegno estremi assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ vector vMmAxAll( nTotAxes) ;
+ int nClPathId = m_pGeomDB->GetFirstInGroup( nClId) ;
+ while ( nClPathId != GDB_ID_NULL) {
+ vector vMmAxGrp( nTotAxes) ;
+ for ( int nEntId = m_pGeomDB->GetFirstInGroup( nClPathId) ;
+ nEntId != GDB_ID_NULL ;
+ nEntId = m_pGeomDB->GetNext( nEntId)) {
+ // recupero i dati Cam dell'entità
+ CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ;
+ if ( pCamData == nullptr)
+ continue ;
+ // recupero gli assi macchina e li uso per aggiornare l'ingombro
+ DBLVECTOR AxesVal = pCamData->GetAxesVal() ;
+ for ( int i = 0 ; i < nTotAxes ; ++ i)
+ vMmAxGrp[i].Add( AxesVal[i]) ;
+ Point3d ptAxEnd( AxesVal[0], AxesVal[1], AxesVal[2]) ;
+ // se arco, determino anche alcuni valori intermedi
+ if ( pCamData->IsArc()) {
+ // dati dell'arco
+ Point3d ptCen = pCamData->GetAxesCen() ;
+ double dAngCen = pCamData->GetAxesAngCen() ;
+ Vector3d vtN = pCamData->GetAxesNormDir() ;
+ double dDeltaN = ( ptAxEnd - ptCen) * vtN ;
+ // ricavo i punti
+ const double ANG_STEP = 15.0 ;
+ int nStep = 1 + int( abs( dAngCen) / ANG_STEP) ;
+ double dCoeff = -1. / nStep ;
+ for ( int i = 1 ; i < nStep ; ++ i) {
+ // assi lineari
+ Point3d ptAxT = ptAxEnd ;
+ ptAxT.Rotate( ptCen, vtN, i * dCoeff * dAngCen) ;
+ ptAxT.Translate( vtN * ( i * dCoeff * dDeltaN)) ;
+ for ( int i = 0 ; i < min( nLinAxes, 3) ; ++ i)
+ vMmAxGrp[i].Add( ptAxT.v[i]) ;
+ }
+ }
+ }
+ DBLVECTOR vMinAxGrp( nTotAxes, +INFINITO), vMaxAxGrp( nTotAxes, -INFINITO) ;
+ for ( int i = 0 ; i < nTotAxes ; ++ i) {
+ vMmAxGrp[i].GetMinMax( vMinAxGrp[i], vMaxAxGrp[i]) ;
+ vMmAxAll[i].Add( vMmAxGrp[i]) ;
+ }
+ m_pGeomDB->SetInfo( nClPathId, KEY_PAXMIN, vMinAxGrp) ;
+ m_pGeomDB->SetInfo( nClPathId, KEY_PAXMAX, vMaxAxGrp) ;
+ nClPathId = m_pGeomDB->GetNext( nClPathId) ;
+ }
+ DBLVECTOR vMinAxAll( nTotAxes, +INFINITO), vMaxAxAll( nTotAxes, -INFINITO) ;
+ for ( int i = 0 ; i < nTotAxes ; ++ i)
+ vMmAxAll[i].GetMinMax( vMinAxAll[i], vMaxAxAll[i]) ;
+ m_pGeomDB->SetInfo( nClId, KEY_MAXMIN, vMinAxAll) ;
+ m_pGeomDB->SetInfo( nClId, KEY_MAXMAX, vMaxAxAll) ;
+
+ return true ;
+}
+
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
bool
diff --git a/Operation.h b/Operation.h
index 881a381..6443b1d 100644
--- a/Operation.h
+++ b/Operation.h
@@ -90,6 +90,7 @@ class Operation : public IUserObj
bool VerifyArcs( ICurveComposite* pCompo, double dMaxAngCen = MAX_ANG_CEN) const ;
bool CalcAndSetBBox( int nClId) ;
+ bool CalcAndSetAxesBBox( void) ;
bool GetInitialAxesValues( DBLVECTOR& vAxVal) const ;
bool GetClPathInitialAxesValues( int nClPathId, DBLVECTOR& vAxVal) const ;
diff --git a/OutputConst.h b/OutputConst.h
index 26dc4a7..5c7b6fc 100644
--- a/OutputConst.h
+++ b/OutputConst.h
@@ -76,6 +76,8 @@ static const std::string GVAR_MCHID = ".MCHID" ; // (int) identifica
static const std::string GVAR_MCHIND = ".MCHIND" ; // (int) indice lavorazione
static const std::string GVAR_MMIN = ".MMIN" ; // (Point3d) punto minimo di ingombro della lavorazione
static const std::string GVAR_MMAX = ".MMAX" ; // (Point3d) punto massimo di ingombro della lavorazione
+static const std::string GVAR_MAXMIN = ".MAXMIN" ; // (double/s) minimo di ingombro degli assi della lavorazione
+static const std::string GVAR_MAXMAX = ".MAXMAX" ; // (double/s) massimo di ingombro degli assi della lavorazione
static const std::string GVAR_PATHID = ".PATHID" ; // (int) identificativo percorso di lavorazione
static const std::string GVAR_PATHIND = ".PATHIND" ; // (int) indice percorso di lavorazione
static const std::string GVAR_START = ".START" ; // (Point3d) punto iniziale del percorso originale
@@ -83,6 +85,8 @@ static const std::string GVAR_END = ".END" ; // (Point3d) punto fina
static const std::string GVAR_EXTR = ".EXTR" ; // (Vector3d)versore estrusione
static const std::string GVAR_PMIN = ".PMIN" ; // (Point3d) punto minimo di ingombro del percorso di lavorazione
static const std::string GVAR_PMAX = ".PMAX" ; // (Point3d) punto massimo di ingombro del percorso di lavorazione
+static const std::string GVAR_PAXMIN = ".PAXMIN" ; // (double/s) minimo di ingombro degli assi del percorso di lavorazione
+static const std::string GVAR_PAXMAX = ".PAXMAX" ; // (double/s) massimo di ingombro degli assi del percorso di lavorazione
static const std::string GVAR_ELEV = ".ELEV" ; // (double) massima elevazione
static const std::string GVAR_AUXTOT = ".AUXTOT" ; // (int) numero totale dati ausiliari inizio/fine percorso di lavorazione
static const std::string GVAR_AUXIND = ".AUXIND" ; // (int) indice dato ausiliario inizio/fine percorso di lavorazione
diff --git a/Pocketing.cpp b/Pocketing.cpp
index 9494478..4270bc6 100644
--- a/Pocketing.cpp
+++ b/Pocketing.cpp
@@ -719,6 +719,9 @@ Pocketing::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Processor.cpp b/Processor.cpp
index 719e639..e504302 100644
--- a/Processor.cpp
+++ b/Processor.cpp
@@ -325,14 +325,17 @@ Processor::ProcessMachining( int nOpId, int nOpInd)
if ( ! m_pMchMgr->GetMachiningParam( MPA_SPEED, dSpeed))
return false ;
- // Recupero punti di minimo e massimo ingombro
+ // Recupero punti di minimo e massimo di ingombro e degli assi
int nClId = m_pGeomDB->GetFirstNameInGroup( nOpId, MCH_CL) ;
Point3d ptMin, ptMax ;
m_pGeomDB->GetInfo( nClId, KEY_MMIN, ptMin) ;
m_pGeomDB->GetInfo( nClId, KEY_MMAX, ptMax) ;
+ DBLVECTOR vAxMin, vAxMax ;
+ m_pGeomDB->GetInfo( nClId, KEY_MAXMIN, vAxMin) ;
+ m_pGeomDB->GetInfo( nClId, KEY_MAXMAX, vAxMax) ;
// Emetto inizio lavorazione
- if ( ! OnMachiningStart( nOpId, nOpInd, dSpeed, ptMin, ptMax))
+ if ( ! OnMachiningStart( nOpId, nOpInd, dSpeed, ptMin, ptMax, vAxMin, vAxMax))
return false ;
// Ciclo su tutti i percorsi CL della lavorazione
@@ -370,6 +373,10 @@ Processor::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd)
Point3d ptMin, ptMax ;
m_pGeomDB->GetInfo( nClPathId, KEY_PMIN, ptMin) ;
m_pGeomDB->GetInfo( nClPathId, KEY_PMAX, ptMax) ;
+ // Recupero valori degli assi di minimo e massimo ingombro
+ DBLVECTOR vAxMin, vAxMax ;
+ m_pGeomDB->GetInfo( nClPathId, KEY_PAXMIN, vAxMin) ;
+ m_pGeomDB->GetInfo( nClPathId, KEY_PAXMAX, vAxMax) ;
// Recupero massima elevazione
double dElev = 0 ;
m_pGeomDB->GetInfo( nClPathId, KEY_ELEV, dElev) ;
@@ -377,7 +384,7 @@ Processor::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd)
int nAS = 0 ;
m_pGeomDB->GetInfo( nClPathId, KEY_AS_TOT, nAS) ;
// Emetto inizio percorso di lavoro
- if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr, ptMin, ptMax, dElev))
+ if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr, ptMin, ptMax, vAxMin, vAxMax, dElev))
return false ;
// Emissione eventuali dati ausiliari di inizio
@@ -852,7 +859,8 @@ Processor::OnToolDeselect( const string& sNextTool, const string& sNextHead, int
//----------------------------------------------------------------------------
bool
-Processor::OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax)
+Processor::OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax,
+ const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax)
{
// assegno identificativo e indice lavorazione
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHID, nOpId) ;
@@ -862,6 +870,9 @@ Processor::OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d
// assegno punti estremi dell'ingombro della lavorazione
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMIN, ptMin) ;
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMAX, ptMax) ;
+ // assegno punti estremi dell'ingombro degli assi della lavorazione
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MAXMIN, vAxMin) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MAXMAX, vAxMax) ;
// chiamo la funzione di inizio lavorazione
bOk = bOk && CallOnMachiningStart() ;
return bOk ;
@@ -879,7 +890,8 @@ Processor::OnMachiningEnd( void)
//----------------------------------------------------------------------------
bool
Processor::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
- const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev)
+ const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
+ const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev)
{
// assegno identificativo e indice percorso di lavorazione
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHID, nClPathId) ;
@@ -893,6 +905,9 @@ Processor::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& p
// assegno punti estremi dell'ingombro del percorso di lavorazione
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMIN, ptMin) ;
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMAX, ptMax) ;
+ // assegno punti estremi dell'ingombro degli assi della lavorazione
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PAXMIN, vAxMin) ;
+ bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PAXMAX, vAxMax) ;
// assegno la massima elevazione
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ELEV, dElev) ;
// chiamo la funzione di inizio percorso di lavorazione
diff --git a/Processor.h b/Processor.h
index 8bfee61..3841735 100644
--- a/Processor.h
+++ b/Processor.h
@@ -50,10 +50,12 @@ class Processor
bool OnFixtureData( int nFixId, int nFixInd, const std::string& sName,
const Point3d& ptPos, double dAngDeg, double dMov) ;
bool OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) ;
- bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax) ;
+ bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax,
+ const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax) ;
bool OnMachiningEnd( void) ;
bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd,
- const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev) ;
+ const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax,
+ const DBLVECTOR& vAxMin, const DBLVECTOR& vAxMax, double dElev) ;
bool OnPathEnd( int nAE) ;
bool OnPathStartAux( int nInd, const std::string& sAS) ;
bool OnPathEndAux( int nInd, const std::string& sAE) ;
diff --git a/SawFinishing.cpp b/SawFinishing.cpp
index 729fbc7..ad603ef 100644
--- a/SawFinishing.cpp
+++ b/SawFinishing.cpp
@@ -632,6 +632,9 @@ SawFinishing::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/SawRoughing.cpp b/SawRoughing.cpp
index c1d128c..a3f5d3c 100644
--- a/SawRoughing.cpp
+++ b/SawRoughing.cpp
@@ -596,6 +596,9 @@ SawRoughing::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/Sawing.cpp b/Sawing.cpp
index 1cb0685..cdf22c2 100644
--- a/Sawing.cpp
+++ b/Sawing.cpp
@@ -760,6 +760,9 @@ Sawing::Update( bool bPostApply)
// aggiustamento feed per movimenti 4 assi
AdjustFeeds() ;
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine della lavorazione
if ( ! AdjustStartEndMovements()) {
string sInfo = m_pMchMgr->GetOutstrokeInfo() ;
diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp
index bc9e6ea..f2dbbce 100644
--- a/SurfFinishing.cpp
+++ b/SurfFinishing.cpp
@@ -625,6 +625,9 @@ SurfFinishing::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
diff --git a/WaterJetting.cpp b/WaterJetting.cpp
index e86d81f..ef789ae 100644
--- a/WaterJetting.cpp
+++ b/WaterJetting.cpp
@@ -756,6 +756,9 @@ WaterJetting::Update( bool bPostApply)
return false ;
}
+ // assegno estremi degli assi dei vari percorsi di lavorazione e della lavorazione nel suo complesso
+ CalcAndSetAxesBBox() ;
+
// esecuzione eventuali personalizzazioni
string sErr ;
if ( bPostApply && ! PostApply( sErr)) {
@@ -1277,13 +1280,7 @@ WaterJetting::VerifySideAngle( void)
bool
WaterJetting::AdjustEndPointForAxesCalc( const CamData* pCamData, Point3d& ptP) const
{
- // se utensile lama
- if ( ( m_TParams.m_nType & TF_SAWBLADE) != 0) {
- // traslazione opposta a quanto fatto in AdjustPathDrawForSaw
- double dOffset = 0.5 * m_TParams.m_dTDiam - 10 * EPS_SMALL ;
- ptP.Translate( dOffset * pCamData->GetCorrDir()) ;
- }
- // negli altri casi, non devo fare alcunché
+ // non devo fare alcunché
return true ;
}
@@ -1356,10 +1353,20 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
// se percorso chiuso con lavorazione all'interno, porto la partenza a metà del lato abbastanza lungo a Xmin
if ( pCompo->IsClosed()) {
- double dArea ;
- if ( pCompo->GetAreaXY( dArea) &&
- ( ( dArea < 0 && m_Params.m_nWorkSide == WJET_WS_RIGHT) ||
- ( dArea > 0 && m_Params.m_nWorkSide == WJET_WS_LEFT))) {
+ // recupero indicazione lato di inizio
+ int nStart = 0 ;
+ string sMyNotes = m_Params.m_sUserNotes ;
+ ToUpper( sMyNotes) ;
+ if ( sMyNotes.find( "START=XP") != string::npos)
+ nStart = 1 ;
+ else if ( sMyNotes.find( "START=XM") != string::npos)
+ nStart = -1 ;
+ else if ( sMyNotes.find( "START=YP") != string::npos)
+ nStart = 2 ;
+ else if ( sMyNotes.find( "START=YM") != string::npos)
+ nStart = -2 ;
+ // se richiesta sistemazione punto di inizio
+ if ( nStart != 0) {
const double DIST_SIC_WJ_LIO = 2 ;
double dMinLen = m_Params.m_dOverlap + 2 * DIST_SIC_WJ_LIO ;
if ( m_Params.m_nLeadInType != WJET_LI_NONE)
@@ -1368,14 +1375,18 @@ WaterJetting::ProcessPath( int nPathId, int nPvId, int nClId)
dMinLen += ( m_Params.m_nLeadOutType == WJET_LO_AS_LI ? m_Params.m_dLiTang : m_Params.m_dLoTang) ;
int i = 0 ;
int nMin = - 1 ;
- double dXmin = INFINITO ;
+ double dValEstr = ( nStart > 0 ? -INFINITO : INFINITO) ;
const ICurve* pCrv = pCompo->GetFirstCurve() ;
while ( pCrv != nullptr) {
double dLen ;
Point3d ptMid ;
if ( pCrv->GetLength( dLen) && dLen > dMinLen &&
- pCrv->GetMidPoint( ptMid) && ptMid.x < dXmin) {
- dXmin = ptMid.x ;
+ pCrv->GetMidPoint( ptMid) &&
+ (( nStart == 1 && ptMid.x > dValEstr) ||
+ ( nStart == -1 && ptMid.x < dValEstr) ||
+ ( nStart == 2 && ptMid.y > dValEstr) ||
+ ( nStart == -2 && ptMid.y < dValEstr))) {
+ dValEstr = ( abs( nStart) == 1 ? ptMid.x : ptMid.y) ;
nMin = i ;
}
++ i ;