From 13f0545ebe7cd9d0ed37be7537a6bada2662fe77 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 2 Apr 2025 11:01:04 +0200 Subject: [PATCH 1/5] =?UTF-8?q?In=20HeadCut=20e=20Split,=20si=20aggiungono?= =?UTF-8?q?=20tagli=20extra=20orizzontali=20solo=20se=20il=20materiale=20d?= =?UTF-8?q?a=20tagliare=20=C3=A8=20meno=20di=20un=20cubetto.=20Altrimenti?= =?UTF-8?q?=20ci=20sarebbe=20collisione.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/ProcessHeadCut.lua | 10 ++++++---- LuaLibs/ProcessSplit.lua | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/LuaLibs/ProcessHeadCut.lua b/LuaLibs/ProcessHeadCut.lua index 1937769..be5a112 100644 --- a/LuaLibs/ProcessHeadCut.lua +++ b/LuaLibs/ProcessHeadCut.lua @@ -406,6 +406,9 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut dSawThick2 = EgtTdbGetCurrToolParam( MCH_TP.THICK) or dSawThick2 end end + -- determino se lo spessore del materiale da rimuovere è eccessivo e quindi vanno fatti più tagli con offset + local nCuts = max( ceil( dOvmHead / (( BD.MAX_LEN_SCRAP_START or BD.MAX_LEN_SCRAP) + 0.5)), 1) + local dOffsL = dOvmHead / nCuts -- caratteristiche taglio local dDimYRef = EgtIf( b3Raw:getDimZ() < BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL, dMaxDepth, abs( BD.MAX_DIM_HTCUT_HBEAM)) local bBigSectionCut = ( b3Raw:getDimY() > 2 * dDimYRef - BD.CUT_EXTRA_MIN + 10 * GEO.EPS_SMALL) and @@ -417,7 +420,9 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut -- verifico necessità di tagli aggiuntivi orizzontali o verticali local dMinOvmHeadForAddeddCuts = 10.123 local bNeedVerticalAddedCuts = ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL) - local bNeedHorizontalAddedCuts = ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and not bBigSectionCut and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL) + local bNeedHorizontalAddedCuts = ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and + not bBigSectionCut and ( dOvmHead > dMinOvmHeadForAddeddCuts - 10 * GEO.EPS_SMALL) and + dOffsL < BD.MAX_DIM_DICE -- dati lavorazioni sopra e sotto local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth} local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dMaxDepth2, dSawThick = dSawThick2} @@ -429,9 +434,6 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut if not bNeedHCut and AreSameVectorApprox( vtN, X_AX()) and abs( ptC:getX() - b3Raw:getMax():getX()) < 10 * GEO.EPS_SMALL then return true end - -- determino se lo spessore del materiale da rimuovere è eccessivo e quindi vanno fatti più tagli con offset - local nCuts = max( ceil( dOvmHead / (( BD.MAX_LEN_SCRAP_START or BD.MAX_LEN_SCRAP) + 0.5)), 1) - local dOffsL = dOvmHead / nCuts -- se taglio per sezioni alte e larghe if bBigSectionCut then if dOvmHead > 0 then diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index 5c1ad67..b221d5d 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -661,7 +661,10 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt -- determino la necessità di tagli aggiuntivi local dMinTailScrapForAdditionalCuts = 10.123 local bNeedVerticalAddedCuts = not bSplit and ( Proc.Face[1].WidthTrimmed > BD.MAX_LEN_DICE) and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL) - local bNeedHorizontalAddedCuts = not bSplit and ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and not bBigSectionCut and ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL) + local bNeedHorizontalAddedCuts = not bSplit and not bBigSectionCut and + ( Proc.Face[1].HeightTrimmed > ( BD.MIN_HEIGHT_ADDED_CUTS or BD.MAX_LEN_DICE)) and + ( dLenEndRaw > dMinTailScrapForAdditionalCuts - 10 * GEO.EPS_SMALL) and + dOffsL < BD.MAX_DIM_DICE -- dati lavorazioni sopra e sotto local Cutting1Data = { sCutting = sCutting, dSawDiam = dSawDiam, dMaxDepth = dSawMaxDepth, dSawThick = dSawThick, dMaxVertDepth = dMaxVertDepth} local Cutting2Data = { sCutting = sCutting2, dSawDiam = dSawDiam2, dMaxDepth = dSawMaxDepth2, dSawThick = dSawThick2} From 268e57812578e9b73d9637f83fb74bdcfb7d6af6 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Thu, 3 Apr 2025 12:04:28 +0200 Subject: [PATCH 2/5] - in Cut.Classify correzione --- LuaLibs/ProcessCut.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LuaLibs/ProcessCut.lua b/LuaLibs/ProcessCut.lua index 24556f9..e7072f3 100644 --- a/LuaLibs/ProcessCut.lua +++ b/LuaLibs/ProcessCut.lua @@ -92,7 +92,7 @@ function ProcessCut.Classify( Proc, b3Raw) -- calcolo l'ingombro orizzontale della faccia local _, DimH, DimV = BL.GetFaceHvRefDim( Proc.Id, 0) -- confronto questo ingombro con il doppio della massima dimensione del DiceCut (impossibile lavorare sotto da sopra se più di 2 tagli oppure se tipo PF, taglio inclinato in Y e non taglio singolo orizzontale) - if DimH > 2 * BD.MAX_DIM_DICE or ( BD.C_SIMM and ( abs( vtN:getY()) > 0.1 or bDownCut) and dMaxMat < DimH + BD.CUT_EXTRA) then + if DimH > 2 * BD.MAX_DIM_DICE or ( BD.C_SIMM and ( abs( vtN:getY()) > 0.1) and dMaxMat < DimH + BD.CUT_EXTRA) then return true, true end end From 777ba74e4df880671b8230a822f2e3eadc4a4773 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 3 Apr 2025 15:28:31 +0200 Subject: [PATCH 3/5] =?UTF-8?q?-=20In=20FBS=20errore=20'TwoFacesBySaw=20fr?= =?UTF-8?q?om=20bottom=20impossible'=20solo=20se=20entrambe=20le=20facce?= =?UTF-8?q?=20non=20sono=20ok=20-=20In=20LapJoint,=20si=20controlla=20dire?= =?UTF-8?q?zione=20faccia=201=20e=20larghezza=20faccia=202=20(e=20reciproc?= =?UTF-8?q?i)=20per=20capire=20se=20si=20pu=C3=B2=20lavorare=20con=20lama?= =?UTF-8?q?=20testa=20sotto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/FacesBySaw.lua | 2 +- LuaLibs/ProcessLapJoint.lua | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 2aa124b..20c0798 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -643,7 +643,7 @@ function FacesBySaw.MakeTwo( Proc, nPhase, nRawId, nPartId, dOvmHead, sCutType, local bFaceOk = {} bFaceOk[1] = ( vtN[1]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[1]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[1].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL)) bFaceOk[2] = ( vtN[2]:getZ() >= ( BD.CUT_VZ_MIN or BD.NZ_MINB) or abs( vtN[2]:getY()) < 0.174 or ( Proc.AffectedFaces.Left ~= Proc.AffectedFaces.Right and Proc.Face[2].Elevation < dMaxDepth - 10 * GEO.EPS_SMALL)) - if not bDownHead and ( not bFaceOk[1] or not bFaceOk[2]) then + if not bDownHead and not bFaceOk[1] and not bFaceOk[2] then local sErr = 'Error : TwoFacesBySaw from bottom impossible' EgtOutLog( sErr) return false, sErr diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index dbc2862..21a0015 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -7088,11 +7088,9 @@ local function TestTwoFacesDownHead( Proc) if not ( Proc.Face[1].IsTooDownwardForTopBlade or Proc.Face[2].IsTooDownwardForTopBlade) then bDownHeadBlade = false else - for i = 1, Proc.Fct do - if Proc.Face[i].IsTooDownwardForTopBlade and ( not Proc.IsTopDownRabbet or Proc.Face[i].IsTooWideForTopBlade) then - bDownHeadBlade = true - break - end + if ( Proc.Face[1].IsTooDownwardForTopBlade and Proc.Face[2].IsTooWideForTopBlade) or + ( Proc.Face[2].IsTooDownwardForTopBlade and Proc.Face[1].IsTooWideForTopBlade) then + bDownHeadBlade = true end end end From bf5c12ec8a4da15c825eb45d9a76a7a9848d74aa Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 3 Apr 2025 16:06:11 +0200 Subject: [PATCH 4/5] =?UTF-8?q?In=20FBS=20non=20si=20utilizza=20il=20vtFac?= =?UTF-8?q?eUse=20perch=C3=A8=20in=20caso=20di=20edge=20a=2045=C2=B0=20sba?= =?UTF-8?q?glia=20a=20concatenare=20edge=20da=20lavorare.=20Si=20=C3=A8=20?= =?UTF-8?q?tornati=20alla=20gestione=20vecchia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaLibs/FacesBySaw.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/LuaLibs/FacesBySaw.lua b/LuaLibs/FacesBySaw.lua index 20c0798..58d0145 100644 --- a/LuaLibs/FacesBySaw.lua +++ b/LuaLibs/FacesBySaw.lua @@ -233,8 +233,12 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5) local bDownUp = ( vtN:getZ() < dVzLimDwnUp) + -- Commentato perchè il vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile. Si passano le direzioni normali agli assi. + --local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT) + -- linea o bilinea di lavorazione - local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT) + local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, BL.GetVersRef( nOrthoOpposite), GDB_ID.ROOT) + if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then local sWarn = 'Face ' .. string.format( '%d,%d', nSurfId, nFacet) .. ' skipped : too small' EgtOutLog( sWarn, 1) @@ -547,8 +551,9 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw EgtSetMachiningGeometry( {{ nSurfId, nFacet}}) -- imposto uso faccia EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse) - local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';' - EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse) + -- Commentato perchè il vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile. + -- local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';' + -- EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse) -- imposto posizione braccio porta testa EgtSetMachiningParam( MCH_MP.SCC, nSCC) -- imposto inversione e lato correzione From c5a6300d1584b105a4783fe570290b06d62df151 Mon Sep 17 00:00:00 2001 From: "luca.mazzoleni" Date: Fri, 4 Apr 2025 10:39:15 +0200 Subject: [PATCH 5/5] update log --- UpdateLog.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UpdateLog.txt b/UpdateLog.txt index f22aa2e..8d9ccd3 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,8 +1,8 @@ ==== Beam Update Log ==== -Versione 2.7d1 (01/04/2025) +Versione 2.7d1 (04/04/2025) - Fixed : in PreDrill piccola correzione -- Fixed : nei tagli corretto calcolo direzione di lavorazione +- Fixed : nei tagli varie correzioni - Fixed : in HeadCut e Split corretto calcolo lunghezza extra di taglio Versione 2.7c2 (24/03/2025)