Files
Dario Sassi 056a58f256 DataDoors 2.7k1 :
- correzioni nella limitazione in Z di BOXGROOVE perchè va cambiata tra porte con serratura a destra e a sinistra.
2025-11-05 16:07:03 +01:00

1783 lines
76 KiB
Lua

-- Groove.lua by EgalWare s.r.l. 2025.11.05
-- Groove dati i valori 'L' e 'H' e 'T' e 'd' e 'p' e con nomi attributi
-- 2016.09.21 V1.011 FM aggiunta messaggi di wanrning
-- 2017.12.18 V1.011 FM Gestito uso una sola lama
-- 2017.12.19 V1.012 FM Gestito uso lama anche su groove non passante con percorsi pulitura
-- 2018.04.06 V1.018 FM Manage info (KeepBackSet) for adjust probe on Z
-- 2018.05.18 V1.019 FM Manage groove on narroow side
-- 2018.05.23 V1.01a FM Manage groove for all 4 sides
-- 2018.07.18 V1.01b FM Manage groove for new ddf parameters (DGD.FST, DGD.HST, DGD.LST)
-- 2018.10.17 V1.01c FM Add parameter to show into message 402
-- 2019.04.05 V1.01d FM Manage new version that not modify the blade path name by different lead-in and lead-out
-- but assign notes to a path
-- 2019.04.16 V1.01e FM Manage insert mill anti-splint path also on blade cuts
-- 2019.04.16 V1.01e FM Fix problem on mill anti-splint paths when distance on middle line is 0: Add dMinDist set to 0.0015mm parameter
-- 2019.04.29 V1.01f FM Manage max depth by blade parameter .MaxBd
-- 2019.05.14 V1.020 FM Manage antisplint path on Hinge side and opposite side (when they use different tool diameters)
-- 2019.10.18 V1.021 FM Manage steel option (disable to generate anti-splint paths)
-- 2019.10.18 V2.000 FM Manage use Materials
-- 2020.04.29 V2.001 FM Update for aluminum material
-- 2021.11.24 V2.002 FM Manage side probe option if variable DGC.Pms > 2
-- 2022.04.07 V2.003 FM Manage side step by blade parameter .StpBd
-- 2022.07.27 V2.004 FM Modification to use compiled code
-- 2022.08.31 V2.004 FM Manage groove applied on door with top angle
-- 2022.09.07 V2.005 FM Fix error on assigne a nil value by EgtIf intruction
-- 2024.10.17 V2.006 FM Improve multiple blade step (on Z dir) when wide groobe is bigger than double blade thickness
-- 2024.10.30 V2.007 FM Manage a new .alw parameter to allow width door bigger than door thickness and
-- when blade is enables, get the mill max thickness as blade thickness in case mill is used instead blade
-- 2025.01.20 V2.008 FM Manage a new .slb parameter to set to force use 1 blade for machining LH side.
-- 2025.10.19 V2.7j1 DS Aggiunto BOXGROOVE anche nel caso di lama sul top della porta.
-- 2025.10.22 V2.7j2 DS Il box precedente è limitato alla sola parte che interseca la porta (per evitare problemi successivi con spessore porta).
-- 2025.10.22 V2.7k1 DS Correzione del punto precedente per porte con serratura a destra o a sinistra.
-- Tavola per definizione modulo (serve ma non usata)
local Groove = {}
-- Intestazioni
require( 'EgtBase')
EgtEnableDebug( false)
-- per messaggi
-- EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
EgtAddToPackagePath( DGD.BASEDIR .. '?.lua')
-- Valori limite
local dExtraH = 0.25
local DgMin = 3. -- valore minimo diametro utensile
local PtMin = 0.1
local PtMax = 1.0
-- valore globale di settaggio
local nNewLeadInOutMode = true
local function DrawAddLineDrawCircle( pInitial, pFinal, nGroup, idTable, bPrev, nGroupCirc,
nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar)
local nLine = EgtLine(nGroup, pInitial, pFinal, GDB_RT.LOC)
local nNumLine
if idTable then
table.insert( idTable, nLine)
-- se devo inserire una variazione nell'entità
if sMVar then
nNumLine = #idTable
end
end
if bPrev then
if bDrawFirst then
local nCircle1 = EgtCircle( nGroupCirc, pInitial, nRad , GDB_RT.LOC)
EgtSetColor( nCircle1, cColor1)
end
if bDrawLast then
local nCircle2 = EgtCircle( nGroupCirc, pFinal, nRad , GDB_RT.LOC)
EgtSetColor( nCircle2, cColor2)
end
end
return nLine, nNumLine, sMVar
end
local function GetMachToolErrorMessage( nErrorId, sGeomName, dIdMach, dOriDiamTool, nIdLogErr, sMchngName)
local EgtDoorsMsg = require( 'EgtDoorsMsg')
local sMessage = ''
if dOriDiamTool then
if nErrorId == -1 then -- lavorazione non presente in tabella
sMessage = string.format(EgtDoorsMsg[466], nIdLogErr, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -2 then -- errore nel settare la lavorazione, lavorazione non presente in libreria
sMessage = string.format(EgtDoorsMsg[467], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -3 then -- errore nell'acquisire parametri lavorazione
sMessage = string.format(EgtDoorsMsg[468], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -4 then -- errore nell'acquisire parametri lavorazione
sMessage = string.format(EgtDoorsMsg[469], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -5 then -- diametro utensile non trovato
sMessage = string.format(EgtDoorsMsg[470], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -6 then -- nome geometria non presente in tabella
sMessage = string.format(EgtDoorsMsg[471], nIdLogErr, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -7 then -- altezza massima utensile non trovata
sMessage = string.format(EgtDoorsMsg[472], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool))
elseif nErrorId == -8 then -- tabella non presente nelle note
sMessage = string.format(EgtDoorsMsg[509], nIdLogErr)
end
elseif nErrorId == -1 then -- lavorazione non presente in tabella
sMessage = string.format(EgtDoorsMsg[504], nIdLogErr, dIdMach, sGeomName)
elseif nErrorId == -2 then -- errore nel settare la lavorazione
sMessage = string.format(EgtDoorsMsg[505], nIdLogErr, sMchngName, dIdMach, sGeomName)
elseif nErrorId == -3 then -- errore nell'acquisire parametri lavorazione
sMessage = string.format(EgtDoorsMsg[506], nIdLogErr, sMchngName, dIdMach, sGeomName)
elseif nErrorId == -4 then -- errore nell'acquisire parametri lavorazione
sMessage = string.format(EgtDoorsMsg[507], nIdLogErr, sMchngName, dIdMach, sGeomName)
elseif nErrorId == -5 then -- diametro utensile non trovato
sMessage = string.format(EgtDoorsMsg[508], nIdLogErr, sMchngName, dIdMach, sGeomName)
elseif nErrorId == -6 then -- nome geometria non presente in tabella
sMessage = string.format(EgtDoorsMsg[503], nIdLogErr, sGeomName)
elseif nErrorId == -7 then -- altezza massima utensile non trovata
sMessage = string.format(EgtDoorsMsg[473], nIdLogErr, sMchngName, dIdMach, sGeomName)
elseif nErrorId == -8 then -- tabella non presente nelle note
sMessage = string.format(EgtDoorsMsg[509], nIdLogErr)
end
return sMessage
end
-- Funzione di sistemazione parametri
function Groove.AdjustParams( tMhPar)
tMhPar.invG = 1
local EgtDoorsMsg = require( 'EgtDoorsMsg')
local dMaxMat0
local dMaxMat1
local dMaxMat2
local dMaxMat3
local dMaxMat4
local dMaxMat5
local dMaxMat6
local dNumMessage
local dNumLog = 0
local sMessToOut = ''
local nTempT0
local nTempT1
local nTempT2
local nTempT3
local nTempT4
local nTempT5
local nTempT6
local sMchngName0
local sMchngName1
local sMchngName2
local sMchngName3
local sMchngName4
local sMchngName5
local sMchngName6
local nThBl0
local nThBl1
local nThBl2
local nThBl3
local nThBl4
local nThBl5
local nThBl6
-- Assegno parametri da ddf
if DGD.WIDTH then
tMhPar.H = DGD.WIDTH
end
if DGD.DEPTH then
tMhPar.T = DGD.DEPTH
tMhPar.T3 = DGD.DEPTH
end
-- do errore se altezza cava maggiore o uguale dello spessore porta
if ( not tMhPar.alw or tMhPar.alw == 0 ) and ( tMhPar.H - DGD.dT) >= GEO.EPS_SMALL then
return tMhPar, 2499, string.format(EgtDoorsMsg[540], tMhPar.Nome, tMhPar.H, DGD.dT, tMhPar.Path)
end
-- disattivo il radius face
tMhPar.rf = 0
-- se attivato groove che sborda dal lato narrow forzo alcune caratteristiche
if tMhPar.grs then
tMhPar.bl = false -- disattivo lama
tMhPar.LCC = nil -- disattivo pulitura spigoli
DGD.GRS = true
else
DGD.GRS = false
end
if DGD.Lock == 'R' then tMhPar.invG = -tMhPar.invG end
if DGD.Push then tMhPar.invG = -tMhPar.invG end
-- disattivo la lama se la cava è più grande di una certa quota
if tMhPar.MaxBl and tMhPar.H and tMhPar.H > tMhPar.MaxBl then
tMhPar.bl = false
end
-- disattivo la lama se la cava è più profonda di una certa quota
if tMhPar.MaxBd and tMhPar.T and tMhPar.T > tMhPar.MaxBd then
tMhPar.bl = false
end
-- se non ho il parametro lo setto disattivato
if not tMhPar.ech then
tMhPar.ech = false
end
-- se non c'è la variabile suffisso
if not tMhPar.CH then
tMhPar.CH = '_Chisel'
end
if DGD.SIDE == 'hinge' or DGD.SIDE == 'lock' then -- se groove sui fianchi
-- se è di tipo side la trasformo in center
if DGD.TYPE == 'side' then
DGD.TYPE = 'center'
end
end
if DGD.TYPE == 'center' then
tMhPar.L = DGD.LENGTH - ( 2 * tMhPar.Red)
if not tMhPar.fbagt then
tMhPar.bl = false -- disattivo la lama in caso lo fosse
end
-- se ho specificato gli spessori degli styles
if DGD.HST and DGD.LST then
if ( DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat' or DGD.SIDE == 'bottom') then -- se groove disposto sui lati top o bottom
-- considerando che la porta di base è RH, D_X è positivo se lo spessore style lato lock > style lato hinge
tMhPar.D_X = (DGD.LST - DGD.HST)/2
else -- altrimenti se groove disposta su lato lock calcolo il D_X per portarsi in centro
tMhPar.D_X = 0
end
end
elseif DGD.TYPE == 'side' then
tMhPar.L = DGD.LENGTH - tMhPar.Red
if not tMhPar.fbagt then
tMhPar.bl = false -- disattivo la lama in caso lo fosse
end
else -- thru
tMhPar.L = DGD.LENGTH
tMhPar.ech = false -- disattivo chisel se groove passante
tMhPar.LCC = nil -- disattivo pulitura spigoli
end
-- in caso il lato sia top o bottom e ci sia il delta controllo se la cava sborda sulla larghezza
if tMhPar.D_X then
if ( DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat' or DGD.SIDE == 'bottom') and ( (2*abs(tMhPar.D_X)) + tMhPar.L) >= DGD.SIDELENGTH then
return tMhPar, 2492, string.format(EgtDoorsMsg[634], tMhPar.Nome, tMhPar.Path)
end
end
-- se non ho parametro step o è 0 lo assegno uguale allo spessore cava
if not tMhPar.s or abs(tMhPar.s) < GEO.EPS_SMALL then
tMhPar.s = tMhPar.T
end
-- se porta steel o aluminum disabilito la svuotatura, la mortasa e i fori e modifico il nome geometria
if FindMaterial( DGD.Material, 'steel') or FindMaterial( DGD.Material, 'aluminum') then
tMhPar.LA = nil
tMhPar.ech = false
tMhPar.CH = nil
tMhPar.est = true
tMhPar.d2 = nil
else
tMhPar.est = nil
end
-- Assegno parametri da dati utensili in macchina
local MB = require( 'MachiningBase')
local sLM
local nLMi = 1
local sLA
local nLAi = 1
local sLAH
local nLAHi = 1
local sLAL
local nLALi = 1
local sLBM
local nLBMi = 1
local sLG
local nLGi = 1
local sLCC
local nLCCi = 1
if tMhPar.LM then -- geometria groove
sLM = tMhPar.LM
end
if tMhPar.LA then -- geometria antischeggia groove
sLA = tMhPar.LA
end
if tMhPar.LA then -- geometria antischeggia groove lato hinge
if DGD.SIDE == 'lock' or DGD.SIDE == 'hinge' then -- se lati lunghi
sLAH = tMhPar.LA
else
sLAH = tMhPar.LA .. '_HNG'
if DGD.SDF and DGD.SDF > 1 then
sLAL = tMhPar.LA .. '_LK'
tMhPar.d6 = tMhPar.d2
tMhPar.T6 = tMhPar.T2
end
end
tMhPar.d5 = tMhPar.d2
tMhPar.T5 = tMhPar.T2
end
if tMhPar.LBM then -- geometria groove con lama
sLBM = tMhPar.LBM
end
if tMhPar.ech and tMhPar.LG then -- se chisel abilitato
sLG = tMhPar.LG .. tMhPar.CH
tMhPar.d0 = 0
if DGD.MachEn > 0 and tMhPar.d0 then nTempT0, dMaxMat0, sMchngName0 = MB.GetToolDataFromAttrib( sLG, nLGi) end
end
if tMhPar.LCC then -- geometria pulizia spigoli
sLCC = tMhPar.LCC
end
if DGD.MachEn > 0 and sLM and tMhPar.d and not tMhPar.bl then
nTempT1, dMaxMat1, sMchngName1, nThBl1 = MB.GetToolDataFromAttrib( sLM, nLMi)
end
if DGD.MachEn > 0 and sLA and tMhPar.d2 and not ( tMhPar.bl and not tMhPar.uab) and DGD.TYPE ~= 'center' then
nTempT2, dMaxMat2, sMchngName2, nThBl2 = MB.GetToolDataFromAttrib( sLA, nLAi)
end
if DGD.MachEn > 0 and sLBM and tMhPar.d3 and tMhPar.bl then
nTempT3, dMaxMat3, sMchngName3, nThBl3 = MB.GetToolDataFromAttrib( sLBM, nLBMi, nil, true)
end
if DGD.MachEn > 0 and sLCC and tMhPar.d4 and tMhPar.bl and DGD.TYPE ~= 'thru' then
nTempT4, dMaxMat4, sMchngName4, nThBl4 = MB.GetToolDataFromAttrib( sLCC, nLCCi)
end
if DGD.MachEn > 0 and sLAH and tMhPar.d5 and not ( tMhPar.bl and not tMhPar.uab) and DGD.TYPE ~= 'center' then
nTempT5, dMaxMat5, sMchngName5, nThBl5 = MB.GetToolDataFromAttrib( sLAH, nLAHi)
end
if DGD.MachEn > 0 and sLAL and tMhPar.d6 and not ( tMhPar.bl and not tMhPar.uab) and DGD.TYPE ~= 'center' then
nTempT6, dMaxMat6, sMchngName6, nThBl6 = MB.GetToolDataFromAttrib( sLAL, nLALi)
end
-- se devo disegnare le geometrie di lavorazione
if DGD.MachEn > 0 then
-- gestisco il risultato della lettura utensili
if tMhPar.d and nTempT1 and nTempT1 <= 0 then -- utensile fresatura
if DGD.bProoduce and not tMhPar.bl then
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT1, sLM, nLMi, tMhPar.d, dNumLog, sMchngName1)
end
elseif nTempT1 then
tMhPar.d = nTempT1
end
if tMhPar.d2 and nTempT2 and nTempT2 <= 0 then -- utensile antischeggia
if DGD.bProoduce and not tMhPar.bl and DGD.TYPE ~= 'center' then
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT2, sLA, nLAi, tMhPar.d2, dNumLog, sMchngName2)
end
elseif nTempT2 then
tMhPar.d2 = nTempT2
end
if tMhPar.d5 and nTempT5 and nTempT5 <= 0 then -- utensile antischeggia lato hinge
if DGD.bProoduce and not tMhPar.bl and DGD.TYPE ~= 'center' then
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT5, sLAH, nLAHi, tMhPar.d5, dNumLog, sMchngName5)
end
elseif nTempT5 then
tMhPar.d5 = nTempT5
end
if tMhPar.d6 and nTempT6 and nTempT6 <= 0 then -- utensile antischeggia lato lock
if DGD.bProoduce and not tMhPar.bl and DGD.TYPE ~= 'center' then
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT6, sLAL, nLALi, tMhPar.d6, dNumLog, sMchngName6)
end
elseif nTempT6 then
tMhPar.d6 = nTempT6
end
if tMhPar.d3 and nTempT3 and nTempT3 <= 0 then -- lama
if DGD.bProoduce and tMhPar.bl then -- se utilizzo la lama
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT3, sLBM, nLMMi, tMhPar.d3, dNumLog, sMchngName3)
end
elseif nTempT3 then
tMhPar.d3 = nTempT3
if nThBl3 and nThBl3 > 0 then tMhPar.thb = nThBl3 end
end
-- chiseling
if tMhPar.ech and tMhPar.d0 and nTempT0 > 0 then
tMhPar.d0 = nTempT0
end
if tMhPar.d4 and nTempT4 and nTempT4 <= 0 then -- utensile ripresa angoli
if DGD.bProoduce and tMhPar.bl and DGD.TYPE ~= 'thru' then
dNumLog = -2496
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT4, sLCC, nLCCi, tMhPar.d4, dNumLog, sMchngName4)
end
elseif nTempT4 then
tMhPar.d4 = nTempT4
end
-- se la profondità della groove è maggiore della capacità utensile limito la profondità ed emetto un warning
if not tMhPar.bl and tMhPar.T and dMaxMat1 and tMhPar.T > dMaxMat1 then
dNumLog = -2498
dNumMessage = 461
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat1))
tMhPar.T = dMaxMat1 - 0.02 -- tolgo 0.05 per permettere la lavorazione
end
-- se la profondità antischeggia è maggiore della capacità utensile limito la profondità ed emetto un warning
if not tMhPar.bl and tMhPar.T2 and dMaxMat2 and tMhPar.T2 > dMaxMat2 then
dNumLog = -2497
dNumMessage = 541
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat2))
tMhPar.T2 = dMaxMat2 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
-- se la profondità antischeggia lato hinge è maggiore della capacità utensile limito la profondità ed emetto un warning
if not tMhPar.bl and tMhPar.T5 and dMaxMat5 and tMhPar.T5 > dMaxMat5 then
dNumLog = -2491
dNumMessage = 541
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T5), EgtToUiUnits(dMaxMat5))
tMhPar.T5 = dMaxMat5 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
-- se la profondità antischeggia lato lock è maggiore della capacità utensile limito la profondità ed emetto un warning
if not tMhPar.bl and tMhPar.T6 and dMaxMat6 and tMhPar.T6 > dMaxMat6 then
dNumLog = -2489
dNumMessage = 541
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T6), EgtToUiUnits(dMaxMat6))
tMhPar.T6 = dMaxMat6 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
-- se la profondità della groove è maggiore della capacità lama limito la profondità ed emetto un warning
if tMhPar.bl and tMhPar.T and dMaxMat3 and tMhPar.T > dMaxMat3 then
dNumLog = -2495
dNumMessage = 461
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat3))
tMhPar.T = dMaxMat3
end
if tMhPar.bl and tMhPar.H and nThBl3 and ( tMhPar.H - nThBl3) < -GEO.EPS_SMALL then
dNumLog = -2494
dNumMessage = 542
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.H), EgtToUiUnits(nThBl3))
end
-- se la profondità della groove è maggiore della capacità utensile ripresa antispigolo limito la profondità del percorso di questo ed emetto un warning
if tMhPar.bl and DGD.TYPE ~= 'thru' and tMhPar.T and dMaxMat4 and tMhPar.T > dMaxMat4 then
dNumLog = -2493
dNumMessage = 612
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat4))
tMhPar.T3 = dMaxMat4 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
end
if dNumLog ~= 0 then
return tMhPar, dNumLog, sMessToOut
end
return tMhPar, 0, ''
end
-- Funzione di disegno
function Groove.Draw( tOHead, bPreview, bRunByCompo, nDrawMach, dThickDoor)
-- Assegno le dimensioni
local L = tOHead.L
local H = tOHead.H
local T = tOHead.T
local d = tOHead.d
local p = tOHead.p
local s = tOHead.s
local T2 = tOHead.T2
local T5 = tOHead.T5
local T6 = tOHead.T6
local d2 = tOHead.d2
local d5 = tOHead.d5
local d6 = tOHead.d6
local grs = tOHead.grs
local rf = tOHead.rf
local uab = tOHead.uab
local bl = tOHead.bl
local f1b = tOHead.f1b -- force 1 blade (RH side)
local slb = tOHead.slb -- set for LH side (only if use 1 blade)
local d3 = tOHead.d3 -- blade diameter
local red = tOHead.Red
local thb = tOHead.thb
local ech = tOHead.ech
local est = tOHead.est
local kbs = tOHead.kbs -- keep backset/thicknesss (0: none, 1: only face, 2: all)
local pbs = tOHead.pbs
local T3 = tOHead.T3 -- clean corner thickness path
local d4 = tOHead.d4 -- clean corner diameter tool
local invG = tOHead.invG -- push door flag
local D_X = tOHead.D_X -- delta position along length
local StpBd = tOHead.StpBd -- side step blade
-- Assegno i nomi geometrie
local LG = tOHead.LG -- nome geometria groove
local LM = tOHead.LM -- nome lavorazione groove con fresa
local LA = tOHead.LA -- nome geometria antischeggia
local LAM = tOHead.LAM -- nome lavorazione groove antischeggia con lama
local LAMU = tOHead.LAMU -- nome lavorazione groove UP antischeggia con lama
local LBM = tOHead.LBM -- nome lavorazione groove con lama
local LBMU = tOHead.LBMU -- nome lavorazione groove UP con lama
local LCC = tOHead.LCC -- nome lavorazione pulitura spigoli
local CH = tOHead.CH -- suffisso lavorazione chisel
local DM = 'DUMMY'
-- variabili per messaggi e settaggi vari
local sCompoName = tOHead.Nome
local nCompoNpar = tOHead.Npar
local sCompoPath = tOHead.Path
-- eventuale messaggio errore rilevato nell'adjust
local nCodAdj = tOHead.nCod
local sCodAdj = tOHead.sCod
-- nomi parametri per messaggi
local sNamePar1 = tOHead.N1 or 'L'
local sNamePar2 = tOHead.N2 or 'H'
local sNamePar3 = tOHead.N3 or 'T'
local sNamePar4 = tOHead.N4 or 'd'
local sNamePar5 = tOHead.N5 or 'p'
local sNamePar6 = tOHead.N6 or 'd2'
local sNamePar7 = tOHead.N7 or 'd5'
local sNamePar8 = tOHead.N8 or 'd6'
local sNamePar12 = tOHead.N12 or 'T2'
local sNamePar13 = tOHead.N13 or 'T5'
local sNamePar14 = tOHead.N14 or 'T6'
local sNamePar15 = tOHead.N15 or 's'
local sNamePar16 = tOHead.N16 or 'red'
local sNamePar17 = tOHead.N17 or 'rf'
-- impronta lama
local dExLenBl = 0
-- RunByComponetInterface
local RC = true
-- Messaggi codice errori
local EM = ' '
local EC = 0
local ErrorBase = 2400
-- variabili che abilitano la creazione della geometria
local bMakeMortGeom = true
local bMakeAsGeom = true
if not bRunByCompo then -- controllo se lanciato da componente
RC = false
end
-- verifico se dei parametri sono nulli e in qual caso assegno dei valori sostitutivi
-- o setto la disabilitazione della creazione di alcune geometrie
if not L or not H then
bMakeMortGeom = false
end
if not D_X then D_X = 0 end
if not T then T = 0 end
if not T2 then T2 = 0 end
if not T5 then T5 = 0 end
if not T6 then T6 = 0 end
if not thb then thb = 0 end
if not StpBd or abs(StpBd) < 1 then StpBd = T + 0.1 end
-- se ho abilitato il chiseling modifico il nome geometria
if ech then
LG = LG .. CH
tOHead.LG = LG
end
-- variabile larghezza porta
local dWidthDoor
local dWidthShape = L
-- se il tipo di cava non è passante disabilito la generazione dei percorsi anti-scheggia
if DGD.TYPE == 'center' or ( bl and not uab) then
bMakeAsGeom = false
elseif DGD.TYPE == 'side' then -- se sborda da un lato aumento del raggio fresa + 0.5mm
dWidthDoor = L + red
if not bl then
L = L + ( d / 2) + 0.5
end
else
dWidthDoor = L
if not bl then
L = L + d + 1 -- se sborda da due lati aumento del diametro fresa + 1mm
end
end
-- se posso inserire antischeggia
if bMakeAsGeom then
-- se diametro utensile antischeggia lato lock e porta ad angolo
if d2 and DGD.Tpa then
-- Se applicato su lato inclinato o applicato su lato piatto e lock si trova dalla parte opposta al lato piatto
if DGD.SIDE == 'top_angle' or
( DGD.SIDE == 'top_flat' and ( ( DGD.Lock == 'L' and DGD.tProfs.top.angle > 0) or ( DGD.Lock == 'R' and DGD.tProfs.top.angle < 0))) then
d2 = nil
end
end
-- se diametro utensile antischeggia lato LOCK (con shuttle lato lock) e porta ad angolo
if d6 and DGD.Tpa then
-- Se applicato su lato inclinato o applicato su lato piatto e hinge si trova dalla parte opposta al lato piatto
if DGD.SIDE == 'top_angle' or
( DGD.SIDE == 'top_flat' and ( ( DGD.Lock == 'L' and DGD.tProfs.top.angle > 0) or ( DGD.Lock == 'R' and DGD.tProfs.top.angle < 0))) then
d6 = nil
end
end
-- se diametro utensile antischeggia lato HINGE e porta ad angolo
if d5 and DGD.Tpa then
-- Se applicato su lato inclinato o applicato su lato piatto e hinge si trova dalla parte opposta al lato piatto
if DGD.SIDE == 'top_angle' or
( DGD.SIDE == 'top_flat' and ( ( DGD.Lock == 'R' and DGD.tProfs.top.angle > 0) or ( DGD.Lock == 'L' and DGD.tProfs.top.angle < 0))) then
d5 = nil
end
end
end
-- 0 solo geom esterna, 1 solo geom mach, 2 entrambe
if not nDrawMach then -- se non definita la setto per non creare geometria di lavorazione
nDrawMach = 0
end
local EgtDoorsMsg = require( 'EgtDoorsMsg')
-- Verifica delle dimensioni, le condizioni vengono verificate in base a quale geometria deve essere creata
if bMakeMortGeom and nDrawMach > 0 and not bl and d < DgMin then
EC = 1
EM = string.format(EgtDoorsMsg[400],sNamePar4,EgtToUiUnits(d),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di
d = DgMin
elseif bMakeMortGeom and bMakeAsGeom and nDrawMach > 0 and not bl and d2 and d2 < DgMin then
EC = 2
EM = string.format(EgtDoorsMsg[400],sNamePar6,EgtToUiUnits(d2),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di
d2 = DgMin
elseif bMakeMortGeom and nDrawMach > 0 and not grs and not bl and H <= d then
if DGD.bProoduce then
EC = 3
EM = string.format(EgtDoorsMsg[402],sNamePar2,EgtToUiUnits(H),sNamePar4,EgtToUiUnits(d), sCompoPath) -- il parametro 'H' deve essere maggiore al diametro utensile d
H = d + 0.002
else
d = H - 0.002
end
elseif bMakeMortGeom and nDrawMach > 0 and not bl and L <= d then
if DGD.bProoduce then
EC = 4
EM = string.format(EgtDoorsMsg[402],sNamePar1,EgtToUiUnits(L),sNamePar4,EgtToUiUnits(d), sCompoPath) -- il parametro 'L' deve essere maggiore al diametro utensile d
L = d + 0.002
else
d = L - 0.002
end
elseif bMakeMortGeom and bMakeAsGeom and not grs and nDrawMach > 0 and not bl and d2 and H <= d2 then
if DGD.bProoduce then
EC = 5
EM = string.format(EgtDoorsMsg[402],sNamePar2,EgtToUiUnits(H),sNamePar6,EgtToUiUnits(d2), sCompoPath) -- il parametro 'H' deve essere maggiore al diametro utensile d2
H = d2 + 0.002
else
d2 = H - 0.002
end
elseif bMakeMortGeom and nDrawMach > 0 and not bl and ( p < PtMin or p > PtMax) then
EC = 6
EM = string.format(EgtDoorsMsg[403],sNamePar5,p,PtMin,PtMax, sCompoPath) -- il parametro 'p' deve essere compreso tra
p = 0.8
elseif bMakeMortGeom and T < 0 then
EC = 7
EM = string.format(EgtDoorsMsg[404],sNamePar3,EgtToUiUnits(T), sCompoPath) -- il parametro 'T' deve essere >= 0
T = 0
elseif bMakeMortGeom and bMakeAsGeom and T2 < 0 then
EC = 8
EM = string.format(EgtDoorsMsg[404],sNamePar12,EgtToUiUnits(T2), sCompoPath) -- il parametro 'T2' deve essere >= 0
T2 = 0
elseif bMakeMortGeom and nDrawMach > 0 and not bl and s and s <= 0 then
EC = 9
EM = string.format(EgtDoorsMsg[401],sNamePar15,EgtToUiUnits(s), sCompoPath) -- il parametro 's' deve essere > 0
s = d
elseif bMakeMortGeom and nDrawMach > 0 and grs and rf and L and 2*rf >= L and DGD.TYPE == 'center' then
EC = 10
EM = string.format(EgtDoorsMsg[406],sNamePar17,EgtToUiUnits(rf),sNamePar1..'/2',EgtToUiUnits(L/2), sCompoPath) -- il parametro 'rf' deve essere < del parametro L/2
rf = d/2
elseif bMakeMortGeom and nDrawMach > 0 and grs and H and rf and rf >= H then
EC = 11
EM = string.format(EgtDoorsMsg[406],sNamePar17,EgtToUiUnits(rf),sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'rf' deve essere < del parametro H
rf = H/2
elseif bMakeMortGeom and nDrawMach > 0 and bl and DGD.TYPE ~= 'thru' then
if DGD.TYPE ~= 'thru' then
local dR3 = d3/2
local dDt = dR3 - T
dExLenBl = sqrt( (dR3 * dR3) - ( dDt * dDt))
end
if DGD.TYPE == 'side' and ( L - dExLenBl) <= 0 then
EC = 12
EM = string.format(EgtDoorsMsg[407],sNamePar1,EgtToUiUnits(L), 'BladeResult', EgtToUiUnits(dExLenBl), sCompoPath) -- il parametro 'T2' deve essere >= 0
elseif DGD.TYPE == 'center' and ( L - ( 2*dExLenBl)) <= 0 then
EC = 13
EM = string.format(EgtDoorsMsg[407],sNamePar1,EgtToUiUnits(L), 'BladeResult', EgtToUiUnits(dExLenBl*2), sCompoPath) -- il parametro 'T2' deve essere >= 0
end
elseif bMakeMortGeom and bMakeAsGeom and nDrawMach > 0 and not bl and d5 and d5 < DgMin then
EC = 14
EM = string.format(EgtDoorsMsg[400],sNamePar7,EgtToUiUnits(d5),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di
d5 = DgMin
elseif bMakeMortGeom and bMakeAsGeom and nDrawMach > 0 and not bl and d6 and d6 < DgMin then
EC = 17
EM = string.format(EgtDoorsMsg[400],sNamePar8,EgtToUiUnits(d6),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di
d6 = DgMin
elseif bMakeMortGeom and bMakeAsGeom and not grs and nDrawMach > 0 and not bl and d5 and H <= d5 then
if DGD.bProoduce then
EC = 15
EM = string.format(EgtDoorsMsg[402],sNamePar2,EgtToUiUnits(H),sNamePar7,EgtToUiUnits(d5), sCompoPath) -- il parametro 'H' deve essere maggiore al diametro utensile d5
H = d5 + 0.002
else
d5 = H - 0.002
end
elseif bMakeMortGeom and bMakeAsGeom and not grs and nDrawMach > 0 and not bl and d6 and H <= d6 then
if DGD.bProoduce then
EC = 18
EM = string.format(EgtDoorsMsg[402],sNamePar2,EgtToUiUnits(H),sNamePar8,EgtToUiUnits(d6), sCompoPath) -- il parametro 'H' deve essere maggiore al diametro utensile d6
H = d6 + 0.002
else
d6 = H - 0.002
end
elseif bMakeMortGeom and bMakeAsGeom and T5 < 0 then
EC = 16
EM = string.format(EgtDoorsMsg[404],sNamePar13,EgtToUiUnits(T5), sCompoPath) -- il parametro 'T5' deve essere >= 0
T5 = 0
elseif bMakeMortGeom and bMakeAsGeom and T6 < 0 then
EC = 19
EM = string.format(EgtDoorsMsg[404],sNamePar14,EgtToUiUnits(T6), sCompoPath) -- il parametro 'T6' deve essere >= 0
T5 = 0
end
if not bPreview and EC ~= 0 then
return (ErrorBase+EC), EM
end
-- Se Preview cancello tutto
if bPreview then
EgtNewFile()
EgtSetDefaultMaterial( BLACK())
end
-- Pezzo e Layer
local Pz
if bPreview then
Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- nuovo pezzo
else
if not RC then
Pz = EgtGetCurrPart() -- pezzo corrente
end
if not Pz then
Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- nuovo pezzo
end
end
-- variabili dei percorsi geometrici
local Lg, Dm
local nGeom1
local nPkToJoin1, nPkToJoin2, nPkToJoin3, nPkToJoin4
local hint1, hint2, hint3, hint4, hint5, hint6, hintAs, hintAsR
local CleanCor2 = {}
local tPocketAs = {}
local pIni, pEnd
local dMinDist = 0
Lg = EgtGroup(Pz,GDB_RT.LOC) -- layer della figura principale
EgtSetName(Lg,sCompoName)
if nDrawMach > 0 then -- se abilitata geometria lavorazione
Dm = EgtGroup( Pz, GDB_RT.LOC) -- layer disegni cerchi rappresentante il diametro utensile
EgtSetName( Dm, DM)
end
-- geometria antischeggia
if bMakeAsGeom and nDrawMach > 0 then
if grs then -- se groove on side
if DGD.TYPE == 'thru' then -- de groove passante (antisplint da entrambe i lati)
-- se lato lock lavorato con shuttle
if d6 and T6 and not( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
d2 = d6
T2 = T6
end
-- disegno secondo percorso (lato lock) |__ <--
if d2 then -- se parametro diametro utensile valido
if invG > 0 then -- --> __|
pIni = Point3d(-(d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(T-(d2/2)+dExtraH,-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d2/2)+dExtraH,(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
else -- |__ <--
pIni = Point3d((d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(-(T-(d2/2)+dExtraH),-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(T-(d2/2)+dExtraH),(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
end
-- creo percorso
hintAsR = EgtCurveCompo( Lg, tPocketAs, true)
-- posizionamento geometria
local dAngleRot = -90
local sNamePR
if hintAsR and LA and ( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
sNamePR = LA
elseif LA then
sNamePR = LA ..'_LK'
end
if invG > 0 then
dAngleRot = 90
end
if hintAsR then -- se esiste secondo percorso
EgtModifyCurveThickness( hintAsR, -T2)
-- assegno nome percorso
EgtSetName( hintAsR, sNamePR)
EgtRotate( hintAsR, ORIG(), Y_AX(), dAngleRot ) -- ruoto su faccia laterale opposta
if invG > 0 then
EgtMove( hintAsR, Point3d((dWidthDoor/2),0,0) - ORIG())
EgtInvertCurve(hintAsR)
else
EgtMove( hintAsR, Point3d(-(dWidthDoor/2),0,0) - ORIG())
end
if kbs and kbs > 1 then
EgtSetInfo( hintAsR, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto lato narrow
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAsR, 'ProbeSide', '1')
end
if DGD.SIDE and ( DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat') then
EgtInvertCurve(hintAsR)
end
end
end
end
if DGD.TYPE ~= 'center' then -- se groove non in centro
-- disegno primo percorso (lato hinge) --> __|
if d5 then -- se parametro valido
tPocketAs = {}
if invG > 0 then -- |__ <--
pIni = Point3d((d5*3/4),-(H-(d5/2)+dExtraH),0)
pEnd = Point3d(-(T-(d5/2)+dExtraH),-(H-(d5/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(T-(d5/2)+dExtraH),(d5*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
else -- --> __|
pIni = Point3d(-(d5*3/4),-(H-(d5/2)+dExtraH),0)
pEnd = Point3d(T-(d5/2)+dExtraH,-(H-(d5/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d5/2)+dExtraH,(d5*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
end
hintAs = EgtCurveCompo( Lg, tPocketAs, true)
end
-- posizionamento geometria
local dAngleRot = 90
local sNameP
if hintAs and LA and ( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
sNameP = LA
elseif LA then
sNameP = LA ..'_HNG'
end
if invG > 0 then
dAngleRot = -90
end
if hintAs then -- se esiste primo percorso
EgtModifyCurveThickness( hintAs, -T5)
-- assegno nome percorso
EgtSetName( hintAs, sNameP)
-- rotazione percorso
EgtRotate( hintAs, ORIG(), Y_AX(), dAngleRot ) -- ruoto su faccia laterale
EgtSetInfo( hintAs, 'UseBlade', bl)
EgtSetInfo( hintAs, 'UseTwiceBl', not f1b)
EgtSetInfo( hintAs, 'SideApp', EgtIf( DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat', 'top', DGD.SIDE))
if invG > 0 then
EgtMove( hintAs, Point3d(-(dWidthDoor/2),0,0) - ORIG())
else
EgtMove( hintAs, Point3d((dWidthDoor/2),0,0) - ORIG())
EgtInvertCurve(hintAs)
end
if kbs and kbs > 1 then
EgtSetInfo( hintAs, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto lato narrow
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs, 'ProbeSide', '1')
end
if DGD.SIDE and ( DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat') then
EgtInvertCurve(hintAs)
end
end
end
else -- groove normale
if DGD.TYPE == 'thru' then -- se groove passante (antisplint da entrambe i lati)
-- se lato lock lavorato con shuttle
if d6 and T6 and not( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
d2 = d6
T2 = T6
end
-- disegno secondo percorso (lato lock)
if d2 then -- se parametro valido
if abs(H-d2+(2*dExtraH)) <= GEO.EPS_SMALL then -- se distanza punti inconsistente, aggiungo 0.0015mm per fare almeno una piccola linea
dMinDist = 0.0015
end
pIni = Point3d(-(d2*3/4),-((H-d2+dMinDist)/2)-dExtraH,0)
pEnd = Point3d(T-(d2/2)+dExtraH,-((H-d2+dMinDist)/2)-dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d2/2)+dExtraH,((H-d2+dMinDist)/2)+dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(d2*3/4),((H-d2+dMinDist)/2)+dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- creo percorso
hintAsR = EgtCurveCompo( Lg, tPocketAs, true)
end
end
if DGD.TYPE ~= 'center' then -- se groove non in centro
-- disegno primo percorso (lato hinge)
if d5 then -- se parametro valido
tPocketAs = {}
if abs(H-d5+(2*dExtraH)) <= GEO.EPS_SMALL then -- se distanza punti inconsistente, aggiungo 0.0015mm per fare almeno una piccola linea
dMinDist = 0.0015
end
pIni = Point3d(-(d5*3/4),-((H-d5+dMinDist)/2)-dExtraH,0)
pEnd = Point3d(T-(d5/2)+dExtraH,-((H-d5+dMinDist)/2)-dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d5/2)+dExtraH,((H-d5+dMinDist)/2)+dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(d5*3/4),((H-d5+dMinDist)/2)+dExtraH,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d5/2), true, true, ORANGE(), ORANGE())
hintAs = EgtCurveCompo( Lg, tPocketAs, true)
end
end
local dAngleRot = 90
local sNameP
if hintAs and LA and (DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
sNameP = LA
elseif LA then
sNameP = LA ..'_HNG'
end
local sNamePR
if hintAsR and LA and (DGD.SIDE == 'hinge' or DGD.SIDE == 'lock') then
sNamePR = LA
elseif LA then
sNamePR = LA ..'_LK'
end
if hintAs then -- se esiste primo percorso
EgtModifyCurveThickness( hintAs, -T5)
-- assegno nome percorso
EgtSetName( hintAs, sNameP)
-- rotazione percorso
EgtRotate( hintAs, ORIG(), Y_AX(), dAngleRot ) -- ruoto su faccia laterale
EgtSetInfo( hintAs, 'UseBlade', bl)
EgtSetInfo( hintAs, 'UseTwiceBl', not f1b)
EgtSetInfo( hintAs, 'SideApp', EgtIf( DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat', 'top', DGD.SIDE))
-- posizionamento geometria
EgtMove( hintAs, Point3d((dWidthDoor/2),0,0) - ORIG())
EgtSetInfo( hintAs, 'TypePath', 1)
EgtInvertCurve(hintAs)
-- se mantiene backset anche su mortise
if kbs and kbs > 1 then
EgtSetInfo( hintAs, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs, 'ProbeSide', '1')
end
end
if hintAsR then -- se esiste secondo percorso
EgtModifyCurveThickness( hintAsR, -T2)
-- assegno nomi ai percorsi
EgtSetName( hintAsR, sNamePR)
-- rotazione percorso
EgtRotate( hintAsR, ORIG(), Y_AX(), dAngleRot ) -- ruoto su faccia laterale
-- rotazione geometria
EgtRotate( hintAsR, ORIG(), Z_AX(), 180 ) -- ruoto copia su faccia laterale opposta
-- posizionamento geometria
EgtMove( hintAsR, Point3d(-(dWidthDoor/2),0,0) - ORIG())
EgtSetInfo( hintAsR, 'TypePath', 2)
EgtInvertCurve(hintAsR)
-- se mantiene backset anche su mortise
if kbs and kbs > 1 then
EgtSetInfo( hintAsR, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAsR, 'ProbeSide', '1')
end
end
end
end
--[[
-- vecchia
-- geometria antischeggia
if bMakeAsGeom and nDrawMach > 0 then
if d2 then -- se parametro valido
if grs then -- se groove on side
if DGD.TYPE == 'thru' then
-- disegno secondo percorso
pIni = Point3d((d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(-(T-(d2/2)+dExtraH),-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(T-(d2/2)+dExtraH),(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- creo percorso
hintAsR = EgtCurveCompo( Lg, tPocketAs, true)
EgtModifyCurveThickness( hintAsR, -T2)
-- rotazione geometria
EgtRotate( hintAsR, ORIG(), Y_AX(), -90 ) -- ruoto su faccia laterale opposta
tPocketAs = {}
-- disegno primo percorso
pIni = Point3d(-(d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(T-(d2/2)+dExtraH,-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d2/2)+dExtraH,(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
else
-- disegno primo percorso
if invG > 0 then
pIni = Point3d((d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(-(T-(d2/2)+dExtraH),-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(T-(d2/2)+dExtraH),(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
else
pIni = Point3d(-(d2*3/4),-(H-(d2/2)+dExtraH),0)
pEnd = Point3d(T-(d2/2)+dExtraH,-(H-(d2/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d2/2)+dExtraH,(d2*3/4),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
end
end
else
if abs(H-d2) <= GEO.EPS_SMALL then -- se distanza punti inconsistente, aggiungo 0.0015mm per fare almeno una piccola linea
dMinDist = 0.0015
end
pIni = Point3d(-(d2*3/4),-((H-d2+dMinDist)/2),0)
pEnd = Point3d(T-(d2/2),-((H-d2+dMinDist)/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(T-(d2/2),((H-d2+dMinDist)/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(d2*3/4),((H-d2+dMinDist)/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
end
hintAs = EgtCurveCompo( Lg, tPocketAs, true)
EgtModifyCurveThickness( hintAs, -T2)
local dAngleRot = 90
local sNameP = EgtIf( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock', LA, LA ..'_HNG')
if grs then
if DGD.TYPE == 'thru' then
if invG > 0 then
sNameP = LA
end
else
if invG > 0 then
dAngleRot = -90
end
end
end
-- assegno nome percorso
EgtSetName( hintAs, sNameP)
-- rotazione percorso
EgtRotate( hintAs, ORIG(), Y_AX(), dAngleRot ) -- ruoto su faccia laterale
EgtSetInfo( hintAs, 'UseBlade', bl)
EgtSetInfo( hintAs, 'UseTwiceBl', not f1b)
EgtSetInfo( hintAs, 'SideApp', DGD.SIDE)
-- posizionamento geometria
if DGD.TYPE == 'side' then
if grs then
if invG > 0 then
EgtMove( hintAs, Point3d(-(dWidthDoor/2),0,0) - ORIG())
else
EgtMove( hintAs, Point3d((dWidthDoor/2),0,0) - ORIG())
end
-- se mantiene backset anche su mortise
if kbs and kbs > 1 then
EgtSetInfo( hintAs, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto il lato narrow
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs, 'ProbeSide', '1')
end
else
EgtMove( hintAs, Point3d((dWidthDoor/2),0,0) - ORIG())
EgtSetInfo( hintAs, 'TypePath', 1)
-- se mantiene backset anche su mortise
if kbs and kbs > 1 then
EgtSetInfo( hintAs, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs, 'ProbeSide', '1')
end
end
elseif DGD.TYPE == 'thru' then
local sNameP
local sNamePR
if grs then
if invG > 0 then
sNamePR = EgtIf( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock', LA, LA ..'_HNG') -- per lato cerniere (groove top o bottom) aggiungo suffisso
sNameP = LA
else
sNamePR = LA
sNameP = EgtIf( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock', LA, LA ..'_HNG') -- per lato cerniere (groove top o bottom) aggiungo suffisso
end
else
-- copio il percorso
hintAsR = EgtCopyGlob ( hintAs, Lg)
sNamePR = LA
sNameP = EgtIf( DGD.SIDE == 'hinge' or DGD.SIDE == 'lock', LA, LA ..'_HNG') -- per lato cerniere (groove top o bottom) aggiungo suffisso
-- rotazione geometria
EgtRotate( hintAsR, ORIG(), Z_AX(), 180 ) -- ruoto copia su faccia laterale opposta
end
-- assegno nomi ai percorsi
EgtSetName( hintAsR, sNamePR)
EgtSetName( hintAs, sNameP)
if grs then
-- inverto il percorso
EgtInvertCurve(hintAsR)
else
EgtSetInfo( hintAs, 'TypePath', 1)
EgtSetInfo( hintAsR, 'TypePath', 2)
end
EgtMove( hintAs, Point3d((dWidthDoor/2),0,0) - ORIG())
EgtMove( hintAsR, Point3d(-(dWidthDoor/2),0,0) - ORIG())
-- se mantiene backset anche su mortise
if kbs and kbs > 1 then
if grs then -- se groove on side
EgtSetInfo( hintAs, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto lato narrow
EgtSetInfo( hintAsR, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto lato narrow
else
EgtSetInfo( hintAs, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
EgtSetInfo( hintAsR, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs, 'ProbeSide', '1')
EgtSetInfo( hintAsR, 'ProbeSide', '1')
end
end
if grs and DGD.SIDE and DGD.SIDE == 'top' then
if hintAs then
EgtInvertCurve(hintAs)
end
if hintAsR then
EgtInvertCurve(hintAsR)
end
end
end
end
]]--
if bMakeMortGeom then
if not bl then
-- cava mortasa
local dMortise = {}
local sRequireCompoName
local GId
-- assegno i valori coerenti con la tabella del componente
if grs then
dMortise.L = L
dMortise.H = H
dMortise.T = T
dMortise.d = d
dMortise.p = p
dMortise.sf = s
dMortise.rf = rf
dMortise.d2 = nil
dMortise.jn = false
dMortise.L2 = L
dMortise.H2 = H
dMortise.D = 0
dMortise.D_X = 0
dMortise.invG = EgtIf( DGD.SIDE and ( DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat'), -1, 1)
dMortise.LG = LG
dMortise.LM = LM
dMortise.LA = LA
dMortise.Nome = sCompoName
sRequireCompoName = '_LatchStrike'
else
dMortise.T = T
dMortise.L2 = L
dMortise.H2 = H
dMortise.T2 = T
dMortise.d = d
dMortise.p = p
dMortise.s = s
dMortise.jn = false
dMortise.d3 = d
dMortise.p3 = p
dMortise.invG = 1
dMortise.mkrev = false -- disabilito la creazione del percorso in senso contrario
dMortise.L3 = L
dMortise.H3 = H
dMortise.LGM = LG
dMortise.LMM = LM
dMortise.Nome = sCompoName
dMortise.jne = false
dMortise.D_X = 0
if DGD.TYPE == 'side' and ech then
dMortise.smr = 1 -- inserisco i raccordini per non fare il chisel
else
dMortise.smr = 0 -- così il latch non crea i raccordini per evitare il chiseling
end
sRequireCompoName = '_Mortise'
end
-- lancio il primo componente base
MHgen = require( sRequireCompoName)
nGeom1, nPkToJoin1 = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor)
-- creo la geometria che rappresenta l'ingombro della groove sulla porta
if EC == 0 and grs and nDrawMach > 0 then
-- setto la griglia dietro
EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.BACK))
GId = EgtRectangle2P( Lg, Point3d( -((dWidthShape-d)/2), 0, 0), Point3d( ((dWidthShape-d)/2), -T, 0), GDB_RT.GRID)
if GId then
EgtInvertCurve(GId)
EgtModifyCurveThickness( GId, -H)
EgtSetName( GId, 'BOXGROOVE')
end
-- risetto la griglia top
EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.TOP))
end
if EC == 0 and ( nGeom1 or nPkToJoin1) then
if DGD.TYPE == 'side' then -- sposto le geometrie del valore settato
if red and red ~= 0 then
local dMove = ((red/2)+(d/4)+0.25)
local dMove2 = (red/2)
if grs and invG > 0 then
dMove = -dMove
dMove2 = -dMove2
end
if nGeom1 then
EgtMove( nGeom1, Point3d(dMove,0,0) - ORIG())
end
if nPkToJoin1 then
EgtMove( nPkToJoin1, Point3d(dMove,0,0) - ORIG())
end
if GId then
EgtMove( GId, Point3d(dMove2,0,0) - ORIG())
end
end
elseif DGD.TYPE == 'center' and D_X then -- se in centro e D_X ha un valore sposto le geometrie
if nGeom1 then
EgtMove( nGeom1, Point3d(D_X,0,0) - ORIG())
end
if nPkToJoin1 then
EgtMove( nPkToJoin1, Point3d(D_X,0,0) - ORIG())
end
if GId then
EgtMove( GId, Point3d(D_X,0,0) - ORIG())
end
end
if kbs and kbs > 1 then
if nGeom1 then
if grs then
EgtSetInfo( nGeom1, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto il lato narrow
else
EgtSetInfo( nGeom1, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
end
if nPkToJoin1 then
if grs then
EgtSetInfo( nPkToJoin1, 'KeepBackSet', 'n') -- setto 'n' perché viene mantenuto il lato narrow
else
EgtSetInfo( nPkToJoin1, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
end
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
if nGeom1 then
EgtSetInfo( nGeom1, 'ProbeSide', '1')
end
if nPkToJoin1 then
EgtSetInfo( nPkToJoin1, 'ProbeSide', '1')
end
end
end
else -- con lama
-- posizione Y iniziale (Z bassa)
local dIniPosY = ((-H+thb)/2)
local nEndPosY = ((H-thb)/2)
if DGD.TYPE == 'side' then
pEnd = EgtIf( f1b, Point3d((L/2), dIniPosY,-T), Point3d(2, dIniPosY,-T))
else
pEnd = EgtIf( f1b, Point3d(((L/2)-dExLenBl), dIniPosY,-T), Point3d(2, dIniPosY,-T))
end
pIni = Point3d( -((L/2)-dExLenBl), dIniPosY, -T)
local nSideStep = 0
local dSideDepth
local bInvertPoint
-- creo n percorsi di side step
repeat
nSideStep = nSideStep + 1
dSideDepth = EgtIf( (StpBd * nSideStep) > T, T, (StpBd * nSideStep))
-- se lama singola e settata antioraria inverto i punti
if f1b and slb and not bInvertPoint then
pIni, pEnd = pEnd, pIni
bInvertPoint = true
end
-- percorso dw già affondato allo spessore cava e calcolato per il centro spessore lama
hint1 = DrawAddLineDrawCircle( Point3d( pIni:getX(), pIni:getY(), -dSideDepth), Point3d( pEnd:getX(), pEnd:getY(), -dSideDepth),
Lg, nil, bPreview, Dm, (d3/2), false, false, ORANGE(), ORANGE())
nPkToJoin1 = EgtCurveCompo( Lg, {hint1}, true)
EgtModifyCurveThickness( nPkToJoin1, 0)
EgtModifyCurveExtrusion( nPkToJoin1, Y_AX(), GDB_RT.GLOB)
if DGD.TYPE == 'side' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin1, LBM .. '_NLI')
else
EgtSetName( nPkToJoin1, LBM)
EgtSetInfo( nPkToJoin1, 'PathType', 'NR')
-- se lama singola e settata antioraria inverto i punti
if f1b and slb then
EgtSetInfo( nPkToJoin1, 'InvDir', 'INV')
end
EgtSetInfo( nPkToJoin1, 'LeadType', '_NLI')
if not f1b then
EgtSetInfo( nPkToJoin1, 'ToolsUse', 'TW')
end
end
elseif DGD.TYPE == 'center' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin1, LBM .. '_NLILO')
else
EgtSetName( nPkToJoin1, LBM)
EgtSetInfo( nPkToJoin1, 'PathType', 'NR')
EgtSetInfo( nPkToJoin1, 'LeadType', '_NLILO')
if not f1b then
EgtSetInfo( nPkToJoin1, 'ToolsUse', 'TW')
end
end
else
EgtSetName( nPkToJoin1, LBM)
if nNewLeadInOutMode then
EgtSetInfo( nPkToJoin1, 'PathType', 'NR')
if not f1b then
EgtSetInfo( nPkToJoin1, 'ToolsUse', 'TW')
end
end
end
if red and red ~= 0 and DGD.TYPE == 'side' and nPkToJoin1 then
EgtMove( nPkToJoin1, Point3d((red/2),0,0) - ORIG())
end
-- se mantiene backset su mortise
if kbs and kbs > 1 and nPkToJoin1 then
EgtSetInfo( nPkToJoin1, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and nPkToJoin1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( nPkToJoin1, 'ProbeSide', '1')
end
until dSideDepth >= T
-- se passi intermedi
if H > ( thb + 10*GEO.EPS_SMALL) then
-- calsolo il passo in Y in base alla larghezza cava
local dMatOnY = (H-thb)
local dStepOnY = thb
if dMatOnY > ( thb + 10*GEO.EPS_SMALL) then
dStepOnY = thb * 0.95
end
local nStepY = EgtIf( thb > 10*GEO.EPS_SMALL, ceil((H-thb)/dStepOnY), 1) -- numero di passate
local dStepY = ((H-thb)/nStepY) -- passo ricalcolato
local nPass = 1
local dMiddlePosY = dIniPosY + dStepY
-- ciclo inserimento linee
while nPass <= nStepY and dMiddlePosY < ( nEndPosY + 10*GEO.EPS_SMALL) do
if DGD.TYPE == 'side' then
pEnd = EgtIf( f1b, Point3d((L/2), dMiddlePosY,-T), Point3d(2, dMiddlePosY,-T))
else
pEnd = EgtIf( f1b, Point3d(((L/2)-dExLenBl), dMiddlePosY,-T), Point3d(2, dMiddlePosY,-T))
end
nSideStep = 0
bInvertPoint = false
pIni = Point3d( -((L/2)-dExLenBl), dMiddlePosY, -T)
-- creo n percorsi di side step
repeat
nSideStep = nSideStep + 1
dSideDepth = EgtIf( (StpBd * nSideStep) > T, T, (StpBd * nSideStep))
-- se lama singola e settata antioraria inverto i punti
if f1b and slb and not bInvertPoint then
pIni, pEnd = pEnd, pIni
bInvertPoint = true
end
-- percorso up già affondato allo spessore cava e calcolato per il centro spessore lama
hint3 = DrawAddLineDrawCircle( Point3d( pIni:getX(), pIni:getY(), -dSideDepth), Point3d( pEnd:getX(), pEnd:getY(), -dSideDepth),
Lg, nil, bPreview, Dm, (d3/2), false, false, ORANGE(), ORANGE())
nPkToJoin3 = EgtCurveCompo( Lg, {hint3}, true)
EgtModifyCurveThickness( nPkToJoin3, 0)
EgtModifyCurveExtrusion( nPkToJoin3, Y_AX(), GDB_RT.GLOB)
if DGD.TYPE == 'side' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin3, LBMU .. '_NLI')
else
EgtSetName( nPkToJoin3, LBM)
EgtSetInfo( nPkToJoin3, 'PathType', 'NR')
-- se lama singola e settata antioraria inverto i punti
if f1b and slb then
EgtSetInfo( nPkToJoin3, 'InvDir', 'INV')
end
EgtSetInfo( nPkToJoin3, 'LeadType', '_NLI')
if not f1b then
EgtSetInfo( nPkToJoin3, 'ToolsUse', 'TW')
end
end
elseif DGD.TYPE == 'center' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin3, LBMU .. '_NLILO')
else
EgtSetName( nPkToJoin3, LBM)
EgtSetInfo( nPkToJoin3, 'PathType', 'NR')
EgtSetInfo( nPkToJoin3, 'LeadType', '_NLILO')
if not f1b then
EgtSetInfo( nPkToJoin3, 'ToolsUse', 'TW')
end
end
else
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin3, LBMU)
else
EgtSetName( nPkToJoin3, LBM)
EgtSetInfo( nPkToJoin3, 'PathType', 'NR')
if not f1b then
EgtSetInfo( nPkToJoin3, 'ToolsUse', 'TW')
end
end
end
if red and red ~= 0 and DGD.TYPE == 'side' and nPkToJoin3 then
EgtMove( nPkToJoin3, Point3d((red/2),0,0) - ORIG())
end
-- se mantiene backset su mortise
if kbs and kbs > 1 and nPkToJoin3 then
EgtSetInfo( nPkToJoin3, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and nPkToJoin3 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( nPkToJoin3, 'ProbeSide', '1')
end
until dSideDepth >= T
-- incremento passo
nPass = nPass + 1
-- nuova posizione in Y
dMiddlePosY = dMiddlePosY + dStepY
end
end
-- se non ho la forzatura a utilizzare solo una lama
if not f1b then
if DGD.TYPE == 'side' then
pIni = Point3d((L/2), dIniPosY,-T)
else
pIni = Point3d(((L/2)-dExLenBl), dIniPosY,-T)
end
nSideStep = 0
-- creo n percorsi di side step
repeat
nSideStep = nSideStep + 1
dSideDepth = EgtIf( (StpBd * nSideStep) > T, T, (StpBd * nSideStep))
-- percorso inverso ( antischeggia) dw già affondato allo spessore cava e calcolato per il centro spessore lama
hint2 = DrawAddLineDrawCircle( Point3d( pIni:getX(), pIni:getY(),-dSideDepth), Point3d(-2, dIniPosY,-dSideDepth),
Lg, nil, bPreview, Dm, (d3/2), false, false, ORANGE(), ORANGE())
nPkToJoin2 = EgtCurveCompo( Lg, {hint2}, true)
EgtModifyCurveThickness( nPkToJoin2, 0)
EgtModifyCurveExtrusion( nPkToJoin2, Y_AX(), GDB_RT.GLOB)
if DGD.TYPE == 'side' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin2, LAM .. '_NLO')
else
EgtSetName( nPkToJoin2, LAM)
EgtSetInfo( nPkToJoin2, 'LeadType', '_NLO')
EgtSetInfo( nPkToJoin2, 'PathType', 'AS')
end
elseif DGD.TYPE == 'center' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin2, LAM .. '_NLILO')
else
EgtSetName( nPkToJoin2, LAM)
EgtSetInfo( nPkToJoin2, 'LeadType', '_NLILO')
EgtSetInfo( nPkToJoin2, 'PathType', 'AS')
end
else
EgtSetName( nPkToJoin2, LAM)
if nNewLeadInOutMode then
EgtSetInfo( nPkToJoin2, 'PathType', 'AS')
end
end
if red and red ~= 0 and DGD.TYPE == 'side' and nPkToJoin2 then
EgtMove( nPkToJoin2, Point3d((red/2),0,0) - ORIG())
end
-- se mantiene backset su mortise
if kbs and kbs > 1 and nPkToJoin2 then
EgtSetInfo( nPkToJoin2, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and nPkToJoin2 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( nPkToJoin2, 'ProbeSide', '1')
end
until dSideDepth >= T
-- se passi intermedi
if H > ( thb + 10*GEO.EPS_SMALL) then
-- calsolo il passo in Y in base alla larghezza cava
local dMatOnY = (H-thb)
local dStepOnY = thb
if dMatOnY > ( thb + 10*GEO.EPS_SMALL) then
dStepOnY = thb * 0.95
end
local nStepY = EgtIf( thb > 10*GEO.EPS_SMALL, ceil((H-thb)/dStepOnY), 1) -- numero di passate
local dStepY = ((H-thb)/nStepY) -- passo ricalcolato
local nPass = 1
local dMiddlePosY = dIniPosY + dStepY
-- ciclo inserimento linee
while nPass <= nStepY and dMiddlePosY < ( nEndPosY + 10*GEO.EPS_SMALL) do
if DGD.TYPE == 'side' then
pIni = Point3d((L/2), dMiddlePosY,-T)
else
pIni = Point3d(((L/2)-dExLenBl), dMiddlePosY,-T)
end
nSideStep = 0
-- creo n percorsi di side step
repeat
nSideStep = nSideStep + 1
dSideDepth = EgtIf( (StpBd * nSideStep) > T, T, (StpBd * nSideStep))
-- percorso inverso ( antischeggia) up già affondato allo spessore cava e calcolato per il centro spessore lama
hint4 = DrawAddLineDrawCircle( Point3d( pIni:getX(), pIni:getY(),-dSideDepth), Point3d(-2, dMiddlePosY,-dSideDepth),
Lg, nil, bPreview, Dm, (d3/2), false, false, ORANGE(), ORANGE())
nPkToJoin4 = EgtCurveCompo( Lg, {hint4}, true)
EgtModifyCurveThickness( nPkToJoin4, 0)
EgtModifyCurveExtrusion( nPkToJoin4, Y_AX(), GDB_RT.GLOB)
if DGD.TYPE == 'side' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin4, LAMU .. '_NLO')
else
EgtSetName( nPkToJoin4, LAM)
EgtSetInfo( nPkToJoin4, 'LeadType', '_NLO')
EgtSetInfo( nPkToJoin4, 'PathType', 'AS')
end
elseif DGD.TYPE == 'center' then
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin4, LAMU .. '_NLILO')
else
EgtSetName( nPkToJoin4, LAM)
EgtSetInfo( nPkToJoin4, 'LeadType', '_NLILO')
EgtSetInfo( nPkToJoin4, 'PathType', 'AS')
end
else
if not nNewLeadInOutMode then
EgtSetName( nPkToJoin4, LAMU)
else
EgtSetName( nPkToJoin4, LAM)
EgtSetInfo( nPkToJoin4, 'PathType', 'AS')
end
end
if red and red ~= 0 and DGD.TYPE == 'side' and nPkToJoin4 then
EgtMove( nPkToJoin4, Point3d((red/2),0,0) - ORIG())
end
-- se mantiene backset su mortise
if kbs and kbs > 1 and nPkToJoin4 then
EgtSetInfo( nPkToJoin4, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and nPkToJoin4 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( nPkToJoin4, 'ProbeSide', '1')
end
until dSideDepth >= T
-- incremento passo
nPass = nPass + 1
-- nuova posizione in Y
dMiddlePosY = dMiddlePosY + dStepY
end
end
end
-- creo percorso/i pulitura spigoli
if DGD.TYPE ~= 'thru' and d4 and dExLenBl and dExLenBl > 0 then
local CleanCor1 = {}
pIni = Point3d(-((L/2)-dExLenBl-(H/2)),0,0)
pEnd = Point3d(-((L/2)-dExLenBl-(H/2)),-(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, CleanCor1, bPreview, Dm, (d4/2), false, false, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(L/2),-(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, CleanCor1, bPreview, Dm, (d4/2), false, false, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-(L/2),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, CleanCor1, bPreview, Dm, (d4/2), false, false, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-((L/2)-dExLenBl-(H/2)),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, CleanCor1, bPreview, Dm, (d4/2), false, false, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-((L/2)-dExLenBl-(H/2)),0,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, CleanCor1, bPreview, Dm, (d4/2), false, false, ORANGE(), ORANGE())
hint5 = EgtCurveCompo( Lg, CleanCor1, true)
EgtModifyCurveThickness( hint5, -T3)
EgtSetName( hint5, LCC)
if DGD.TYPE == 'center' then
hint6 = EgtCopyGlob( hint5, Lg)
EgtRotate( hint6, ORIG(), Z_AX(), 180)
-- se mantiene backset su mortise
if kbs and kbs > 1 then
EgtSetInfo( hint6, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hint6, 'ProbeSide', '1')
end
end
if red and red ~= 0 and DGD.TYPE == 'side' and hint5 then
EgtMove( hint5, Point3d((red/2),0,0) - ORIG())
end
-- se mantiene backset su mortise
if kbs and kbs > 1 and hint5 then
EgtSetInfo( hint5, 'KeepBackSet', 'c') -- setto 'c' perché viene mantenuto il centro spessore
end
if pbs and pbs > 1 and hint5 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hint5, 'ProbeSide', '1')
end
end
-- se groove sul top della porta, creo la geometria che ne rappresenta l'ingombro (per poi verificare eventuale collisione con ventose)
if EC == 0 and DGD.SIDE == 'top' and nDrawMach > 0 then
-- determino se interessa la porta
local dOffset = DGD.GROOVE_OFFSET or DGD.dT / 2
local dMaxZ = min( dOffset + H / 2, DGD.dT)
local dMinZ = max( dOffset - H / 2, 0)
if dMaxZ > dMinZ + 0.1 then
-- setto la griglia back o front a seconda del lato serratura
EgtSetGridFrame( Frame3d( 0, 0, 0, EgtIf( DGD.Lock == 'R', GDB_FR.BACK, GDB_FR.FRONT)))
local dPosZ = dMaxZ - dOffset
local dHeight = dMaxZ - dMinZ
GId = EgtRectangle2P( Lg, Point3d( -((dWidthShape-d)/2), 0, dPosZ), Point3d( ((dWidthShape-d)/2), -T, dPosZ), GDB_RT.GRID)
if GId then
EgtInvertCurve(GId)
EgtModifyCurveThickness( GId, -dHeight)
EgtSetName( GId, 'BOXGROOVE')
end
-- risetto la griglia top
EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.TOP))
end
end
end
end
-- Se non Preview
if not bPreview and EC == 0 then
if bRunByCompo then
-- scrivo i parametri nelle info del pezzo
WriteCompoDataToPart(Pz,sCompoName,nCompoNpar)
end
-- scrivo note nel layer della cerniera
EgtSetInfo(Lg,'Type' ,'Groove')
EgtSetInfo(Lg,'L' ,L)
EgtSetInfo(Lg,'H' ,H)
EgtSetInfo(Lg,'T' ,T)
EgtSetInfo(Lg,'d' ,d)
EgtSetInfo(Lg,'p' ,p)
EgtSetInfo(Lg,'s' ,s)
EgtSetInfo(Lg,'T2' ,T2)
EgtSetInfo(Lg,'T5' ,T5)
EgtSetInfo(Lg,'T6' ,T6)
EgtSetInfo(Lg,'d2' ,d2)
EgtSetInfo(Lg,'d5' ,d5)
EgtSetInfo(Lg,'d6' ,d6)
EgtSetInfo(Lg,'grs' ,grs)
EgtSetInfo(Lg,'rf' ,rf)
EgtSetInfo(Lg,'bl' ,bl)
EgtSetInfo(Lg,'f1b' ,f1b)
EgtSetInfo(Lg,'slb' ,slb)
EgtSetInfo(Lg,'d3' ,d3)
EgtSetInfo(Lg,'T3' ,T3)
EgtSetInfo(Lg,'d4' ,d4)
EgtSetInfo(Lg,'red' ,red)
EgtSetInfo(Lg,'thb' ,thb)
EgtSetInfo(Lg,'ech' ,ech)
EgtSetInfo(Lg,'est' ,est)
EgtSetInfo(Lg,'kbs' ,kbs)
EgtSetInfo(Lg,'pbs' ,pbs)
EgtSetInfo(Lg,'D_X' ,D_X)
EgtSetInfo(Lg,'LG' ,LG)
EgtSetInfo(Lg,'LM' ,LM)
EgtSetInfo(Lg,'LA' ,LA)
EgtSetInfo(Lg,'LAM' ,LAM)
EgtSetInfo(Lg,'LAMU' ,LAMU)
EgtSetInfo(Lg,'LBM' ,LBM)
EgtSetInfo(Lg,'LBMU' ,LBMU)
EgtSetInfo(Lg,'LCC' ,LCC)
EgtSetInfo(Lg,'CH' ,CH)
EgtSetInfo(Lg,'Path' ,sCompoPath)
-- cancello le parti ausiliarie se disegnate
if Dm then
EgtErase( Dm)
end
elseif not bPreview then
-- cancello le parti ausiliarie se disegnate
if Dm then
EgtErase( Dm)
end
end
if EC == 0 and nCodAdj and nCodAdj < 0 then
EC = nCodAdj
EM = sCodAdj
end
return EC, EM, Lg
end
return Groove