diff --git a/LuaLibs/FeatureTopology.lua b/LuaLibs/FeatureTopology.lua index 5a3a09d..4cc0573 100644 --- a/LuaLibs/FeatureTopology.lua +++ b/LuaLibs/FeatureTopology.lua @@ -3,6 +3,7 @@ -- 2023/09/26 Aggiunte topologie Strip e Cut. -- 2023/09/27 Modificata GetFacesParallelToPart per tunnel, pocket e groove 3 lati -- 2023/10/16 In GetFacesParallelToPart rimossa Pocket e aggiunto Rabbet al check solo direzione principale +-- 2023/11/03 In Classify ora si settano le AffectedFaces nella Proc, se non già presenti. -- Tabella per definizione modulo local FeatureTopology = {} @@ -163,6 +164,7 @@ end -- riconosce se Proc è una delle topologie standard e, in caso positivo, ne scrive le caratteristiche in campi specifici della Proc stessa restituendo true function FeatureTopology.Classify( Proc, b3Raw) + if not Proc.AffectedFaces then Proc.AffectedFaces = BL.GetProcessAffectedFaces( Proc) end if not Proc.Box or Proc.Box:isEmpty() then return false end diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index 689bd1b..678372a 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -81,6 +81,7 @@ -- 2023/10/03 In MakePocket aggiunto messaggio in caso si rovini il pezzo successivo. -- 2023/10/25 In LapJoint 2 facce longitudinali faccio di lama solo se taglio completamente. Altrimenti fresa. -- 2023/10/27 In Lapjoint 2 facce con angolo > 90 deg, se forzata fresa, si svuota la faccia principale e si lavora poi la faccia inclinata. +-- 2023/11/03 In MakeStaircaseStep aggiunta lavorazione smussi opzionale. -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -5642,7 +5643,6 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead) local nFct = EgtSurfTmFacetCount( vAddId[i]) local AddProc = { Id = vAddId[i], Grp = Proc.Grp, Prc = Proc.Prc, Box = b3Box, TotBox = Proc.Box, Fct = nFct, Flg = Proc.Flg, PartId = Proc.PartId} Topology.Classify( AddProc, b3Raw) - AddProc.AffectedFaces = BL.GetProcessAffectedFaces( AddProc) -- lasciare il false nel sesto parametro (perchè internamente viene verificato se diverso da nil) local bOk, sMyWarn bOk, sMyWarn, bPrevBhSideMill = MakeMoreFaces( AddProc, nPhase, nRawId, nPartId, dOvmHead, bAllWithEndCap, bPrevBhSideMill, bAllWithEndCap) @@ -5670,7 +5670,14 @@ local function TestTwoFacesDownHead( Proc) end --------------------------------------------------------------------- -local function MakeStaircaseStep( Proc, nRawId, b3Raw, b3Solid) +local function MakeStaircaseStep( Proc, nRawId, b3Raw, nPartId) + -- box della trave + local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + if not b3Solid then + local sErr = 'Error : part box not found' + EgtOutLog( sErr) + return false, sErr + end -- angolo tra le facce local _, _, _, dAng = EgtSurfTmFacetsContact( Proc.Id, 0, 1, GDB_ID.ROOT) -- l'angolo tra le facce deve essere compreso tra 80 e 90.5 deg @@ -5738,6 +5745,23 @@ local function MakeStaircaseStep( Proc, nRawId, b3Raw, b3Solid) dCutExtraSaw = - dSawThick / tan( 180 + dAng) end + -- eventuali smussi + -- recupero gruppo per geometria addizionale + local nAddGrpId = BL.GetAddGroup( nPartId) + if not nAddGrpId then + local sErr = 'Error : missing AddGroup' + EgtOutLog( sErr) + return false, sErr + end + -- verifiche per smusso + local nChamfer, dDepthCham, sErrCham = EvaluateQParam( Proc) + -- lavorazione smussi + if nChamfer > 0 then + local _, _, _, vtOrtho, _, nSurfInt = BL.GetTunnelDimension( Proc, nPartId) + local nOk, sErr = MakeChamfer( Proc, true, nAddGrpId, vtOrtho, b3Solid, nSurfInt, dDepthCham) + if nOk < 0 then return false, sErr end + end + -- fresatura della pedata per fare spazio alla lama local dMillingDepth = dVTread - dSawMaxDepth + 10 -- divido in passate orizzontali @@ -5808,18 +5832,13 @@ local function MakeStaircaseStep( Proc, nRawId, b3Raw, b3Solid) -- taglio di lama della pedata -- calcolo faceuse local nFaceUseTread = EgtIf( vtNRiser * Z_AX() > -GEO.EPS_SMALL, MCH_MILL_FU.ORTHO_DOWN, MCH_MILL_FU.ORTHO_TOP) - -- divido in passate orizzontali - local nSawStepsTread = ceil( ( dVTread - 100 * GEO.EPS_SMALL) / ( dSawMaxDepth * 0.6)) - local dSawStepTread = 0 - if nSawStepsTread > 1 then - dSawStepTread = ( dVTread - ( dSawMaxDepth * 0.6)) / ( nSawStepsTread - 1) - end + -- lavorazioni della faccia for i = 2, 1, -1 do - -- inserisco la lavorazione della faccia local dCutRadialOffsetTread = - dSawMaxDepth / 2 * ( i - 1) -- componente limite del vettore Z per lama downUp; impostata a -2 per non farla mai rientrare in quel caso local dVzLimDwnUp = -2 local bOkSawTread, sErr = Fbs.MakeOne( Proc.Id, nFacetTread, sCutting, dSawDiam, nFaceUseTread, dVzLimDwnUp, dCutRadialOffsetTread + dCutExtraSaw, 0, 0, 0, 0, nil, b3Raw) + if not bOkSawTread then return false, sErr end end -- taglio di lama dell'alzata @@ -5831,12 +5850,13 @@ local function MakeStaircaseStep( Proc, nRawId, b3Raw, b3Solid) if nSawStepsRiser > 1 then dSawStepRiser = ( dVRiser - ( dSawMaxDepth * 0.6)) / ( nSawStepsRiser - 1) end + -- lavorazioni della faccia for i = nSawStepsRiser, 1, -1 do - -- inserisco la lavorazione della faccia local dCutRadialOffsetRiser = - dSawStepRiser * ( i - 1) -- componente limite del vettore Z per lama downUp; impostata a -2 per non farla mai rientrare in quel caso local dVzLimDwnUp = -2 local bOkSawRiser, sErr = Fbs.MakeOne( Proc.Id, nFacetRiser, sCutting, dSawDiam, nFaceUseRiser, dVzLimDwnUp, dCutRadialOffsetRiser + dCutExtraSaw, 0, 0, 0, 0, nil, b3Raw) + if not bOkSawRiser then return false, sErr end end end @@ -6006,7 +6026,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead) elseif Proc.Fct == 2 then -- se V passante e attiva Q per lavorazione speciale scala if EgtGetInfo( Proc.Id, Q_STAIRCASE, 'i') == 1 and Proc.Topology == 'Groove' and Proc.IsThrough == true then - return MakeStaircaseStep( Proc, nRawId, b3Raw, b3Solid) + return MakeStaircaseStep( Proc, nRawId, b3Raw, nPartId) end -- se praticamente è lunga come la trave e sono due facce lunghe local b3Fac1 = EgtSurfTmGetFacetBBoxGlob( Proc.Id, 0, GDB_BB.STANDARD)