EgtGeomKernel :

- in ChainCurves::Init si può passare la dimensione della cella
- corretta GetSurfTriMeshBox nel caso Regular
- chiamate asincrone in VolZmap per taglio spilloni delle tre matrici.
This commit is contained in:
Dario Sassi
2020-10-08 08:15:20 +00:00
parent 51b9263f69
commit 1cd887271f
6 changed files with 175 additions and 77 deletions
+2 -3
View File
@@ -22,7 +22,7 @@ using namespace std ;
//----------------------------------------------------------------------------
bool
ChainCurves::Init( bool bAllowInvert, double dToler, int nCrvNbrHint)
ChainCurves::Init( bool bAllowInvert, double dToler, int nCrvNbrHint, double dCellDim)
{
m_bAllowInvert = bAllowInvert ;
m_dToler = max( dToler, EPS_SMALL) ;
@@ -30,8 +30,7 @@ ChainCurves::Init( bool bAllowInvert, double dToler, int nCrvNbrHint)
m_sCrvId.rehash( nCrvNbrHint) ;
m_vCrvData.clear() ;
m_vCrvData.reserve( nCrvNbrHint) ;
const double DIM_CELL = 10.0 ;
m_PointGrid.Init( 2 * nCrvNbrHint, DIM_CELL) ;
m_PointGrid.Init( 2 * nCrvNbrHint, dCellDim) ;
m_bFromNear = false ;
m_vForkData.clear() ;
m_bIsFork = false ;
+101 -39
View File
@@ -22,55 +22,25 @@
using namespace std ;
//-------------------------------------------------------------------------------
ISurfTriMesh*
GetSurfTriMeshBox( double dDimX, double dDimY, double dHeight, bool bRegular)
static ISurfTriMesh*
GetStandardSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
{
// le dimensioni devono essere significative
if ( dDimX < EPS_SMALL || dDimY < EPS_SMALL || abs( dHeight) < EPS_SMALL)
return nullptr ;
// se richiesta trimesh regolare, i triangoli devono essere quasi equilateri pertanto calcolo come dividere le varie parti
double dMaxStep = INFINITO ;
if ( bRegular) {
double dMin1 = min( dDimX, dDimY) ;
double dMin2 = min( max( dDimX, dDimY), abs( dHeight)) ;
dMaxStep = min( max( dMin1, dMin2), 2 * min( dMin1, dMin2)) ;
dMaxStep = max( dMaxStep, 1.) ;
}
int nStepX = max( int( dDimX / dMaxStep + 0.9), 1) ;
double dStepX = dDimX / nStepX ;
int nStepY = max( int( dDimY / dMaxStep + 0.9), 1) ;
double dStepY = dDimY / nStepY ;
int nStepZ = max( int( abs( dHeight) / dMaxStep + 0.9), 1) ;
double dStepZ = dHeight / nStepZ ;
// creo la polilinea del contorno della base
PolyLine PL ;
int nU = 0 ;
PL.AddUPoint( nU, ORIG) ;
for ( int i = 1 ; i <= nStepX ; ++i)
PL.AddUPoint( ++ nU, Point3d( i * dStepX, 0, 0)) ;
for ( int j = 1 ; j <= nStepY ; ++j)
PL.AddUPoint( ++ nU, Point3d( dDimX, j * dStepY, 0)) ;
for ( int i = 1 ; i <= nStepX ; ++i)
PL.AddUPoint( ++ nU, Point3d( dDimX - i * dStepX, dDimY, 0)) ;
for ( int j = 1 ; j <= nStepY ; ++j)
PL.AddUPoint( ++ nU, Point3d( 0, dDimY - j * dStepY, 0)) ;
PL.AddUPoint( nU, Point3d( 0, 0, 0)) ;
PL.AddUPoint( ++ nU, Point3d( dDimX, 0, 0)) ;
PL.AddUPoint( ++ nU, Point3d( dDimX, dDimY, 0)) ;
PL.AddUPoint( ++ nU, Point3d( 0, dDimY, 0)) ;
PL.AddUPoint( ++ nU, Point3d( 0, 0, 0)) ;
if ( dHeight < 0)
PL.Invert() ;
// vettore altezza (estrusione)
Vector3d vtExtr( 0, 0, dStepZ) ;
// creo e setto la prima superficie trimesh laterale
Vector3d vtExtr( 0, 0, dHeight) ;
// creo e setto la superficie trimesh laterale
PtrOwner<ISurfTriMesh> pSTM( CreateSurfTriMesh()) ;
if ( IsNull( pSTM) || ! pSTM->CreateByExtrusion( PL, vtExtr))
return nullptr ;
// aggiungo eventuali altre superfici trimesh laterali
for ( int k = 1 ; k < nStepZ ; ++ k) {
PtrOwner<ISurfTriMesh> pSTMx( CreateSurfTriMesh()) ;
if ( IsNull( pSTMx) || ! pSTMx->CreateByExtrusion( PL, vtExtr))
return nullptr ;
pSTMx->Translate( Vector3d( 0, 0, k * dStepZ)) ;
if ( ! pSTM->DoSewing( *pSTMx))
return nullptr ;
}
// creo la prima superficie di estremità
PtrOwner<ISurfTriMesh> pSTM1( CreateSurfTriMesh()) ;
if ( IsNull( pSTM1) || ! pSTM1->CreateByFlatContour( PL))
@@ -89,6 +59,98 @@ GetSurfTriMeshBox( double dDimX, double dDimY, double dHeight, bool bRegular)
// restituisco la superficie
return Release( pSTM) ;
}
//-------------------------------------------------------------------------------
static ISurfTriMesh*
GetRegularSurfTriMeshBox( double dDimX, double dDimY, double dHeight)
{
// i triangoli devono essere quasi equilateri pertanto calcolo come dividere le varie parti
double dMaxStep = INFINITO ;
double dMin1 = min( dDimX, dDimY) ;
double dMin2 = min( max( dDimX, dDimY), abs( dHeight)) ;
dMaxStep = min( max( dMin1, dMin2), 2 * min( dMin1, dMin2)) ;
dMaxStep = max( dMaxStep, 1.) ;
int nStepX = max( int( dDimX / dMaxStep + 0.9), 1) ;
double dStepX = dDimX / nStepX ;
int nStepY = max( int( dDimY / dMaxStep + 0.9), 1) ;
double dStepY = dDimY / nStepY ;
int nStepZ = max( int( abs( dHeight) / dMaxStep + 0.9), 1) ;
double dStepZ = dHeight / nStepZ ;
// creo la polilinea del contorno della base
PolyLine PL1 ;
int nU1 = 0 ;
PL1.AddUPoint( nU1, ORIG) ;
for ( int i = 1 ; i <= nStepX ; ++i)
PL1.AddUPoint( ++ nU1, Point3d( i * dStepX, 0, 0)) ;
for ( int j = 1 ; j <= nStepY ; ++j)
PL1.AddUPoint( ++ nU1, Point3d( dDimX, j * dStepY, 0)) ;
for ( int i = 1 ; i <= nStepX ; ++i)
PL1.AddUPoint( ++ nU1, Point3d( dDimX - i * dStepX, dDimY, 0)) ;
for ( int j = 1 ; j <= nStepY ; ++j)
PL1.AddUPoint( ++ nU1, Point3d( 0, dDimY - j * dStepY, 0)) ;
if ( dHeight < 0)
PL1.Invert() ;
// vettore altezza (estrusione)
Vector3d vtExtr1( 0, 0, dStepZ) ;
// creo e unisco le superfici trimesh laterali
PtrOwner<ISurfTriMesh> pSTM1 ;
for ( int k = 0 ; k < nStepZ ; ++ k) {
PtrOwner<ISurfTriMesh> pSTMz( CreateSurfTriMesh()) ;
if ( IsNull( pSTMz) || ! pSTMz->CreateByExtrusion( PL1, vtExtr1))
return nullptr ;
pSTMz->Translate( Vector3d( 0, 0, k * dStepZ)) ;
if ( IsNull( pSTM1))
pSTM1.Set( Release( pSTMz)) ;
else if ( ! pSTM1->DoSewing( *pSTMz))
return nullptr ;
}
// creo la polilinea del lato sinistro della superficie inferiore
PolyLine PL2 ;
int nU2 = 0 ;
PL2.AddUPoint( nU2, ORIG) ;
for ( int j = 1 ; j <= nStepY ; ++j)
PL2.AddUPoint( ++ nU2, Point3d( 0, j * dStepY, 0)) ;
// vettore estrusione
Vector3d vtExtr2( dStepX, 0, 0) ;
// creo e unisco le superfici trimesh inferiori
PtrOwner<ISurfTriMesh> pSTM2 ;
for ( int i = 0 ; i < nStepX ; ++ i) {
PtrOwner<ISurfTriMesh> pSTMx( CreateSurfTriMesh()) ;
if ( IsNull( pSTMx) || ! pSTMx->CreateByExtrusion( PL2, vtExtr2))
return nullptr ;
pSTMx->Translate( Vector3d( i * dStepX, 0, 0)) ;
if ( IsNull( pSTM2))
pSTM2.Set( Release( pSTMx)) ;
else if ( ! pSTM2->DoSewing( *pSTMx))
return nullptr ;
}
// la copio
PtrOwner<ISurfTriMesh> pSTM3( pSTM2->Clone()) ;
if ( IsNull( pSTM3))
return nullptr ;
// inverto e traslo la superficie superiore
pSTM3->Invert() ;
pSTM3->Translate( Vector3d( 0, 0, dHeight)) ;
// le unisco alla superficie del fianco
if ( ! pSTM1->DoSewing( *pSTM2) || ! pSTM1->DoSewing( *pSTM3))
return nullptr ;
// restituisco la superficie
return Release( pSTM1) ;
}
//-------------------------------------------------------------------------------
ISurfTriMesh*
GetSurfTriMeshBox( double dDimX, double dDimY, double dHeight, bool bRegular)
{
// le dimensioni devono essere significative
if ( dDimX < EPS_SMALL || dDimY < EPS_SMALL || abs( dHeight) < EPS_SMALL)
return nullptr ;
// se trimesh standard
if ( ! bRegular)
return GetStandardSurfTriMeshBox( dDimX, dDimY, dHeight) ;
// altrimenti regolarizzata
else
return GetRegularSurfTriMeshBox( dDimX, dDimY, dHeight) ;
}
//-------------------------------------------------------------------------------
ISurfTriMesh*
+17 -14
View File
@@ -33,6 +33,9 @@
using namespace std ;
//----------------------------------------------------------------------------
const double BOOLEAN_SCALE = 1024 ;
//----------------------------------------------------------------------------
static int
IntersRectangleTriangle( const Point3d& ptP, const Vector3d& vtL1, const Vector3d& vtL2,
@@ -951,7 +954,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
// Creo i loop
ChainCurves LoopCreator ;
LoopCreator.Init( false, 10 * EPS_SMALL, int( it->second.size())) ;
LoopCreator.Init( false, 10 * EPS_SMALL, int( it->second.size()), 10 * BOOLEAN_SCALE) ;
// Carico le curve per concatenarle
for ( int nCv = 0 ; nCv < int( it->second.size()); ++ nCv) {
Point3d ptSt = it->second[nCv].ptSt ;
@@ -962,7 +965,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
}
// Recupero i concatenamenti
INTVECTOR vIds ;
Point3d ptNearStart ;
Point3d ptNearStart = ( it->second.size() > 0 ? it->second[0].ptSt : ORIG) ;
CHAINVECTOR vChain ;
while ( LoopCreator.GetChainFromNear( ptNearStart, false, vIds)) {
Chain chTemp ;
@@ -2382,8 +2385,8 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2412,7 +2415,7 @@ SurfTriMesh::Add( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2425,8 +2428,8 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2455,7 +2458,7 @@ SurfTriMesh::Intersect( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2468,8 +2471,8 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
SurfB.CopyFrom( &Other) ;
Frame3d frScalingRef;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfB.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfB.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfB) ;
IdentifyParts() ;
SurfB.IdentifyParts() ;
@@ -2499,7 +2502,7 @@ SurfTriMesh::Subtract( const ISurfTriMesh& Other)
return false ;
RemoveTJunctions() ;
bool bResult = ( AdjustVertices() && DoCompacting()) ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
return bResult ;
}
@@ -2515,11 +2518,11 @@ SurfTriMesh::GetSurfClassification( const ISurfTriMesh& ClassifierSurf,
SurfC.CopyFrom( &ClassifierSurf) ;
Frame3d frScalingRef ;
frScalingRef.Set( m_vVert[0].ptP, X_AX, Y_AX, Z_AX) ;
Scale( frScalingRef, 1024., 1024., 1024.) ;
SurfC.Scale( frScalingRef, 1024., 1024., 1024.) ;
Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
SurfC.Scale( frScalingRef, BOOLEAN_SCALE, BOOLEAN_SCALE, BOOLEAN_SCALE) ;
IntersectTriMeshTriangle( SurfC) ;
IdentifyParts() ;
Scale( frScalingRef, 1. / 1024., 1. / 1024., 1. / 1024.) ;
Scale( frScalingRef, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE, 1. / BOOLEAN_SCALE) ;
int nTriaNum = GetTriangleSize() ;
for ( int nT = 0 ; nT < nTriaNum ; ++ nT) {
+1 -1
View File
@@ -787,7 +787,7 @@ VolZmap::CheckMapConnection( void)
int nTerminated = 0 ;
while ( nTerminated < nActiveThread) {
for ( int i = 0 ; i < nThreadMax ; ++ i) {
if ( vRes[i].valid() && vRes[i].wait_for( chrono::microseconds{ 10}) == future_status::ready) {
if ( vRes[i].valid() && vRes[i].wait_for( chrono::microseconds{ 1}) == future_status::ready) {
vRes[i].get() ;
++ nTerminated ;
}
+1 -1
View File
@@ -947,7 +947,7 @@ VolZmap::UpdateTripleMapGraphics( void) const
int nTerminated = 0 ;
while ( nTerminated < nBlockUpdated) {
for ( int i = 0 ; i < m_nNumBlock ; ++ i) {
if ( m_BlockToUpdate[i] && vRes[i].valid() && vRes[i].wait_for( chrono::microseconds{ 10}) == future_status::ready) {
if ( m_BlockToUpdate[i] && vRes[i].valid() && vRes[i].wait_for( chrono::microseconds{ 1}) == future_status::ready) {
bOk = vRes[i].get() && bOk ;
++ nTerminated ;
}
+53 -19
View File
@@ -20,6 +20,8 @@
#include "GeoConst.h"
#include "/EgtDev/Include/EgtNumUtils.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include "/EgtDev/Include/EgtPerfCounter.h"
#include <future>
using namespace std ;
@@ -527,11 +529,27 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d&
vtALe.ToLoc( m_MapFrame) ;
vtALe.Normalize() ;
//static PerformanceCounter Counter ;
//{
//string sOut = "Draw=" + ToString( Counter.Stop(), 3) ;
//LOG_INFO( GetEGkLogger(), sOut.c_str())
//Counter.Start() ;
//}
// Se pura traslazione
bool bOk ;
if ( AreSameVectorApprox( vtDLs, vtDLe))
return MillingTranslationStep( ptPLs, ptPLe, vtDLs, vtALs) ;
bOk = MillingTranslationStep( ptPLs, ptPLe, vtDLs, vtALs) ;
else
return MillingGeneralMotionStep( ptPLs, vtDLs, vtALs, ptPLe, vtDLe, vtALe) ;
bOk = MillingGeneralMotionStep( ptPLs, vtDLs, vtALs, ptPLe, vtDLe, vtALe) ;
//{
//string sOut = "Calc=" + ToString( Counter.Stop(), 3) ;
//LOG_INFO( GetEGkLogger(), sOut.c_str())
//Counter.Start() ;
//}
return bOk ;
}
//----------------------------------------------------------------------------
@@ -569,14 +587,26 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co
bool
VolZmap::MillingTranslationStep( const Point3d& ptPs, const Point3d& ptPe, const Vector3d& vtD, const Vector3d& vtA)
{
Point3d ptLs[3] ;
Point3d ptLe[3] ;
Vector3d vtLs[3] ;
Vector3d vtALs[3] ;
Point3d ptLs[N_MAPS] ;
Point3d ptLe[N_MAPS] ;
Vector3d vtLs[N_MAPS] ;
Vector3d vtALs[N_MAPS] ;
InitializePointsAndVectors( ptPs, ptPe, vtD, vtA, ptLs, ptLe, vtLs, vtALs) ;
// Ciclo sulle mappe
vector< future<bool>> vRes ;
vRes.resize( m_nMapNum) ;
for ( int i = 0 ; i < m_nMapNum ; ++ i) {
SelectMotion( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
vRes[i] = async( launch::async, &VolZmap::SelectMotion, this, i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ;
}
bool bOk = true ;
int nTerminated = 0 ;
while ( nTerminated < m_nMapNum) {
for ( int i = 0 ; i < m_nMapNum ; ++ i) {
if ( vRes[i].valid() && vRes[i].wait_for(chrono::microseconds{ 1}) == future_status::ready) {
bOk = vRes[i].get() && bOk ;
++ nTerminated ;
}
}
}
return true ;
}
@@ -1684,7 +1714,8 @@ VolZmap::GenTool_ZDrilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
frNormFrame.Set( ORIG, X_AX, - Z_AX, Y_AX) ;
// Ciclo sulle curve
const CurveComposite& ToolProfile = m_Tool.GetApproxOutline() ;
const ICurve* pCurve = ToolProfile.GetFirstCurve() ;
int i = - 1 ;
const ICurve* pCurve = ToolProfile.GetCurve( ++ i) ;
while ( pCurve != nullptr) {
double dHeight = 0 ;
@@ -1751,7 +1782,7 @@ VolZmap::GenTool_ZDrilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
ptF = ptI + vtMove ;
// Passo alla curva successiva del profilo
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
return true ;
@@ -1773,7 +1804,8 @@ VolZmap::GenTool_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
frNormFrame.Set( ORIG, X_AX, -Z_AX, Y_AX) ;
// Ciclo sulle curve del profilo utensile
const CurveComposite& ToolProfile = m_Tool.GetApproxOutline() ;
const ICurve* pCurve = ToolProfile.GetFirstCurve() ;
int i = - 1 ;
const ICurve* pCurve = ToolProfile.GetCurve( ++ i) ;
while ( pCurve != nullptr) {
double dHeight = 0 ;
@@ -1840,7 +1872,7 @@ VolZmap::GenTool_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
ptF = ptI + vtMove ;
// Passo alla curva successiva del profilo
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
return true ;
@@ -2897,8 +2929,9 @@ VolZmap::GenTool_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
frNormFrame.Set( ORIG, X_AX, -Z_AX, Y_AX) ;
// Ciclo sulle curve del profilo
const CurveComposite& ToolProfile = m_Tool.GetApproxOutline() ;
int i = - 1 ;
const ICurve* pPrevCurve = nullptr ;
const ICurve* pCurve = ToolProfile.GetFirstCurve() ;
const ICurve* pCurve = ToolProfile.GetCurve( ++ i) ;
while ( pCurve != nullptr) {
double dHeight = 0 ;
@@ -2931,7 +2964,7 @@ VolZmap::GenTool_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
}
// Verifiche curva successiva per eventuale tappo sotto
bool bTapB = false ;
const ICurve* pNextCurve = ToolProfile.GetNextCurve() ;
const ICurve* pNextCurve = ToolProfile.GetCurve( ++ i) ;
if ( pNextCurve != nullptr && pNextCurve->GetType() == CRV_LINE) {
const ICurveLine* pOthLine = GetCurveLine( pNextCurve) ;
Point3d ptOthStart = pOthLine->GetStart() ;
@@ -2966,7 +2999,7 @@ VolZmap::GenTool_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
else {
// Passo alla curva successiva
pPrevCurve = pCurve ;
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
}
@@ -2987,7 +3020,7 @@ VolZmap::GenTool_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co
dHeight = abs( ptStart.y - ptEnd.y) ;
// Passo alla curva successiva
pPrevCurve = pCurve ;
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
// Determino le posizioni iniziale e finale del componente successivo
@@ -3014,8 +3047,9 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
frNormFrame.Set( ORIG, X_AX, -Z_AX, Y_AX) ;
// Ciclo sulle curve del profilo
const CurveComposite& ToolProfile = m_Tool.GetApproxOutline() ;
int i = - 1 ;
const ICurve* pPrevCurve = nullptr ;
const ICurve* pCurve = ToolProfile.GetFirstCurve() ;
const ICurve* pCurve = ToolProfile.GetCurve( ++ i) ;
while ( pCurve != nullptr) {
double dHeight = 0 ;
@@ -3048,7 +3082,7 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
}
// verifiche curva successiva per eventuale tappo sotto
bool bTapB = false ;
const ICurve* pNextCurve = ToolProfile.GetNextCurve() ;
const ICurve* pNextCurve = ToolProfile.GetCurve( ++ i) ;
if ( pNextCurve != nullptr && pNextCurve->GetType() == CRV_LINE) {
const ICurveLine* pOthLine = GetCurveLine( pNextCurve) ;
Point3d ptOthStart = pOthLine->GetStart() ;
@@ -3083,7 +3117,7 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
else {
// Passo alla curva successiva
pPrevCurve = pCurve ;
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
}
@@ -3104,7 +3138,7 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
dHeight = abs( ptStart.y - ptEnd.y) ;
// Passo alla curva successiva
pPrevCurve = pCurve ;
pCurve = ToolProfile.GetNextCurve() ;
pCurve = ToolProfile.GetCurve( ++ i) ;
}
// Determino le posizioni iniziale e finale del componente successivo