Files
Dario Sassi cc55202ec5 DataDoors 2.7c1 :
- primo commit con versione corrente.
2025-03-18 17:02:20 +01:00

813 lines
32 KiB
Lua

--
-- EEEEEEEEEE GGGGGG wwww wwww
-- EEEEEEEEEE GGGGGGGGGG wwww wwww
-- EEEE GGGG GGGG wwww wwww wwww
-- EEEE GGGG wwww wwww wwww
-- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww
-- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww
-- EEEE GGGG GGGG wwww wwwwwwww wwww
-- EEEE GGGG GGGG wwww wwww wwww wwww
-- EEEEEEEEEE GGGGGGGGGG wwwwwwww wwwwwwww
-- EEEEEEEEEE GGGGGG wwwwwww wwwwwww
--
-- OverHead.lua by EgalWare s.r.l. 2016.06.29
-- Autore: Filippo Monchi
-- Over Head Arm dati i valori 'L' e 'H' e 'T' e 'd' e 'p' e 'DS' e con nomi attributi
-- 2016.09.21 V1.0a1 FM Add warning messages
-- 2018.04.05 V1.0a2 FM Manage info (KeepBackSet) for adjust probe on Z
-- 2018.10.17 V1.0a3 FM Add parameter to show into message 402
-- 2018.11.15 V1.0a4 FM Manage latch strike option
-- 2018.11.15 V1.0a4 FM Manage Y shift from door side
-- 2018.11.15 V1.0a4 FM Manage face thru the thickness (only when it strike) and double anti-splint paths
-- 2018.12.10 V1.0a5 FM Manage geometry for calculate box without Arm volume (when strike)
-- 2019.10.16 V1.0a6 FM Manage steel option (disable generation of some geometries)
-- 2019.10.18 V2.000 FM Manage use Materials
-- 2019.10.30 V2.001 FM Add clean corner geometries
-- 2020.04.29 V2.002 FM Update for aluminum material
-- 2021.01.22 V3.000 FM Manage better checking error on tools and dimension when produce flag is false
-- 2021.11.24 V3.001 FM Manage side probe option if variable DGC.Pms > 2
-- 2022.07.27 V3.002 FM Modification to use compiled code
-- Tavola per definizione modulo (serve ma non usata)
local OverHead = {}
-- Intestazioni
require( 'EgtBase')
EgtEnableDebug( false)
-- per messaggi
-- EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua')
EgtAddToPackagePath( DGD.BASEDIR .. '?.lua')
-- Valori limite
local DgMin = 4. -- valore minimo diametro utensile
local PtMin = 0.1
local PtMax = 1.0
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 OverHead.AdjustParams( tMhPar)
local EgtDoorsMsg = require( 'EgtDoorsMsg')
local dMaxMat0
local dMaxMat1
local dMaxMat2
local dMaxMat3
local dNumMessage
local dNumLog = 0
local sMessToOut = ''
local nTempT0
local nTempT1
local nTempT2
local nTempT3
local sMchngName0
local sMchngName1
local sMchngName2
local sMchngName3
tMhPar.fht = 0 -- setto il face h top a 0
tMhPar.fhb = 0 -- setto il face h bottom a 0
-- se non ho parametro step o è 0 lo assegno uguale allo spessore cava
if not tMhPar.sf or abs(tMhPar.sf) < GEO.EPS_SMALL then
tMhPar.sf = tMhPar.T
end
-- se non ho il parametro lo setto disattivato
if not tMhPar.ech then
tMhPar.ech = false
end
-- se non c'è la variabile suffisso del chisel
if not tMhPar.CH then
tMhPar.CH = '_Chisel'
end
-- se non c'è la variabile che indica al face di sbordare
if tMhPar.ls == nil then
tMhPar.ls = true
end
-- se altezza cava maggiore o uguale dello spessore porta la risetto come spessore porta
-- e disabilito il chisel e il clean corner
tMhPar.bETh = false
if ( tMhPar.H - DGD.dT) >= GEO.EPS_SMALL then
tMhPar.H = DGD.dT
tMhPar.ech = false -- disattivo il chisel
tMhPar.rf = 0 -- disattivo il radius face
tMhPar.bETh = true
tMhPar.ls = true
tMhPar.clc = nil
tMhPar.CLC = nil
-- do errore se altezza cava maggiore o uguale dello spessore porta
-- return tMhPar, 2399, string.format(EgtDoorsMsg[432], tMhPar.Nome, tMhPar.H, DGD.dT, tMhPar.Path)
end
if not tMhPar.DY or tMhPar.DY == 0 then -- se non c'è il parametro spostamento o è a 0
tMhPar.DY = 0
if not tMhPar.ls and tMhPar.H then -- se non sborda (latch strike) lo setto per stare in centro allo spessore porta
tMhPar.DY = (DGD.dT - tMhPar.H) / 2
end
end
-- Assegno parametri da ddf
if DGD.ARMLENGTH then
tMhPar.L = DGD.ARMLENGTH
end
if DGD.ARMPOS then
tMhPar.DS = 0
end
if DGD.POCKLENGTH then
tMhPar.L2 = DGD.POCKLENGTH
end
if DGD.POCKPOS then
tMhPar.DS2 = 0
end
if DGD.POCKET_OFFSET then -- se esiste offset in Z ne prendo il valore assoluto
DGD.POCKET_OFFSET = abs(DGD.POCKET_OFFSET)
end
if DGD.ARMPOS <= GEO.EPS_SMALL and tMhPar.DS <= GEO.EPS_SMALL then
if DGD.Lock == 'L' then
tMhPar.OS = 1
else
tMhPar.OS = -1
end
-- inverto il valore perché il bordo a filo si trova dal lato opposto
if DGD.Push then
tMhPar.OS = - tMhPar.OS
end
else
tMhPar.OS = 0
end
-- Assegno parametri da dati utensili in macchina
local MB = require( 'MachiningBase')
local sLM
local nLMi = 1
local sLA
local nLAi = 1
local sLMM
local nLMMi = 1
local sLG
local nLGi = 1
-- se porta steel o aluminum disabilito l'antischeggia, la svuotatura, il chisel e modifico il nome geometria
if FindMaterial( DGD.Material, 'steel') or FindMaterial( DGD.Material, 'aluminum') then
tMhPar.LM = nil
tMhPar.LA = nil
tMhPar.ech = false
tMhPar.CH = nil
tMhPar.est = true
tMhPar.d2 = nil
tMhPar.LGM = nil
tMhPar.LMM = nil
else
tMhPar.est = nil
end
if tMhPar.est and tMhPar.LG then
sLG = tMhPar.LG
if DGD.MachEn > 0 and tMhPar.d then nTempT0, dMaxMat0, sMchngName0 = MB.GetToolDataFromAttrib( sLG, nLGi) end
end
if tMhPar.LM then -- geometria arm
sLM = tMhPar.LM
if DGD.MachEn > 0 and tMhPar.d then nTempT1, dMaxMat1, sMchngName1 = MB.GetToolDataFromAttrib( sLM, nLMi) end
end
if tMhPar.LA then -- geometria antischeggia arm
sLA = tMhPar.LA
if DGD.MachEn > 0 and tMhPar.d2 then nTempT2, dMaxMat2, sMchngName2 = MB.GetToolDataFromAttrib( sLA, nLAi) end
end
if tMhPar.LMM then -- geometria pocket
sLMM = tMhPar.LMM
if DGD.MachEn > 0 and tMhPar.d3 then nTempT3, dMaxMat3, sMchngName3 = MB.GetToolDataFromAttrib( sLMM, nLMMi) end
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
-- se devo disegnare le geometrie di lavorazione
if DGD.MachEn > 0 then
-- gestisco il risultato della lettura utensili
if DGD.bProoduce and tMhPar.est and tMhPar.d and nTempT0 and nTempT0 <= 0 then
dNumLog = -2394
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT0, sLG, nLGi, tMhPar.d, dNumLog, sMchngName0)
elseif tMhPar.est and nTempT0 then
tMhPar.d = nTempT0
end
--------------------------------------------------------------------------------
-- se c'è materiale steel faccio in modo che non assegni il diametro utensile
--------------------------------------------------------------------------------
-- gestisco il risultato della lettura utensili
if DGD.bProoduce and not tMhPar.est and tMhPar.d and nTempT1 and nTempT1 <= 0 then
dNumLog = -2396
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT1, sLM, nLMi, tMhPar.d, dNumLog, sMchngName1)
elseif not tMhPar.est and nTempT1 then
tMhPar.d = nTempT1
end
if DGD.bProoduce and not tMhPar.est and tMhPar.d2 and nTempT2 and nTempT2 <= 0 then
dNumLog = -2396
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT2, sLA, nLAi, tMhPar.d2, dNumLog, sMchngName2)
elseif not tMhPar.est and nTempT2 then
tMhPar.d2 = nTempT2
end
if DGD.bProoduce and not tMhPar.est and tMhPar.d3 and nTempT3 and nTempT3 <= 0 then
dNumLog = -2396
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT3, sLMM, nLMMi, tMhPar.d3, dNumLog, sMchngName3)
elseif not tMhPar.est and nTempT3 then
tMhPar.d3 = nTempT3
end
end
-- Regola applicazione chiseling:
-- se ho impostato un raccordo, anche se poi viene annullato perchè inferiore del raggio fresa
-- disabilito il chiseling perchè implica che se c'è un valore di raccordo non devo fare il chiseling
-- se ho il raggio valido disabilito il chiseling e il clean corner
if tMhPar.rf and tMhPar.rf > 0 then
tMhPar.ech = false
tMhPar.clc = nil
tMhPar.CLC = nil
else -- se non è definito o già nullo lo azzero
tMhPar.rf = 0
end
-- se devo disegnare le geometrie di lavorazione
if DGD.MachEn > 0 then
-- Raggio: se altro materiale e raggio presente e se raggio minore del diametro utensile + delta, lo annullo
if tMhPar.est and tMhPar.rf and tMhPar.rf > 0 and tMhPar.d and tMhPar.rf < ((tMhPar.d/2)+0.02) then
tMhPar.rf = 0
end
-- chiseling
if tMhPar.ech and tMhPar.d0 and nTempT0 > 0 then
tMhPar.d0 = nTempT0
end
-- se la profondità della arm per steel è maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.est and tMhPar.T and dMaxMat0 and tMhPar.T > dMaxMat0 then
dNumLog = -2393
dNumMessage = 460
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat0))
tMhPar.T = dMaxMat0
end
-- se la profondità della arm è maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.T and dMaxMat1 and tMhPar.T > dMaxMat1 then
dNumLog = -2398
dNumMessage = 460
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat1))
tMhPar.T = dMaxMat1 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
-- se la profondità antischeggia della arm è maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.T and dMaxMat2 and tMhPar.T > dMaxMat2 then
dNumLog = -2397
dNumMessage = 462
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat2))
tMhPar.T = dMaxMat2 - 0.05 -- tolgo 0.05 per permettere la lavorazione
end
if tMhPar.T and tMhPar.T > 0 and tMhPar.ls then
tMhPar.fht = tMhPar.T
tMhPar.fhb = tMhPar.fht
end
-- se la profondità della pocket è maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.T2 and dMaxMat3 and tMhPar.T2 > dMaxMat3 then
dNumLog = -2395
dNumMessage = 461
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat3))
tMhPar.T2 = dMaxMat3
end
if tMhPar.CLC and tMhPar.clc and tMhPar.clc > 0 and ( tMhPar.clc >= tMhPar.H or tMhPar.clc >= tMhPar.L) then
tMhPar.clc = nil
elseif not tMhPar.CLC then
tMhPar.clc = nil
end
end
if dNumLog ~= 0 then
return tMhPar, dNumLog, sMessToOut
end
return tMhPar, 0, ''
end
-- Funzione di disegno
function OverHead.Draw( tOHead, bPreview, bRunByCompo, nDrawMach, dThickDoor)
-- Assegno le dimensioni
local L = tOHead.L
local H = tOHead.H
local T = tOHead.T
local R = tOHead.rf
local clc = tOHead.clc
local ccr = tOHead.ccr
local d = tOHead.d
local p = tOHead.p
local sf = tOHead.sf
local d2 = tOHead.d2
local DS = tOHead.DS
local OS = tOHead.OS
local L2 = tOHead.L2
local H2 = tOHead.H2
local T2 = tOHead.T2
local d3 = tOHead.d3
local p3 = tOHead.p3
local s = tOHead.s
local DS2 = tOHead.DS2
local ech = tOHead.ech -- abilitazione chisel
local bEqualTh = tOHead.bETh
local ls = tOHead.ls
local fht = tOHead.fht
local fhb = tOHead.fhb
local est = tOHead.est
local kbs = tOHead.kbs -- keep backset/thickness (0: none, 1: only face, 2: all)
local pbs = tOHead.pbs
local DY = tOHead.DY
local cl = 0
local invG = 1
-- Assegno i nomi geometrie
local LG = tOHead.LG -- nome geometria arm
local LM = tOHead.LM -- nome lavorazione arm
local LA = tOHead.LA -- nome geometria antischeggia
local LGM = tOHead.LGM -- nome geometria pocket
local LMM = tOHead.LMM -- nome lavorazione pocket
local CH = tOHead.CH -- nome suffisso lavorazione chisel
local CLC = tOHead.CLC -- nome geometria clean corner
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 'DS'
local sNamePar8 = tOHead.N8 or 'OS'
local sNamePar9 = tOHead.N9 or 'sf'
local sNamePar10 = tOHead.N10 or 'L2'
local sNamePar11 = tOHead.N11 or 'H2'
local sNamePar12 = tOHead.N12 or 'T2'
local sNamePar13 = tOHead.N13 or 'd3'
local sNamePar14 = tOHead.N14 or 'p3'
local sNamePar15 = tOHead.N15 or 's'
local sNamePar16 = tOHead.N16 or 'DS2'
local sNamePar17 = tOHead.N17 or 'R'
local sNamePar18 = tOHead.N18 or 'clc'
local sNamePar19 = tOHead.N19 or 'ccr'
-- RunByComponetInterface
local RC = true
-- Messaggi codice errori
local EM = ' '
local EC = 0
local ErrorBase = 2300
-- variabili che abilitano la creazione della geometria
local bMakeFaceGeom = true
local bMakeMortGeom = true
-- variabili dei percorsi geometrici
local nGeom1, nGeom2, nAS1, nAS2
local nPkToJoin1, nPkToJoin2, nPkToJoin, nIdSideBoxUp
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
bMakeFaceGeom = false
clc = nil
CLC = nil
end
if not T then
T = 0
end
-- se non sborda
if not ls then
DY = DY + H/2 -- compenso lo spostamento della metà cava
-- se c'è un raccordo setto per raccordare tutti gli angoli
if R and R > 0 then
cl = 3
end
end
if est or not L2 or not H2 then
bMakeMortGeom = false
end
if not T2 then
T2 = 0
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 nForceMakeFace = nDrawMach
-- se ho abilitato il chiseling modifico il nome geometria
if ech then
LG = LG .. CH
tOHead.LG = LG
tOHead.smr = 1 -- inserisco i raccordini per non fare il chisel
-- se ho abilitato solo le geometrie di lavorazione, abilito la generazione di entrambe per il contorno chisel
if nDrawMach == 1 then
nForceMakeFace = 2
end
end
local EgtDoorsMsg = require( 'EgtDoorsMsg')
-- Verifica delle dimensioni, le condizioni vengono verificate in base a quale geometria deve essere creata
if bMakeFaceGeom and nDrawMach > 0 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 bMakeFaceGeom and nDrawMach > 0 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 bMakeFaceGeom and H <= 0 then
EC = 3
EM = string.format(EgtDoorsMsg[401],sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'H' deve essere > 0
H = d/2
elseif bMakeFaceGeom and nDrawMach > 0 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 bMakeFaceGeom and nDrawMach > 0 and d2 and L <= d2 then
if DGD.bProoduce then
EC = 5
EM = string.format(EgtDoorsMsg[402],sNamePar1,EgtToUiUnits(L),sNamePar6,EgtToUiUnits(d2), sCompoPath) -- il parametro 'L' deve essere maggiore al diametro utensile d2
L = d2 + 0.002
else
d2 = L - 0.002
end
elseif bMakeFaceGeom and nDrawMach > 0 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 bMakeFaceGeom and T < 0 then
EC = 7
EM = string.format(EgtDoorsMsg[404],sNamePar3,EgtToUiUnits(T), sCompoPath) -- il parametro 'T' deve essere >= 0
T = 0
elseif bMakeFaceGeom and L <= 0 then
EC = 8
EM = string.format(EgtDoorsMsg[401],sNamePar1,EgtToUiUnits(L), sCompoPath) -- il parametro 'L' deve essere > 0
L = d
elseif bMakeFaceGeom and OS ~= 0 and OS ~= 1 and OS ~= -1 then
EC = 9
EM = string.format(EgtDoorsMsg[417],sNamePar8,OS, sCompoPath) -- il parametro 'OS' accetta solo valore: 0, 1 o -1
OS = 0
elseif bMakeFaceGeom and DS < 0 then
EC = 10
EM = string.format(EgtDoorsMsg[404],sNamePar7,EgtToUiUnits(DS), sCompoPath) -- il parametro 'DS' deve essere > 0
DS = 0
elseif bMakeMortGeom and nDrawMach > 0 and d3 < DgMin then
EC = 11
EM = string.format(EgtDoorsMsg[400],sNamePar13,EgtToUiUnits(d3),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di
d3 = DgMin
elseif bMakeMortGeom and H2 <= 0 then
EC = 12
EM = string.format(EgtDoorsMsg[401],sNamePar11,EgtToUiUnits(H2), sCompoPath) -- il parametro 'H2' deve essere > 0
H2 = d3/2
elseif bMakeMortGeom and nDrawMach > 0 and L2 <= d3 then
if DGD.bProoduce then
EC = 13
EM = string.format(EgtDoorsMsg[402],sNamePar10,EgtToUiUnits(L2),sNamePar13,EgtToUiUnits(d3), sCompoPath) -- il parametro 'L2' deve essere maggiore al diametro utensile d3
L2 = d3 + 0.002
else
d3 = L2 - 0.002
end
elseif bMakeMortGeom and nDrawMach > 0 and ( p3 < PtMin or p3 > PtMax) then
EC = 14
EM = string.format(EgtDoorsMsg[403],sNamePar14,p3,PtMin,PtMax, sCompoPath) -- il parametro 'p3' deve essere compreso tra
p3 = 0.8
elseif bMakeMortGeom and T2 < 0 then
EC = 15
EM = string.format(EgtDoorsMsg[404],sNamePar12,EgtToUiUnits(T2), sCompoPath) -- il parametro 'T2' deve essere >= 0
T2 = 0
elseif bMakeMortGeom and L2 <= 0 then
EC = 16
EM = string.format(EgtDoorsMsg[401],sNamePar10,EgtToUiUnits(L2), sCompoPath) -- il parametro 'L' deve essere > 0
L2 = d3 + 0.002
elseif bMakeFaceGeom and nDrawMach > 0 and sf and sf <= 0 then
EM = string.format(EgtDoorsMsg[401],sNamePar9,EgtToUiUnits(sf), sCompoPath) -- il parametro 'sf' deve essere > 0
EC = 17
sf = d
elseif bMakeMortGeom and nDrawMach > 0 and s and s <= 0 then
EM = string.format(EgtDoorsMsg[401],sNamePar15,EgtToUiUnits(s), sCompoPath) -- il parametro 's' deve essere > 0
EC = 18
s = d3
elseif bMakeMortGeom and DS2 < 0 then
EC = 19
EM = string.format(EgtDoorsMsg[404],sNamePar16,EgtToUiUnits(DS2), sCompoPath) -- il parametro 'DS2' deve essere > 0
DS2 = 0
elseif bMakeFaceGeom and ls and R < 0 then
EC = 20
EM = string.format(EgtDoorsMsg[404],sNamePar17,EgtToUiUnits(R), sCompoPath) -- il parametro 'R' deve essere >= 0
R = d/2
elseif bMakeFaceGeom and R and L <= R*2 then
EC = 21
EM = string.format(EgtDoorsMsg[406],sNamePar17,EgtToUiUnits(R),sNamePar1..'/2',EgtToUiUnits(L/2), sCompoPath) -- il parametro 'R' deve essere < 'L/2'
L = (R*2)+1
elseif bMakeFaceGeom and ls and R >= H then
EC = 22
EM = string.format(EgtDoorsMsg[406],sNamePar17,EgtToUiUnits(R),sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'R' deve essere < H
R = d/2
elseif bMakeFaceGeom and not ls and H < d then
if DGD.bProoduce then
EC = 23
EM = string.format(EgtDoorsMsg[405],sNamePar2,EgtToUiUnits(H),EgtToUiUnits(d), sCompoPath) -- il parametro 'H' deve essere maggiore o uguale del diametro utensile
H = d
else
d = H - 0.002
end
elseif bMakeFaceGeom and not ls and R and H <= R*2 then
EC = 24
EM = string.format(EgtDoorsMsg[406],sNamePar17,EgtToUiUnits(R),sNamePar2..'/2',EgtToUiUnits(H/2), sCompoPath) -- il parametro 'R' deve essere < H/2
R = H/2
elseif bMakeFaceGeom and not ls and cl > 0 and R and R < 0 then
EC = 25
EM = string.format(EgtDoorsMsg[404],sNamePar17,EgtToUiUnits(R), sCompoPath) -- il parametro 'R' deve essere >= 0
R = H/2
elseif bMakeFaceGeom and not ls and cl > 0 and R and abs(R - (H/2)) < GEO.EPS_SMALL and L <= H then
EC = 26
EM = string.format(EgtDoorsMsg[407],sNamePar1,EgtToUiUnits(L),sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'L' deve essere > 'H'
L = H+5
elseif bMakeFaceGeom and not ls and cl > 0 and R and R < (H/2) and L <= (R*2) then
EC = 27
EM = string.format(EgtDoorsMsg[407],sNamePar1,EgtToUiUnits(L),sNamePar17..'*2',EgtToUiUnits(R*2), sCompoPath) -- il parametro 'L' deve essere > 'R*2'
L = (R*2)+5
elseif bMakeFaceGeom and CLC and clc and ccr and clc > 0 and ccr > 0 and (2*(ccr*sin(45))) >= clc then
EC = 28
EM = string.format(EgtDoorsMsg[407],sNamePar18,EgtToUiUnits(clc),'',EgtToUiUnits(2*(ccr*sin(45))), sCompoPath) -- il parametro 'clc' deve essere > 'crc'
clc = (2*(ccr*sin(45)))+0.2
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
local Lg, Dm
local sRequireCompoName
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
if ls then -- se latch strike lancio il componente standard
sRequireCompoName = '_OverHeadArm'
else
sRequireCompoName = '_Latch'
tOHead.cl = cl
tOHead.invG = invG
tOHead.DY = -DY
tOHead.smr = 0
end
if bMakeFaceGeom then
-- lancio il primo componente base
MHgen = require( sRequireCompoName)
nGeom1, nPkToJoin1, nAS1, nAS2, nIdSideBoxUp = MHgen.Draw( EC, EM, tOHead, bPreview, bRunByCompo, nForceMakeFace, Pz, Lg, dThickDoor, 'OH')
-- Clean corner
if nDrawMach >= 0 then -- se abilitata geometria
local CLC1
if CLC and clc and clc > 0 and clc < H and clc < L then
CLC1 = MakeClcPath( clc, ccr, CLC, Lg, -T)
if CLC1 then
-- se mantiene lato anche su face
if kbs and kbs > 0 then
local sKeepMode = 'n' -- setto di default per mantenere il lato narrow
if bEqualTh or not ls then -- se spessore passante o in centro allo spessore
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( CLC1, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( CLC1, 'ProbeSide', '1')
end
EgtSetInfo( CLC1,'InserPoint' ,'Edge') -- setto una nota per indicare su che lato della porta deve essere spostato
EgtSetInfo( CLC1,'DeltaPos' ,( L+(2*DS)))
if ls then -- se latch string
if OS <= 0 then -- se cava non aperta a destra
-- angolo x+y-
local CLC2 = EgtCopyGlob( CLC1, Lg)
EgtRotate( CLC2, Point3d(0,0,0), Z_AX(), 180)
EgtMove( CLC2, Point3d((L/2),-H,0) - ORIG())
-- muovo ulteriormente le geometrie
EgtMove( CLC2, Point3d(-((L/2)+DS),0,0) - ORIG())
end
if OS >= 0 then -- se cava non aperta a sinistra
-- angolo x-y-
EgtRotate( CLC1, Point3d(0,0,0), Z_AX(), 90)
EgtMove( CLC1, Point3d(-(L/2),-H,0) - ORIG())
-- muovo ulteriormente le geometrie
EgtMove( CLC1, Point3d(-((L/2)+DS),0,0) - ORIG())
else
EgtErase(CLC1)
end
else -- altrimenti non latch strike
if OS <= 0 then -- se cava non aperta a destra
-- angolo x+y+
local CLC2 = EgtCopyGlob( CLC1, Lg)
EgtRotate( CLC2, Point3d(0,0,0), Z_AX(), -90)
EgtMove( CLC2, Point3d((L/2),(H/2),0) - ORIG())
-- angolo x+y-
local CLC3 = EgtCopyGlob( CLC1, Lg)
EgtRotate( CLC3, Point3d(0,0,0), Z_AX(), 180)
EgtMove( CLC3, Point3d((L/2),-(H/2),0) - ORIG())
EgtMove( CLC2, Point3d(-((L/2)+DS),-(dThickDoor/2),0) - ORIG())
EgtMove( CLC3, Point3d(-((L/2)+DS),-(dThickDoor/2),0) - ORIG())
end
if OS >= 0 then -- se cava non aperta a sinistra
-- angolo x-y-
local CLC4 = EgtCopyGlob( CLC1, Lg)
EgtRotate( CLC4, Point3d(0,0,0), Z_AX(), 90)
EgtMove( CLC4, Point3d(-(L/2),-(H/2),0) - ORIG())
-- angolo x-y+
EgtMove( CLC1, Point3d(-(L/2),(H/2),0) - ORIG())
-- muovo ulteriormente le geometrie
EgtMove( CLC1, Point3d(-((L/2)+DS),-(dThickDoor/2),0) - ORIG())
EgtMove( CLC4, Point3d(-((L/2)+DS),-(dThickDoor/2),0) - ORIG())
else
EgtErase(CLC1)
end
end
end
end
end
end
if bMakeMortGeom then
tOHead.smr = 0
-- lancio il secondo componente base
MHgen = require('_OverHeadPocket')
nGeom2, nPkToJoin2 = MHgen.Draw( EC, EM, tOHead, bPreview, bRunByCompo, nDrawMach, Pz, Lg)
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 geometria
EgtSetInfo(Lg,'Type' ,'OverHead')
EgtSetInfo(Lg,'L' ,L)
EgtSetInfo(Lg,'H' ,H)
EgtSetInfo(Lg,'T' ,T)
EgtSetInfo(Lg,'rf' ,rf)
EgtSetInfo(Lg,'d' ,d)
EgtSetInfo(Lg,'p' ,p)
EgtSetInfo(Lg,'sf' ,sf)
EgtSetInfo(Lg,'d2' ,d2)
EgtSetInfo(Lg,'DS' ,DS)
EgtSetInfo(Lg,'OS' ,OS)
EgtSetInfo(Lg,'ech' ,ech)
EgtSetInfo(Lg,'ls' ,ls)
EgtSetInfo(Lg,'bEqualTh' ,bEqualTh)
EgtSetInfo(Lg,'DY' ,DY)
EgtSetInfo(Lg,'L2' ,L2)
EgtSetInfo(Lg,'H2' ,H2)
EgtSetInfo(Lg,'T2' ,T2)
EgtSetInfo(Lg,'d3' ,d3)
EgtSetInfo(Lg,'p3' ,p3)
EgtSetInfo(Lg,'s' ,s)
EgtSetInfo(Lg,'est' ,est)
EgtSetInfo(Lg,'kbs' ,kbs)
EgtSetInfo(Lg,'pbs' ,pbs)
EgtSetInfo(Lg,'DS2' ,DS2)
EgtSetInfo(Lg,'fht' ,fht)
EgtSetInfo(Lg,'fhb' ,fhb)
EgtSetInfo(Lg,'LG' ,LG)
EgtSetInfo(Lg,'LM' ,LM)
EgtSetInfo(Lg,'LA' ,LA)
EgtSetInfo(Lg,'LGM' ,LGM)
EgtSetInfo(Lg,'LMM' ,LMM)
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 OverHead