Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a548c26eed | |||
| 3b46a5b285 | |||
| 3bf3ba3b43 | |||
| d236b19d6a | |||
| b62b694112 | |||
| ade9d3ffe9 | |||
| b2f1645322 | |||
| 5023887f2e | |||
| d37e4bdf8d | |||
| 6ccbc4f0cd | |||
| 9babfe01f3 | |||
| 4c6d40ee11 | |||
| e07a1d63cb | |||
| be4df143e4 |
+1
-1
@@ -358,7 +358,7 @@ if bToProcess then
|
|||||||
local vWallErr = {}
|
local vWallErr = {}
|
||||||
for i = 2, #vWall do
|
for i = 2, #vWall do
|
||||||
local dDimH = vWall[i].Box:getDimZ()
|
local dDimH = vWall[i].Box:getDimZ()
|
||||||
if abs( dDimH - dRawH) > 10 * GEO.EPS_SMALL then
|
if abs( dDimH - dRawH) > 100 * GEO.EPS_SMALL then
|
||||||
table.insert( vWallErr, i)
|
table.insert( vWallErr, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ function WMachiningLib.FindMilling( sType, dDepth, sTuuid, nTool_ID, dMaxDiam, d
|
|||||||
local Milling = Millings[i]
|
local Milling = Millings[i]
|
||||||
if Milling.On and Milling.Type == sType and SetCurrMachiningAndTool( Milling.Name) then
|
if Milling.On and Milling.Type == sType and SetCurrMachiningAndTool( Milling.Name) then
|
||||||
local nMchType = EgtMdbGetCurrMachiningParam( MCH_MP.TYPE)
|
local nMchType = EgtMdbGetCurrMachiningParam( MCH_MP.TYPE)
|
||||||
local sMyTuuid = EgtGetMachiningParam( MCH_MP.TUUID)
|
local sMyTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
local dTMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
local dTMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||||
local dTMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMat, EgtTdbGetCurrToolMaxDepth())
|
local dTMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMat, EgtTdbGetCurrToolMaxDepth())
|
||||||
local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||||
|
|||||||
+10
-4
@@ -1,4 +1,4 @@
|
|||||||
-- WProcessCut.lua by Egaltech s.r.l. 2020/11/13
|
-- WProcessCut.lua by Egaltech s.r.l. 2020/11/25
|
||||||
-- Gestione calcolo taglio di testa o longitudinale per Pareti
|
-- Gestione calcolo taglio di testa o longitudinale per Pareti
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
@@ -8,6 +8,7 @@ local WPC = {}
|
|||||||
require( 'EgtBase')
|
require( 'EgtBase')
|
||||||
local WL = require( 'WallLib')
|
local WL = require( 'WallLib')
|
||||||
local FreeContour = require( 'WProcessFreeContour')
|
local FreeContour = require( 'WProcessFreeContour')
|
||||||
|
local LapJoint = require( 'WProcessLapJoint')
|
||||||
|
|
||||||
EgtOutLog( ' WProcessCut started', 1)
|
EgtOutLog( ' WProcessCut started', 1)
|
||||||
|
|
||||||
@@ -29,7 +30,7 @@ function WPC.Classify( Proc, b3Raw)
|
|||||||
-- verifico abbia una sola faccia
|
-- verifico abbia una sola faccia
|
||||||
if Proc.Fct ~= 1 then return false end
|
if Proc.Fct ~= 1 then return false end
|
||||||
-- controllo la normale
|
-- controllo la normale
|
||||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
if vtN:getZ() < - 0.5 then return false end
|
if vtN:getZ() < - 0.5 then return false end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@@ -41,7 +42,7 @@ function WPC.FlipClassify( Proc)
|
|||||||
-- verifico abbia una sola faccia
|
-- verifico abbia una sola faccia
|
||||||
if Proc.Fct ~= 1 then return 0, 0 end
|
if Proc.Fct ~= 1 then return 0, 0 end
|
||||||
-- controllo la normale
|
-- controllo la normale
|
||||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, 0, GDB_ID.ROOT)
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
local vtNZ = vtN:getZ()
|
local vtNZ = vtN:getZ()
|
||||||
if vtNZ > - GEO.EPS_SMALL then
|
if vtNZ > - GEO.EPS_SMALL then
|
||||||
nFlip0 = 100
|
nFlip0 = 100
|
||||||
@@ -67,7 +68,12 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- Applicazione della lavorazione
|
-- Applicazione della lavorazione
|
||||||
function WPC.Make( Proc, nRawId, b3Raw)
|
function WPC.Make( Proc, nRawId, b3Raw)
|
||||||
return FreeContour.Make( Proc, nRawId, b3Raw)
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
|
if vtN :getZ() > 0.866 then
|
||||||
|
return LapJoint.Make( Proc, nRawId, b3Raw)
|
||||||
|
else
|
||||||
|
return FreeContour.Make( Proc, nRawId, b3Raw)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
-- 2022/04/26 Migliorata gestione caso pocketing.
|
-- 2022/04/26 Migliorata gestione caso pocketing.
|
||||||
-- 2022/08/05 Aggiunta segnalazione aree vietate non gestite.
|
-- 2022/08/05 Aggiunta segnalazione aree vietate non gestite.
|
||||||
-- 2022/08/29 Corretta gestione tipo Pocket senza fondo (sono lavorabili da entrambe le parti con fresatura).
|
-- 2022/08/29 Corretta gestione tipo Pocket senza fondo (sono lavorabili da entrambe le parti con fresatura).
|
||||||
|
-- 2022/12/13 Aggiunta la funzione Is3EdgesApprox per riconoscere come 3 lati anche facce con lati aggiuntivi molto corti (<15 mm)
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local WPF = {}
|
local WPF = {}
|
||||||
@@ -1233,6 +1234,33 @@ local function GetMaxDepth( vtNz, dMillDiam, dDiamTh, dMaxDepth, dFreeLen)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Funzione per determinare se la faccia ha lati molto corti (trascurabili) ed è quindi approssimabile ad una 3 facce
|
||||||
|
local function Is3EdgesApprox( Proc, nFacet, nAddGrpId)
|
||||||
|
local bResult = false
|
||||||
|
local nContourId = EgtExtractSurfTmFacetLoops( Proc.Id, nFacet, nAddGrpId)
|
||||||
|
EgtMergeCurvesInCurveCompo( nContourId)
|
||||||
|
-- recupero il numero effettivo di lati
|
||||||
|
local _, nEntityCount = EgtCurveDomain( nContourId)
|
||||||
|
local nEdges = nEntityCount
|
||||||
|
if nContourId then
|
||||||
|
if nEntityCount and nEntityCount == 3 then
|
||||||
|
bResult = true
|
||||||
|
-- rimuovo i lati molto corti dal conteggio totale
|
||||||
|
elseif nEntityCount then
|
||||||
|
for i = 1, nEntityCount do
|
||||||
|
local dLength = EgtCurveCompoLength( nContourId, i - 1)
|
||||||
|
if dLength < 15 then nEdges = nEdges - 1 end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if nEdges == 3 then bResult = true end
|
||||||
|
end
|
||||||
|
if bResult == true then
|
||||||
|
EgtOutLog( 'FreeContour : Face with ' .. tointeger( nEntityCount) .. ' edges skipped (approx 3 edges)')
|
||||||
|
end
|
||||||
|
return bResult
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function AddMillings( sMilling, vFace, Proc, nRawId, b3Raw, nConeCut, nAddGrpId)
|
local function AddMillings( sMilling, vFace, Proc, nRawId, b3Raw, nConeCut, nAddGrpId)
|
||||||
-- flag per fresature non passanti
|
-- flag per fresature non passanti
|
||||||
@@ -1358,8 +1386,10 @@ local function AddMillings( sMilling, vFace, Proc, nRawId, b3Raw, nConeCut, nAdd
|
|||||||
return 0, sErr
|
return 0, sErr
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- verifico se la faccia ha alcuni lati molto corti e può essere approssimata ad una 3 lati
|
||||||
|
local bIs3EdgesApprox = Is3EdgesApprox( Proc, vFace[i].Fac, nAddGrpId)
|
||||||
-- se tutta la faccia o la sua fine senza taglio, inserisco una fresatura
|
-- se tutta la faccia o la sua fine senza taglio, inserisco una fresatura
|
||||||
if ( vFace[i].Type & 2) ~= 0 or ( vFace[i].Type == 4 and vFace[i].Edges > 3) then
|
if ( vFace[i].Type & 2) ~= 0 or ( vFace[i].Type == 4 and ( vFace[i].Edges > 3 and not bIs3EdgesApprox)) then
|
||||||
-- inserisco la lavorazione
|
-- inserisco la lavorazione
|
||||||
local sName = 'Free_' .. ( EgtGetName( Proc.PartId) or tostring( Proc.PartId))
|
local sName = 'Free_' .. ( EgtGetName( Proc.PartId) or tostring( Proc.PartId))
|
||||||
local nMchId = EgtAddMachining( sName, sMilling)
|
local nMchId = EgtAddMachining( sName, sMilling)
|
||||||
|
|||||||
+179
-121
@@ -1,4 +1,4 @@
|
|||||||
-- WProcessLapJoint.lua by Egaltech s.r.l. 2022/02/04
|
-- WProcessLapJoint.lua by Egaltech s.r.l. 2022/11/15
|
||||||
-- Gestione calcolo mezzo-legno per Pareti
|
-- Gestione calcolo mezzo-legno per Pareti
|
||||||
-- 2021/08/27 DS Se tre o più facce con flag PCKT=1 forzo svuotatura con fresa (per Variant).
|
-- 2021/08/27 DS Se tre o più facce con flag PCKT=1 forzo svuotatura con fresa (per Variant).
|
||||||
-- 2021/08/29 DS Se svuotatura di fianco setto flag per farla dopo i tagli.
|
-- 2021/08/29 DS Se svuotatura di fianco setto flag per farla dopo i tagli.
|
||||||
@@ -10,6 +10,8 @@
|
|||||||
-- 2022/02/03 DS Gorge larga come gambo più sicurezza.
|
-- 2022/02/03 DS Gorge larga come gambo più sicurezza.
|
||||||
-- 2022/02/04 DS In svuotatura aggiunta gestione WD.MAXDIAM_POCK_CORNER in presenza di almeno un angolo interno.
|
-- 2022/02/04 DS In svuotatura aggiunta gestione WD.MAXDIAM_POCK_CORNER in presenza di almeno un angolo interno.
|
||||||
-- 2022/09/30 In MakeSideGrooveByMill sistemato il calcolo del massimo sottosquadro dell'utensile per determinare la fattibilità della tasca.
|
-- 2022/09/30 In MakeSideGrooveByMill sistemato il calcolo del massimo sottosquadro dell'utensile per determinare la fattibilità della tasca.
|
||||||
|
-- 2022/11/15 DS Con lama massima inclinazione 60deg.
|
||||||
|
-- 2022/12/01 Per 2 facce con angolo > 90° implementata lavorazione principale verticale. Se da sopra, aggiunta ripresa del lato inclinato.
|
||||||
|
|
||||||
-- Tabella per definizione modulo
|
-- Tabella per definizione modulo
|
||||||
local WPL = {}
|
local WPL = {}
|
||||||
@@ -113,7 +115,7 @@ function WPL.Classify( Proc, b3Raw)
|
|||||||
vtN[1] = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
vtN[1] = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
|
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
|
||||||
-- verifico se è lavorabile da sopra o di fianco
|
-- verifico se è lavorabile da sopra o di fianco
|
||||||
return ( vtN[1]:getZ() >= - 0.01 or vtN[2]:getZ() >= - 0.01)
|
return ( vtN[1]:getZ() >= - 0.028 or vtN[2]:getZ() >= - 0.028)
|
||||||
-- se più di 2 facce
|
-- se più di 2 facce
|
||||||
else
|
else
|
||||||
local nFacInd, dElev, nFacInd2, dElev2 = WL.GetFaceWithMostAdj( Proc.Id, Proc.PartId)
|
local nFacInd, dElev, nFacInd2, dElev2 = WL.GetFaceWithMostAdj( Proc.Id, Proc.PartId)
|
||||||
@@ -1374,10 +1376,18 @@ local function MakeByMill( Proc, nFacet, nOthFac, nRawId, b3Raw, dSideDist)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, dMaxDepthOnSide, bEnablePreMill, bMachFromDn, dAng, bAsEnablePreMill, nSinglePass)
|
local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, dMaxDepthOnSide, bEnablePreMill, bMachFromDn, dAng, bAsEnablePreMill, nSinglePass, bExcludeFinishing)
|
||||||
-- dati della faccia
|
local sWarn
|
||||||
|
-- dati della faccia principale (la più verticale)
|
||||||
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacet, GDB_ID.ROOT)
|
local ptC, vtN = EgtSurfTmFacetCenter( Proc.Id, nFacet, GDB_ID.ROOT)
|
||||||
local dElev = WL.GetFaceElevation( Proc.Id, nFacet, nRawId)
|
local dElev = WL.GetFaceElevation( Proc.Id, nFacet, nRawId)
|
||||||
|
-- dati della faccia più orizzontale
|
||||||
|
local nOtherFacet = abs( nFacet - 1)
|
||||||
|
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, nOtherFacet, GDB_ID.ROOT)
|
||||||
|
local dElevOtherFacet = WL.GetFaceElevation( Proc.Id, nOtherFacet, nRawId)
|
||||||
|
-- se lap joint 2 facce dal basso e angolo negativo
|
||||||
|
local bExcludeSideMill = Proc.Fct == 2 and vtN:getZ() < -0.01 and vtN2:getZ() < -0.01
|
||||||
|
-- dimensioni della faccia principale
|
||||||
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacet, GDB_ID.ROOT)
|
local _, dH, dV = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacet, GDB_ID.ROOT)
|
||||||
local dThick = min( dH, dV)
|
local dThick = min( dH, dV)
|
||||||
local frFace = Frame3d( ptC, vtN)
|
local frFace = Frame3d( ptC, vtN)
|
||||||
@@ -1792,121 +1802,129 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- inserisco la lavorazione di ribasso o gola
|
|
||||||
local sName = EgtIf( bEnablePreMill ~= nil, 'SideMill_', 'Mill_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
local dStepOri
|
||||||
local nMchFId = EgtAddMachining( sName, sMilling)
|
if not bExcludeSideMill then
|
||||||
if not nMchFId then
|
-- inserisco la lavorazione di ribasso o gola
|
||||||
local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling
|
local sName = EgtIf( bEnablePreMill ~= nil, 'SideMill_', 'Mill_') .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
||||||
EgtOutLog( sErr)
|
local nMchFId = EgtAddMachining( sName, sMilling)
|
||||||
return false, sErr
|
if not nMchFId then
|
||||||
end
|
local sErr = 'Error adding machining ' .. sName .. '-' .. sMilling
|
||||||
EgtSetInfo( nMchFId, 'Part', Proc.PartId)
|
EgtOutLog( sErr)
|
||||||
-- se ho abilitato la lavorazione di lama per garantire passaggio utensile, setto la nota per spostare la fresatura dopo i tagli di lama
|
return false, sErr
|
||||||
if bEnablePreMill or bAsEnablePreMill then
|
|
||||||
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
|
||||||
end
|
|
||||||
-- aggiungo geometria
|
|
||||||
EgtSetMachiningGeometry( {{ Proc.Id, nFacet}})
|
|
||||||
-- imposto posizione braccio porta testa
|
|
||||||
--local nSCC = MCH_SCC.ADIR_ZP
|
|
||||||
--if abs( vtN:getZ()) < GEO.EPS_SMALL then
|
|
||||||
-- nSCC = EgtIf( Proc.Box:getDimX() >= Proc.Box:getDimY(), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_XP)
|
|
||||||
--end
|
|
||||||
local nSCC = MCH_SCC.ADIR_NEAR
|
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
|
||||||
-- imposto modo di lavorare la faccia
|
|
||||||
local nFaceUse = WL.GetNearestParalOpposite( Z_AX(), vtN)
|
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
|
||||||
-- imposto elevazione e step
|
|
||||||
local dStep = EgtGetMachiningParam( MCH_MP.STEP)
|
|
||||||
if dStep < GEO.EPS_SMALL then dStep = 0.75 * dMaxMat end
|
|
||||||
local nStep = ceil( ( dThick - dMaxMat) / dStep)
|
|
||||||
dStep = max( ( dThick - dMaxMat) / max( nStep, 1), 0)
|
|
||||||
local dMaxElev = max( ( nStep + 1) * dStep - GEO.EPS_SMALL, 0)
|
|
||||||
if nSinglePass and nSinglePass > 0 then
|
|
||||||
dStep = 0
|
|
||||||
if nSinglePass == 1 then
|
|
||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat)
|
|
||||||
end
|
end
|
||||||
end
|
EgtSetInfo( nMchFId, 'Part', Proc.PartId)
|
||||||
EgtSetMachiningParam( MCH_MP.STEP, dStep)
|
-- se ho abilitato la lavorazione di lama per garantire passaggio utensile, setto la nota per spostare la fresatura dopo i tagli di lama
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 3) .. ';')
|
if bEnablePreMill or bAsEnablePreMill then
|
||||||
-- setto il lato di lavoro standard
|
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
-- aggiungo geometria
|
||||||
-- modifico ingressi e uscita
|
EgtSetMachiningGeometry( {{ Proc.Id, nFacet}})
|
||||||
-- se ho inserito il pretaglio modifico
|
-- imposto posizione braccio porta testa
|
||||||
if bEnablePreMill or bAsEnablePreMill then
|
--local nSCC = MCH_SCC.ADIR_ZP
|
||||||
if nModifyLeadInOut > 0 then
|
--if abs( vtN:getZ()) < GEO.EPS_SMALL then
|
||||||
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
-- nSCC = EgtIf( Proc.Box:getDimX() >= Proc.Box:getDimY(), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_XP)
|
||||||
if dElev > ( 0.5 * dMillDiam) then
|
--end
|
||||||
if nModifyLeadInOut == 1 then
|
local nSCC = MCH_SCC.ADIR_NEAR
|
||||||
-- setto il tipo di passo a una via
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
EgtSetMachiningParam( MCH_MP.STEPTYPE, MCH_MILL_ST.ONEWAY)
|
-- imposto modo di lavorare la faccia
|
||||||
-- modifico il tipo di uscita
|
local nFaceUse = WL.GetNearestParalOpposite( Z_AX(), vtN)
|
||||||
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG)
|
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
||||||
|
-- imposto elevazione e step
|
||||||
|
local dStep = EgtGetMachiningParam( MCH_MP.STEP)
|
||||||
|
dStepOri = dStep
|
||||||
|
if dStep < GEO.EPS_SMALL then dStep = 0.75 * dMaxMat end
|
||||||
|
local nStep = ceil( ( dThick - dMaxMat) / dStep)
|
||||||
|
dStep = max( ( dThick - dMaxMat) / max( nStep, 1), 0)
|
||||||
|
local dMaxElev = max( ( nStep + 1) * dStep - GEO.EPS_SMALL, 0)
|
||||||
|
if nSinglePass and nSinglePass > 0 then
|
||||||
|
dStep = 0
|
||||||
|
if nSinglePass == 1 then
|
||||||
|
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EgtSetMachiningParam( MCH_MP.STEP, dStep)
|
||||||
|
EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 3) .. ';')
|
||||||
|
-- setto il lato di lavoro standard
|
||||||
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
|
||||||
|
-- modifico ingressi e uscita
|
||||||
|
-- se ho inserito il pretaglio modifico
|
||||||
|
if bEnablePreMill or bAsEnablePreMill then
|
||||||
|
if nModifyLeadInOut > 0 then
|
||||||
|
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
||||||
|
if dElev > ( 0.5 * dMillDiam) then
|
||||||
|
if nModifyLeadInOut == 1 then
|
||||||
|
-- setto il tipo di passo a una via
|
||||||
|
EgtSetMachiningParam( MCH_MP.STEPTYPE, MCH_MILL_ST.ONEWAY)
|
||||||
|
-- modifico il tipo di uscita
|
||||||
|
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MCH_MILL_LO.PERP_TG)
|
||||||
|
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
||||||
|
-- modifico dati supplementari uscita
|
||||||
|
EgtSetMachiningParam( MCH_MP.LOPERP, 0.5)
|
||||||
|
EgtSetMachiningParam( MCH_MP.LOTANG, -( dLongGorge + dExtraLongIni + dExtraLongEnd))
|
||||||
|
else
|
||||||
|
EgtSetMachiningParam( MCH_MP.LIPERP, dElev)
|
||||||
|
EgtSetMachiningParam( MCH_MP.LOPERP, dElev)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- setto allungamenti iniziali e finali
|
||||||
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
||||||
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
||||||
|
if bInvertMach then
|
||||||
|
-- setto il lato di lavoro invertito
|
||||||
|
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
||||||
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- setto allungamenti iniziali e finali
|
||||||
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
||||||
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
||||||
|
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
||||||
|
if dElev > ( 0.5 * dMillDiam) then
|
||||||
|
-- setto allungamenti perpendicolari
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
||||||
-- modifico dati supplementari uscita
|
EgtSetMachiningParam( MCH_MP.LOPERP, 0)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, 0.5)
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.LOTANG, -( dLongGorge + dExtraLongIni + dExtraLongEnd))
|
end
|
||||||
else
|
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, dElev)
|
if not WD.SIDEMILL_BEFORE then
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, dElev)
|
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if nModifyLeadInOut > 0 then
|
||||||
|
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
||||||
|
if dElev > ( 0.5 * dMillDiam) then
|
||||||
|
-- setto il tipo di passo a una via
|
||||||
|
EgtSetMachiningParam( MCH_MP.STEPTYPE, 1)
|
||||||
|
end
|
||||||
|
if bInvertMach then
|
||||||
|
-- setto il lato di lavoro invertito
|
||||||
|
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
||||||
|
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- setto allungamenti iniziali e finali
|
-- setto allungamenti iniziali e finali
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
||||||
if bInvertMach then
|
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
||||||
-- setto il lato di lavoro invertito
|
if not WD.SIDEMILL_BEFORE then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
-- setto allungamenti iniziali e finali
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
|
||||||
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
|
||||||
if dElev > ( 0.5 * dMillDiam) then
|
|
||||||
-- setto allungamenti perpendicolari
|
|
||||||
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
|
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, 0)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
-- eseguo
|
||||||
if not WD.SIDEMILL_BEFORE then
|
if not EgtApplyMachining( true, false) then
|
||||||
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sErr
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if nModifyLeadInOut > 0 then
|
sWarn = 'Warning in LapJoint : upside down groove with obtuse angle not completed'
|
||||||
-- Confronto il raggio fresa con l'elevazione dalla normale per vedere se devo modificare l'uscita
|
EgtOutLog( sWarn)
|
||||||
if dElev > ( 0.5 * dMillDiam) then
|
|
||||||
-- setto il tipo di passo a una via
|
|
||||||
EgtSetMachiningParam( MCH_MP.STEPTYPE, 1)
|
|
||||||
end
|
|
||||||
if bInvertMach then
|
|
||||||
-- setto il lato di lavoro invertito
|
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
|
||||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- setto allungamenti iniziali e finali
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dExtraLongIni)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dExtraLongEnd)
|
|
||||||
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
|
||||||
if not WD.SIDEMILL_BEFORE then
|
|
||||||
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
-- eseguo
|
|
||||||
if not EgtApplyMachining( true, false) then
|
|
||||||
local _, sErr = EgtGetLastMachMgrError()
|
|
||||||
EgtSetOperationMode( nMchFId, false)
|
|
||||||
return false, sErr
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- verifico se devo lavorare anche la seconda faccia basandomi sul valore dell'angolo interno
|
-- verifico se devo lavorare anche la seconda faccia basandomi sul valore dell'angolo interno
|
||||||
if dAng and dAng > -90 + 10 * GEO.EPS_SMALL then
|
if dAng and dAng > -90 + 10 * GEO.EPS_SMALL and not bExcludeFinishing then
|
||||||
local nOtherFacet = abs( nFacet - 1)
|
|
||||||
-- inserisco la lavorazione di contornatura
|
-- inserisco la lavorazione di contornatura
|
||||||
local sName = 'Mill_Oth_Fac_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
local sName = 'Mill_Oth_Fac_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
||||||
local nMchFId = EgtAddMachining( sName, sMilling)
|
local nMchFId = EgtAddMachining( sName, sMilling)
|
||||||
@@ -1919,7 +1937,6 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
|
|||||||
-- aggiungo geometria
|
-- aggiungo geometria
|
||||||
EgtSetMachiningGeometry( {{ Proc.Id, nOtherFacet}})
|
EgtSetMachiningGeometry( {{ Proc.Id, nOtherFacet}})
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, nOtherFacet, GDB_ID.ROOT)
|
|
||||||
local nSCC = MCH_SCC.ADIR_ZP
|
local nSCC = MCH_SCC.ADIR_ZP
|
||||||
if AreSameOrOppositeVectorApprox( vtN2, Z_AX()) then
|
if AreSameOrOppositeVectorApprox( vtN2, Z_AX()) then
|
||||||
nSCC = EgtIf( Proc.Box:getDimX() >= Proc.Box:getDimY(), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_XP)
|
nSCC = EgtIf( Proc.Box:getDimX() >= Proc.Box:getDimY(), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_XP)
|
||||||
@@ -1927,12 +1944,22 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
|
|||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- imposto modo di lavorare la faccia
|
-- imposto modo di lavorare la faccia
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFace2ndFace)
|
EgtSetMachiningParam( MCH_MP.FACEUSE, nFace2ndFace)
|
||||||
EgtSetMachiningParam( MCH_MP.STEP, 0)
|
|
||||||
local dMaxElev = dMaxMat
|
local dMaxElev = dMaxMat
|
||||||
|
local dStepOtherFace = 0
|
||||||
|
local dDepthOtherFace = dMaxMat
|
||||||
|
if Proc.Fct == 2 and abs( vtN2:getZ()) > 0.99 and abs( vtN2:getZ()) < 1.01 then
|
||||||
|
dStepOtherFace = dStepOri or EgtGetMachiningParam( MCH_MP.STEP)
|
||||||
|
if dStepOtherFace < GEO.EPS_SMALL then dStepOtherFace = 0.75 * dMaxMat end
|
||||||
|
local nStepOtherFace = ceil( ( dElevOtherFacet - dMaxMat) / dStepOtherFace)
|
||||||
|
dStepOtherFace = max( ( dElevOtherFacet - dMaxMat) / max( nStepOtherFace, 1), 0)
|
||||||
|
dMaxElev = max( ( nStepOtherFace + 1) * dStepOtherFace - GEO.EPS_SMALL, 0)
|
||||||
|
dDepthOtherFace = dElevOtherFacet
|
||||||
|
end
|
||||||
|
EgtSetMachiningParam( MCH_MP.STEP, dStepOtherFace)
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 3) .. ';')
|
EgtSetMachiningParam( MCH_MP.USERNOTES, 'MaxElev=' .. EgtNumToString( dMaxElev, 3) .. ';')
|
||||||
if bMachFromDn then
|
if bMachFromDn then
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
EgtSetMachiningParam( MCH_MP.INVERT, true)
|
||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dMaxMat)
|
EgtSetMachiningParam( MCH_MP.DEPTH, dDepthOtherFace)
|
||||||
else
|
else
|
||||||
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
EgtSetMachiningParam( MCH_MP.INVERT, false)
|
||||||
end
|
end
|
||||||
@@ -1978,7 +2005,7 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
-- se richiesto, setto la nota per spostare la lavorazione alla fine
|
||||||
if not WD.SIDEMILL_BEFORE then
|
if bEnablePreMill or bAsEnablePreMill or not WD.SIDEMILL_BEFORE then
|
||||||
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
EgtSetInfo( nMchFId, 'MOVE_AFTER', 1)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -2012,9 +2039,12 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d
|
|||||||
EgtSetOperationMode( nMchFId, false)
|
EgtSetOperationMode( nMchFId, false)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
elseif bExcludeSideMill then
|
||||||
|
local sErr = 'Feature not machinable by orientation'
|
||||||
|
EgtOutLog( sErr)
|
||||||
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
return true, sWarn
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2027,6 +2057,10 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|||||||
-- gruppo ausiliario
|
-- gruppo ausiliario
|
||||||
local nAddGrpId = WL.GetAddGroup( Proc.PartId)
|
local nAddGrpId = WL.GetAddGroup( Proc.PartId)
|
||||||
local nNewProc, nNumFacet = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacet)
|
local nNewProc, nNumFacet = RemoveBottomFaceAndReorder( Proc, nAddGrpId, nFacet)
|
||||||
|
-- se una sola faccia
|
||||||
|
if Proc.Fct == 1 then
|
||||||
|
dDiam = 2 * dDiam
|
||||||
|
end
|
||||||
-- se forma ad L
|
-- se forma ad L
|
||||||
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc.Id, Proc.Fct) or TestElleShape4( Proc.Id, Proc.Fct) == 2)
|
local bIsL = ( Proc.Fct == 2 or TestElleShape3( Proc.Id, Proc.Fct) or TestElleShape4( Proc.Id, Proc.Fct) == 2)
|
||||||
if bIsL then
|
if bIsL then
|
||||||
@@ -2067,8 +2101,9 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|||||||
local dMillDiam = 20
|
local dMillDiam = 20
|
||||||
local dMaxDepth = 0
|
local dMaxDepth = 0
|
||||||
local dThDiam = 100
|
local dThDiam = 100
|
||||||
|
local sTuuid
|
||||||
if EgtMdbSetCurrMachining( sPocketing) then
|
if EgtMdbSetCurrMachining( sPocketing) then
|
||||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||||
dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam
|
dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam
|
||||||
dMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), EgtTdbGetCurrToolMaxDepth()) or dMaxDepth
|
dMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), EgtTdbGetCurrToolMaxDepth()) or dMaxDepth
|
||||||
@@ -2135,7 +2170,7 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar)
|
|||||||
else
|
else
|
||||||
EgtErase( nNewProc)
|
EgtErase( nNewProc)
|
||||||
end
|
end
|
||||||
return true, sWarn
|
return true, sWarn, sTuuid
|
||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
@@ -2313,11 +2348,12 @@ local function MakeTwoFaces( Proc, nRawId, b3Raw)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
local vtNTemp = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
|
||||||
local dSideDist
|
local dSideDist
|
||||||
local ptMid = ( ptP1 + ptP2) / 2
|
local ptMid = ( ptP1 + ptP2) / 2
|
||||||
-- faccia orizzontale
|
-- faccia orizzontale
|
||||||
local nFacet = EgtIf( vtN:getZ() >= WD.NZ_MINA, nFacInd, nFacInd2)
|
local nFacet = EgtIf( vtNTemp:getZ() >= WD.NZ_MINA, nFacInd, nFacInd2)
|
||||||
|
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nFacet, GDB_ID.ROOT)
|
||||||
-- faccia verticale
|
-- faccia verticale
|
||||||
local nFacetVert = EgtIf( nFacet == nFacInd, nFacInd2, nFacInd)
|
local nFacetVert = EgtIf( nFacet == nFacInd, nFacInd2, nFacInd)
|
||||||
local vtNV = EgtSurfTmFacetNormVersor( Proc.Id, nFacetVert, GDB_ID.ROOT)
|
local vtNV = EgtSurfTmFacetNormVersor( Proc.Id, nFacetVert, GDB_ID.ROOT)
|
||||||
@@ -2369,8 +2405,13 @@ local function MakeTwoFaces( Proc, nRawId, b3Raw)
|
|||||||
if bEnableMillOnSide and dMaxDepthOnSide > 0 then
|
if bEnableMillOnSide and dMaxDepthOnSide > 0 then
|
||||||
bLikeAsMakeFirstGroove = false
|
bLikeAsMakeFirstGroove = false
|
||||||
return MakeSideGrooveByMill( Proc, nFacetVert, nRawId, b3Raw, EgtIf( bEnableMillOnSide and dMaxDepthOnSide, sMillOnSide, nil), dMaxDepthOnSide, bMakeFirstGroove, bMachFromDn, dAng, bLikeAsMakeFirstGroove)
|
return MakeSideGrooveByMill( Proc, nFacetVert, nRawId, b3Raw, EgtIf( bEnableMillOnSide and dMaxDepthOnSide, sMillOnSide, nil), dMaxDepthOnSide, bMakeFirstGroove, bMachFromDn, dAng, bLikeAsMakeFirstGroove)
|
||||||
elseif MakeByMill( Proc, nFacet, 1 - nFacet, nRawId, b3Raw, dSideDist) then
|
else
|
||||||
return true
|
local bOk, sErr = MakeByMill( Proc, nFacet, 1 - nFacet, nRawId, b3Raw, dSideDist)
|
||||||
|
-- se angolo ottuso riprendo il lato quasi verticale
|
||||||
|
if bOk and dAng and dAng > -90 + 10 * GEO.EPS_SMALL then
|
||||||
|
local bOk2, sErr2 = MakeSideGrooveByMill( Proc, nFacetVert, nRawId, b3Raw, EgtIf( bEnableMillOnSide and dMaxDepthOnSide, sMillOnSide, nil), dMaxDepthOnSide, bMakeFirstGroove, bMachFromDn, dAng, false, nil, true)
|
||||||
|
end
|
||||||
|
return bOk, sErr
|
||||||
end
|
end
|
||||||
elseif bEnableMillOnSide and dMaxDepthOnSide > 0 then
|
elseif bEnableMillOnSide and dMaxDepthOnSide > 0 then
|
||||||
bLikeAsMakeFirstGroove = true
|
bLikeAsMakeFirstGroove = true
|
||||||
@@ -2378,9 +2419,27 @@ local function MakeTwoFaces( Proc, nRawId, b3Raw)
|
|||||||
if bOk then return true end
|
if bOk then return true end
|
||||||
end
|
end
|
||||||
-- se non inclinate o capacità di taglio non sufficiente o non molto grandi (80mm), provo con contornatura o svuotatura
|
-- se non inclinate o capacità di taglio non sufficiente o non molto grandi (80mm), provo con contornatura o svuotatura
|
||||||
if not sCutting or dSawMaxDepth < dDimY[1] + WD.CUT_SIC or dSawMaxDepth < dDimY[2] + WD.CUT_SIC or dDimY[1] < 80 or dDimY[2] < 80 then
|
if vtN:getZ() > 0.866 or vtNV:getZ() > 0.866 or not sCutting or dSawMaxDepth < dDimY[1] + WD.CUT_SIC or dSawMaxDepth < dDimY[2] + WD.CUT_SIC or dDimY[1] < 80 or dDimY[2] < 80 then
|
||||||
-- eseguo la svuotatura
|
-- eseguo la svuotatura
|
||||||
return MakeByPocketing( Proc, nFacet, nRawId, b3Raw)
|
local bOk, sErr, sTuuid = MakeByPocketing( Proc, nFacet, nRawId, b3Raw)
|
||||||
|
-- se angolo ottuso riprendo il lato quasi verticale
|
||||||
|
if bOk and dAng and dAng > -90 + 10 * GEO.EPS_SMALL then
|
||||||
|
local _, dHVert, dVVert = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacetVert, GDB_ID.ROOT)
|
||||||
|
local dDepth = min( dHVert, dVVert)
|
||||||
|
local _, dHHor, dVHor = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nFacet, GDB_ID.ROOT)
|
||||||
|
local dDiam = 2 * min( dHHor, dVHor)
|
||||||
|
local sMillObtuseAngle = WM.FindMilling( 'FreeContour', dDepth, sTuuid, nil, dDiam, nil, nil, nil)
|
||||||
|
if not sMillObtuseAngle then
|
||||||
|
sMillObtuseAngle = WM.FindMilling( 'FreeContour', dDepth, nil, nil, dDiam, nil, nil, nil)
|
||||||
|
end
|
||||||
|
if not sMillObtuseAngle then
|
||||||
|
local sErrMillNotFound = 'Error : Processing to finish obtuse angle not found in library'
|
||||||
|
EgtOutLog( sErrMillNotFound)
|
||||||
|
return true, sErrMillNotFound
|
||||||
|
end
|
||||||
|
local bOk2, sErr2 = MakeSideGrooveByMill( Proc, nFacetVert, nRawId, b3Raw, sMillObtuseAngle, dMaxDepthOnSide, bMakeFirstGroove, bMachFromDn, dAng, false, nil, true)
|
||||||
|
end
|
||||||
|
return bOk, sErr
|
||||||
end
|
end
|
||||||
-- se una delle due facce rivolta verso il basso
|
-- se una delle due facce rivolta verso il basso
|
||||||
elseif vtN[1]:getZ() < -0.001 or vtN[2]:getZ() < -0.001 then
|
elseif vtN[1]:getZ() < -0.001 or vtN[2]:getZ() < -0.001 then
|
||||||
@@ -2538,7 +2597,6 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw)
|
|||||||
local sErr = 'Side milling not possible'
|
local sErr = 'Side milling not possible'
|
||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return true, sErr
|
return true, sErr
|
||||||
|
|
||||||
end
|
end
|
||||||
-- fessura verticale
|
-- fessura verticale
|
||||||
elseif Proc.Stype == 3 then
|
elseif Proc.Stype == 3 then
|
||||||
|
|||||||
@@ -349,16 +349,17 @@ if not bManualRot then
|
|||||||
local nRotateOpt = 0
|
local nRotateOpt = 0
|
||||||
if #RotateFeatureStates > 0 then
|
if #RotateFeatureStates > 0 then
|
||||||
-- calcolo lato con punteggio minore o molteplicita' piu' alta
|
-- calcolo lato con punteggio minore o molteplicita' piu' alta
|
||||||
local nRotMax = 0
|
local nRotMax = MinList[1].Rot
|
||||||
local nScoreMax = 0
|
local nScoreMax = MinList[1].Score
|
||||||
local nScoreCnt = 0
|
local nScoreCnt = MinList[1].ScoreCnt
|
||||||
for nInd = 1, #MinList do
|
for nInd = 2, #MinList do
|
||||||
if MinList[nInd].Score > nScoreMax then
|
if MinList[nInd].Score > nScoreMax then
|
||||||
nRotMax = MinList[nInd].Rot
|
nRotMax = MinList[nInd].Rot
|
||||||
nScoreMax = MinList[nInd].Score
|
nScoreMax = MinList[nInd].Score
|
||||||
nScoreCnt = MinList[nInd].ScoreCnt
|
nScoreCnt = MinList[nInd].ScoreCnt
|
||||||
elseif MinList[nInd].Score == nScoreMax then
|
elseif MinList[nInd].Score == nScoreMax then
|
||||||
if MinList[nInd].ScoreCnt > nScoreCnt then
|
-- se punteggio > 0 conservo quello con molteplicità più alta, se punteggio = 0 conservo quello con molteplicità più bassa
|
||||||
|
if ( nScoreMax ~= 0 and MinList[nInd].ScoreCnt > nScoreCnt) or ( nScoreMax == 0 and MinList[nInd].ScoreCnt < nScoreCnt) then
|
||||||
nRotMax = MinList[nInd].Rot
|
nRotMax = MinList[nInd].Rot
|
||||||
nScoreMax = MinList[nInd].Score
|
nScoreMax = MinList[nInd].Score
|
||||||
nScoreCnt = MinList[nInd].ScoreCnt
|
nScoreCnt = MinList[nInd].ScoreCnt
|
||||||
|
|||||||
+105
-89
@@ -1,4 +1,4 @@
|
|||||||
-- NestProcess.lua by Egaltech s.r.l. 2022/06/23
|
-- NestProcess.lua by Egaltech s.r.l. 2022/11/24
|
||||||
-- Gestione nesting automatico pareti
|
-- Gestione nesting automatico pareti
|
||||||
|
|
||||||
-- Intestazioni
|
-- Intestazioni
|
||||||
@@ -509,80 +509,84 @@ local function ClassifyDrillsOnLateralFaces( nPartId, dMinSheetWidth)
|
|||||||
local vPartProc = WE.CollectFeatures( nPartId)
|
local vPartProc = WE.CollectFeatures( nPartId)
|
||||||
for nInd = 1, #vPartProc do repeat
|
for nInd = 1, #vPartProc do repeat
|
||||||
|
|
||||||
if Drill.Identify( vPartProc[nInd]) then
|
if Drill.Identify( vPartProc[nInd]) then
|
||||||
|
|
||||||
-- identifico su quali facce si trova il foro
|
-- identifico su quali facce si trova il foro
|
||||||
local bOpen = ( vPartProc[nInd].Fcs ~= 0 and vPartProc[nInd].Fce ~= 0)
|
local bOpen = ( vPartProc[nInd].Fcs ~= 0 and vPartProc[nInd].Fce ~= 0)
|
||||||
local AuxId = EgtGetInfo( vPartProc[nInd].Id, 'AUXID', 'i') or 0
|
local AuxId = EgtGetInfo( vPartProc[nInd].Id, 'AUXID', 'i') or 0
|
||||||
if AuxId then AuxId = AuxId + vPartProc[nInd].Id end
|
if AuxId then AuxId = AuxId + vPartProc[nInd].Id end
|
||||||
if not AuxId or EgtGetType( AuxId) ~= GDB_TY.CRV_ARC then break end
|
if not AuxId or EgtGetType( AuxId) ~= GDB_TY.CRV_ARC then break end
|
||||||
local ptDrill = EgtCP( AuxId, GDB_RT.GLOB)
|
-- verifico se diametro compatibile con la punta
|
||||||
local dLen = abs( EgtCurveThickness( AuxId))
|
local dDiam = 2 * EgtArcRadius( AuxId)
|
||||||
local bLong = dLen > WD.HOR_DRILL_LEN - 1
|
if abs( dDiam - WD.HOR_DRILL_DIAM) < WD.DRILL_TOL + GEO.EPS_SMALL then
|
||||||
local bOnlyOnRef = dLen + dDeltaRaw > WD.HOR_DRILL_LEN - GEO.EPS_SMALL and not bLong
|
local ptDrill = EgtCP( AuxId, GDB_RT.GLOB)
|
||||||
|
local dLen = abs( EgtCurveThickness( AuxId))
|
||||||
-- faccia Front
|
local bLong = dLen > WD.HOR_DRILL_LEN - 1
|
||||||
local dTol = GEO.EPS_SMALL
|
local bOnlyOnRef = dLen + dDeltaRaw > WD.HOR_DRILL_LEN - GEO.EPS_SMALL and not bLong
|
||||||
if ( abs( ptDrill:getY() - ptPartMin:getY()) < dTol) then
|
|
||||||
DrillOnFaces.F.nbr = DrillOnFaces.F.nbr + 1
|
|
||||||
if bOnlyOnRef then DrillOnFaces.F.OnlyOnRef = true end
|
|
||||||
if bOpen then
|
|
||||||
DrillOnFaces.B.nbr = DrillOnFaces.B.nbr + 1
|
|
||||||
if bOnlyOnRef then DrillOnFaces.B.OnlyOnRef = true end
|
|
||||||
else
|
|
||||||
DrillOnFaces.F.closed = true
|
|
||||||
|
|
||||||
end
|
|
||||||
if bLong then
|
|
||||||
DrillOnFaces.F.long = true
|
|
||||||
if bOpen then DrillOnFaces.B.long = true end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- faccia Back
|
-- faccia Front
|
||||||
elseif ( abs( ptDrill:getY() - ptPartMax:getY()) < dTol) then
|
local dTol = GEO.EPS_SMALL
|
||||||
DrillOnFaces.B.nbr = DrillOnFaces.B.nbr + 1
|
if ( abs( ptDrill:getY() - ptPartMin:getY()) < dTol) then
|
||||||
if bOnlyOnRef then DrillOnFaces.B.OnlyOnRef = true end
|
|
||||||
if bOpen then
|
|
||||||
DrillOnFaces.F.nbr = DrillOnFaces.F.nbr + 1
|
DrillOnFaces.F.nbr = DrillOnFaces.F.nbr + 1
|
||||||
if bOnlyOnRef then DrillOnFaces.F.OnlyOnRef = true end
|
if bOnlyOnRef then DrillOnFaces.F.OnlyOnRef = true end
|
||||||
else
|
if bOpen then
|
||||||
DrillOnFaces.B.closed = true
|
DrillOnFaces.B.nbr = DrillOnFaces.B.nbr + 1
|
||||||
end
|
if bOnlyOnRef then DrillOnFaces.B.OnlyOnRef = true end
|
||||||
if bLong then
|
else
|
||||||
DrillOnFaces.B.long = true
|
DrillOnFaces.F.closed = true
|
||||||
if bOpen then DrillOnFaces.F.long = true end
|
|
||||||
end
|
end
|
||||||
|
if bLong then
|
||||||
-- faccia Left
|
DrillOnFaces.F.long = true
|
||||||
elseif ( abs( ptDrill:getX() - ptPartMin:getX()) < dTol) then
|
if bOpen then DrillOnFaces.B.long = true end
|
||||||
DrillOnFaces.L.nbr = DrillOnFaces.L.nbr + 1
|
end
|
||||||
if bOnlyOnRef then DrillOnFaces.L.OnlyOnRef = true end
|
|
||||||
if bOpen then
|
-- faccia Back
|
||||||
DrillOnFaces.R.nbr = DrillOnFaces.R.nbr + 1
|
elseif ( abs( ptDrill:getY() - ptPartMax:getY()) < dTol) then
|
||||||
if bOnlyOnRef then DrillOnFaces.R.OnlyOnRef = true end
|
DrillOnFaces.B.nbr = DrillOnFaces.B.nbr + 1
|
||||||
else
|
if bOnlyOnRef then DrillOnFaces.B.OnlyOnRef = true end
|
||||||
DrillOnFaces.L.closed = true
|
if bOpen then
|
||||||
end
|
DrillOnFaces.F.nbr = DrillOnFaces.F.nbr + 1
|
||||||
|
if bOnlyOnRef then DrillOnFaces.F.OnlyOnRef = true end
|
||||||
|
else
|
||||||
|
DrillOnFaces.B.closed = true
|
||||||
|
end
|
||||||
if bLong then
|
if bLong then
|
||||||
DrillOnFaces.L.long = true
|
DrillOnFaces.B.long = true
|
||||||
if bOpen then DrillOnFaces.R.long = true end
|
if bOpen then DrillOnFaces.F.long = true end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- faccia Right
|
-- faccia Left
|
||||||
elseif ( abs( ptDrill:getX() - ptPartMax:getX()) < dTol) then
|
elseif ( abs( ptDrill:getX() - ptPartMin:getX()) < dTol) then
|
||||||
DrillOnFaces.R.nbr = DrillOnFaces.R.nbr + 1
|
DrillOnFaces.L.nbr = DrillOnFaces.L.nbr + 1
|
||||||
if bOnlyOnRef then DrillOnFaces.R.OnlyOnRef = true end
|
|
||||||
if bOpen then
|
|
||||||
DrillOnFaces.L.nbr = DrillOnFaces.L.nbr + 1
|
|
||||||
if bOnlyOnRef then DrillOnFaces.L.OnlyOnRef = true end
|
if bOnlyOnRef then DrillOnFaces.L.OnlyOnRef = true end
|
||||||
else
|
if bOpen then
|
||||||
DrillOnFaces.R.closed = true
|
DrillOnFaces.R.nbr = DrillOnFaces.R.nbr + 1
|
||||||
end
|
if bOnlyOnRef then DrillOnFaces.R.OnlyOnRef = true end
|
||||||
if bLong then
|
else
|
||||||
DrillOnFaces.R.long = true
|
DrillOnFaces.L.closed = true
|
||||||
if bOpen then DrillOnFaces.L.long = true end
|
end
|
||||||
|
if bLong then
|
||||||
|
DrillOnFaces.L.long = true
|
||||||
|
if bOpen then DrillOnFaces.R.long = true end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- faccia Right
|
||||||
|
elseif ( abs( ptDrill:getX() - ptPartMax:getX()) < dTol) then
|
||||||
|
DrillOnFaces.R.nbr = DrillOnFaces.R.nbr + 1
|
||||||
|
if bOnlyOnRef then DrillOnFaces.R.OnlyOnRef = true end
|
||||||
|
if bOpen then
|
||||||
|
DrillOnFaces.L.nbr = DrillOnFaces.L.nbr + 1
|
||||||
|
if bOnlyOnRef then DrillOnFaces.L.OnlyOnRef = true end
|
||||||
|
else
|
||||||
|
DrillOnFaces.R.closed = true
|
||||||
|
end
|
||||||
|
if bLong then
|
||||||
|
DrillOnFaces.R.long = true
|
||||||
|
if bOpen then DrillOnFaces.L.long = true end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
until true
|
until true
|
||||||
@@ -1574,33 +1578,33 @@ local function AddParts(RawParts, vPartsDoneManually)
|
|||||||
end
|
end
|
||||||
nOutline, nCnt = EgtGetSurfTmSilhouette( SolidId, Z_AX(), 10, nOutlineLayer, GDB_RT.GLOB)
|
nOutline, nCnt = EgtGetSurfTmSilhouette( SolidId, Z_AX(), 10, nOutlineLayer, GDB_RT.GLOB)
|
||||||
EgtBeamShowSolid( nPartId, false)
|
EgtBeamShowSolid( nPartId, false)
|
||||||
|
|
||||||
for nInd = 0, nCnt - 1 do
|
for nInd = 0, nCnt - 1 do
|
||||||
EgtSetName( nOutline + nInd, 'ON_TMP')
|
EgtSetName( nOutline + nInd, 'ON_TMP')
|
||||||
EgtSetStatus( nOutline + nInd, 0)
|
EgtSetStatus( nOutline + nInd, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
local nCurrOutline = nOutline
|
local nCurrOutline = nOutline
|
||||||
if nCnt > 0 then
|
if nCnt > 0 then
|
||||||
local frSum
|
local frSum
|
||||||
EgtScale( nOutline, GLOB_FRM(), 1, 1, 0, GDB_RT.GLOB)
|
EgtScale( nOutline, GLOB_FRM(), 1, 1, 0, GDB_RT.GLOB)
|
||||||
EgtModifyCurveExtrusion( nOutline, Z_AX(), GDB_RT.GLOB)
|
EgtModifyCurveExtrusion( nOutline, Z_AX(), GDB_RT.GLOB)
|
||||||
|
|
||||||
-- verifico che la prima curva sia l'unico loop esterno
|
-- verifico che la prima curva sia l'unico loop esterno
|
||||||
local vCrvRef = EgtCurveArea( nOutline)
|
local vtCrvRefN = EgtCurveArea( nOutline)
|
||||||
for nInd = 1, nCnt - 1 do
|
for nInd = 1, nCnt - 1 do
|
||||||
local vCrv = EgtCurveArea( nOutline + nInd)
|
local vtCrvN = EgtCurveArea( nOutline + nInd)
|
||||||
-- se trovo più loop esterni uso come contorno quello del box (quindi forzo nCurrOutline a nil)
|
-- se trovo più loop esterni uso come contorno quello del box (quindi forzo nCurrOutline a nil)
|
||||||
if abs( vCrv * vCrvRef - 1) < GEO.EPS_SMALL then
|
if vtCrvN and vtCrvRefN and AreSameVectorApprox( vtCrvN, vtCrvRefN) then
|
||||||
nCurrOutline = nil
|
nCurrOutline = nil
|
||||||
for nInd2 = 0, nCnt - 1 do
|
for nInd2 = 0, nCnt - 1 do
|
||||||
EgtErase( nOutline + nInd2)
|
EgtErase( nOutline + nInd2)
|
||||||
end
|
end
|
||||||
nCnt = 1
|
nCnt = 1
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--local frSum = EgtSurfFlatRegion(nOutlineLayer, nOutline)
|
--local frSum = EgtSurfFlatRegion(nOutlineLayer, nOutline)
|
||||||
--EgtSaveFile("c:\\Temp\\ProvaNesting.nge")
|
--EgtSaveFile("c:\\Temp\\ProvaNesting.nge")
|
||||||
-- -- per ogni contorno creo flat region e le sommo
|
-- -- per ogni contorno creo flat region e le sommo
|
||||||
@@ -1626,7 +1630,7 @@ local function AddParts(RawParts, vPartsDoneManually)
|
|||||||
-- EgtErase(nOutline + nIndex)
|
-- EgtErase(nOutline + nIndex)
|
||||||
-- end
|
-- end
|
||||||
end
|
end
|
||||||
|
|
||||||
if nCurrOutline and nCurrOutline ~= GDB_ID.NULL then
|
if nCurrOutline and nCurrOutline ~= GDB_ID.NULL then
|
||||||
nOutline = nCurrOutline
|
nOutline = nCurrOutline
|
||||||
else
|
else
|
||||||
@@ -1769,11 +1773,11 @@ local function AddParts(RawParts, vPartsDoneManually)
|
|||||||
end
|
end
|
||||||
-- aggiungo finestre
|
-- aggiungo finestre
|
||||||
for nInd = 1, nCnt - 1 do
|
for nInd = 1, nCnt - 1 do
|
||||||
local tmp1, tmp2, area = EgtCurveArea( nOutline + nInd)
|
local _, _, dArea = EgtCurveArea( nOutline + nInd)
|
||||||
if area > WD.NEST_HOLE_MIN_AREA then
|
if dArea and dArea > WD.NEST_HOLE_MIN_AREA then
|
||||||
EgtModifyCurveExtrusion( nOutline + nInd, Z_AX(), GDB_RT.GLOB)
|
EgtModifyCurveExtrusion( nOutline + nInd, Z_AX(), GDB_RT.GLOB)
|
||||||
EgtAutoNestAddHoleToPart( nPartId, nOutline + nInd)
|
EgtAutoNestAddHoleToPart( nPartId, nOutline + nInd)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- aggiungo aree di lavorazione del pezzo
|
-- aggiungo aree di lavorazione del pezzo
|
||||||
@@ -2177,21 +2181,33 @@ if bNestingOk then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se è lap joint dall'alto
|
-- se è lap joint dall'alto
|
||||||
if nFaceInd ~= -1 and nFaceDownInd == -1 then
|
if nFaceInd ~= -1 and nFaceDownInd == -1 then
|
||||||
|
local bResetQ = false
|
||||||
local ptCen = EgtSurfTmFacetCenter( Proc.Id, nFaceInd, GDB_ID.ROOT)
|
local ptCen = EgtSurfTmFacetCenter( Proc.Id, nFaceInd, GDB_ID.ROOT)
|
||||||
-- se all'interno rimuovo info Q
|
-- se all'interno rimuovo info Q
|
||||||
if EnclosesPointXY( b3Raw, ptCen) then
|
if EnclosesPointXY( b3Raw, ptCen) then
|
||||||
|
bResetQ = true
|
||||||
|
elseif Proc.Fct == 2 then
|
||||||
|
-- se non è interno ma ha 2 facce non ortogonali rimuovo info Q
|
||||||
|
local vtN1 = EgtSurfTmFacetNormVersor( Proc.Id, 0, GDB_ID.ROOT)
|
||||||
|
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
|
||||||
|
if abs( vtN1 * vtN2) > GEO.EPS_SMALL then
|
||||||
|
bResetQ = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if bResetQ then
|
||||||
-- resetto parametro Q
|
-- resetto parametro Q
|
||||||
if Proc.Prc == 30 then
|
if Proc.Prc == 30 then
|
||||||
EgtRemoveInfo( Proc.Id, "Q08")
|
EgtRemoveInfo( Proc.Id, "Q08")
|
||||||
EgtRemoveInfo( Proc.Id, "Q08A")
|
EgtRemoveInfo( Proc.Id, "Q08A")
|
||||||
else
|
else
|
||||||
EgtRemoveInfo( Proc.Id, "Q03")
|
EgtRemoveInfo( Proc.Id, "Q03")
|
||||||
EgtRemoveInfo( Proc.Id, "Q03A")
|
EgtRemoveInfo( Proc.Id, "Q03A")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif DoubleCut.Identify( Proc) then
|
elseif DoubleCut.Identify( Proc) then
|
||||||
-- verifico se due facce e rivolto verso l'alto
|
-- verifico se due facce e rivolto verso l'alto
|
||||||
if Proc.Fct == 2 then
|
if Proc.Fct == 2 then
|
||||||
|
|||||||
Reference in New Issue
Block a user