From c46cec0538dba1915b4c74f91f9696fbfdda3b9b Mon Sep 17 00:00:00 2001 From: "luca.bacis" Date: Tue, 25 Jan 2022 16:33:24 +0100 Subject: [PATCH] - aggiunte funzioni DoClean, DoPocketing + ottimizzazioni varie --- LuaLibs/ProcessLapJoint.lua | 986 +++++++++++++++--------------------- 1 file changed, 416 insertions(+), 570 deletions(-) diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 0200723..37335d3 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -552,7 +552,7 @@ local function VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) if bIsU or bIsL then local bExit = false for i = 1, Proc.Fct do - local _, vtN = EgtSurfTmFacetCenter( Proc.Id, i - 1, GDB_ID.ROOT) + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, i - 1, GDB_ID.ROOT) if abs( vtN:getX()) > 0.001 and abs( vtN:getX()) < 0.999962 then bExit = true break @@ -606,7 +606,7 @@ local function VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) end end end - return bUseBHSideMill, bHead, bHeadDir, dThickTool, dToolDiam + return bUseBHSideMill, bHead, bHeadDir, sMilling, dThickTool, dToolDiam end --------------------------------------------------------------------- @@ -713,7 +713,7 @@ function ProcessLapJoint.IsHeadFeature( Proc, b3Raw, dCurrOvmH) end -- se una sola faccia if Proc.Fct == 1 then - local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) + local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) if vtN0:getX() > 0.1 then return true end @@ -757,7 +757,7 @@ function ProcessLapJoint.IsTailFeature( Proc, b3Raw) end -- se una sola faccia if Proc.Fct == 1 then - local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) + local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) if vtN0:getX() < -0.1 then return true end @@ -803,7 +803,6 @@ function ProcessLapJoint.Classify( Proc, b3Raw) if not InitGlob( Proc) then return false end - -- se 1 faccia if Proc.Fct == 1 then -- dati della faccia @@ -875,7 +874,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw) -- se facce formano un tunnel e sono ortogonali if bClosedOrthoFaces then -- ottengo le dimensioni del tunnel - local dDimMin, dDimMax, _, _, _, nSurfInt = GetTunnelDimension( Proc) + local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc) EgtErase( nSurfInt) -- verifico se può essere fatto con svuotatura if VerifyPocket( dDimMin) then @@ -894,7 +893,7 @@ function ProcessLapJoint.Classify( Proc, b3Raw) -- altrimenti controllo se deve essere ruotato con le altre lavorazioni else -- dati della faccia - local _, vtN = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd, GDB_ID.ROOT) + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd, GDB_ID.ROOT) -- cerco se c'è faccia adiacente sul lato più lungo local nFaceAdj = GetFaceAdj( Proc, tFData) or -1 local _, bIsL = TestUL( Proc) @@ -903,17 +902,17 @@ function ProcessLapJoint.Classify( Proc, b3Raw) -- se verso il basso, verifico se utilizzabile seconda faccia if bDown then if tFData.nFacInd2 and tFData.dFacElev2 < 2 * tFData.dFacElev then - local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd2, GDB_ID.ROOT) + local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFData.nFacInd2, GDB_ID.ROOT) bDown = ( vtN2:getZ() < BD.NZ_MINB) elseif not tFData.nFacInd2 and bIsL and nFaceAdj >= 0 then - local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT) + local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT) bDown = ( vtN2:getZ() < BD.NZ_MINB) end -- verifico se la faccia principale è sottosquadra, ha forma L ed esiste la faccia adiacente elseif vtN:getZ() < -0.2589 and bIsL and nFaceAdj >= 0 then -- se il numero di facce > 2 o il box della feature supera una certa distanza dalle teste allora controllo la z della faccia ausiliaria if Proc.Fct > 2 or ( Proc.Box:getMax():getX() < _b3Solid:getMin():getX() - 150) or ( Proc.Box:getMin():getX() > _b3Solid:getMax():getX() + 150) then - local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT) + local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, nFaceAdj, GDB_ID.ROOT) bDown = ( vtN2:getZ() < BD.NZ_MINB) end end @@ -931,7 +930,7 @@ local function MakeOneFaceByMill( Proc) -- verifico il numero di facce della tacca assert( ( Proc.Fct == 1), 'Error : MakeOneFaceByMill in LapJoint with ' .. tostring( Proc.Fct) .. ' faces') -- dati della faccia - local _, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT) -- verifico se orientata verso l'alto local bUp = ( vtN:getZ() >= BD.NZ_MINA) -- scelta faccia da lavorare @@ -991,9 +990,8 @@ local function MakeOneFaceByMill( Proc) end --------------------------------------------------------------------- -local function DoMill( Proc, sMilling, offset, nFacInd, nFac2Ind, vtN) +local function DoMill( Proc, sName, sMilling, offset, nFacInd, nFac2Ind, vtN) -- inserisco la lavorazione di fresatura - local sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) local nMchFId = EgtAddMachining( sName, sMilling) if not nMchFId then local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling @@ -1103,15 +1101,16 @@ local function MakeTwoFacesByMill( Proc, bDownHead) nFacInd = 1 end local nOthInd = 1 - nFacInd - local bOk, sErr + local bOk, sErr, sName -- se forzato uso fresa controllo se posso fare in una o più passate if Q_USE_MILL and Q_USE_MILL == 1 then - bOk, sErr = DoMill( Proc, sMilling, dTDiam / 2, nFacInd, nOthInd, vtN) + sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_1' + bOk, sErr = DoMill( Proc, sName, sMilling, dTDiam / 2, nFacInd, nOthInd, vtN) if not bOk then return bOk, sErr end end - - bOk, sErr = DoMill( Proc, sMilling, 0, nFacInd, nOthInd, vtN) + sName = 'Mill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) + bOk, sErr = DoMill( Proc, sName, sMilling, 0, nFacInd, nOthInd, vtN) if not bOk then return bOk, sErr end -- eventuale segnalazione ingombro di testa o coda @@ -1497,6 +1496,81 @@ local function SetOpenSide( nPathInt, vtOrtho, nStartPoint) return false end +--------------------------------------------------------------------- +local function DoClean( sName, sMilling, nIdPath, vtN, dMaxElev, dMachDepth, dExtraDepth, dNoLeadsAddLen, dLeadInPerp, + bLeftWorkside, bInvertTool, bInvertDir, bCheckToInvertPath, bSCCEvaluateOppositeVector, bEvaluateAddLeads) + local nMchId = EgtAddMachining( sName, sMilling) + local sMyWarn + if not nMchId then + sMyWarn = 'Warning : impossible add machining ' .. sName .. '-' .. sMilling + return false, sMyWarn + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ nIdPath, -1}}) + -- imposto lato di lavoro sinistro + if bLeftWorkside then + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + end + -- imposto direzione utensile opposta + if bInvertTool then + EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) + end + -- imposto posizione braccio porta testa + local nSCC = MCH_SCC.NONE + if not BD.C_SIMM then + if EgtIf( bSCCEvaluateOppositeVector, AreSameOrOppositeVectorApprox( vtN, Z_AX()), AreSameVectorApprox( vtN, Z_AX())) then + nSCC = MCH_SCC.ADIR_YM + elseif abs( vtN:getX()) < 0.1 then + nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + elseif vtN:getY() < GEO.EPS_SMALL then + nSCC = EgtIf( bInvertDir, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + else + nSCC = EgtIf( bInvertDir, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP) + end + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- gestione attacco e uscita + if bEvaluateAddLeads and EgtCurveIsClosed( nIdPath) then + -- attacco e uscita a quarto di cerchio senza allungamenti a inizio e fine + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TANGENT) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.LITANG, 0) + EgtSetMachiningParam( MCH_MP.LIPERP, dLeadInPerp) + EgtSetMachiningParam( MCH_MP.LIELEV, 0) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) + else + -- nessun attacco e uscita, allungo inizio e fine di 3/4 del diametro utensile + EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) + EgtSetMachiningParam( MCH_MP.STARTADDLEN, dNoLeadsAddLen) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, dNoLeadsAddLen) + end + -- setto massimo affondamento possibile + EgtSetMachiningParam( MCH_MP.DEPTH, dMachDepth + dExtraDepth) + -- setto se devo invertire il percorso + if bCheckToInvertPath then + local bInvert = CheckToInvert( nIdPath, true) + EgtSetMachiningParam( MCH_MP.INVERT, EgtIf( bInvertDir, not bInvert, bInvert)) + end + -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione + local sUserNotes = 'VMRS=0;MaxElev=' .. EgtNumToString( ( dMaxElev + dMachDepth), 1) .. ';' + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + -- eseguo + if EgtApplyMachining( true, false) then + _, sMyWarn = EgtGetMachMgrWarning( 0) + if EgtIsMachiningEmpty() then + EgtSetOperationMode( nMchId, false) + end + -- altrimenti lavorazione non applicata + else + _, sMyWarn = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchId, false) + return false, sMyWarn + end + return true, sMyWarn +end + --------------------------------------------------------------------- local function MakeRoundCleanCorner( Proc, nFacInd, dDiam, bMillDown, bDoubleSide) -- recupero la lavorazione senza considerare l'elevazione @@ -1601,60 +1675,12 @@ local function MakeRoundCleanCorner( Proc, nFacInd, dDiam, bMillDown, bDoubleSid EgtModifyCurveExtrusion( AuxId, vtN1, GDB_RT.GLOB) -- inserisco la lavorazione local sName = 'Clean_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchId = EgtAddMachining( sName, sMilling) - if not nMchId then - sMyWarn = 'Warning : impossible add machining ' .. sName .. '-' .. sMilling - goto continue - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- imposto lato di lavoro sinistro - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if AreSameOrOppositeVectorApprox( vtN1, Z_AX()) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN1:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif vtN1:getY() < GEO.EPS_SMALL then - nSCC = EgtIf( bInvertMach, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) - else - nSCC = EgtIf( bInvertMach, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP) - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- tipo attacco e uscita - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - -- annullo allungamenti iniziale e finale - EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) - -- setto massimo affondamento possibile local dDepth = 0 if tFacAdj[i][3] > dTMaxDepth then dDepth = dTMaxDepth - tFacAdj[i][3] - end - EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) - -- setto se devo invertire il percorso - local bInvert = CheckToInvert( AuxId, true) - EgtSetMachiningParam( MCH_MP.INVERT, bInvert) - -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione - local sUserNotes = 'VMRS=0;' - sUserNotes = sUserNotes .. 'MaxElev=' .. EgtNumToString( ( tFacAdj[i][3] + dDepth), 1) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - -- eseguo - if EgtApplyMachining( true, false) then - _, sMyWarn = EgtGetMachMgrWarning( 0) - if EgtIsMachiningEmpty() then - EgtSetOperationMode( nMchId, false) - end - -- altrimenti lavorazione non applicata - else - _, sMyWarn = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) - end - ::continue:: + end + _, sMyWarn = DoClean( sName, sMilling, AuxId, vtN1, tFacAdj[i][3], dDepth, 0, 0, 0, true, false, false, true, true, false) + ::continue:: end if #sMyWarn > 0 then EgtOutLog( sMyWarn) @@ -1811,151 +1837,35 @@ local function MakeRoundCleanContour( Proc, nFacInd, dDiam, bMillDown, -- assegno lavorazioni ad ogni percorso local sMyWarn = '' + local bOk for i = 1, nNumId do local nIdPath = nFirstId + i - 1 local sName = 'Clean_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchId = EgtAddMachining( sName, sMilling) - if not nMchId then - sMyWarn = 'Warning : impossible add machining ' .. sName .. '-' .. sMilling - goto continue - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ nIdPath, -1}}) - -- imposto lato di lavoro sinistro - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - -- inversione direzione utensile - local bInvertMach = false + local bInvertMach if nPathInt then -- verifico se devo invertire direzione utensile (in caso di direzione verso la verticale) if vtN1:getZ() < BD.NZ_MINA and abs(vtN1:getZ()) >= 0.707 then - EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) bInvertMach = true -- altrimenti se da fare in una sola volta e direzionato verso Y+ lo inverto per lavorarlo davanti elseif not bDoubleSide and vtN1:getY() > GEO.EPS_SMALL then - EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) bInvertMach = true end end - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if AreSameOrOppositeVectorApprox( vtN1, Z_AX()) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN1:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif vtN1:getY() < GEO.EPS_SMALL then - nSCC = EgtIf( bInvertMach, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) - else - nSCC = EgtIf( bInvertMach, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP) - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- gestione attacco e uscita - if EgtCurveIsClosed( nIdPath) then - -- attacco e uscita a quarto di cerchio senza allungamenti a inizio e fine - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TANGENT) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - EgtSetMachiningParam( MCH_MP.LITANG, 0) - EgtSetMachiningParam( MCH_MP.LIPERP, 0.5 * dTDiam) - EgtSetMachiningParam( MCH_MP.LIELEV, 0) - EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) - else - -- nessun attacco e uscita, allungo inizio e fine di 3/4 del diametro utensile - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0.75 * dTDiam) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0.75 * dTDiam) - end - -- setto massimo affondamento possibile local dMachDepth = 0 if ( dMaxElev + dCollSic) > dTMaxDepth then dMachDepth = dTMaxDepth - ( dMaxElev + dCollSic) end - EgtSetMachiningParam( MCH_MP.DEPTH, dMachDepth + dExtraDepth) - -- setto se devo invertire il percorso - local bInvert = CheckToInvert( nIdPath, true) - EgtSetMachiningParam( MCH_MP.INVERT, EgtIf( bInvertMach, not bInvert, bInvert)) - -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione - local sUserNotes = 'VMRS=0;' - sUserNotes = sUserNotes .. 'MaxElev=' .. EgtNumToString( ( dMaxElev + dMachDepth), 1) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - -- eseguo - if EgtApplyMachining( true, false) then - _, sMyWarn = EgtGetMachMgrWarning( 0) - if EgtIsMachiningEmpty() then - EgtSetOperationMode( nMchId, false) - end - -- altrimenti lavorazione non applicata - else - _, sMyWarn = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) - end + bOk, sMyWarn = DoClean( sName, sMilling, nIdPath, vtN1, dMaxElev, dMachDepth, dExtraDepth, 0.75 * dTDiam, 0.5 * dTDiam, true, bInvertMach, bInvertMach, true, true, true) -- se devo applicare la contornatura anche sul lato opposto - if bDoubleSide then + if bOk and bDoubleSide then if bMillDown then sMilling = sMillingDn dTDiam = dTDiamDn dTMaxDepth = dTMaxDepthDn end sName = 'CleanOppo_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - nMchId = EgtAddMachining( sName, sMilling) - if not nMchId then - sMyWarn = 'Warning : impossible add machining ' .. sName .. '-' .. sMilling - goto continue - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ nIdPath, -1}}) - -- imposto lato di lavoro sinistro - EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) - -- imposto direzione utensile opposta - EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if AreSameVectorApprox( vtN1, Z_AX()) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN1:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif vtN1:getY() < GEO.EPS_SMALL then - nSCC = MCH_SCC.ADIR_YP - else - nSCC = MCH_SCC.ADIR_YM - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- tipo attacco e uscita - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - -- allungo inizio e fine di 3/4 del diametro utensile - EgtSetMachiningParam( MCH_MP.STARTADDLEN, dTDiam * 0.75) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, dTDiam * 0.75) - -- setto massimo affondamento possibile - local dMachDepth = 0 - if ( dMaxElev + dCollSic) > dTMaxDepth then - dMachDepth = dTMaxDepth - ( dMaxElev + dCollSic) - end - EgtSetMachiningParam( MCH_MP.DEPTH, dMachDepth) - -- setto se devo invertire il percorso - local bInvert = CheckToInvert( nIdPath, true) - EgtSetMachiningParam( MCH_MP.INVERT, not bInvert) - -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione - local sUserNotes = 'VMRS=0;' - sUserNotes = sUserNotes .. 'MaxElev=' .. EgtNumToString( ( dMaxElev + dMachDepth), 1) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - -- eseguo - if EgtApplyMachining( true, false) then - _, sMyWarn = EgtGetMachMgrWarning( 0) - if EgtIsMachiningEmpty() then - EgtSetOperationMode( nMchId, false) - end - -- altrimenti lavorazione non applicata - else - _, sMyWarn = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) - end + bOk, sMyWarn = DoClean( sName, sMilling, nIdPath, vtN1, dMaxElev, dMachDepth, 0, 0.75 * dTDiam, 0, true, true, true, true, false, false) end - ::continue:: end if #sMyWarn > 0 then EgtOutLog( sMyWarn) @@ -2107,54 +2017,11 @@ local function MakeSharpCleanCorner( Proc, nFacInd, dDiam) EgtModifyCurveExtrusion( AuxId, vtExtr, GDB_RT.GLOB) -- inserisco la lavorazione local sName = 'Clean_' .. ( 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 + local bOk + bOk, sMyWarn = DoClean( sName, sMilling, AuxId, vtN1, dMaxDepth, 0, 0, 10, 0, false, false, true, false, false, false) + if not bOk then + return false, sMyWarn end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ AuxId, -1}}) - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if AreSameVectorApprox( vtN1, Z_AX()) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN1:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif vtN1:getY() < GEO.EPS_SMALL then - nSCC = MCH_SCC.ADIR_YP - else - nSCC = MCH_SCC.ADIR_YM - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- tipo attacco e uscita - EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.NONE) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - -- allungo inizio e fine di 10mm - EgtSetMachiningParam( MCH_MP.STARTADDLEN, 10) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, 10) - -- setto affondamento 0 - EgtSetMachiningParam( MCH_MP.DEPTH, 0) - -- Note utente con dichiarazione nessuna generazione sfridi per Vmill e massima elevazione - local sUserNotes = 'VMRS=0;MaxElev=' .. EgtNumToString( dMaxDepth, 1) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) - -- eseguo - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchId, false) - return false, sErr - else - local _, sWarn = EgtGetMachMgrWarning( 0) - if EgtIsMachiningEmpty() then - EgtSetOperationMode( nMchId, false) - return false, sWarn - else - return true, ( sMyWarn or sWarn) - end - end - return true, sMyWarn end @@ -2174,9 +2041,9 @@ local function MakeDrillOnCorner( Proc, nFacInd, dDiam, bSpecialMach) if nIdIniPoint and nIdEndPoint then local vtExtr if bSpecialMach then - local _, vtN0 = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) - local _, vtN1 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][1], GDB_ID.ROOT) - local _, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][2], GDB_ID.ROOT) + local ptC, vtN0 = EgtSurfTmFacetCenter( Proc.Id, nFacInd, GDB_ID.ROOT) + local ptC, vtN1 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][1], GDB_ID.ROOT) + local ptC, vtN2 = EgtSurfTmFacetCenter( Proc.Id, tFacAdj[nIdLine][2], GDB_ID.ROOT) vtExtr = vtN0 + vtN1 + vtN2 else -- versore direzione @@ -2593,7 +2460,7 @@ local function MakeByMillAsSaw( Proc, tFData, nBottomFace, sMillingOnSide, dSawD return false, sErr end -- Riordino le dimensioni per avere dH come lato lungo e dV come perpendicolare - local _, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT) + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT) if abs( vtN * tFData.rfFac:getVersX()) > abs( vtN * tFData.rfFac:getVersY()) then tFData.dH, tFData.dV = tFData.dV, tFData.dH end @@ -2680,197 +2547,169 @@ local function MakeByMillAsSaw( Proc, tFData, nBottomFace, sMillingOnSide, dSawD end --------------------------------------------------------------------- -local function DoHeadChainSaw( Proc, sName, sSawing, tFData, nFacAdj, vtNE, vtNS, dSawWidth, - dSawThick, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) - -- Calcolo uso faccia - local nFaceUse = BL.GetNearestParalOpposite( tFData.rfFac:getVersZ()) - -- Calcolo normale faccia adiacente - local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacAdj, GDB_ID.ROOT) - -- Verifico se necessarie più passate - local nStep = ceil( ( tFData.dV - 10 * GEO.EPS_SMALL) / dSawThick) - local dStep = 0 - if nStep > 1 then - dStep = ( tFData.dV - dSawThick) / ( nStep - 1) +local function DoHeadChainSaw( Proc, sName, sSawing, tFData, nFaceUse, nFacAdj, vtN, vtNE, vtNS, dSawWidth, + dOffs, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) + local nMchFId = EgtAddMachining( sName, sSawing) + if not nMchFId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sSawing + EgtOutLog( sErr) + return false, sErr end - for i = 1, nStep do - -- Applico la lavorazione con sega a catena a questa faccia - local sStepName = sName .. '_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) - local nMchFId = EgtAddMachining( sStepName, sSawing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sStepName .. '-' .. 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 + -- 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/finale per estremi aperti/chiusi + -- 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 - -- imposto angolo 3° asse rot e eventuale angolo suggerito per inizio - EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 1)) - EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, tFData.rfFac:getVersZ())) - -- imposto offset radiale - local dOffs = ( i - 1) * dStep - EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) - -- se necessario, limito l'affondamento - if tFData.dFacElev > dMaxDepth + 10 * GEO.EPS_SMALL then - local sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( tFData.dFacElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' - local dDepth = dMaxDepth - tFData.dFacElev - EgtOutLog( sWarn) - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH ' .. EgtNumToString( dDepth, 1)) - end - -- imposto elevazione - local sNotes = 'MaxElev=' .. EgtNumToString( tFData.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, tFData.rfFac:getVersZ())) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - end - if EgtIsMachiningEmpty() then - local _, sWarn = EgtGetMachMgrWarning( 0) + 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, tFData.rfFac:getVersZ())) + -- imposto offset radiale + EgtSetMachiningParam( MCH_MP.OFFSR, dOffs) + -- se necessario, limito l'affondamento + if tFData.dFacElev > dMaxDepth + 10 * GEO.EPS_SMALL then + local sWarn = 'Warning in LapJoint : elevation (' .. EgtNumToString( tFData.dFacElev, 1) .. ') bigger than max tool depth (' .. EgtNumToString( dMaxDepth, 1) .. ')' + local dDepth = dMaxDepth - tFData.dFacElev + EgtOutLog( sWarn) + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH ' .. EgtNumToString( dDepth, 1)) + end + -- imposto elevazione + local sNotes = 'MaxElev=' .. EgtNumToString( tFData.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, sWarn + return false, sErr + end + -- impostazione alternativa angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) + EgtSetMachiningParam( MCH_MP.INITANGS, GetChainSawInitAngs( vtN, tFData.rfFac:getVersZ())) + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr end end - + if EgtIsMachiningEmpty() then + local _, sWarn = EgtGetMachMgrWarning( 0) + EgtSetOperationMode( nMchFId, false) + return false, sWarn + end return true end --------------------------------------------------------------------- -local function DoSideChainSaw( Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLundIdFace, - 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) +local function DoSideChainSaw( Proc, sName, sSawing, tFData, vtN, vtOrtho, + nLundIdFace, dOffs, dMaxMat, bOpenStart, bOpenEnd) + local nMchFId = EgtAddMachining( sName, sSawing) + if not nMchFId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sSawing + EgtOutLog( sErr) + return false, sErr end - for i = 1, nStep do - -- inserisco la lavorazione di sawing - local sStepName = sName .. '_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) - local nMchFId = EgtAddMachining( sStepName, sSawing2) - if not nMchFId then - local sErr = 'Error adding machining ' .. sStepName .. '-' .. sSawing2 - EgtOutLog( sErr) + -- 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( tFData.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 + 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 > dMaxMat then + local 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 dMaxMat > ( dDepth + dSawCornerRad2 + 1) then + EgtSetMachiningParam( MCH_MP.DEPTH, ( dDepth + dSawCornerRad2 + 1)) + -- se massimo affondamento supera altezza fessura, uso massimo affondamento + elseif dMaxMat > ( dDepth + 1) then + EgtSetMachiningParam( MCH_MP.DEPTH, ( dMaxMat - 1)) + -- se massimo affondamento utensile inferiore fessura, setto affondamento ed emetto warning + elseif dMaxMat < dDepth then + EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat) + local 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 - -- 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( tFData.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)) + -- impostazione alternativa angolo 3° asse rot + EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, GetChainSawBlockedAxis( 2)) 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 - local 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) - local 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 - local _, sWarn = EgtGetMachMgrWarning( 0) + local _, sErr = EgtGetLastMachMgrError() EgtSetOperationMode( nMchFId, false) - return false, sWarn + return false, sErr end end - + if EgtIsMachiningEmpty() then + local _, sWarn = EgtGetMachMgrWarning( 0) + EgtSetOperationMode( nMchFId, false) + return false, sWarn + end return true end @@ -2934,7 +2773,7 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI return false, sErr end -- Riordino le dimensioni per avere dH come lato lungo e dV come perpendicolare - local _, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT) + local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacAdj, GDB_ID.ROOT) if abs( vtN * tFData.rfFac:getVersX()) > abs( vtN * tFData.rfFac:getVersY()) then tFData.dH, tFData.dV = tFData.dV, tFData.dH end @@ -3061,18 +2900,44 @@ local function MakeByChainOrSaw( Proc, tFData, dDimMin, dDimMax, vtOrtho, nLundI end -- se continuo a lavorare di testa if bGoFromHead then - local bOk, sErr = DoHeadChainSaw( Proc, 'Csaw', sSawing, tFData, nFacAdj, vtNE, vtNS, dSawWidth, dSawThick, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) - if not bOk then - return false, sErr + -- Calcolo uso faccia + local nFaceUse = BL.GetNearestParalOpposite( tFData.rfFac:getVersZ()) + -- Calcolo normale faccia adiacente + local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacAdj, GDB_ID.ROOT) + -- Verifico se necessarie più passate + local nStep = ceil( ( tFData.dV - 10 * GEO.EPS_SMALL) / dSawThick) + local dStep = 0 + if nStep > 1 then + dStep = ( tFData.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 dOffs = ( i - 1) * dStep + local bOk, sErr = DoHeadChainSaw( Proc, sName, sSawing, tFData, nFaceUse, nFacAdj, vtN, vtNE, vtNS, dSawWidth, dOffs, dDistToNextPiece, dMaxDepth, bOpenStart, bOpenEnd) + if not bOk then + return false, sErr + end end -- altrimenti segacatena di fianco else -- verifico se posso farlo con la sega-catena - local bMakeChainSaw, sSawing2, dMaxMat2, _, dSawThick2 = VerifyChainSaw( dDimMin, dDimMax) + local bMakeChainSaw, sSawing2, dMaxMat2, dSawCornerRad2, dSawThick2 = VerifyChainSaw( dDimMin, dDimMax) if bMakeChainSaw then - local bOk, sErr = DoSideChainSaw(Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLundIdFace, dDimMin, dSawThick2, dMaxMat2, bOpenStart, bOpenEnd) - if not bOk then - return false, sErr + -- 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 = sName .. 'Csaw_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i) + local dOffs = ( i - 1) * dStep + local bOk, sErr = DoSideChainSaw(Proc, sName, sSawing2, tFData, vtN, vtOrtho, nLundIdFace, dOffs, dMaxMat2, bOpenStart, bOpenEnd) + if not bOk then + return false, sErr + end end end end @@ -3139,6 +3004,77 @@ local function MakeAntiSplintBySaw( Proc, nFacet, vtN, nFacInd, bReduceDepth, bM return bMadeASbyBld, sWarn, nIdMach, dSawThick, dMaxDepth, dAng end +--------------------------------------------------------------------- +local function DoPocketing( sName, sPocketing, sMchFind, vtN, nPathInt, nFaceIdx, nUseRoughTool, dMachDepth, dMaxElev, bInvertTool, bInvertPath, bFaceOrtho, bSCCEvaluateOppositeVector, bSCCYSpecialStrategy) + -- inserisco la lavorazione di svuotatura + local nMchFId = EgtAddMachining( sName, sPocketing) + if not nMchFId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ nPathInt, nFaceIdx}}) + if bInvertTool then + EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) + end + if bFaceOrtho then + -- imposto uso faccia + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) + end + -- imposto posizione braccio porta testa + local nSCC = MCH_SCC.NONE + if not BD.C_SIMM then + if EgtIf( bSCCEvaluateOppositeVector, AreSameOrOppositeVectorApprox( vtN, Z_AX()), AreSameVectorApprox( vtN, Z_AX())) then + nSCC = MCH_SCC.ADIR_YM + elseif abs( vtN:getX()) < 0.1 then + nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) + elseif bSCCYSpecialStrategy then + if vtN:getY() > 0.1 then + nSCC = MCH_SCC.ADIR_YP + else + nSCC = MCH_SCC.ADIR_YM + end + else + if vtN:getY() < GEO.EPS_SMALL then + nSCC = EgtIf( bInvertTool, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + else + nSCC = EgtIf( bInvertTool, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP) + end + end + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- se tasca aperta, imposto opportuno attacco + if (sMchFind == 'OpenPocket' and nUseRoughTool == 0) or sMchFind == 'OpenPocket_H2' then + EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALIN) + end + if bInvertPath then + -- inverto il percorso di lavorazione se necessario lavorare sinistro + EgtSetMachiningParam( MCH_MP.INVERT, bInvertPath) + end + if dMachDepth ~= 0 then + -- imposto affondamento + EgtSetMachiningParam( MCH_MP.DEPTH, dMachDepth) + end + -- imposto elevazione e dichiaro non si generano sfridi per VMill + local sNotes = 'VMRS=0;' + if dMaxElev > 0 then + sNotes = sNotes .. 'MaxElev=' .. EgtNumToString( dMaxElev, 1) .. ';' + end + EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) + -- eseguo + if not EgtApplyMachining( true, false) then + -- provo ad allargare leggermente la tasca + EgtSetMachiningParam( MCH_MP.OFFSR, -0.1) + if not EgtApplyMachining( true, false) then + local bOk, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end + end + return true, '', nMchFId +end + --------------------------------------------------------------------- local function MakePocket( Proc, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, sMasterPocket, dPrevFaceElev, tDimAndRef, dAng) @@ -3171,7 +3107,7 @@ local function MakePocket( Proc, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, sPocketing = ML.FindPocketing( sMchFind, dFaceDiamTool, dElev + dCollSic) end if not sPocketing then - local sErr = 'Error : '..sMchFind..' not found in library' + local sErr = 'Error : '.. sMchFind ..' not found in library' EgtOutLog( sErr) return false, sErr end @@ -3190,75 +3126,23 @@ local function MakePocket( Proc, ptPs, tvtN, nFaceRef, sMchFind, nUseRoughTool, return false, '', sTuuidPk, dDiamTool, dElev end -- inserisco la lavorazione di svuotatura - local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. 'F' .. tostring( nFaceRef) - local nMchFId = EgtAddMachining( sName, sPocketing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nFaceRef}}) - -- imposto uso faccia - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.ORTHO_CONT) - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - nSCC = MCH_SCC.ADIR_YM - if AreSameVectorApprox( tvtN[2], Z_AX()) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( tvtN[2]:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( EgtGetCurrPhase()), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif tvtN[2]:getY() > 0.1 then - nSCC = MCH_SCC.ADIR_YP - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- se tasca aperta e non lavorata col truciolatore, imposto opportuno attacco - if sMchFind == 'OpenPocket' and nUseRoughTool == 0 then - EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALIN) - end - -- se elevazione superiore a massimo affondamento della fresa, riduco opportunamente - local sWarn + local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. 'F' .. tostring( nFaceRef) + local dMachDepth = 0 if dElev > dMaxDepth + 10 * GEO.EPS_SMALL then - EgtSetMachiningParam( MCH_MP.DEPTH, dMaxDepth - dElev) + dMachDepth = dMaxDepth - dElev dElev = dMaxDepth sWarn = 'Warning : elevation bigger than max tool depth' EgtOutLog( sWarn) - end - -- imposto elevazione e dichiaro non si generano sfridi per VMill - local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';VMRS=0;' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - -- eseguo - if not EgtApplyMachining( true, false) then - -- provo ad allargare leggermente la tasca - EgtSetMachiningParam( MCH_MP.OFFSR, -0.1) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end + end + local bOk, sWarn, nMchFId = DoPocketing( sName, sPocketing, sMchFind, tvtN[2], Proc.Id, nFaceRef, nUseRoughTool, dMachDepth, dElev, false, false, true, false, true) + if not bOk then + return bOk, sWarn end 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 misses some 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 function DoHeadCut( Proc, sName, sMilling, nMchFId, dElev, nSideFace, tvtN) local nMchId = EgtAddMachining( sName, sMilling) if not nMchId then local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling @@ -3314,10 +3198,21 @@ 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 - bOk, sWarn = DoHeadCut( Proc, nMchFId, sTuuidPk, dDiamTool, dElev, nSideFace, tvtN) - if not bOk then - return false, sWarn + if not bOk then + if sTuuidPk 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)) + bOk, sWarn = DoHeadCut( Proc, sName, sMilling, nMchFId, dElev, nSideFace, tvtN) + if not bOk then + return false, sWarn + end end else return bOk, sWarn @@ -3445,57 +3340,6 @@ local function GetUShapeWidth( Proc, nFacInd) return dWidth end ---------------------------------------------------------------------- -local function DoPocketing( sName, sPocketing, sMchFind, vtN, nPathInt, nFaceIdx, dMachDepth, sNotes, bInvert, bEvaluateOppositeVector) - -- inserisco la lavorazione di svuotatura - local nMchFId = EgtAddMachining( sName, sPocketing) - if not nMchFId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sPocketing - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ nPathInt, nFaceIdx}}) - if bInvert then - EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) - end - -- imposto posizione braccio porta testa - local nSCC = MCH_SCC.NONE - if not BD.C_SIMM then - if EgtIf( bEvaluateOppositeVector, AreSameOrOppositeVectorApprox( vtN, Z_AX()), AreSameVectorApprox( vtN, Z_AX())) then - nSCC = MCH_SCC.ADIR_YM - elseif abs( vtN:getX()) < 0.1 then - nSCC = EgtIf( BL.IsPartFinalPhase( _nPhase), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP) - elseif vtN:getY() < GEO.EPS_SMALL then - nSCC = EgtIf( bInvert, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) - else - nSCC = EgtIf( bInvert, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP) - end - end - EgtSetMachiningParam( MCH_MP.SCC, nSCC) - -- se tasca aperta, imposto opportuno attacco - if sMchFind == 'OpenPocket' or sMchFind == 'OpenPocket_H2' then - EgtSetMachiningParam( MCH_MP.SUBTYPE, MCH_POCK_SUB.SPIRALIN) - end - -- inverto il percorso di lavorazione per lavorare sinistro - EgtSetMachiningParam( MCH_MP.INVERT, true) - -- imposto affondamento - EgtSetMachiningParam( MCH_MP.DEPTH, dMachDepth) - -- imposto usernotes - EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes) - -- eseguo - if not EgtApplyMachining( true, false) then - -- provo ad allargare leggermente la tasca - EgtSetMachiningParam( MCH_MP.OFFSR, -0.1) - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr - end - end - return true, '', nMchFId -end - --------------------------------------------------------------------- local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown) local nFirstMachId @@ -3609,18 +3453,16 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown) end -- inserisco la lavorazione di svuotatura local sName = 'Pock_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - -- imposto elevazione e dichiaro non si generano sfridi per VMill - local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';VMRS=0;' - local bInvert = false + local bToolInvert = false -- verifico se devo invertire direzione utensile (in caso di direzione verso la verticale) if vtOrtho:getZ() < BD.NZ_MINA and abs(vtOrtho:getZ()) >= 0.707 and not BD.DOWN_HEAD then - bInvert = true + bToolInvert = true -- altrimenti se da fare in una sola volta e direzionato verso Y+ lo inverto per lavorarlo davanti elseif not bDoubleSide and vtOrtho:getY() > GEO.EPS_SMALL and not ( -(vtOrtho:getZ()) < BD.NZ_MINA) then - bInvert = true + bToolInvert = true end -- eseguo svuotatura - local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtOrtho, nPathInt, -1, dMachDepth, sNotes, bInvert, true) + local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtOrtho, nPathInt, -1, 0, dMachDepth, dElev, bToolInvert, true, false, true) if not bOk then return -1, sErr end @@ -3660,10 +3502,8 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown) end -- inserisco la lavorazione di svuotatura local sName = 'PockOppo_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - -- imposto elevazione e dichiaro non si generano sfridi per VMill - local sNotes = 'MaxElev=' .. EgtNumToString( dElev, 1) .. ';VMRS=0;' -- eseguo svuotatura in direzione invertita - local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtOrtho, nPathInt, -1, dMachDepth, sNotes, true, false) + local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtOrtho, nPathInt, -1, 0, dMachDepth, dElev, true, true, false, false) if not bOk then return -1, sErr end @@ -3696,7 +3536,7 @@ local function MakeByPockets( Proc, bOrthoFacesMaster, bMillDown) -- inserisco la lavorazione di svuotatura local sName = EgtIf( bDoubleSide, 'Pock3rd_', 'Pock2nd_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) -- eseguo svuotatura - local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtN, Proc.Id, nFacInd, dDepth, 'VMRS=0;', false, true) + local bOk, sErr, nMchFId = DoPocketing( sName, sPocketing, sMchFind, vtN, Proc.Id, nFacInd, 0, dDepth, 0, false, true, false, true) if not bOk then return -1, sErr end @@ -3748,7 +3588,7 @@ local function ManageAntiSplintBySaw( Proc, bIsU, vtN, nFacInd, sWarn, bMillDown if abs(vtN:getZ()) > 0.63 or abs(vtN:getY()) > 0.63 then -- if abs(vtN:getZ()) > 0.7 or abs(vtN:getY()) > 0.7 then -- prendo il vettore normale alla faccia - local _, vtNFc = EgtSurfTmFacetCenter( Proc.Id, nFacet, GDB_ID.ROOT) + local ptC, vtNFc = EgtSurfTmFacetCenter( Proc.Id, nFacet, GDB_ID.ROOT) -- se superficie principale parallela al piano XZ if nPrefSide == 0 then -- se facce inclinate \\ allora mandrino a destra (per essere verso l'alto) @@ -4158,21 +3998,7 @@ local function ManageAntiSplintByMill( Proc, nFacInd, bMillDown, bDoubleSide, end --------------------------------------------------------------------- -local function MakeBySideMill( Proc, tFData, dMaxMat, dToolDiam, bHeadDir) - local dH, dV - -- recupero la larghezza della faccia perpendicolarmente alle altre 2 - local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, EgtIf( tFData.nFacInd == 0, 1, 0), GDB_ID.ROOT) - local vtX = vtN2 ^ tFData.vtN - local frRef = Frame3d( tFData.ptC, tFData.ptC + 100 * vtX, tFData.ptC + 100 * vtN2) - local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, tFData.nFacInd, GDB_BB.STANDARD, frRef) - if b3Ref then - dV = b3Ref:getDimY() - dH = b3Ref:getDimX() - end - -- se lavorazione da sotto e lunga, va divisa in due metà - local bHalf = ( tFData.vtN:getZ() < -0.5 and dH > ( BD.MAX_LEN_BH_FROM_BOTTOM or 200)) - -- inserisco la lavorazione di fresatura - local sName = 'BHMill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) +local function DoSideMill( Proc, sName, sMilling, tFData, dMaxMat, dToolDiam, bHeadDir, bHalf, dV) local nMchFId = EgtAddMachining( sName, sMilling) if not nMchFId then local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling @@ -4248,6 +4074,26 @@ local function MakeBySideMill( Proc, tFData, dMaxMat, dToolDiam, bHeadDir) return true, '' end +local function MakeSideMill( Proc, sMilling, tFData, dMaxMat, dToolDiam, bHeadDir) + local dH, dV + -- recupero la larghezza della faccia perpendicolarmente alle altre 2 + local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, EgtIf( tFData.nFacInd == 0, 1, 0), GDB_ID.ROOT) + local vtX = vtN2 ^ tFData.vtN + local frRef = Frame3d( tFData.ptC, tFData.ptC + 100 * vtX, tFData.ptC + 100 * vtN2) + local b3Ref = EgtSurfTmGetFacetBBoxRef( Proc.Id, tFData.nFacInd, GDB_BB.STANDARD, frRef) + if b3Ref then + dV = b3Ref:getDimY() + dH = b3Ref:getDimX() + end + -- se lavorazione da sotto e lunga, va divisa in due metà + local bHalf = ( tFData.vtN:getZ() < -0.5 and dH > ( BD.MAX_LEN_BH_FROM_BOTTOM or 200)) + -- inserisco la lavorazione di fresatura + local sName = 'BHMill_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local nMchFId = EgtAddMachining( sName, sMilling) + local bOk, sErr = DoSideMill( Proc, sName, sMilling, tFData, dMaxMat, dToolDiam, bHeadDir, bHalf, dV) + return bOk, sErr +end + --------------------------------------------------------------------- local function MakeSpecialThreeFaces( Proc, tFData) -- se orientata verso il basso, verifico l'alternativa @@ -4301,7 +4147,7 @@ local function MakeSpecialThreeFaces( Proc, tFData) -- provo con contornatura local dDiamTool = 20 -- verifico se forma ad L - local _, bIsL = TestUL( Proc) + local bIsU, bIsL = TestUL( Proc) if bIsL then local bOk, sWarn bOk, sWarn, _ = MakeByMill( Proc, tFData, dCollSic, true, sMilling) @@ -4509,7 +4355,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide, -- se devo inserire il chamfer if ( ( Proc.Fct == 3 and bIsU) or (Proc.Fct == 2 and bIsL)) and _nChamfer > 0 then -- ottengo le dimensioni dello pseudotunnel - local _, _, _, vtOrtho, _, nSurfInt = GetTunnelDimension( Proc) + local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc) local nOk, sErr = MakeChamfer( Proc, vtOrtho, nSurfInt) if nOk < 0 then return 1, false, sErr end end @@ -4559,7 +4405,7 @@ local function MakeSidePocketings( Proc, tFData, dCollSic, bSpecialMillOnSide, sWarn = sErr -- se ho antischeggia con fresa le inserisco if _nChamfer < 2 and Q_ANTISPLINT_TYPE == 2 then - local _, sWarn2 = ManageAntiSplintByMill( Proc, tFData.nFacInd, bMillDown, bDoubleSide, + local bOk, sWarn2 = ManageAntiSplintByMill( Proc, tFData.nFacInd, bMillDown, bDoubleSide, vtOrtho, nPathInt, nSurfInt, dDepth, bOneShot, nFirstMachId) sWarn = FormatWarning( sWarn, sWarn2) @@ -4849,7 +4695,7 @@ local function MakePocketingOrMilling( Proc, tFData, bSinglePart) -- se devo inserire il chamfer if ( ( Proc.Fct == 3 and bIsU) or (Proc.Fct == 2 and bIsL)) and _nChamfer > 0 then -- ottengo le dimensioni dello pseudotunnel - local _, _, _, vtOrtho, _, nSurfInt = GetTunnelDimension( Proc) + local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc) local nOk, sErr = MakeChamfer( Proc, vtOrtho, nSurfInt) if nOk < 0 then return false, sErr end end @@ -4951,14 +4797,14 @@ local function MakeTwoFaces( Proc, bSinglePart, bPrevBhSideMill) end -- se fattibile con fresa BH di fianco e spessore utensile inferiore alla larghezza faccia - local bMakeBySideMill, _, bHeadDir, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) + local bMakeBySideMill, _, bHeadDir, sMilling, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) if bPrevBhSideMill == nil then bPrevBhSideMill = bMakeBySideMill end if bMakeBySideMill and ( dMaxMat <= tFData.dH + 15 * GEO.EPS_SMALL) then -- se smusso non è esclusivo if _nChamfer < 2 then - local bOk, sErr = MakeBySideMill( Proc, tFData, dMaxMat, dToolDiam, bHeadDir) + local bOk, sErr = MakeSideMill( Proc, sMilling, tFData, dMaxMat, dToolDiam, bHeadDir) return bOk, sErr end -- altrimenti lavoro con svuotatura @@ -4987,7 +4833,7 @@ local function MakeThreeFaces( Proc, bSinglePart, bPrevBhSideMill) end -- se fattibile con fresa BH di fianco e spessore utensile inferiore alla larghezza faccia - local bMakeBySideMill, _, bHeadDir, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) + local bMakeBySideMill, _, bHeadDir, sMilling, dMaxMat, dToolDiam = VerifyBHSideMill( Proc, bSinglePart, bPrevBhSideMill) if bPrevBhSideMill == nil then bPrevBhSideMill = bMakeBySideMill end @@ -4995,7 +4841,7 @@ local function MakeThreeFaces( Proc, bSinglePart, bPrevBhSideMill) if bMakeBySideMill and ( dMaxMat <= tFData.dH + 15 * GEO.EPS_SMALL) then -- se smusso non è esclusivo if _nChamfer < 2 then - local bOk, sErr = MakeBySideMill( Proc, tFData, dMaxMat, dToolDiam, bHeadDir) + local bOk, sErr = MakeSideMill( Proc, sMilling, tFData, dMaxMat, dToolDiam, bHeadDir) return bOk, sErr end -- altrimenti lavoro con svuotatura @@ -5293,7 +5139,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) -- verifico se due facce o L con una o due facce di terminazione local _, bIsL = TestUL( Proc) if bIsL and _nChamfer > 0 then - local _, _, _, vtOrtho, _, nSurfInt = GetTunnelDimension( Proc) + local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace, nSurfInt = GetTunnelDimension( Proc) local nOk, sErr = MakeChamfer( Proc, vtOrtho, _b3Solid, nSurfInt) if nOk < 0 then return false, sErr end end