diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index 19c4e96..88e806d 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -706,17 +706,17 @@ end function FeatureLib.GetFeatureVolume( Proc, Part) local dProcVolume = 0 - local nAddGrpId = BeamLib.GetAddGroup( Part.id) - if not nAddGrpId then + local idAddGroup = BeamLib.GetAddGroup( Part.id) + if not idAddGroup then -- TODO gestire meglio questo errore. Non conviene creare e verificare all'inizio se il gruppo esiste? EgtOutLog( 'Error : missing AddGroup') return 0 end - local idProcCopy = EgtCopyGlob( Proc.id, nAddGrpId) or GDB_ID.NULL + local idProcCopy = EgtCopyGlob( Proc.id, idAddGroup) or GDB_ID.NULL local b3PartCopy = BBox3d( Part.b3Part) b3PartCopy:expand( -100 * GEO.EPS_SMALL) - local idPartCopy = EgtSurfTmBBox( nAddGrpId, b3PartCopy , false, GDB_RT.GLOB) + local idPartCopy = EgtSurfTmBBox( idAddGroup, b3PartCopy , false, GDB_RT.GLOB) EgtSurfTmSubtract( idPartCopy, idProcCopy) dProcVolume = EgtSurfVolume( idPartCopy) diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index dbb99f9..7911981 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -1000,7 +1000,6 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) end elseif Machining.nType == MCH_MY.POCKETING then -- TODO le chiamate alla pocketing vanno unificate e uniformate - -- TODO il calcolo va aggiustato con il confronto tra volume della feature e volume svuotato perchè i percorsi reali sono trimmati fuori dal grezzo local ProcTm = FeatureLib.GetProcFromTrimesh( Machining.Geometry[1][1], Part) local dDepthToMachine = min( ProcTm.Faces[Machining.Geometry[1][2] + 1].dElevation, ( Machining.dMaxElev or ProcTm.Faces[Machining.Geometry[1][2] + 1].dElevation)) - ( max( 0, Machining.dResidualDepth or 0)) local nSteps = ceil( ( dDepthToMachine - 50 * GEO.EPS_SMALL) / TOOLS[Machining.nToolIndex].dStep) @@ -1013,11 +1012,29 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) EgtCurveCompoSetTempProp( idFaceContour, ProcTm.Faces[Machining.Geometry[1][2] + 1].Edges[i].id, 1) end end + -- dal momento che la funzione EgtPocketing non considera il grezzo, nei casi ottimizzati si deve correggere l'offset + local idTestCurve = EgtCopyGlob( idFaceContour, nAddGroupId ) + local bIsOptimizedPocketing = ( TOOLS[Machining.nToolIndex].dDiameter > TOOLS[Machining.nToolIndex].dSideStep - 10 * GEO.EPS_SMALL) + and EgtOffsetCurve( idTestCurve, -TOOLS[Machining.nToolIndex].dDiameter / 2 - 10 * GEO.EPS_SMALL) + if not bIsOptimizedPocketing then + local dOffset = TOOLS[Machining.nToolIndex].dDiameter / 2 + 10 * GEO.EPS_SMALL + if TOOLS[Machining.nToolIndex].dSideStep < TOOLS[Machining.nToolIndex].dDiameter / 2 - 10 * GEO.EPS_SMALL then + dOffset = TOOLS[Machining.nToolIndex].dDiameter - TOOLS[Machining.nToolIndex].dSideStep + end + EgtOffsetCurve( idFaceContour, dOffset) + -- si settano tutti i lati chiusi per la curva offsettata + local _, nFaceCountourCurveCount = EgtCurveDomain( idFaceContour) + for i = 1, nFaceCountourCurveCount do + EgtCurveCompoSetTempProp( idFaceContour, i - 1, 0) + end + end + -- calcolo percorso di svuotatura replicando il calcolo che fa la svuotatura local idPocketingPath = EgtPocketing( idFaceContour, TOOLS[Machining.nToolIndex].dDiameter / 2, TOOLS[Machining.nToolIndex].dSideStep, 0, Machining.nSubType, true, nAddGroupId) local dPocketingPathLength = EgtCurveLength( idPocketingPath) -- calcolo lunghezze e tempi totali if dPocketingPathLength then dLengthToMachineAllStepsWithLeadInOut = dPocketingPathLength * nSteps + -- TODO da aggiungere correzione volume effettivamente lavorato dTimeToMachineTotal = dLengthToMachineAllStepsWithLeadInOut / dToolFeed -- se percorso non calcolato, si settano dati molto alti else @@ -1027,6 +1044,7 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part) -- le geometrie create si settano da cancellare EgtSetLevel( idFaceContour, GDB_LV.TEMP) EgtSetLevel( idPocketingPath, GDB_LV.TEMP) + EgtSetLevel( idTestCurve, GDB_LV.TEMP) else error( 'GetTimeToMachineAllStepsWithLeadInOut : unknown machining type') end diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index 24af66a..a1f0b23 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -97,6 +97,7 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, Part) LeadIn.dPerpDistance = 1 LeadOut.dPerpDistance = 1 else + -- TODO da rimuovere, già inserito in GetLeadInOutType if abs( Machining.vtEdgeDirection:getZ()) > 0.707 then LeadIn.dPerpDistance = 1 LeadOut.dPerpDistance = 1