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

1705 lines
71 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
--
-- EdgePullFlat.lua by EgalWare s.r.l. 2016.06.14
-- Autore: Filippo Monchi
-- Lock edge pull dati i valori 'L' e 'H' e 'T' e 'd' e 'p' e 'd2' e con nomi attributi
-- 2016.09.21 V1.011 FM Add warning messages
-- 2016.09.21 V1.011 FM Disabled to use reverse geometries _R on tool diameter caculation
-- 2017.08.30 V1.012 FM Manage Offset_WS if present
-- 2017.09.05 V1.013 FM Manage lead-in on opposite side and anti-splint path V lead-in
-- 2018.04.05 V1.014 FM Manage info (KeepBackSet) for adjust probe on Z
-- 2018.07.20 V1.015 FM Assign note 'LikeStrike' to all geometries if runned as Strike
-- 2018.10.17 V1.016 FM Add parameter to show into message 402
-- 2018.10.22 V1.017 FM Add new parameter D_XE to move all geometries
-- 2018.12.06 V1.018 FM Manage geometry for calculate box without EdgePullFlat volume
-- 2019.10.10 V1.019 FM Manage steel option (disable to generate pocket path, make closed and extend path)
-- 2019.10.18 V2.000 FM Manage use Materials
-- 2019.10.21 V2.001 FM Modify the closed path start point for steel material
-- 2019.10.25 V2.002 FM Add clean corner geometries
-- 2019.12.18 V2.003 FM Use new parameter DGC.Eah that allow insert template also on bullnose ans convex profiles
-- 2020.04.29 V2.004 FM Update for aluminum material
-- 2020.05.26 V2.005 FM Manage geometries for calculate region when frame(jamb) is disposed on wide side
-- 2020.05.25 V2.006 FM Manage geometries for calculate region when frame(jamb) is disposed on narrow side
-- 2020.07.01 V2.007 FM Disable Warning message on frames if parameter DGD.Spd is <= 0
-- 2021.01.22 V3.000 FM Manage better checking error on tools and dimension when produce flag is false
-- 2022.07.27 V3.001 FM Modification to use compiled code
-- 2022.08.25 V3.002 FM Fix error on use wrong geometry name name hintAS1 instead of hintAs1
-- 2024.07.19 V3.003 FM Set note 'NotCheckDir' to pocketing, antisplint paths
-- 2024.10.04 V3.004 FM Manage probe geometry and their offset position when template is disposed
-- 2024.10.29 V3.005 FM Manage new DGC.Fpd CurrDoorCustomData variable to force shuttle probe geometry to stay horizontal
-- Tavola per definizione modulo (serve ma non usata)
local LockEdgePull = {}
-- 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 dExtraH = 0.5
local sMaxFeed = 'MaxFeed'
local sRapid = 'Rapid'
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 DrawAddCircleDrawCircle( pCenter, dRadius, dAngIni, dAngCen, nGroup, idTable, bPrev, nGroupCirc,
nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar)
local nCircle = EgtArc( nGroup, pCenter, dRadius, dAngIni, dAngCen, 0, GDB_RT.LOC)
local nNumCircle
if idTable then
table.insert( idTable, nCircle)
-- se devo inserire una variazione nell'entità
if sMVar then
nNumCircle = #idTable
end
end
if bPrev then
if bDrawFirst then
local nCircle1 = EgtCircle( nGroupCirc, EgtSP( nCircle), nRad , GDB_RT.LOC)
EgtSetColor( nCircle1, cColor1)
end
if bDrawLast then
local nCircle2 = EgtCircle( nGroupCirc, EgtEP( nCircle), nRad , GDB_RT.LOC)
EgtSetColor( nCircle2, cColor2)
end
end
return nCircle, nNumCircle, 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 LockEdgePull.AdjustParams( tMhPar)
local EgtDoorsMsg = require( 'EgtDoorsMsg')
local dMaxMat0
local dMaxMat1
local dMaxMat2
local dMaxMat1x
local dMaxMat2x
local dNumMessage
local dNumLog = 0
local sMessToOut = ''
local nTempT0
local nTempT1
local nTempT2
local nTempT1x
local nTempT2x
local sMchngName0
local sMchngName1
local sMchngName2
local sMchngName1x
local sMchngName2x
-- parametro disposizione frame su lato wide (se = nil è sulla porta, se true dispsizione frame sul lato wide, se false dispsozione su lato narrow)
tMhPar.Dws = DGD.Dws
if tMhPar.Dws then -- se disposto sul lato wide, calcolo lo spessore relativo
if DGD.nTypePz == 3 or DGD.nTypePz == 4 then
tMhPar.dThD = DGD.dW
elseif DGD.nTypePz == 5 or DGD.nTypePz == 6 then
tMhPar.dThD = DGD.dH
end
end
-- do errore se profilo lock tipo bullnose e convesso e non è ammesso
if not DGC.Eah and ( DGD.tProfs.lockedge.trimming == 'CV' or
DGD.tProfs.lockedge.trimming == '1B' or DGD.tProfs.lockedge.trimming == '2B' or
DGD.tProfs.lockedge.trimming == '3B' or DGD.tProfs.lockedge.trimming == '4B' or
DGD.tProfs.lockedge.trimming == '5B' or DGD.tProfs.lockedge.trimming == '6B' or
DGD.tProfs.lockedge.trimming == '7B' or DGD.tProfs.lockedge.trimming == '8B') then
return tMhPar, 1999, string.format(EgtDoorsMsg[431], tMhPar.Nome, DGD.tProfs.lockedge.trimming)
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
-- Assegno parametri da dati utensili in macchina
local MB = require( 'MachiningBase')
local sLM
local nLMi = 1
local sLA
local nLAi = 1
local sLG
local nLGi = 1
local dOffset = 0
-- 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
else
tMhPar.est = nil
end
-- calcolo altezza effettiva in relazione allo spessore porta
-- e calcolo punto di partena in Y
tMhPar.OriH = tMhPar.H
tMhPar.bETh = true
tMhPar.fht = 0 -- setto il face h top a 0
tMhPar.fhb = 0 -- setto il face h bottom a 0
if DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then
tMhPar.H = tMhPar.H / cos(3)
if DGD.OFFSET and DGD.OFFSET > 0 then
dOffset = ( DGD.OFFSET / cos(3))
end
-- setto il flag che indica profilo bevel
tMhPar.bev = true
else
if DGD.OFFSET and DGD.OFFSET > 0 then
dOffset = DGD.OFFSET
end
end
-- setto parametro riferimento profondità roller
tMhPar.drf = DGD.dT/6
if DGD.sFrame then -- se è un assemblato
tMhPar.drf = 0.1 -- in questo modo crea semre la regione da togliere relativa al materiale asportato
end
-- se altezza supera lo spessore porta la riporto allo stesso valore
if (tMhPar.OriH-DGD.dT) > 0.001 then -- se altezza oltre lo spessore porta
if tMhPar.H > tMhPar.OriH then -- se sono su bevel
tMhPar.H = DGD.dT / cos(3)
else
tMhPar.H = DGD.dT
end
tMhPar.OriH = DGD.dT
if DGD.OFFSET and DGD.OFFSET > 0 then
tMhPar.StY = dOffset
else
tMhPar.StY = tMhPar.H/2
end
tMhPar.ech = false -- disattivo il chiseling
tMhPar.rf = 0 -- disattivo il radius face
tMhPar.clc = nil
tMhPar.CLC = nil
elseif abs(tMhPar.OriH-DGD.dT) < 0.001 then -- uguale allo spessore porta
if DGD.OFFSET and DGD.OFFSET > 0 then
tMhPar.StY = dOffset
else
tMhPar.StY = tMhPar.H/2
end
tMhPar.ech = false -- disattivo il chiseling
tMhPar.rf = 0 -- disattivo il radius face
tMhPar.clc = nil -- disattivo il clean corner
tMhPar.CLC = nil
else -- minore dello spessore porta
if tMhPar.H > tMhPar.OriH then -- se sono su bevel
if DGD.OFFSET and DGD.OFFSET > 0 then
tMhPar.StY = dOffset
else
tMhPar.StY = ( ( DGD.dT / cos(3)) * 0.5)
end
else
if DGD.OFFSET and DGD.OFFSET > 0 then
tMhPar.StY = dOffset
else
tMhPar.StY = ( DGD.dT * 0.5)
end
end
tMhPar.bETh = false
end
-- se c'è la variabile CurrCamInfo che indica che la porta è disposta con il lato lock sul lato navetta
-- e il template non è sui lati top e bottom
if DGD.SDF and DGD.SDF > 1 then
-- calcolo la posizione del centro foro sullo spessore porta
if dOffset > 0 then
tMhPar.posh = -(DGD.dT/2) + DGD.OFFSET
else
tMhPar.posh = 0
end
if tMhPar.bev and not DGC.Fpd then
tMhPar.posh = tMhPar.posh / cos( 3)
end
end
-- devo considerare il profilo serratura e se eventualmente è opposto a quello cerniere
if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- profilo serratura bevel up
-- se lato cerniere opposto mi troverò il bevel al contrario perché comanda il lato cerniere
if DGD.bBothOppoBevel then
nLGi = 3
nLMi = 3
nLAi = 3
else
nLGi = 2
nLMi = 2
nLAi = 2
end
elseif DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BDEB' then -- profilo serratura bevel dw
-- se lato cerniere opposto mi troverò il bevel al contrario perché comanda il lato cerniere
if DGD.bBothOppoBevel then
nLGi = 2
nLMi = 2
nLAi = 2
else
nLGi = 3
nLMi = 3
nLAi = 3
end
end
if tMhPar.est and tMhPar.LG then -- se altro materiale
sLG = tMhPar.LG
if DGD.MachEn > 0 and tMhPar.d then nTempT0, dMaxMat0, sMchngName0 = MB.GetToolDataFromAttrib( sLG, nLGi) end
end
if tMhPar.LM then
sLM = tMhPar.LM
if DGD.MachEn > 0 and tMhPar.d then nTempT1, dMaxMat1, sMchngName1 = MB.GetToolDataFromAttrib( sLM, nLMi) end
if DGD.MachEn > 0 and tMhPar.d then nTempT1x, dMaxMat1x, sMchngName1x = MB.GetToolDataFromAttrib( sLM ..'_R', nLMi) end
end
if tMhPar.LA then
sLA = tMhPar.LA
if DGD.MachEn > 0 and tMhPar.d2 then nTempT2, dMaxMat2, sMchngName2 = MB.GetToolDataFromAttrib( sLA, nLAi) end
if DGD.MachEn > 0 and tMhPar.d2 then nTempT2x, dMaxMat2x, sMchngName2x = MB.GetToolDataFromAttrib( sLA ..'_R', nLAi) 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 <= 0 then
dNumLog = -1996
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 and nTempT1x and nTempT1x <= 0 then
dNumLog = -1990
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT1, sLM, nLMi, tMhPar.d, dNumLog, sMchngName1)
elseif not tMhPar.est then
if nTempT1 and nTempT1 > 0 then
tMhPar.d = nTempT1
elseif nTempT1x and nTempT1x > 0 then
tMhPar.d = nTempT1x
end
end
-- antischeggia
if DGD.bProoduce and not tMhPar.est and tMhPar.d2 and nTempT2 and nTempT2 <= 0 and nTempT2x and nTempT2x <= 0 then
dNumLog = -1990
sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT2, sLA, nLAi, tMhPar.d2, dNumLog, sMchngName2)
elseif not tMhPar.est then
if nTempT2 and nTempT2 > 0 then
tMhPar.d2 = nTempT2
elseif nTempT2x and nTempT2x > 0 then
tMhPar.d2 = nTempT2x
end
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 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 face 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 = -1995
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 face é maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.T and (( dMaxMat1 and tMhPar.T > dMaxMat1) and ( dMaxMat1x and tMhPar.T > dMaxMat1x)) then
dNumLog = -1998
dNumMessage = 460
if dMaxMat1 and tMhPar.T > dMaxMat1 then
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat1))
tMhPar.T = dMaxMat1
elseif dMaxMat1x and tMhPar.T > dMaxMat1x then
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat1x))
tMhPar.T = dMaxMat1x
end
end
-- se la profondità antischeggia della face é maggiore della capacità utensile limito la profondità ed emetto un warning
if tMhPar.T and ((dMaxMat2 and tMhPar.T > dMaxMat2) and (dMaxMat2x and tMhPar.T > dMaxMat2x)) then
dNumLog = -1997
dNumMessage = 462
if dMaxMat2 and tMhPar.T > dMaxMat2 then
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat2))
tMhPar.T = dMaxMat2
elseif dMaxMat2x and tMhPar.T > dMaxMat2x then
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat2x))
tMhPar.T = dMaxMat2x
end
end
-- setto un valore di poco inferiore allo spessore per non fresare le ventose
local sPieceName
if tMhPar.Dws then
tMhPar.TTP = tMhPar.dThD - DGD.Spd
if DGD.nTypePz == 3 then sPieceName = 'left Jamb'
elseif DGD.nTypePz == 4 then sPieceName = 'right Jamb'
elseif DGD.nTypePz == 5 then sPieceName = 'Frame header'
else sPieceName = 'Threshold' end
end
-- controllo se le profondità delle geometrie non superano lo spessore frame
if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T and abs(tMhPar.T) > tMhPar.TTP then
dNumLog = -1994
dNumMessage = 681
sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T', EgtToUiUnits(tMhPar.T), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD))
tMhPar.T = tMhPar.TTP
end
if tMhPar.T and tMhPar.T > 0 then
if DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then
tMhPar.fht = tMhPar.T / cos(3)
-- se passante calcolo l'ingombro sulla parte opposta considerando l'angolo
if tMhPar.bETh then
tMhPar.fhb = tMhPar.fht + ( DGD.dT * TAN3)
else
tMhPar.fhb = tMhPar.fht
end
else
tMhPar.fht = tMhPar.T
tMhPar.fhb = tMhPar.fht
end
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 LockEdgePull.Draw( tLckP, bPreview, bRunByCompo, nDrawMach, dThickDoor)
-- Assegno le dimensioni
local L = tLckP.L
local H = tLckP.H
local T = tLckP.T
local R = tLckP.rf
local clc = tLckP.clc
local ccr = tLckP.ccr
local d = tLckP.d
local p = tLckP.p
local s = tLckP.sf
local d2 = tLckP.d2
local ech = tLckP.ech
local est = tLckP.est -- altro materiale trovato
local bEqualTh = tLckP.bETh
local nStartY = tLckP.StY
local kbs = tLckP.kbs -- keep backset (0: none, 1: only face, 2: all)
local pbs = tLckP.pbs
local stk = tLckP.stk
local fht = tLckP.fht
local fhb = tLckP.fhb
local drf = tLckP.drf
local dws = tLckP.Dws
local dthd = tLckP.dThD
local posh = tLckP.posh -- posizione in Y del foro di tastatura
local posp = tLckP.posp -- posizione in X del foro di tastatura
-- Disassamento globale
local D_XE = tLckP.D_XE -- Extra delta on X pos for all geometries
-- Assegno i nomi
local LG = tLckP.LG
local LM = tLckP.LM
local LA = tLckP.LA
local CH = tLckP.CH
local CLC = tLckP.CLC
local DM = 'DUMMY'
local LH = 'Shuttle_Probe'
-- variabili per messaggi e settaggi vari
local sCompoName = tLckP.Nome
local nCompoNpar = tLckP.Npar
local sCompoPath = tLckP.Path
-- eventuale messaggio errore rilevato nell'adjust
local nCodAdj = tLckP.nCod
local sCodAdj = tLckP.sCod
-- nomi parametri per messaggi
local sNamePar1 = tLckP.N1 or 'L'
local sNamePar2 = tLckP.N2 or 'H'
local sNamePar3 = tLckP.N3 or 'T'
local sNamePar4 = tLckP.N4 or 'd'
local sNamePar5 = tLckP.N5 or 'p'
local sNamePar6 = tLckP.N6 or 'd2'
local sNamePar7 = tLckP.N7 or 's'
local sNamePar8 = tLckP.N8 or 'R'
local sNamePar9 = tLckP.N9 or 'clc'
local sNamePar10 = tLckP.N10 or 'ccr'
-- settaggio opzione per partenza ad angolo o meno
local bStartAng = true
local bStartOppo = true
-- RunByComponetInterface
local RC = true
-- Messaggi codice errori
local EM = ' '
local EC = 0
local ErrorBase = 1900
if bRunByCompo == nil or not bRunByCompo then -- controllo se lanciato da componente
RC = false
end
-- step face: per compatibilità con tutti i componenti, se non è definito lo setto = alla profondità cava
if not s or abs(s) <= GEO.EPS_SMALL then
s = T
end
if not D_XE then
D_XE = 0
end
-- 0 solo geom esterna, 1 solo geom mach, 2 entrambe
if nDrawMach == nil 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
if nDrawMach == 1 then -- se ho abilitato solo le geometrie di lavorazione
nForceMakeFace = 2
end
end
local EgtDoorsMsg = require( 'EgtDoorsMsg')
-- Verifica delle dimensioni, le condizioni vengono verificate in base a quale geometria deve essere creata
if 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 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 H <= 0 then
if DGD.bProoduce then
EC = 3
EM = string.format(EgtDoorsMsg[401],sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'H' deve essere > 0
H = d
else
d = H - 0.002
end
elseif 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
L = d + 0.002
else
d = L - 0.002
end
elseif 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
L = d2 + 0.002
else
d2 = L - 0.002
end
elseif 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 T < 0 then
EC = 7
EM = string.format(EgtDoorsMsg[404],sNamePar3,EgtToUiUnits(T), sCompoPath) -- il parametro 'T' deve essere >= 0
T = 0
elseif L <= 0 then
EC = 8
EM = string.format(EgtDoorsMsg[401],sNamePar1,EgtToUiUnits(L), sCompoPath) -- il parametro 'L' deve essere > 0
L = d
elseif nDrawMach > 0 and s and s <= 0 then
EC = 9
EM = string.format(EgtDoorsMsg[401],sNamePar7,EgtToUiUnits(s), sCompoPath) -- il parametro 's' deve essere > 0
s = d
elseif R < 0 then
EC = 10
EM = string.format(EgtDoorsMsg[404],sNamePar8,EgtToUiUnits(R), sCompoPath) -- il parametro 'R' deve essere >= 0
R = d/2
elseif 2*R >= L then
EC = 11
EM = string.format(EgtDoorsMsg[406],sNamePar8,EgtToUiUnits(R),sNamePar1..'/2',EgtToUiUnits(L/2), sCompoPath) -- il parametro 'R' deve essere > 0
R = d/2
elseif R >= H then
EC = 12
EM = string.format(EgtDoorsMsg[406],sNamePar8,EgtToUiUnits(R),sNamePar2,EgtToUiUnits(H), sCompoPath) -- il parametro 'R' deve essere > 0
R = d/2
elseif CLC and clc and ccr and clc > 0 and ccr > 0 and (2*(ccr*sin(45))) >= clc then
EC = 12
EM = string.format(EgtDoorsMsg[407],sNamePar9,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
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 rappresentatte il diametro utensile
EgtSetName(Dm,DM)
end
local hint1, hint2, hint3, hint4, hint5
local hint, hintPk, hintAs1, hintAs2, hintPkR, hintAsR1, hintAsR2
local pIni, pEnd, pCen
local pIni2, pEnd2
if nForceMakeFace ~= 1 then -- se abilitata geometria esterna
-- Costruzione della geometria
if bEqualTh then -- se cava alta come lo spessore porta disegno un contorno chiuso
if est then -- se altro materiale
hint1 = DrawAddLineDrawCircle( Point3d(-((L/2)-(d/2)-dExtraH),(nStartY+(d/2)+dExtraH),0), Point3d((L/2),(nStartY+(d/2)+dExtraH),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint2 = DrawAddLineDrawCircle( Point3d((L/2),(nStartY+(d/2)+dExtraH),0), Point3d((L/2),(nStartY-(H+(d/2)+dExtraH)),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint3 = DrawAddLineDrawCircle( Point3d((L/2),(nStartY-(H+(d/2)+dExtraH)),0), Point3d(-(L/2),(nStartY-(H+(d/2)+dExtraH)),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint4 = DrawAddLineDrawCircle( Point3d(-(L/2),(nStartY-(H+(d/2)+dExtraH)),0), Point3d(-(L/2),(nStartY+(d/2)+dExtraH),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint5 = DrawAddLineDrawCircle( Point3d(-(L/2),(nStartY+(d/2)+dExtraH),0), Point3d(-((L/2)-(d/2)-dExtraH),(nStartY+(d/2)+dExtraH),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
else
hint1 = DrawAddLineDrawCircle( Point3d(0,nStartY,0), Point3d((L/2),nStartY,0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint2 = DrawAddLineDrawCircle( Point3d((L/2),nStartY,0), Point3d((L/2),(nStartY-H),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint3 = DrawAddLineDrawCircle( Point3d((L/2),(nStartY-H),0), Point3d(-(L/2),(nStartY-H),0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint4 = DrawAddLineDrawCircle( Point3d(-(L/2),(nStartY-H),0), Point3d(-(L/2),nStartY,0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
hint5 = DrawAddLineDrawCircle( Point3d(-(L/2),nStartY,0), Point3d(0,nStartY,0), Lg, nil, bPreview, Dm, 0, false, false, RED(), RED())
end
hint = EgtCurveCompo( Lg, {hint1,hint2,hint3,hint4,hint5}, true)
else -- altrimenti contorno aperto
local tPocket = {}
if est then -- se altro materiale
pIni = Point3d(-((L/2)-(d/2)-dExtraH),(nStartY+(d/2)+dExtraH),0)
pEnd = Point3d(L/2,(nStartY+(d/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
else
pIni = Point3d(L/2,nStartY,0)
end
if R > 0 then
pEnd = Point3d(L/2,(nStartY-H+R),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
pEnd = Point3d(((L/2)-R),(nStartY-H),0)
pCen = Point3d(((L/2)-R),(nStartY-H+R),0)
DrawAddCircleDrawCircle( pCen, R, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
else
pEnd = Point3d(L/2,(nStartY-H),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
end
if R > 0 then
pEnd = Point3d((-(L/2)+R),(nStartY-H),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
pEnd = Point3d(-(L/2),(nStartY-H+R),0)
pCen = Point3d((-(L/2)+R),(nStartY-H+R),0)
DrawAddCircleDrawCircle( pCen, R, -90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
else
pEnd = Point3d(-(L/2),(nStartY-H),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
end
if est then -- se altro materiale
pEnd = Point3d(-(L/2),(nStartY+(d/2)+dExtraH),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
pEnd = Point3d(-((L/2)-(d/2)-dExtraH),(nStartY+(d/2)+dExtraH),0)
else
pEnd = Point3d(-(L/2),nStartY,0)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
hint = EgtCurveCompo( Lg, tPocket, true)
end
if hint then
EgtModifyCurveThickness(hint, -T)
EgtSetName(hint,LG)
EgtSetInfo(hint,'SideDoor','Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
if est then
EgtSetInfo( hint, 'StartFromExt', 1)
end
if stk then
EgtSetInfo(hint,'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hint, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hint, 'ProbeSide', '1')
end
end
-- Clean corner
if CLC and clc and clc > 0 and clc < H and clc < L then
local CLC1 = MakeClcPath( clc, ccr, CLC, Lg, -T)
if CLC1 then
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
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,'SideDoor','Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
if stk then
EgtSetInfo( CLC1,'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- angolo x+y-
local CLC2 = EgtCopyGlob( CLC1, Lg)
EgtRotate( CLC2, Point3d(0,0,0), Z_AX(), 180)
EgtMove( CLC2, Point3d((L/2),nStartY-H,0) - ORIG())
-- angolo x-y-
EgtRotate( CLC1, Point3d(0,0,0), Z_AX(), 90)
EgtMove( CLC1, Point3d(-(L/2),nStartY-H,0) - ORIG())
end
end
end
-----------------------------------------------
-----------------------------------------------
-- Costruzione delle geometrie di lavorazione
-----------------------------------------------
-----------------------------------------------
if nDrawMach > 0 then -- se abilitata geometria lavorazione
if not Lg then
Lg = EgtGroup(Pz,GDB_RT.LOC)
EgtSetName(Lg,sCompoName)
end
local dZedStart
local dZedWork
local nStep
local dStep
local nPass
-- geometria antischeggia
if d2 then -- se parametro valido
local tPocketAs = {}
local tPocketAs2 = {}
if s >= T then -- se passo unico
local dPosY, dEndPosY, dIniPosY, dDeltaPosX
local dPosY2, dEndPosY2, dIniPosY2
if bStartAng then -- se lead-in con angolo
if H >= (d2*3/4) then
if (H-R) > (d2/4) then
dEndPosY = (nStartY-(d2/4))
dEndPosY2 = (nStartY-H+(d2/4))
else
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
end
else
if (H-R) > 0 then
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
else
dEndPosY = (nStartY-H+(d2/2))
dEndPosY2 = (nStartY-(d2/2))
end
end
dPosY = dEndPosY + (d2/8)
dPosY2 = dEndPosY2 - (d2/8)
dIniPosY = dPosY + (d2*7/8)
dIniPosY2 = dPosY2 - (d2*7/8)
dDeltaPosX = ( (d2*7/8) / tan(30))
-- linea entrante inclinata
pIni = Point3d(-((L-d2)/2) + 0.2 + dDeltaPosX, dIniPosY,0)
pEnd = Point3d(-((L-d2)/2) + 0.2, dPosY,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- linea entrante in Y
pIni = pEnd
pEnd = Point3d(-((L-d2)/2) + 0.2, dEndPosY,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linee tangente al percorso
pIni = pEnd
pEnd = Point3d(-((L-d2)/2), dEndPosY,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linea di uscita
pIni = pEnd
pEnd = Point3d(-((L-d2)/2),(nStartY+(d2*3/4)),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
if bEqualTh then
-- linea entrante inclinata
pIni = Point3d((((L-d2)/2) - 0.2 - dDeltaPosX), dIniPosY2,0)
pEnd = Point3d((((L-d2)/2) - 0.2), dPosY2,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs2, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- linea entrante in Y
pIni = pEnd
pEnd = Point3d((((L-d2)/2) - 0.2), dEndPosY2,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linee tangente al percorso
pIni = pEnd
pEnd = Point3d(((L-d2)/2), dEndPosY2,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linea di uscita
pIni = pEnd
pEnd = Point3d(((L-d2)/2),(nStartY-H-(d2*3/4)),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
end
else -- lead-in diritto
if H >= (d2*3/4) then
if (H-R) > (d2/4) then
dEndPosY = (nStartY-(d2/4))
dEndPosY2 = (nStartY-H+(d2/4))
else
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
end
else
if (H-R) > 0 then
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
else
dEndPosY = (nStartY-H+(d2/2))
dEndPosY2 = (nStartY-(d2/2))
end
end
dIniPosY = (nStartY+(d2*3/4))
dIniPosY2 = (nStartY-H-(d2*3/4))
pIni = Point3d(-((L-d2)/2), dIniPosY,0)
pEnd = Point3d(-((L-d2)/2), dEndPosY,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
if bEqualTh then
pIni = Point3d(((L-d2)/2), dIniPosY2,0)
pEnd = Point3d(((L-d2)/2), dEndPosY2,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs2, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
end
end
-- trasformo in geometria composita
if ( #tPocketAs > 0) then
hintAs1 = EgtCurveCompo( Lg, tPocketAs, true)
if hintAs1 then
EgtModifyCurveThickness( hintAs1, -T)
EgtSetName( hintAs1, LA)
EgtSetInfo( hintAs1, 'SideDoor', 'Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
EgtSetInfo( hintAs1, 'NotCheckDir', '1')
if stk then
EgtSetInfo( hintAs1, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hintAs1, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs1, 'ProbeSide', '1')
end
end
end
if ( #tPocketAs2 > 0) then
hintAs2 = EgtCurveCompo( Lg, tPocketAs2, true)
if hintAs2 then
EgtModifyCurveThickness(hintAs2, -T)
EgtSetName( hintAs2, LA)
EgtSetInfo( hintAs2, 'SideDoor', 'Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
EgtSetInfo( hintAs2, 'NotCheckDir', '1')
if stk then
EgtSetInfo( hintAs2, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hintAs2, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAS2, 'ProbeSide', '1')
end
end
end
else -- altrimenti più passate
nStep = ceil(T/s) -- numero di passate
dStep = (T/nStep) -- passo ricalcolato
nPass = 1
dZedStart = 0
local tMVar = {}
local tMVar2 = {}
local nConEnt
local sKindVar
local dPosY, dEndPosY, dIniPosY, dDeltaPosX
local dPosY2, dEndPosY2, dIniPosY2
while nPass <= nStep do
dZedWork = dZedStart - dStep
if nPass == nStep then
dZedWork = -T
end
if bStartAng then -- se lead-in con angolo
if H >= (d2*3/4) then
if (H-R) > (d2/4) then
dEndPosY = (nStartY-(d2/4))
dEndPosY2 = (nStartY-H+(d2/4))
else
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
end
else
if (H-R) > 0 then
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
else
dEndPosY = (nStartY-H+(d2/2))
dEndPosY2 = (nStartY-(d2/2))
end
end
dPosY = dEndPosY + (d2/8)
dPosY2 = dEndPosY2 - (d2/8)
dIniPosY = dPosY + (d2*7/8)
dIniPosY2 = dPosY2 - (d2*7/8)
dDeltaPosX = ( (d2*7/8) / tan(30))
-- linea entrante inclinata
pIni = Point3d(-((L-d2)/2) + 0.2 + dDeltaPosX, dIniPosY, dZedWork)
pEnd = Point3d(-((L-d2)/2) + 0.2, dPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- linea entrante in Y
pIni = pEnd
pEnd = Point3d(-((L-d2)/2) + 0.2, dEndPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linee tangente al percorso
pIni = pEnd
pEnd = Point3d(-((L-d2)/2), dEndPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linea di uscita
pIni = pEnd
pEnd = Point3d(-((L-d2)/2),(nStartY+(d2*3/4)), dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-((L-d2)/2) + 0.2 + dDeltaPosX, pIni:getY(), dZedWork)
if bEqualTh then
-- linea entrante inclinata
pIni2 = Point3d(((L-d2)/2) - 0.2 - dDeltaPosX, dIniPosY2,dZedWork)
pEnd2 = Point3d(((L-d2)/2) - 0.2, dPosY2,dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- linea entrante in Y
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2) - 0.2, dEndPosY2,dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linee tangente al percorso
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2), dEndPosY2,dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linea di uscita
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2),(nStartY-H-(d2*3/4)),dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2) - 0.2 - dDeltaPosX, pIni2:getY(), dZedWork)
end
else -- lead-in diritto
if H >= (d2*3/4) then
if (H-R) > (d2/4) then
dEndPosY = (nStartY-(d2/4))
dEndPosY2 = (nStartY-H+(d2/4))
else
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
end
else
if (H-R) > 0 then
dEndPosY = (nStartY-(H-R))
dEndPosY2 = (nStartY-R)
else
dEndPosY = (nStartY-H+(d2/2))
dEndPosY2 = (nStartY-(d2/2))
end
end
dIniPosY = (nStartY+(d2*3/4))
dIniPosY2 = (nStartY-H-(d2*3/4))
pIni = Point3d((-((L-d2)/2) + 0.2), dIniPosY, dZedWork)
pEnd = Point3d((-((L-d2)/2) + 0.2), dEndPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- faccio il ritorno alla posizione di partenza
pIni = pEnd
pEnd = Point3d(-((L-d2)/2), dEndPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d( pIni:getX(), dIniPosY, dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(-((L-d2)/2) + 0.2, pIni:getY(), dZedWork)
if bEqualTh then
pIni2 = Point3d(((L-d2)/2) - 0.2, dIniPosY2, dZedWork)
pEnd2 = Point3d(((L-d2)/2) - 0.2, dEndPosY2, dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- faccio il ritorno alla posizione di partenza
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2), dEndPosY2, dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni2 = pEnd2
pEnd2 = Point3d( pIni2:getX(), dIniPosY2, dZedWork)
DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
pIni2 = pEnd2
pEnd2 = Point3d(((L-d2)/2) + 0.2, pIni2:getY(), dZedWork)
end
end
nPass = nPass + 1
dZedStart = dZedWork
-- se ho altri passi scendo in z
if nPass <= nStep then
local pIniLoc = pEnd
pEnd = Point3d(pIniLoc:getX(), pIniLoc:getY(), (dZedStart - dStep))
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), false, true,
ORANGE(), ORANGE(), sMaxFeed)
table.insert( tMVar, {nConEnt,sKindVar})
if bEqualTh then
local pIniLoc2 = pEnd2
pEnd2 = Point3d(pIniLoc2:getX(), pIniLoc2:getY(), (dZedStart - dStep))
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (d2/2), false, true,
ORANGE(), ORANGE(), sMaxFeed)
table.insert( tMVar2, {nConEnt,sKindVar})
end
end
end -- end while
-- trasformo in geometria composita
if ( #tPocketAs > 0) then
hintAs1 = EgtCurveCompo( Lg, tPocketAs, true)
if hintAs1 then
EgtModifyCurveThickness( hintAs1, 0)
-- assegno nota con la lista delle entità di variazione
local sListEnt = ''
for i = 1, #tMVar do
sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar[i][1], 0) .. ', ' .. 'code=' .. tMVar[i][2] .. '}'
if i < #tMVar then
sListEnt = sListEnt .. ','
end
end -- end for
if string.len( sListEnt) > 0 then EgtSetInfo( hintAs1, 'MVar', sListEnt) end
EgtSetName( hintAs1, LA)
EgtSetInfo( hintAs1, 'NotCheckDir', '1')
EgtSetInfo( hintAs1, 'SideDoor', 'Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
if stk then
EgtSetInfo( hintAs1, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hintAs1, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAs1, 'ProbeSide', '1')
end
end
end
if ( #tPocketAs2 > 0) then
hintAs2 = EgtCurveCompo( Lg, tPocketAs2, true)
if hintAs2 then
EgtModifyCurveThickness( hintAs2, 0)
-- assegno nota con la lista delle entità di variazione
local sListEnt = ''
for i = 1, #tMVar2 do
sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar2[i][1], 0) .. ', ' .. 'code=' .. tMVar2[i][2] .. '}'
if i < #tMVar2 then
sListEnt = sListEnt .. ','
end
end -- end for
if string.len( sListEnt) > 0 then EgtSetInfo( hintAs2, 'MVar', sListEnt) end
EgtSetName( hintAs2, LA)
EgtSetInfo( hintAs2, 'NotCheckDir', '1')
EgtSetInfo( hintAs2, 'SideDoor', 'Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
if stk then
EgtSetInfo( hintAs2, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hintAs2, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintAS2, 'ProbeSide', '1')
end
end
end
end
end
---------------------------------------
-- geometria svuotatura giro esterno
---------------------------------------
if not est then -- se non c'è lavorazione steel
local tPocket = {}
local tMVar = {}
local nConEnt
local sKindVar
local pStart
nStep = ceil(T/s) -- numero di passate
dStep = (T/nStep) -- passo ricalcolato
nPass = 1
dZedStart = 0
while nPass <= nStep do
dZedWork = dZedStart - dStep
if nPass == nStep then
dZedWork = -T
end
if bStartOppo then
pIni = Point3d(-((L-d)/2) + 0.2,(nStartY+(d*3/4)),dZedWork)
pStart = pIni -- memorizzo punto per ritorno e reiniziare nuovo step
-- linea in Y con centro utensile fuori
pEnd = Point3d(-((L-d)/2) + 0.2,(nStartY+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
-- linea traversa in X per andare sul vecchio punto iniziale (in X)
pIni = pEnd
pEnd = Point3d(((L-d)/2),(nStartY+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
pIni = pEnd
else
pIni = Point3d(((L-d)/2),(nStartY+(d*3/4)),dZedWork)
pStart = pIni -- memorizzo punto per ritorno e reiniziare nuovo step
end
local bDrawCircle = EgtIf( bStartOppo, false, true)
if H <= (d/2) then -- se cava troppo bassa
-- linea entrante in Y
if bEqualTh then
pEnd = Point3d(((L-d)/2),(nStartY-H-dExtraH),dZedWork)
else
pEnd = Point3d(((L-d)/2),(nStartY-H+(d/2)),dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), bDrawCircle, true, RED(), RED())
-- linea traversa in X
pIni = pEnd
if bEqualTh then
pEnd = Point3d(-((L-d)/2),(nStartY-H-dExtraH),dZedWork)
else
pEnd = Point3d(-((L-d)/2),(nStartY-H+(d/2)),dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
-- linea di risalita in Y
pIni = pEnd
pEnd = Point3d(-((L-d)/2),(nStartY+(d*3/4)),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
pIni = pEnd
else
if R > (d/2) then -- NB se c'è il raggio non è passante
-- linea entrante in Y
pEnd = Point3d(((L-d)/2),(nStartY-H+R),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), bDrawCircle, true, RED(), RED())
-- raccordo 1
pIni = pEnd
pEnd = Point3d(((L/2)-R),(nStartY-H+(d/2)),dZedWork)
pCen = Point3d(((L/2)-R),(nStartY-H+R),dZedWork)
DrawAddCircleDrawCircle( pCen, (R-(d/2)), 0,-90, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
-- linea traversa in X
pIni = pEnd
pEnd = Point3d((-(L/2)+R),(nStartY-H+(d/2)),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
-- raccordo 2
pIni = pEnd
pEnd = Point3d(-((L-d)/2),(nStartY-H+R),dZedWork)
pCen = Point3d((-(L/2)+R),(nStartY-H+R),dZedWork)
DrawAddCircleDrawCircle( pCen, (R-(d/2)), -90,-90, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
pIni = pEnd
else
-- linea entrante in Y
if bEqualTh then
pEnd = Point3d(((L-d)/2),(nStartY-H-dExtraH),dZedWork)
else
pEnd = Point3d(((L-d)/2),(nStartY-H+(d/2)),dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), bDrawCircle, true, RED(), RED())
-- linea traversa in X
pIni = pEnd
if bEqualTh then
pEnd = Point3d(-((L-d)/2),(nStartY-H-dExtraH),dZedWork)
else
pEnd = Point3d(-((L-d)/2),(nStartY-H+(d/2)),dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
pIni = pEnd
end
-- linea di risalita in Y
pEnd = Point3d(-((L-d)/2),(nStartY+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, RED(), RED())
pIni = pEnd
-- linea di riposizionamento in X
if bStartOppo then
pEnd = Point3d(-(((L*2)-(d*3))/4),(nStartY+dExtraH),dZedWork)
else
pEnd = Point3d((((L*2)-(d*3))/4),(nStartY+dExtraH),dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
pIni = pEnd
local nDirVers = EgtIf( bStartOppo, 1, -1)
local nDistYcentr = (d*p)
local nPosYcentr = (nStartY+dExtraH) - nDistYcentr
local bContinue
local nDeltaXPk = 0
if bEqualTh then
bContinue = nPosYcentr > nStartY-H
else
bContinue = nPosYcentr > (nStartY-H+(d/2))
end
-- se c'è il raggio e la coordinata Y è entrata nell'influenza del raccordo ne calcolo il delta in x
if bContinue and R > (d/2) and nPosYcentr < (nStartY-H+R) then
local nDeltaY = nPosYcentr - (nStartY-H+R)
nDeltaXPk = (R-(d/2)) - sqrt( ((R-(d/2))*(R-(d/2))) - (nDeltaY*nDeltaY))
end
if bContinue then
pEnd = Point3d((-nDirVers * ((((L*2)-(d*3))/4)-nDeltaXPk)),nPosYcentr,dZedWork)
end
-- ciclo passate svuotatura
while bContinue do
-- linea affondamento in Y
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
pIni = pEnd
-- linea passata in X
pEnd = Point3d((nDirVers * ((((L*2)-(d*3))/4)-nDeltaXPk)),nPosYcentr,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
-- calcolo nuovo passo in Y e indice direzione
nPosYcentr = nPosYcentr - nDistYcentr
if bEqualTh then
bContinue = nPosYcentr > nStartY-H
else
bContinue = nPosYcentr > (nStartY-H+(d/2))
end
-- calcolo il delta x relativo alla presenza del raccordo
if bContinue and R > (d/2) and nPosYcentr < (nStartY-H+R) then
local nDeltaY = nPosYcentr - (nStartY-H+R)
nDeltaXPk = (R-(d/2)) - sqrt( ((R-(d/2))*(R-(d/2))) - (nDeltaY*nDeltaY))
end
-- se ancora dentro l'area
if bContinue then
nDirVers = -nDirVers
-- ricalcolo punti per linea successiva
pIni = pEnd
pEnd = Point3d((-nDirVers * ((((L*2)-(d*3))/4)-nDeltaXPk)),nPosYcentr,dZedWork)
end
end -- end while
-- linea di risalita in Y
pIni = pEnd
pEnd = Point3d(pIni:getX(), (nStartY+(d*3/4)), dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
end
nPass = nPass + 1
dZedStart = dZedWork
-- se ho altri passi torno al punto di inizio
if nPass <= nStep then
pIni = pEnd
pEnd = Point3d(pStart:getX(), pStart:getY(), (dZedStart - dStep))
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true,
YELLOW(), YELLOW(), sMaxFeed)
table.insert( tMVar, {nConEnt,sKindVar})
end
end -- end while
-- trasformo in geometria composita
if ( #tPocket > 0) then
hintPk = EgtCurveCompo( Lg, tPocket, true)
if hintPk then
EgtModifyCurveThickness( hintPk, 0)
-- assegno nota con la lista delle entità di variazione
local sListEnt = ''
for i = 1, #tMVar do
sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar[i][1], 0) .. ', ' .. 'code=' .. tMVar[i][2] .. '}'
if i < #tMVar then
sListEnt = sListEnt .. ','
end
end -- end for
if string.len( sListEnt) > 0 then EgtSetInfo( hintPk, 'MVar', sListEnt) end
EgtSetName( hintPk, LM)
EgtSetInfo( hintPk, 'SideDoor', 'Sidelh') -- setto una nota per indicare su che lato della porta deve essere spostato
EgtSetInfo( hintPk, 'NotCheckDir', '1')
if stk then
EgtSetInfo( hintPk, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
-- se mantiene backset
if kbs and kbs > 0 then
local sKeepMode = 'w' -- setto di default per mantenere il lato wide
if bEqualTh then -- se spessore passante
sKeepMode = 'c' -- setto per mantenere il centro dello spessore
end
EgtSetInfo( hintPk, 'KeepBackSet', sKeepMode)
end
if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then
EgtSetInfo( hintPk, 'ProbeSide', '1')
end
else
EC = ErrorBase + 13
EM = string.format(EgtDoorsMsg[427], sCompoPath)
end
end
end
if EC == 0 then
if not dws then -- se frame viene disposto sul lato narrow o è sulla porta(disposto sul lato stretto)
-- se la sezione supera 1/6 dello spessore porta
-- disegno sezione ribasso su faccia superiore/inferiore porta
if fhb > drf then
-- setto griglia dietro per l'ingombro sicuramente esistente
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.BACK))
local nIdSideBoxUp = EgtRectangle2P( Lg, Point3d((L/2),0,nStartY), Point3d(-(L/2),-fhb,nStartY), GDB_RT.GRID)
-- nIdSideBoxUp = EgtRectangle2P( Lg, Point3d(-(L/2)+D_SS,0,((H/2)+HS)), Point3d(-(L/2)+D_SS+LS,-fhb,((H/2)+HS)), GDB_RT.GRID)
if nIdSideBoxUp then
if bEqualTh then
EgtModifyCurveThickness(nIdSideBoxUp, -dThickDoor)
else
EgtModifyCurveThickness(nIdSideBoxUp, -H)
end
EgtSetName( nIdSideBoxUp, 'upper')
EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper')
end
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
end
--debug
-- EgtSaveFile()
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
else -- altrimenti frame viene disposto sul lato wide
local nIdSideBoxUp
if hint then
nIdSideBoxUp = EgtCopyGlob( hint, Lg)
EgtSetName( nIdSideBoxUp, 'upper')
EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper')
end
end
end
end
-- aggiungo foro probe
if EC == 0 and nDrawMach > 0 and posh and L then
local dPosProbe = 0
local sPositiveSuffixProbe = ''
local sNegativeSuffixProbe = ''
if posp and posp > 0 then
dPosProbe = (L/2) + posp
sPositiveSuffixProbe = '_NEG'
sNegativeSuffixProbe = '_POS'
end
local pCentr = Point3d( dPosProbe, posh, 0)
local hintPr = EgtArc( Lg, pCentr, 1, 0, -360, 0, GDB_RT.LOC)
-- verifico se devo forzare direzione orizzontale o seguire il profilo
local sSideDoorInfo = 'Sidelh'
if DGC.Fpd then
sSideDoorInfo = 'Lock'
end
if hintPr then
EgtModifyCurveThickness( hintPr, -10)
EgtSetName( hintPr, LH..sPositiveSuffixProbe)
EgtSetInfo( hintPr, 'SideDoor', sSideDoorInfo)
if stk then
EgtSetInfo( hintPr, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
end
if dPosProbe > 0 then
pCentr = Point3d( -dPosProbe, posh, 0)
hintPr = EgtArc( Lg, pCentr, 1, 0, -360, 0, GDB_RT.LOC)
if hintPr then
EgtModifyCurveThickness( hintPr, -10)
EgtSetName( hintPr, LH..sNegativeSuffixProbe)
EgtSetInfo( hintPr, 'SideDoor', sSideDoorInfo)
if stk then
EgtSetInfo( hintPr, 'LikeStrike', '1') -- setto una nota per indicare che è una geometria trattata come strike
end
end
end
end
if EC == 0 and D_XE and D_XE ~= 0 then
EgtMove( Lg, Point3d(0,D_XE,0) - ORIG())
end
-- cambio colore alla geometria
if bPreview then
if EC == 0 then
if hint then
EgtSetColor(hint,AQUA())
end
if hintAs1 then
EgtSetColor(hintAs1,AQUA())
end
if hintAs2 then
EgtSetColor(hintAs2,AQUA())
end
if hintPk then
EgtSetColor(hintPk,AQUA())
end
else
if hint then
EgtSetColor(hint,ORANGE())
end
if hintAs1 then
EgtSetColor(hintAs1,ORANGE())
end
if hintAs2 then
EgtSetColor(hintAs2,ORANGE())
end
if hintPk then
EgtSetColor(hintPk,ORANGE())
end
end
else -- altrimenti non Preview
-- (NOTA : se ci sono errori il componente non viene eseguito dal programma di gestione dei componenti)
-- cancello le parti ausiliarie se disegnate
if Dm then
EgtErase(Dm)
end
if nDrawMach > 0 then -- se abilitata geometria lavorazione
-- faccio la copia e il mirror delle lavorazioni per gestire il caso che la geometria finisca sottosquadra
if hintAs1 then
hintAsR1 = EgtCopyGlob ( hintAs1, Lg)
if hintAsR1 then
EgtMirror( hintAsR1, ORIG(), X_AX()) -- faccio il mirror su asse Y
EgtSetName( hintAsR1, LA..'_R')
end
end
if hintAs2 then
hintAsR2 = EgtCopyGlob ( hintAs2, Lg)
if hintAsR2 then
EgtMirror( hintAsR2, ORIG(), X_AX()) -- faccio il mirror su asse Y
EgtSetName( hintAsR2, LA..'_R')
end
end
if hintPk then
hintPkR = EgtCopyGlob ( hintPk, Lg)
if hintPkR then
EgtMirror( hintPkR, ORIG(), X_AX()) -- faccio il mirror su asse Y
EgtSetName( hintPkR, LM..'_R')
end
end
end
if bRunByCompo then
-- scrivo i parametri nelle info del pezzo
WriteCompoDataToPart( Pz, sCompoName, nCompoNpar)
end
-- scrivo note nel layer della serratura
EgtSetInfo( Lg, 'Type' ,'EdgePullFlat')
EgtSetInfo( Lg, 'Nome' ,sCompoName)
EgtSetInfo( Lg, 'L' ,L)
EgtSetInfo( Lg, 'H' ,H)
EgtSetInfo( Lg, 'R' ,R)
EgtSetInfo( Lg, 'clc' ,clc)
EgtSetInfo( Lg, 'ccr' ,ccr)
EgtSetInfo( Lg, 'T' ,T)
EgtSetInfo( Lg, 'd' ,d)
EgtSetInfo( Lg, 'p' ,p)
EgtSetInfo( Lg, 's' ,s)
EgtSetInfo( Lg, 'd2' ,d2)
EgtSetInfo( Lg, 'posh' ,posh)
EgtSetInfo( Lg, 'posp' ,posp)
EgtSetInfo( Lg, 'ech' ,ech)
EgtSetInfo( Lg, 'est' ,est)
EgtSetInfo( Lg, 'bEqualTh' ,bEqualTh)
EgtSetInfo( Lg, 'nStartY' ,nStartY)
EgtSetInfo( Lg, 'kbs' ,kbs)
EgtSetInfo( Lg, 'pbs' ,pbs)
EgtSetInfo( Lg, 'stk' ,stk)
EgtSetInfo( Lg, 'fht' ,fht)
EgtSetInfo( Lg, 'fhb' ,fhb)
EgtSetInfo( Lg, 'drf' ,drf)
EgtSetInfo( Lg, 'dws' ,dws)
EgtSetInfo( Lg, 'dthd' ,dthd)
EgtSetInfo( Lg, 'D_XE' ,D_XE)
EgtSetInfo( Lg, 'LG' ,LG)
EgtSetInfo( Lg, 'LM' ,LM)
EgtSetInfo( Lg, 'LA' ,LA)
EgtSetInfo( Lg, 'CLC' ,CLC)
EgtSetInfo( Lg, 'LH' ,LH)
EgtSetInfo( Lg, 'CH' ,CH)
EgtSetInfo( Lg, 'Path' ,sCompoPath)
end
if EC == 0 and nCodAdj and nCodAdj < 0 then
EC = nCodAdj
EM = sCodAdj
end
return EC, EM, Lg
end
return LockEdgePull