diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index e5a8baa..b0fc5de 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -754,7 +754,7 @@ local function PrintFeatures( vProc, b3Raw) EgtOutLog( ' RawBox=' .. tostring( b3Raw)) for i = 1, #vProc do local Proc = vProc[i] - local sOut = string.format( ' Proc=%3d Grp=%1d Prc=%3d TC=%2d/%d Flg=%2d Down=%s Side=%s Head=%s Tail=%s Fcse=%1d,%1d Diam=%.2f Fct=%2d Box=%s', + local sOut = string.format( ' Id=%3d Grp=%1d Prc=%3d TC=%2d/%d Flg=%2d Down=%s Side=%s Head=%s Tail=%s Fcse=%1d,%1d Diam=%.2f Fct=%2d Box=%s', Proc.Id, Proc.Grp, Proc.Prc, Proc.TaskId, Proc.CutId, Proc.Flg, EgtIf( Proc.Down, 'T', 'F'), EgtIf( Proc.Side, 'T', 'F'), EgtIf( Proc.Head, 'T', 'F'), EgtIf( Proc.Tail, 'T', 'F'), Proc.Fcs, Proc.Fce, Proc.Diam, Proc.Fct, tostring( Proc.Box)) diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index 0a7af24..05fde44 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -1,4 +1,4 @@ --- BeamLib.lua by Egaltech s.r.l. 2021/02/09 +-- BeamLib.lua by Egaltech s.r.l. 2021/02/26 -- Libreria globale per Travi -- 2020/07/28 Corretto calcolo attacchi e uscite di lame per non uscire dalla faccia sotto. -- 2020/08/18 Aggiunto a GetNearestParalOpposite e GetNearestOrthoOpposite parametro opzionale vtNorm. @@ -7,6 +7,7 @@ -- 2021/01/06 Cambiato limite per attacco Tg con lama e CalcLeadInOutGeom rinominata in CalcLeadInOutPerpGeom. -- 2021/02/03 In taglio lama si accettano anche due lati con deviazione minore di 20deg. -- 2021/02/09 In taglio lama con PF si preferisce testa in Y- quindi SCC di conseguenza. +-- 2021/02/26 In taglio lama consento attacco anche da sotto (grazie a migliorie in MachKernel). -- Tabella per definizione modulo local BeamLib = {} @@ -36,8 +37,9 @@ function BeamLib.CreateOrEmptyAddGroup( PartId) -- recupero i dati del gruppo aggiuntivo local AddGrpId, sMchGrp = BeamLib.GetAddGroup( PartId) if not sMchGrp then return false end - -- se esiste lo svuoto + -- se esiste, aggiorno riferimento al gruppo di lavoro e lo svuoto if AddGrpId then + EgtSetInfo( AddGrpId, GDB_SI.MGRPONLY, EgtGetCurrMachGroup()) return EgtEmptyGroup( AddGrpId) end -- altrimenti lo creo @@ -650,7 +652,8 @@ function BeamLib.CalcLeadInOutPerpGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef ptP1 = ptP1 + vtX * ( EgtIf( bRight, - dCutExtra, dCutExtra)) ptP2 = ptP2 + vtX * ( EgtIf( bRight, - dCutExtra, dCutExtra)) -- Non va considerata l'uscita dalla faccia sotto, pertanto va abbassata - local b3MyBox = BBox3d( b3Box) ; b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) + -- 2021/02/26 Abilito anche uscita sotto + local b3MyBox = BBox3d( b3Box) ; --b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) -- Attacco local dLiTang = 10000 local dLiPerp = 10000 @@ -735,8 +738,9 @@ function BeamLib.CalcLeadInOutTangGeom( ptP1, ptP2, vtN, dRad, vtRef, dCutExtra, -- Spostamento punti per effetto dell'extra o della deficienza di taglio ptP1 = ptP1 - vtX * dCutExtra ptP2 = ptP2 - vtX * dCutExtra - -- Non va considerata l'uscita dalla faccia sotto, pertanto va abbassata - local b3MyBox = BBox3d( b3Box) ; b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) + -- Non va considerata l'uscita dalla faccia sotto, pertanto va abbassata + -- 2021/02/26 Abilito anche uscita sotto + local b3MyBox = BBox3d( b3Box) ; --b3MyBox:Add( b3MyBox:getMin() - 1000 * Z_AX()) -- Attacco local dLiTang = 10000 local dLiPerp = 0 @@ -879,13 +883,19 @@ function BeamLib.MakeOneFaceBySaw( nSurfId, nFacet, sCutting, dSawDiam, Par5, dV -- parametri di attacco/uscita local b3Box = BBox3d( b3Raw) b3Box:expand( dCutSic) - local dLiTang, dLiPerp, dLoTang, dLoPerp local ptP1act = ptP1 + vtN * dCutOffset local ptP2act = ptP2 + vtN * dCutOffset - if ( vtV1:getZ() > -0.5 or vtV2:getZ() > -0.5) and ( abs( vtV1:getY()) > 0.707 or abs( vtV2:getY()) > 0.707 or vtN:getZ() < 0.707 or abs( vtTg:getZ()) > 0.5) then - dLiTang, dLiPerp, dLoTang, dLoPerp = BeamLib.CalcLeadInOutPerpGeom( ptP1act, ptP2act, vtV1, vtV2, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) - else - dLiTang, dLiPerp, dLoTang, dLoPerp = BeamLib.CalcLeadInOutTangGeom( ptP1act, ptP2act, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) + -- attacco perpendicolare + local dLiTang, dLiPerp, dLoTang, dLoPerp = BeamLib.CalcLeadInOutPerpGeom( ptP1act, ptP2act, vtV1, vtV2, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) + local dLenLi = sqrt( dLiTang * dLiTang + dLiPerp * dLiPerp) + local dLenLo = sqrt( dLoTang * dLoTang + dLoPerp * dLoPerp) + -- attacco tangente + local dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp = BeamLib.CalcLeadInOutTangGeom( ptP1act, ptP2act, vtN, dSawDiam/2, vtRef, dCutExtra, b3Box) + local dLenLi2 = abs( dLi2Tang) + local dLenLo2 = abs( dLo2Tang) + -- scelgo l'attacco più conveniente + if ( abs( vtTg:getZ()) < 0.17 and ( vtV1:getZ() < -0.5 or vtV2:getZ() < -0.5)) or ( dLenLi2 < dLenLi and dLenLo2 < dLenLo) or ( dLenLi2 + dLenLo2) < ( dLenLi + dLenLo) then + dLiTang, dLiPerp, dLoTang, dLoPerp = dLi2Tang, dLi2Perp, dLo2Tang, dLo2Perp end -- posizione braccio EgtOutLog( 'vtN=' .. tostring( vtN) .. ' vtRef=' .. tostring( vtRef) .. ' vtOut=' .. tostring( vtOut) .. ' vtAux=' .. tostring( vtAux), 3) @@ -947,7 +957,7 @@ end ------------------------------------------------------------------------------------------------------------- function BeamLib.UpdateHCING( nRawId, dHCI, dDist) local dOldHCI = EgtGetInfo( nRawId, 'HCING', 'd') or 0 - if dDist and dDist > dOldHCI + 10 then + if dDist and dDist > dOldHCI + 0.1 then return end if dHCI > dOldHCI then diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 4420860..325e376 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -150,7 +150,8 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType, end -- eventuale segnalazione ingombro di testa o coda local dMinHIng = min( 0.5 * BD.VICE_MINH, 0.5 * b3Raw:getDimZ()) - if bUpdateIng and Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinHIng then + if bUpdateIng and Proc.Box:getDimZ() > dMinHIng and Proc.Box:getMin():getZ() < b3Raw:getMin():getZ() + dMinHIng and + not ( abs( vtN[nBigInd]:getX()) < 0.05 and vtN[nBigInd]:getY() < 0 and Proc.Box:getDimX() > 500) then if Proc.Head then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() BL.UpdateHCING( nRawId, dOffs) @@ -160,6 +161,8 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType, elseif Proc.Box:getCenter():getX() > b3Solid:getCenter():getX() then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() local dDist = b3Solid:getMax():getX() - Proc.Box:getMax():getX() + -- se concavo aumento la distanza (rimane una punta...) + if dAngT < 0 then dDist = dDist + 10 end BL.UpdateHCING( nRawId, dOffs, dDist) end end diff --git a/LuaLibs/ProcessDoubleCut.lua b/LuaLibs/ProcessDoubleCut.lua index 95790cd..391d48b 100644 --- a/LuaLibs/ProcessDoubleCut.lua +++ b/LuaLibs/ProcessDoubleCut.lua @@ -1,4 +1,4 @@ --- ProcessDoubleCut.lua by Egaltech s.r.l. 2021/02/22 +-- ProcessDoubleCut.lua by Egaltech s.r.l. 2021/02/28 -- Gestione calcolo doppi tagli di lama per Travi -- Tabella per definizione modulo @@ -270,7 +270,7 @@ function ProcessDoubleCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) local nOrthoOpposite = BL.GetNearestOrthoOpposite( vtOrthOpp, vtNorm) -- lavoro la faccia for j = 1, #vCuts[i] do - local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, nOrthoOpposite, nil, 0, BD.CUT_SIC, 0, 0, nil, b3Raw) + local bOk, sErr = BL.MakeOneFaceBySaw( vCuts[i][j], 0, sCutting, dSawDiam, nOrthoOpposite, EgtIf( bDownHead, -2, nil), 0, BD.CUT_SIC, 0, 0, nil, b3Raw) if not bOk then return bOk, sErr end diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 157fbb1..effbdd5 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -888,6 +888,8 @@ local function MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId) elseif Proc.Box:getCenter():getX() > b3Solid:getCenter():getX() then local dOffs = b3Solid:getMax():getX() - Proc.Box:getMin():getX() local dDist = b3Solid:getMax():getX() - Proc.Box:getMax():getX() + -- sempre concavo aumento la distanza (rimane una punta...) + dDist = dDist + 10 BL.UpdateHCING( nRawId, dOffs, dDist) end end