From 19db63babe78d3acaf9f52d44514f082174424b2 Mon Sep 17 00:00:00 2001 From: SaraP Date: Mon, 10 Aug 2026 15:07:25 +0200 Subject: [PATCH] Window : - correzioni nel posizionamento lavorazioni ferramenta. --- Designing/WinLib/WinCalculate.lua | 46 ++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/Designing/WinLib/WinCalculate.lua b/Designing/WinLib/WinCalculate.lua index c175cd5..412ea82 100644 --- a/Designing/WinLib/WinCalculate.lua +++ b/Designing/WinLib/WinCalculate.lua @@ -6757,7 +6757,7 @@ end ---------------------------------------------------------------------------------- -- funzione che aggiorna il solido principale con quello associato ad una lavorazione partendo dalla sua curva -local function UpdateSolidWithProcessingCrv( nProcId, nSolidId, nLayerId) +local function UpdateSolidWithProcessingCrv( nProcId, nSolidId, nLayerId, bExtend) if not EgtCurveIsClosed( nProcId) then return @@ -6771,9 +6771,21 @@ local function UpdateSolidWithProcessingCrv( nProcId, nSolidId, nLayerId) nRefCrv = EgtCopyGlob( nProcId, nLayerId) EgtApproxCurve( nRefCrv, GDB_CA.LINES, s_dSimplSolidApprox) end - local nProcSolidId = EgtSurfTmByRegionExtrusion( nLayerId, nRefCrv, ( dThick - 0.05) * vtExtr) - -- piccola traslazione per non essere a filo con la superficie - EgtMove( nProcSolidId, 0.05 * vtExtr) + + -- calcolo traslazione per non essere a filo con superficie + local dMove = 0 + if bExtend then + -- estensione delle dimensioni del pezzo per essere sicuri di arrivare sul bordo + local nPartId = EgtGetParent( EgtGetParent( nSolidId)) + local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local b3Profile = GetProfileLocalBox( nProfileId) + dMove = max( b3Profile:getDimX(), b3Profile:getDimY()) + end + dMove = dMove + 0.05 + + local nProcSolidId = EgtSurfTmByRegionExtrusion( nLayerId, nRefCrv, ( dThick - dMove - 0.05) * vtExtr) + EgtMove( nProcSolidId, dMove * vtExtr) -- sottraggo al solido EgtSurfTmSubtract( nSolidId, nProcSolidId) @@ -8821,7 +8833,11 @@ local function CalcHdwMachining( tMachining, SashList) -- setto info di lavorazione EgtSetInfo( nPocketOutlineId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) EgtSetInfo( nPocketOutlineId, WIN_PRC_PROFILE_INFO, WIN_PRC_PROFILE_TYPE.GENERIC) - EgtSetInfo( nPocketOutlineId, WIN_PRC_SIDE, WIN_PRC_SIDETYPE.IN) + if sPart == 'TELAIO' then + EgtSetInfo( nPocketOutlineId, WIN_PRC_SIDE, WIN_PRC_SIDETYPE.IN) + else + EgtSetInfo( nPocketOutlineId, WIN_PRC_SIDE, WIN_PRC_SIDETYPE.OUT) + end EgtModifyCurveExtrusion( nPocketOutlineId, Z_AX()) EgtModifyCurveThickness( nPocketOutlineId, - dHeight) -- porto la lavorazione in globale @@ -8829,20 +8845,25 @@ local function CalcHdwMachining( tMachining, SashList) EgtSetName( nPocketOutlineId, WIN_PRC_HDW) -- aggiornamento del solido if s_bCalcSolid then - UpdateSolidWithProcessingCrv( nPocketOutlineId, nMainExtrusionId, nSolidLayerId) + UpdateSolidWithProcessingCrv( nPocketOutlineId, nMainExtrusionId, nSolidLayerId, true) end elseif vMacro[1] == 'TASCA' then + elseif vMacro[1] == 'VITE' then local dRadius = 1.5 local dDepth = 2 if vMacro[2] == 'CANALINO' then dRadius = 2 - dDepth = 3 + dDepth = 6 elseif vMacro[2] == 'ANTA' then dRadius = 2.5 dDepth = 4 end + if sPart == 'ANTA' then + -- la posizione è data sul riferimento ( parte più esterna del canalino), ma la posizione corretta è sulla parte più interna del canalino + ptCenter:setZ( -11.5) + end local nHoleId = EgtCircle( nProcLayerId, ptCenter, dRadius) EgtMove( nHoleId, Z_AX()) EgtModifyCurveExtrusion( nHoleId, Z_AX()) @@ -8857,10 +8878,15 @@ local function CalcHdwMachining( tMachining, SashList) local nHoleId = EgtCircle( nProcLayerId, ptCenter, dRadius) -- setto info di lavorazione EgtModifyCurveExtrusion( nHoleId, Z_AX()) - -- TODO : come gestire profondità non definita? - local dDepth = tonumber(25) + local dDepth if #vMacro == 3 then dDepth = tonumber( vMacro[3]) + else + -- se profondità non definita ( e.g. fori per maniglia) faccio arrivare il foro sul canalino della ferramenta + local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local dGapDeltaZ = EgtGetInfo( nProfileId, WIN_GAPDELTAZ, 'd') -- porta a metà del canalino + dDepth = dGapDeltaZ + 6.15 end EgtModifyCurveThickness( nHoleId, - dDepth) EgtSetColor( nHoleId, EgtStdColor( 'GRAY')) @@ -8870,7 +8896,7 @@ local function CalcHdwMachining( tMachining, SashList) EgtTransform( nHoleId, frHdw) -- aggiornamento del solido if s_bCalcSolid then - UpdateSolidWithProcessingCrv( nHoleId, nMainExtrusionId, nSolidLayerId) + UpdateSolidWithProcessingCrv( nHoleId, nMainExtrusionId, nSolidLayerId, true) end end end