diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 8ec6562..2d29c2b 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/GeomDB.cpp b/GeomDB.cpp index 565299e..2edf165 100644 --- a/GeomDB.cpp +++ b/GeomDB.cpp @@ -877,7 +877,7 @@ GeomDB::GetFirstNameInGroup( int nGroupId, const string& sName) const // se ha il nome o la parte iniziale di nome cercato string sObjName ; if ( pGdbO->GetName( sObjName) && - (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.rfind( sToFind, 0) == 0))) return ( pGdbO->m_nId) ; // passo al successivo pGdbO = pGdbO->GetNext() ; @@ -905,7 +905,7 @@ GeomDB::GetNextName( int nId, const string& sName) const // se ha il nome o la parte iniziale di nome cercato string sObjName ; if ( pGdbNext->GetName( sObjName) && - (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.rfind( sToFind, 0) == 0))) return ( pGdbNext->m_nId) ; // passo al successivo pGdbNext = pGdbNext->GetNext() ; @@ -933,7 +933,7 @@ GeomDB::GetLastNameInGroup( int nGroupId, const string& sName) const // se ha il nome o la parte iniziale di nome cercato string sObjName ; if ( pGdbO->GetName( sObjName) && - (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.rfind( sToFind, 0) == 0))) return ( pGdbO->m_nId) ; // passo al precedente pGdbO = pGdbO->GetPrev() ; @@ -961,7 +961,7 @@ GeomDB::GetPrevName( int nId, const string& sName) const // se ha il nome o la parte iniziale di nome cercato string sObjName ; if ( pGdbPrev->GetName( sObjName) && - (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.find( sToFind) == 0))) + (( ! bWild && sObjName == sToFind) || ( bWild && sObjName.rfind( sToFind, 0) == 0))) return ( pGdbPrev->m_nId) ; // passo al precedente pGdbPrev = pGdbPrev->GetPrev() ; diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index 20d1825..ac69c50 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -2406,6 +2406,7 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co n5AxisType = Move5Axis::NO_BASE_INTERS; } +<<<<<<< HEAD Point3d ptLs[N_MAPS] ; Point3d ptLe[N_MAPS] ; Vector3d vtLs[N_MAPS] ; @@ -2450,6 +2451,86 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co bOk = SelectGeneralMotion(j, ptLs[j], ptLe[j], vtLs[j], vtLe[j], n5AxisType) && bOk ; } } +======= + vector ptLs( nStepCnt) ; + vector ptLe( nStepCnt) ; + vector vtLs( nStepCnt) ; + vector vtLe( nStepCnt) ; + + // calcolo gli step (anticipo un poco gli inizi intermedi) + for ( int i = 0 ; i < nStepCnt ; ++ i) { + double dCoeffS = max( ( i - 0.05) / nStepCnt, 0.) ; + double dCoeffE = min( ( i + 1.) / nStepCnt, 1.) ; + Point3d ptSti = Media( ptPs, ptPe, dCoeffS) ; + Vector3d vtDSi = Media( vtDs, vtDe, dCoeffS) ; vtDSi.Normalize() ; + Point3d ptEni = Media( ptPs, ptPe, dCoeffE) ; + Vector3d vtDEi = Media( vtDs, vtDe, dCoeffE) ; vtDEi.Normalize() ; + + InitializePointsAndVectors( ptSti, ptEni, vtDSi, vtDEi, ptLs[i], ptLe[i], vtLs[i], vtLe[i]) ; + } + + // Standard è multithread + constexpr bool MULTITHREAD = true ; + if ( MULTITHREAD) { + + // Ciclo sulle mappe + vector< future> vRes( m_nMapNum) ; + // Standard è multithread + constexpr bool MULTITHREAD = true ; + if ( MULTITHREAD) { + // Ciclo sulle mappe + vector> vRes( m_nMapNum) ; + + vector ptLs_j( m_nMapNum) ; + vector ptLe_j( m_nMapNum) ; + vector vtLs_j( m_nMapNum) ; + vector vtLe_j( m_nMapNum) ; + for ( int j = 0 ; j < m_nMapNum ; ++j) { + ptLs_j[j].resize( nStepCnt) ; + ptLe_j[j].resize( nStepCnt) ; + vtLs_j[j].resize( nStepCnt) ; + vtLe_j[j].resize( nStepCnt) ; + for ( int k = 0 ; k < nStepCnt ; ++k) { + ptLs_j[j][k] = ptLs[k][j] ; + ptLe_j[j][k] = ptLe[k][j] ; + vtLs_j[j][k] = vtLs[k][j] ; + vtLe_j[j][k] = vtLe[k][j] ; + } + } + + for ( int j = 0 ; j < m_nMapNum ; ++ j) { + vRes[j] = async( launch::async, &VolZmap::SelectGeneralMotion, this, j, cref( ptLs_j[j]), cref( ptLe_j[j]), + cref( vtLs_j[j]), cref( vtLe_j[j]), n5AxisType) ; + } + + int nTerminated = 0 ; + while ( nTerminated < m_nMapNum) { + for ( int j = 0 ; j < m_nMapNum ; ++ j) { + if ( vRes[j].valid() && vRes[j].wait_for( chrono::nanoseconds{ 1}) == future_status::ready) { + bOk = vRes[j].get() && bOk ; + ++ nTerminated ; + } + } + } + } + + // !!!! NON MULTITHREAD : SOLO PER DEBUG !!!! + else { + // Ciclo sulle mappe + for ( int j = 0 ; j < m_nMapNum ; ++j) { + PNTVECTOR ptLs_j( nStepCnt) ; + PNTVECTOR ptLe_j( nStepCnt) ; + VCT3DVECTOR vtLs_j( nStepCnt) ; + VCT3DVECTOR vtLe_j( nStepCnt) ; + for ( int k = 0 ; k < nStepCnt ; ++k) { + ptLs_j[k] = ptLs[k][j] ; + ptLe_j[k] = ptLe[k][j] ; + vtLs_j[k] = vtLs[k][j] ; + vtLe_j[k] = vtLe[k][j] ; + } + bOk = SelectGeneralMotion( j, ptLs_j, ptLe_j, vtLs_j,vtLe_j, n5AxisType) && bOk ; + } +>>>>>>> master } return bOk ;