diff --git a/LuaLibs/ProcessDtMortise.lua b/LuaLibs/ProcessDtMortise.lua index f46e00b..8dd4887 100644 --- a/LuaLibs/ProcessDtMortise.lua +++ b/LuaLibs/ProcessDtMortise.lua @@ -638,20 +638,44 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- sistemo il lato e la direzione di lavoro EgtSetMachiningParam( MCH_MP.WORKSIDE, EgtIf( bCW, MCH_MILL_WS.LEFT, MCH_MILL_WS.RIGHT)) EgtSetMachiningParam( MCH_MP.INVERT, EgtIf( bCW, false, true)) + local ptS = EgtSP( AuxId, GDB_ID.ROOT) + local ptE = EgtEP( AuxId, GDB_ID.ROOT) -- in presenza di pocket imposto dati ingresso e uscita if bPocket then + -- recupero il contorno della tasca (seconda curva ausiliaria) + local vAuxId = EgtGetInfo( Proc.Id, 'AUXID', 'vi') + -- si prende il centro del percorso da svuotare ( non si controlla che sia presente perchè già verificata in precedenza) + local ptPocketCenter = EgtGP( Proc.Id + vAuxId[2], GDB_ID.ROOT) + -- calcolo componente tangente e lineare di ingresso + local vtS = EgtSV( Proc.Id + vAuxId[1], GDB_ID.ROOT) -- vettore entrante percorso + local vtOffS = EgtSV( Proc.Id + vAuxId[1], GDB_ID.ROOT) ; vtOffS:rotate( vtExtr, 90) -- vettore da punto iniziale a centro utensile + local vtStartToCenter = ptPocketCenter - ( ptS + ( vtOffS * ( dToolDiam/2))) -- vettore da centro utensilenel punto iniziale e centro del percorso da svuotare + local dLenStartToCenter = vtStartToCenter:len() -- distanza da centro utensile a centro del percorso da svuotare + local dStartTangComp = abs( vtStartToCenter * vtS) -- prodotto scalare tra vettore entrante e vettore tra centro utensilee percordo da svuotare (componente tangente) + local dStartPerpComp = sqrt( dLenStartToCenter^2 - dStartTangComp^2) -- pitagora tra componente tangente e la lunghezza tra i due centri + -- calcolo componente tangente e lineare di uscita + local vtE = EgtEV( Proc.Id + vAuxId[1], GDB_ID.ROOT) + local vtOffE = EgtEV( Proc.Id + vAuxId[1], GDB_ID.ROOT) ; vtOffE:rotate( vtExtr, 90) + local vtEndToCenter = ptPocketCenter - ( ptE + ( vtOffE * ( dToolDiam/2))) + local dLenEndToCenter = vtEndToCenter:len() + local dEndTangComp = abs( vtEndToCenter * vtE) + local dEndPerpComp = sqrt( dLenEndToCenter^2 - dEndTangComp^2) + EgtSetMachiningParam( MCH_MP.STARTPOS, 5) EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.TANGENT) - EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.AS_LI) - EgtSetMachiningParam( MCH_MP.STARTADDLEN, 5) - EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) - EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2) - EgtSetMachiningParam( MCH_MP.LIPERP, 5) + EgtSetMachiningParam( MCH_MP.LITANG, dStartTangComp) + EgtSetMachiningParam( MCH_MP.LIPERP, dStartPerpComp) EgtSetMachiningParam( MCH_MP.LIELEV, 0) + + EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LI.TANGENT) + EgtSetMachiningParam( MCH_MP.LOTANG, dEndTangComp) + EgtSetMachiningParam( MCH_MP.LOPERP, dEndPerpComp) + EgtSetMachiningParam( MCH_MP.LOELEV, 0) + + EgtSetMachiningParam( MCH_MP.STARTADDLEN, 0) + EgtSetMachiningParam( MCH_MP.ENDADDLEN, 0) -- altrimenti verifico se sono bilanciati ingresso e uscita, per evitare inizio o fine nel legno else - local ptS = EgtSP( AuxId, GDB_ID.ROOT) - local ptE = EgtEP( AuxId, GDB_ID.ROOT) local dDistS = abs( ( ptS - rfDtMrt:getOrigin()) * rfDtMrt:getVersX()) local dDistE = abs( ( ptE - rfDtMrt:getOrigin()) * rfDtMrt:getVersX()) local dIni, dFin = EgtCurveDomain( AuxId)