diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 2d76427..7e23604 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -436,8 +436,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b local dPartWidth = CurrentPart.b3PartOriginal:getDimY( ) local dPartHeight = CurrentPart.b3PartOriginal:getDimZ( ) - -- --- LOGICA ON-THE-FLY PER dPosX (PEZZO CORRENTE E SUCCESSIVO) --- - -- Se il pezzo corrente non ha coordinata, la calcoliamo come fallback standard + -- Se il pezzo corrente non ha coordinata, si calcola da OvmMid if ( not CurrentPart.dPosX) then if ( i == 1) then CurrentPart.dPosX = dOvmHead @@ -446,7 +445,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b end end - -- Se il pezzo SUCCESSIVO non ha coordinata, la pre-calcoliamo per il look-ahead + -- Se il pezzo SUCCESSIVO non ha coordinata, si calcola da OvmMid if ( i < #PARTS and not PARTS[i + 1].dPosX) then PARTS[i + 1].dPosX = CurrentPart.dPosX + dPartLen + dOvmMid end @@ -454,33 +453,30 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b local dStartOffset = dNextStartOffset local dEndOffset = ( i == #PARTS ) and 0 or dOvmMid - -- LOGICA LOOK-AHEAD: Analisi del gap reale per la ripartizione specchiata + -- Gap reale tra i pezzi (può essere negativo in caso di compenetrazione nesting obliqui) if ( i < #PARTS ) then local dTotalGap = PARTS[i + 1].dPosX - CurrentPart.dPosX - dPartLen if ( dTotalGap > dOvmMid ) then - dEndOffset = dOvmMid -- Max 5.4mm sulla coda (lato sinistro del grezzo) - dNextStartOffset = dTotalGap - dOvmMid -- Il residuo sulla testa del prossimo (lato destro) + dEndOffset = dOvmMid + dNextStartOffset = dTotalGap - dOvmMid else - -- Gestione automatica sotto-soglia o compenetrazione geometrica (Nesting Obliquo) + -- Gap minore dello spessore lama (compenetrazione per nesting obliqui) dEndOffset = dTotalGap dNextStartOffset = 0 end end - -- MATEMATICA CORRETTA PER X CAD INVERTITA: - -- Il grezzo idRaw si estende verso destra. Spostando il pezzo internamente di dEndOffset (dDelta), - -- lasciamo dEndOffset a sinistra (coda) e matematicamente dStartOffset a destra (testa). - local dCrawLen = dPartLen + dStartOffset + dEndOffset + local dCurrentRawLen = dPartLen + dStartOffset + dEndOffset local dDelta = dEndOffset local dStartPos = CurrentPart.dPosX - dStartOffset local bIsSectionOk = ( ( abs( dPartWidth - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartHeight - dRawH ) < 100 * GEO.EPS_SMALL ) or ( abs( dPartHeight - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartWidth - dRawH ) < 100 * GEO.EPS_SMALL ) ) - if ( bIsSectionOk and ( dStartPos + dCrawLen <= dRawL + GEO.EPS_SMALL ) ) then + if ( bIsSectionOk and ( dStartPos + dCurrentRawLen <= dRawL + GEO.EPS_SMALL ) ) then -- 5. Creazione e Posizionamento del Contenitore RawPart - CurrentPart.idRaw = EgtAddRawPart( Point3d( 0, 0, 0 ), dCrawLen, dRawW, dRawH, BeamData.RAWCOL ) + CurrentPart.idRaw = EgtAddRawPart( Point3d( 0, 0, 0 ), dCurrentRawLen, dRawW, dRawH, BeamData.RAWCOL ) EgtMoveToCornerRawPart( CurrentPart.idRaw, BeamData.ptOriXR, BeamData.dPosXR ) EgtMoveRawPart( CurrentPart.idRaw, Vector3d( -dStartPos, 0, 0 ) ) @@ -545,7 +541,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b CurrentPart.CombinationList = BeamExec.GetAvailableCombinations( CurrentPart, bIsFlipRot ) -- Avanzamento calcolato sulla coordinata reale di fine RawPart (estremità sinistra sulla barra) - dMaxX = max( dMaxX, dStartPos + dCrawLen ) + dMaxX = max( dMaxX, dStartPos + dCurrentRawLen ) CurrentPart.dRestLength = dRawL - dMaxX idPrevRaw = CurrentPart.idRaw else