diff --git a/LuaLibs/ProcessProfHead.lua b/LuaLibs/ProcessProfHead.lua index c9a9183..88241bc 100644 --- a/LuaLibs/ProcessProfHead.lua +++ b/LuaLibs/ProcessProfHead.lua @@ -1,4 +1,4 @@ --- ProcessProfHead.lua by Egaltech s.r.l. 2019/04/10 +-- ProcessProfHead.lua by Egaltech s.r.l. 2019/04/11 -- Gestione calcolo profilo caudato per Travi -- Tabella per definizione modulo @@ -76,11 +76,14 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) elseif vtN:getZ() < -0.1 then nSide = -1 end - -- verifico se necessari ripassi agli estremi negli angoli - local _, _, _, dFirstAng = EgtSurfTmFacetsContact( Proc.Id, nFirstFacet, nFirstFacet + 1, GDB_ID.ROOT) - local bFirstTrim = ( dFirstAng and dFirstAng < -30) - local _, _, _, dLastAng = EgtSurfTmFacetsContact( Proc.Id, nLastFacet, nLastFacet - 1, GDB_ID.ROOT) - local bLastTrim = ( dLastAng and dLastAng < -30) + -- verifico se necessari ripassi negli angoli + local vAngs = {} + for i = 1, Proc.Fct do + local _, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, i-1, i, GDB_ID.ROOT) + if ( dAng and dAng < -30) then + table.insert( vAngs, i - 1) + end + end -- recupero gruppo per geometria addizionale local nAddGrpId = BL.GetAddGroup( nPartId) if not nAddGrpId then @@ -198,65 +201,89 @@ function ProcessProfHead.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) return false, sErr end end - -- eventuale finitura faccia finale (ortogonale alla trave) - if nSide ~= -1 and bLastTrim then - sName = 'ProfV_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchVId = EgtAddMachining( sName, sMilling) - if not nMchVId then - local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling - EgtOutLog( sErr) - return false, sErr - end - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nLastFacet}}) - -- aggiusto i parametri - if vtN:getZ() > 0.1 then - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_DOWN) - elseif vtN:getY() > 0.1 then - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_FRONT) + -- eventuali finiture + if nSide ~= -1 and #vAngs > 0 then + -- dimensioni feature + local dLen = Proc.Box:getDimX() + local dDep = EgtIf( nSide == 1, Proc.Box:getDimZ(), Proc.Box:getDimY()) + -- se più alta che lunga + if dDep > dLen then + for i = 1, #vAngs do + sName = 'ProfV'.. tostring( i)..'_'..( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local nMchV2Id = EgtAddMachining( sName, sMilling) + if not nMchV2Id then + local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling + EgtOutLog( sErr) + return false, sErr + end + -- calcolo massima elevazione + local _, _, _, _, _, _, dElev = EgtSurfTmFacetOppositeSide( Proc.Id, vAngs[i], EgtIf( bHead, X_AX(), -X_AX()), GDB_ID.ROOT) + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, vAngs[i]}}) + -- aggiusto i parametri + if bHead then + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_LEFT) + else + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_RIGHT) + end + EgtSetMachiningParam( MCH_MP.INVERT, false) + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') + EgtSetMachiningParam( MCH_MP.STEP, 0) + EgtSetMachiningParam( MCH_MP.OFFSR, 0) + EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dElev, 1)) + -- imposto posizione braccio + local nSCC = MCH_SCC.ADIR_YM + if nSide == 0 then + nSCC = EgtIf( vtN:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM) + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- eseguo + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchV2Id, false) + return false, sErr + end + end + -- altrimenti else - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_BACK) - end - EgtSetMachiningParam( MCH_MP.INVERT, false) - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') - EgtSetMachiningParam( MCH_MP.STEP, 0) - EgtSetMachiningParam( MCH_MP.OFFSR, 0) - -- eseguo - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchVId, false) - return false, sErr - end - end - -- eventuale finitura faccia iniziale (parallela alla trave) - if nSide ~= -1 and bFirstTrim then - sName = 'ProfV2_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) - local nMchV2Id = EgtAddMachining( sName, sMilling) - if not nMchV2Id then - local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling - EgtOutLog( sErr) - return false, sErr - end - -- calcolo massima elevazione - local _, _, _, _, _, _, dWidth = EgtSurfTmFacetOppositeSide( Proc.Id, 0, EgtIf( bHead, X_AX(), - X_AX()), GDB_ID.ROOT) - -- aggiungo geometria - EgtSetMachiningGeometry( {{ Proc.Id, nFirstFacet}}) - -- aggiusto i parametri - if bHead then - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_LEFT) - else - EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_RIGHT) - end - EgtSetMachiningParam( MCH_MP.INVERT, false) - EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') - EgtSetMachiningParam( MCH_MP.STEP, 0) - EgtSetMachiningParam( MCH_MP.OFFSR, 0) - EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dWidth, 1)) - -- eseguo - if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchV2Id, false) - return false, sErr + for i = 1, #vAngs do + sName = 'ProfV'.. tostring( i)..'_'..( EgtGetName( Proc.Id) or tostring( Proc.Id)) + local nMchVId = EgtAddMachining( sName, sMilling) + if not nMchVId then + local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling + EgtOutLog( sErr) + return false, sErr + end + -- calcolo massima elevazione + local _, _, _, _, _, _, dElev = EgtSurfTmFacetOppositeSide( Proc.Id, vAngs[i]+1, vtN, GDB_ID.ROOT) + -- aggiungo geometria + EgtSetMachiningGeometry( {{ Proc.Id, vAngs[i]+1}}) + -- aggiusto i parametri + if vtN:getZ() > 0.1 then + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_DOWN) + elseif vtN:getY() > 0.1 then + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_FRONT) + else + EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_BACK) + end + EgtSetMachiningParam( MCH_MP.INVERT, false) + EgtSetMachiningParam( MCH_MP.DEPTH_STR, 'TH') + EgtSetMachiningParam( MCH_MP.STEP, 0) + EgtSetMachiningParam( MCH_MP.OFFSR, 0) + EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dElev, 1)) + -- imposto posizione braccio + local nSCC = MCH_SCC.ADIR_YM + if nSide == 0 then + nSCC = EgtIf( bHead, MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM) + end + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + -- eseguo + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchVId, false) + return false, sErr + end + end end end -- aggiorno ingombro testa o coda per presa