diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index eba4031..c530a2e 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -1,4 +1,4 @@ --- ProcessLapJoint.lua by Egaltech s.r.l. 2019/11/12 +-- ProcessLapJoint.lua by Egaltech s.r.l. 2019/11/14 -- Gestione calcolo mezzo-legno per Travi -- 2019/10/08 Agg. gestione OpenPocket. @@ -485,28 +485,35 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, return false, sErr end EgtOutLog( 'Adjac=' .. table.concat( vAdj, ','), 3) - -- Riordino le dimensioni per avere dH > dV - if dH < dV then - dH, dV = dV, dH - end - -- Cerco una faccia adiacente alla principale sul lato lungo + -- Cerco una faccia adiacente alla principale sul lato più lungo local nFacAdj + local dMaxLen = 0 for i = 1, #vAdj do if vAdj[i] >= 0 then local _, ptP1, ptP2, _ = EgtSurfTmFacetsContact( Proc.Id, nFacInd, vAdj[i], GDB_ID.ROOT) local dLen = dist( ptP1, ptP2) - if dLen > 0.5 * dH then + if dLen > dMaxLen then nFacAdj = vAdj[i] + dMaxLen = dLen EgtOutLog( string.format( 'Adjac=%d Len=%.3f H=%.3f V=%.3f', vAdj[i], dLen, dH, dV), 3) - break end end end + if not nFacAdj then + local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' long adjacent face not found' + EgtOutLog( sErr) + 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) + if abs( vtN * rfFac:getVersX()) > abs( vtN * rfFac:getVersY()) then + dH, dV = dV, dH + end -- Determino se estremi aperti o chiusi local bOpenStart = false local bOpenEnd = false local vAdj2 = EgtSurfTmFacetAdjacencies( Proc.Id, nFacAdj)[1] - EgtOutLog( 'Adj2=' .. table.concat( vAdj2, ' ,')) + EgtOutLog( 'Adj2=' .. table.concat( vAdj2, ' ,'), 3) for j = 1, #vAdj2 do if vAdj2[j] == nFacInd then -- Se non esiste faccia adiacente a lato precedente -> inizio aperto @@ -551,15 +558,19 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then dSawDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dSawDiam dSawThick = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick - dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth end end + if dSawThick > dV + 10 * GEO.EPS_SMALL then + local sErr = 'Error on process ' .. tostring( Proc.Id) .. ' sawblade too thick' + EgtOutLog( sErr) + return false, sErr + end -- Calcolo uso faccia local nFaceUse = BL.GetNearestOrthoOpposite( rfFac:getVersZ()) -- ingombro del grezzo local b3Raw = EgtGetRawPartBBox( nRawId) -- Eseguo i tagli - local nStep = ceil( dV / dSawThick) + local nStep = ceil( ( dV - 10 * GEO.EPS_SMALL) / dSawThick) local dStep = 0 if nStep > 1 then dStep = ( dV - dSawThick) / ( nStep - 1) @@ -605,7 +616,7 @@ local function MakeByChainOrSaw( Proc, nPhase, nRawId, nPartId, nFacInd, rfFac, return false, sErr end -- Verifico se necessarie più passate - local nStep = ceil( ( dV - 0.5) / dSawThick) + local nStep = ceil( ( dV - 10 * GEO.EPS_SMALL) / dSawThick) local dStep = 0 if nStep > 1 then dStep = ( dV - dSawThick) / ( nStep - 1)