diff --git a/LuaLibs/ProcessLapJoint.lua b/LuaLibs/ProcessLapJoint.lua index c519364..6294f4c 100644 --- a/LuaLibs/ProcessLapJoint.lua +++ b/LuaLibs/ProcessLapJoint.lua @@ -49,6 +49,7 @@ -- 2022/06/29 Migliorate lavorazioni con fresatura di lato per L30 se parametro Q03=2. Ora con 4 facce / 3 facce a L può entrare una fresa grande fino al doppio dell'altezza della tasca / doppio della dimensione minima. -- 2022/07/05 Modifiche per sega a catena di testa e relativa MaxElev. -- 2022/07/12 In MakeByChainOrSaw aggiunto check per feature L20 usata in modo improprio e, nel caso, si passa a una lavorazione tasca. +-- 2022/07/19 Profondamente semplificata la funzione SetOpenSide. Modificata la MakeMoreFaces per cercare sempre OpenPocket in determinate condizioni. -- Tabella per definizione modulo local ProcessLapJoint = {} @@ -1324,142 +1325,157 @@ end --------------------------------------------------------------------- local function SetOpenSide( nPathInt, vtOrtho, b3Solid, nAddGrpId, nStartPoint) - -- fondo tra loro le curve compatibili EgtMergeCurvesInCurveCompo( nPathInt) local nStartIdEnt, nNumEnt = EgtCurveDomain( nPathInt) local pLastPIni, pLastPEnd - -- faccio una copia della curva e la esplodo if nStartIdEnt then - -- prendo i punti + -- ciclo i lati della curva e controllo per ognuno se giace in uno dei piani limite del pezzo: se sì allora il lato è aperto for i = 1, nNumEnt do local pPini = EgtUP( nPathInt, (i-1), GDB_RT.GLOB) local pPend = EgtUP( nPathInt, EgtIf( i == nNumEnt, 0, i), GDB_RT.GLOB) - -- Se normale lungo la Z considero il box in X e Y - if abs(vtOrtho:getZ()) > 0.999 then - -- se corrisponde a X - if ( abs( pPini:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - -- altrimenti se corrisponde a Y - elseif ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - end - -- altrimenti se normale lungo la Y considero il box in X e Z - elseif abs(vtOrtho:getZ()) < 0.001 and abs(vtOrtho:getY()) > 0.999 then - -- se corrisponde a X - if ( abs( pPini:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - -- altrimenti se corrisponde a Z - elseif ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - end - -- caso che non dovrebbe mai capitare ma gestito per completezza - -- altrimenti se normale lungo la X considero il box in Y e Z - elseif abs(vtOrtho:getZ()) < 0.001 and abs(vtOrtho:getX()) > 0.999 then - -- se corrisponde a Y - if ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - -- altrimenti se corrisponde a Z - elseif ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - end - -- se asse Z orizzontale verifico se si avvicina piú a Y - elseif abs(vtOrtho:getZ()) < 0.001 then - if abs(vtOrtho:getY()) > 0.75 then - -- se corrisponde a Z - if ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - end - end - -- se asse Y a 0 (fresa ne davanti ne dietro) verifico se si avvicina piú a Z+ - elseif abs(vtOrtho:getY()) < 0.001 then - if abs(vtOrtho:getZ()) > 0.75 then - -- se corrisponde a Y - if ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or - ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then - -- setto l'entità open - local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' - if #sActInfo > 0 then - EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) - else - EgtSetInfo( nPathInt, 'OPEN', (i-1)) - end - -- prendo i punti per eventuale modifica del punto di inizio percorso - pLastPIni = pPini - pLastPEnd = pPend - end + if ( abs( pPini:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL) or + ( abs( pPini:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL) or + ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or + ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) or + ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or + ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then + -- scrivo nelle proprietà della curva quali sono i lati aperti + local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' + if #sActInfo > 0 then + -- se ci sono già altri lati aperti + EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) + else + -- se è l'unico + EgtSetInfo( nPathInt, 'OPEN', (i-1)) end +-- inizio - 20220719 codice vecchio mantenuto per backup +-- -- Se normale lungo la Z considero il box in X e Y +-- if abs(vtOrtho:getZ()) > 0.999 then +-- -- se corrisponde a X +-- if ( abs( pPini:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- -- altrimenti se corrisponde a Y +-- elseif ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- end +-- -- altrimenti se normale lungo la Y considero il box in X e Z +-- elseif abs(vtOrtho:getZ()) < 0.001 and abs(vtOrtho:getY()) > 0.999 then +-- -- se corrisponde a X +-- if ( abs( pPini:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMax():getX()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL and abs( pPend:getX() - b3Solid:getMin():getX()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- -- altrimenti se corrisponde a Z +-- elseif ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- end +-- -- caso che non dovrebbe mai capitare ma gestito per completezza +-- -- altrimenti se normale lungo la X considero il box in Y e Z +-- elseif abs(vtOrtho:getZ()) < 0.001 and abs(vtOrtho:getX()) > 0.999 then +-- -- se corrisponde a Y +-- if ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- -- altrimenti se corrisponde a Z +-- elseif ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- end +-- -- se asse Z orizzontale verifico se si avvicina piú a Y +-- elseif abs(vtOrtho:getZ()) < 0.001 then +-- if abs(vtOrtho:getY()) > 0.75 then +-- -- se corrisponde a Z +-- if ( abs( pPini:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMax():getZ()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL and abs( pPend:getZ() - b3Solid:getMin():getZ()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- end +-- end +-- -- se asse Y a 0 (fresa ne davanti ne dietro) verifico se si avvicina piú a Z+ +-- elseif abs(vtOrtho:getY()) < 0.001 then +-- if abs(vtOrtho:getZ()) > 0.75 then +-- -- se corrisponde a Y +-- if ( abs( pPini:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMax():getY()) < 10 * GEO.EPS_SMALL) or +-- ( abs( pPini:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL and abs( pPend:getY() - b3Solid:getMin():getY()) < 10 * GEO.EPS_SMALL) then +-- -- setto l'entità open +-- local sActInfo = EgtGetInfo( nPathInt, 'OPEN', 's') or '' +-- if #sActInfo > 0 then +-- EgtSetInfo( nPathInt, 'OPEN', sActInfo .. ',' .. (i-1)) +-- else +-- EgtSetInfo( nPathInt, 'OPEN', (i-1)) +-- end +-- -- prendo i punti per eventuale modifica del punto di inizio percorso +-- pLastPIni = pPini +-- pLastPEnd = pPend +-- end +-- end +-- fine - 20220719 codice vecchio mantenuto per backup end end -- se devo cambiare il punto di partenza @@ -1468,7 +1484,7 @@ local function SetOpenSide( nPathInt, vtOrtho, b3Solid, nAddGrpId, nStartPoint) -- calcolo il punto medio con gli ultimi punti utilizzati local ptPs = ( pLastPIni + pLastPEnd) / 2 EgtChangeClosedCurveStartPoint( nPathInt, ptPs, GDB_RT.GLOB) - -- se devo eliminare la parte open + -- se devo eliminare la parte open, nei casi in cui la funzione caller non faccia in automatico il check if nStartPoint == 2 then EgtRemoveCurveCompoCurve( nPathInt, true) EgtRemoveCurveCompoCurve( nPathInt, false) @@ -1477,7 +1493,6 @@ local function SetOpenSide( nPathInt, vtOrtho, b3Solid, nAddGrpId, nStartPoint) end end end - return false end @@ -1796,7 +1811,7 @@ local function MakeRoundCleanContour( Proc, nPhase, nRawId, nPartId, b3Raw, end -- normale alla faccia aggiunta vtN1 = Vector3d( vtOrtho) - -- imposto i lati aperti + -- imposto i lati aperti e con il parametro 2 li cancello per evitare di lavorarli SetOpenSide( nFirstId, vtOrtho, b3Solid, nAddGrpId, 2) end @@ -4287,6 +4302,7 @@ local function ManageAntiSplintByMill( Proc, nPhase, nRawId, nPartId, b3Raw, end end vtN1 = Vector3d(vtOrtho) + -- imposto i lati aperti e con il parametro 2 li cancello per evitare di lavorarli local bOkPath = SetOpenSide( nFirstId, vtOrtho, b3Solid, nAddGrpId, 2) -- se non ho un percorso chiuso estraggo i percorsi if bOkPath then @@ -5130,7 +5146,8 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa -- o passare subito dalla lavorazione con lama/sega catena if ( bTrySidePocketAtFirst and Proc.Fct == 3 and bIsU) or bForceSideMill then -- lavoro con svuotature (singola o doppia contrapposta) - local sMyMchFind = EgtIf( bForceSideMill, 'OpenPocket', 'Pocket') + -- 20220719 -> settate tutte come OpenPocket; prima era Pocket + local sMyMchFind = 'OpenPocket' local dDiamTool = 100 local nPathInt, nSurfInt, bOneShot, nFirstMachId local bIs3Faces = true