diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 2c4cc41..ff70c5c 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -2708,6 +2708,199 @@ local function MakeByMillAsSaw( Proc, FData, nBottomFace, sMillingOnSide, dSawDi return true, sWarn end +--------------------------------------------------------------------- +local function DoHeadChainSaw( Proc, sName, sSawing, FData, nFacAdj, vtNE, vtNS, dSawWidth, dSawThick, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) + -- Calcolo uso faccia + local nFaceUse = BL.GetNearestParalOpposite( FData.rfFac:getVersZ()) + -- Calcolo normale faccia adiacente + local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacAdj, GDB_ID.ROOT) + -- Verifico se necessarie più passate + local nStep = ceil( ( FData.dV - 10 * GEO.EPS_SMALL) / dSawThick) + local dStep = 0 + if nStep > 1 then + dStep = ( FData.dV - dSawThick) / ( nStep - 1) + end + for i = 1, nStep do + -- Applico la lavorazione con sega a catena a questa faccia + local sLoopName = sName .. '_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) + local nMchFId = EgtAddMachining( sLoopName, sSawing) + if not nMchFId then + local sErr = 'Error adding machining ' .. sLoopName .. '-' .. sSawing + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, nFacAdj}}) + -- imposto uso faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) + -- controllo direzione taglio e se il minimo della feature sborda in coda + if not Proc.Tail and abs( vtN:getX()) < GEO.EPS_SMALL and abs( _b3Solid:getMin():getX() - Proc.Box:getMin():getX()) < 100 * GEO.EPS_SMALL then + -- se ho lato partenza aperto e lato uscita chiuso e direzione lato chiuso è negativa, allora controllo uscita lama + if bOpenStart and not bOpenEnd and vtNE:getX() < -0.99 and dDistToNextPiece < ( dSawWidth / 2) then + -- imposto accorciamento iniziale per estremi aperti/chiusi + EgtSetMachiningParam( MCH_MP.STARTADDLEN, dDistToNextPiece - 1 - ( dSawWidth / 2)) + else + -- imposto accorciamento iniziale per estremi aperti/chiusi + EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, 0, - dSawWidth / 2)) + end + -- se ho lato uscita aperto e lato partenza chiuso e direzione lato partenza è negativa, allora controllo uscita lama + if bOpenEnd and not bOpenStart and vtNS:getX() < -0.99 and dDistToNextPiece < ( dSawWidth / 2) then + -- imposto accorciamento finale per estremi aperti/chiusi + EgtSetMachiningParam( MCH_MP.ENDADDLEN, dDistToNextPiece - 1 - ( dSawWidth / 2)) + else + -- imposto accorciamento finale per estremi aperti/chiusi + EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, 0, - dSawWidth / 2)) + end + else + -- imposto accorciamento iniziale/finale per estremi aperti/chiusi + EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, 0, - dSawWidth / 2)) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, 0, - dSawWidth / 2)) + end + -- imposto angolo 3° asse rot e eventuale angolo suggerito per inizio + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1)) + EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, FData.rfFac:getVersZ())) + -- imposto offset radiale + local dOffs = ( i - 1) * dStep + EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) + -- se necessario, limito l'affondamento + if FData.dFacElev > dMaxDepth + 10 * GEO.EPS_SMALL then + sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( FData.dFacElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' + local dDepth = dMaxDepth - FData.dFacElev + EgtOutLog( sWarn) + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH ' .. EgtNumToString( dDepth, 1)) + end + -- imposto elevazione + local sNotes = 'MaxElev=' .. EgtNumToString( FData.dFacElev, 2) .. ';' + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + -- eseguo + if not EgtApplyMachining( true, false) then + if EgtGetOutstrokeInfo() then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + -- impostazione alternativa angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) + EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, FData.rfFac:getVersZ())) + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + end + if EgtIsMachiningEmpty() then + _, sWarn = EgtGetMachMgrWarning( 0) + EgtSetOperationMode( nMchFId, false) + return false, sWarn + end + end + + return true +end + +--------------------------------------------------------------------- +local function DoSideChainSaw(Proc, sName, sSawing2, FData, vtN, vtOrtho, dDimMin, dSawThick2, dMaxMat2, bOpenStart, bOpenEnd) + -- Verifico se necessarie più passate + local nStep = ceil( ( dDimMin - 10 * GEO.EPS_SMALL) / dSawThick2) + local dStep = 0 + if nStep > 1 then + dStep = ( dDimMin - dSawThick2) / ( nStep - 1) + end + for i = 1, nStep do + -- inserisco la lavorazione di sawing + local sLoopName = sName .. '_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) + local nMchFId = EgtAddMachining( sLoopName, sSawing2) + if not nMchFId then + local sErr = 'Error adding machining ' .. sLoopName .. '-' .. sSawing2 + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, nLundIdFace}}) + -- imposto uso del lato faccia + local nFaceUse + -- se non è un tunnel a 4 facce + if Proc.Fct < 4 then + nFaceUse = BL.GetNearestParalOpposite( FData.rfFac:getVersZ(), vtN) + -- altrimenti vero tunnel (solo sopra-sotto o davanti-dietro) + else + if abs( vtOrtho:getZ()) >= 0.707 then + nFaceUse = MCH_MILL_FU.PARAL_DOWN + else + nFaceUse = MCH_MILL_FU.PARAL_BACK + end + end + EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) + -- imposto angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1)) + EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, vtOrtho)) + -- imposto offset radiale + local dOffs = ( i - 1) * dStep + EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) + -- se non è un tunnel a 4 facce + if Proc.Fct < 4 then + -- imposto sempre massimo affondamento + local dBoxDepth + if nFaceUse == MCH_MILL_FU.PARAL_LEFT or nFaceUse == MCH_MILL_FU.PARAL_RIGHT then + dBoxDepth = Proc.Box:getDimX() + elseif nFaceUse == MCH_MILL_FU.PARAL_FRONT or nFaceUse == MCH_MILL_FU.PARAL_BACK then + dBoxDepth = Proc.Box:getDimY() + else + dBoxDepth = Proc.Box:getDimZ() + end + EgtSetMachiningParam( MCH_MP.DEPTH, dBoxDepth) + if dBoxDepth > dMaxMat2 then + sWarn = 'Warning : elevation bigger than max tool depth' + EgtOutLog( sWarn) + end + -- sistemo inizio e fine + if bOpenStart then EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) end + if bOpenEnd then EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) end + -- altrimenti vero tunnel (solo sopra-sotto o davanti-dietro) + else + -- se possibile aumento l'affondamento pari al raggio corner + 1 + if dMaxMat2 > ( dDepth + dSawCornerRad2 + 1) then + EgtSetMachiningParam( MCH_MP.DEPTH, ( dDepth + dSawCornerRad2 + 1)) + -- se massimo affondamento supera altezza fessura, uso massimo affondamento + elseif dMaxMat2 > ( dDepth + 1) then + EgtSetMachiningParam( MCH_MP.DEPTH, ( dMaxMat2 - 1)) + -- se massimo affondamento utensile inferiore fessura, setto affondamento ed emetto warning + elseif dMaxMat2 < dDepth then + EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat2) + sWarn = 'Warning : elevation bigger than max tool depth' + EgtOutLog( sWarn) + end + end + if Q_MAX_ELEVATION and Q_MAX_ELEVATION > 10 then + local sNotes = 'MaxElev=' .. EgtNumToString( Q_MAX_ELEVATION, 1) .. ';' + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + end + -- eseguo + if not EgtApplyMachining( true, false) then + if EgtGetOutstrokeInfo() then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + -- impostazione alternativa angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) + EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, vtOrtho)) + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + end + if EgtIsMachiningEmpty() then + _, sWarn = EgtGetMachMgrWarning( 0) + EgtSetOperationMode( nMchFId, false) + return false, sWarn + end + end + + return true +end + --------------------------------------------------------------------- local function MakeByChainOrSaw( Proc, FData, dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, @@ -2896,191 +3089,18 @@ local function MakeByChainOrSaw( Proc, FData, end -- se continuo a lavorare di testa if bGoFromHead then - -- Calcolo uso faccia - local nFaceUse = BL.GetNearestParalOpposite( FData.rfFac:getVersZ()) - -- Calcolo normale faccia adiacente - local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacAdj, GDB_ID.ROOT) - -- Verifico se necessarie più passate - local nStep = ceil( ( FData.dV - 10 * GEO.EPS_SMALL) / dSawThick) - local dStep = 0 - if nStep > 1 then - dStep = ( FData.dV - dSawThick) / ( nStep - 1) - end - for i = 1, nStep do - -- Applico la lavorazione con sega a catena a questa faccia - local sName = 'Csaw_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) - local nMchFId = EgtAddMachining( sName, sSawing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sSawing - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nFacAdj}}) - -- imposto uso faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) - -- controllo direzione taglio e se il minimo della feature sborda in coda - if not Proc.Tail and abs( vtN:getX()) < GEO.EPS_SMALL and abs( _b3Solid:getMin():getX() - Proc.Box:getMin():getX()) < 100 * GEO.EPS_SMALL then - -- se ho lato partenza aperto e lato uscita chiuso e direzione lato chiuso è negativa, allora controllo uscita lama - if bOpenStart and not bOpenEnd and vtNE:getX() < -0.99 and dDistToNextPiece < ( dSawWidth / 2) then - -- imposto accorciamento iniziale per estremi aperti/chiusi - EgtSetMachiningParam( MCH_MP.STARTADDLEN, dDistToNextPiece - 1 - ( dSawWidth / 2)) - else - -- imposto accorciamento iniziale per estremi aperti/chiusi - EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, 0, - dSawWidth / 2)) - end - -- se ho lato uscita aperto e lato partenza chiuso e direzione lato partenza è negativa, allora controllo uscita lama - if bOpenEnd and not bOpenStart and vtNS:getX() < -0.99 and dDistToNextPiece < ( dSawWidth / 2) then - -- imposto accorciamento finale per estremi aperti/chiusi - EgtSetMachiningParam( MCH_MP.ENDADDLEN, dDistToNextPiece - 1 - ( dSawWidth / 2)) - else - -- imposto accorciamento finale per estremi aperti/chiusi - EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, 0, - dSawWidth / 2)) - end - else - -- imposto accorciamento iniziale/finale per estremi aperti/chiusi - EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, 0, - dSawWidth / 2)) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, 0, - dSawWidth / 2)) - end - -- imposto angolo 3° asse rot e eventuale angolo suggerito per inizio - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1)) - EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, FData.rfFac:getVersZ())) - -- imposto offset radiale - local dOffs = ( i - 1) * dStep - EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) - -- se necessario, limito l'affondamento - if FData.dFacElev > dMaxDepth + 10 * GEO.EPS_SMALL then - sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( FData.dFacElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' - dDepth = dMaxDepth - FData.dFacElev - EgtOutLog( sWarn) - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH ' .. EgtNumToString( dDepth, 1)) - end - -- imposto elevazione - local sNotes = 'MaxElev=' .. EgtNumToString( FData.dFacElev, 2) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - -- eseguo - if not EgtApplyMachining( true, false) then - if EgtGetOutstrokeInfo() then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - -- impostazione alternativa angolo 3° asse rot - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) - EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, FData.rfFac:getVersZ())) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - end - if EgtIsMachiningEmpty() then - _, sWarn = EgtGetMachMgrWarning( 0) - EgtSetOperationMode( nMchFId, false) - return false, sWarn - end + local bOk, sErr = DoHeadChainSaw( Proc, 'Csaw', sSawing, FData, nFacAdj, vtNE, vtNS, dSawWidth, dSawThick, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) + if not bOk then + return false, sErr end -- altrimenti segacatena di fianco else -- verifico se posso farlo con la sega-catena local bMakeChainSaw, sSawing2, dMaxMat2, dSawCornerRad2, dSawThick2 = VerifyChainSaw( Proc, dDimMin, dDimMax) if bMakeChainSaw then - -- Verifico se necessarie più passate - local nStep = ceil( ( dDimMin - 10 * GEO.EPS_SMALL) / dSawThick2) - local dStep = 0 - if nStep > 1 then - dStep = ( dDimMin - dSawThick2) / ( nStep - 1) - end - for i = 1, nStep do - -- inserisco la lavorazione di sawing - local sName = 'Csaw_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) - local nMchFId = EgtAddMachining( sName, sSawing2) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sSawing2 - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nLundIdFace}}) - -- imposto uso del lato faccia - local nFaceUse - -- se non è un tunnel a 4 facce - if Proc.Fct < 4 then - nFaceUse = BL.GetNearestParalOpposite( FData.rfFac:getVersZ(), vtN) - -- altrimenti vero tunnel (solo sopra-sotto o davanti-dietro) - else - if abs( vtOrtho:getZ()) >= 0.707 then - nFaceUse = MCH_MILL_FU.PARAL_DOWN - else - nFaceUse = MCH_MILL_FU.PARAL_BACK - end - end - EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) - -- imposto angolo 3° asse rot - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1)) - EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, vtOrtho)) - -- imposto offset radiale - local dOffs = ( i - 1) * dStep - EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) - -- se non è un tunnel a 4 facce - if Proc.Fct < 4 then - -- imposto sempre massimo affondamento - local dBoxDepth - if nFaceUse == MCH_MILL_FU.PARAL_LEFT or nFaceUse == MCH_MILL_FU.PARAL_RIGHT then - dBoxDepth = Proc.Box:getDimX() - elseif nFaceUse == MCH_MILL_FU.PARAL_FRONT or nFaceUse == MCH_MILL_FU.PARAL_BACK then - dBoxDepth = Proc.Box:getDimY() - else - dBoxDepth = Proc.Box:getDimZ() - end - EgtSetMachiningParam( MCH_MP.DEPTH, dBoxDepth) - if dBoxDepth > dMaxMat2 then - sWarn = 'Warning : elevation bigger than max tool depth' - EgtOutLog( sWarn) - end - -- sistemo inizio e fine - if bOpenStart then EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) end - if bOpenEnd then EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) end - -- altrimenti vero tunnel (solo sopra-sotto o davanti-dietro) - else - -- se possibile aumento l'affondamento pari al raggio corner + 1 - if dMaxMat2 > ( dDepth + dSawCornerRad2 + 1) then - EgtSetMachiningParam( MCH_MP.DEPTH, ( dDepth + dSawCornerRad2 + 1)) - -- se massimo affondamento supera altezza fessura, uso massimo affondamento - elseif dMaxMat2 > ( dDepth + 1) then - EgtSetMachiningParam( MCH_MP.DEPTH, ( dMaxMat2 - 1)) - -- se massimo affondamento utensile inferiore fessura, setto affondamento ed emetto warning - elseif dMaxMat2 < dDepth then - EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat2) - sWarn = 'Warning : elevation bigger than max tool depth' - EgtOutLog( sWarn) - end - end - if Q_MAX_ELEVATION and Q_MAX_ELEVATION > 10 then - local sNotes = 'MaxElev=' .. EgtNumToString( Q_MAX_ELEVATION, 1) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - end - -- eseguo - if not EgtApplyMachining( true, false) then - if EgtGetOutstrokeInfo() then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - -- impostazione alternativa angolo 3° asse rot - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) - EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, vtOrtho)) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - end - if EgtIsMachiningEmpty() then - _, sWarn = EgtGetMachMgrWarning( 0) - EgtSetOperationMode( nMchFId, false) - return false, sWarn - end + local bOk, sErr = DoSideChainSaw(Proc, sName, sSawing2, FData, vtN, vtOrtho, dDimMin, dSawThick2, dMaxMat2, bOpenStart, bOpenEnd) + if not bOk then + return false, sErr end end end @@ -3149,7 +3169,6 @@ end --------------------------------------------------------------------- local function MakePocket( Proc, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, sMasterPocket, dPrevFaceElev, tDimAndRef, dAng) - -- calcolo l'elevazione dal punto medio local dElev local dLenIn, dLedOut = BL.GetPointDirDepth( _nPartId, ptPs, tvtN[2]) @@ -3250,6 +3269,58 @@ local function MakePocket( Proc, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, return true, sWarn, sTuuidPk, dDiamTool end +--------------------------------------------------------------------- +local function DoHeadCut( Proc, nMchFId, sTuuidPk, dDiamTool, dElev, nSideFace, tvtN) + if not sTuuidPk or not dDiamTool then + local sErr = 'Error : DoHeadCut has wrong parameters' + EgtOutLog( sErr) + return false, sErr + end + + -- recupero la lavorazione + local sMilling = ML.FindMilling( 'Long2Cut', dElev, sTuuidPk) + if not sMilling then + local sErr = 'Error : Long2Cut not found in library' + EgtOutLog( sErr) + return false, sErr + end + -- inserisco la lavorazione + local sName = 'Prof_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local nMchId = EgtAddMachining( sName, sMilling) + if not nMchId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, nSideFace}}) + -- imposto uso faccia + local nFaceUse = BL.GetNearestOrthoOpposite(tvtN[1]) + -- aggiusto i parametri + EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') + EgtSetMachiningParam( MCH_MP.OFFSR, 0) + EgtSetMachiningParam( MCH_MP.INVERT, false) + EgtSetMachiningParam( MCH_MP.WORKSIDE, 1) + -- imposto posizione braccio porta testa + if tvtN[2]:getY() < GEO.EPS_SMALL then + EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM) + else + EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP) + end + -- imposto elevazione e dichiaro non si generano sfridi per VMill + local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';' + sNotes = sNotes .. 'VMRS=0;' + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + + return true +end + --------------------------------------------------------------------- local function MachineByMill( Proc, tvtN, nBaseFace, nSideFace, ptPs, tDimAndRef, nDiffWidth, nUseRoughTool, dAng, sPocketing, sTuuidPk, dPrevFaceElev) @@ -3272,51 +3343,9 @@ local function MachineByMill( Proc, tvtN, nBaseFace, nSideFace, ptPs, tDimAndRef if cos( dDiffFromSqAng) < cos( dAngLimit) then -- applico la svuotatura local bOk, sWarn, sTuuidPk, dDiamTool, dElev = MakePocket( Proc, ptPs, tvtN, nSideFace, sMchFind, nUseRoughTool, sPocketing, dPrevFaceElev, tDimAndRef, dAng) - if not bOk then - -- se ho id utensile e diametro è perchè non ha fatto svuotatura perchè la faccia è più stretta del diametro utensile - -- e provo ad inserire singola passata di testa - if sTuuidPk and dDiamTool then - -- recupero la lavorazione - local sMilling = ML.FindMilling( 'Long2Cut', dElev, sTuuidPk) - if not sMilling then - local sErr = 'Error : Long2Cut not found in library' - EgtOutLog( sErr) - return false, sErr - end - -- inserisco la lavorazione - local sName = 'Prof_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchId = EgtAddMachining( sName, sMilling) - if not nMchId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nSideFace}}) - -- imposto uso faccia - local nFaceUse = BL.GetNearestOrthoOpposite(tvtN[1]) - -- aggiusto i parametri - EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') - EgtSetMachiningParam( MCH_MP.OFFSR, 0) - EgtSetMachiningParam( MCH_MP.INVERT, false) - EgtSetMachiningParam( MCH_MP.WORKSIDE, 1) - -- imposto posizione braccio porta testa - if tvtN[2]:getY() < GEO.EPS_SMALL then - EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YM) - else - EgtSetMachiningParam( MCH_MP.SCC, MCH_SCC.ADIR_YP) - end - -- imposto elevazione e dichiaro non si generano sfridi per VMill - local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';' - sNotes = sNotes .. 'VMRS=0;' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - else + if not bOk then + bOk, sWarn = DoHeadCut( Proc, nMchFId, sTuuidPk, dDiamTool, dElev, nSideFace, tvtN) + if not bOk then return false, sWarn end else