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

1550 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
--
-- _Strike.lua by EgalWare s.r.l. 2016.07.11
-- Autore: Filippo Monchi
-- StrikeC, componente di secondo livello, non può essere chiamato direttamente da un lua dei
-- componenti di interfaccia
-- 2017.09.05 V1.0a2 FM Manage lead-in on opposite side and anti-splint path V lead-in
-- 2018.01.08 V1.0a3 FM Manage new R1 parameter to add a fillet on single corner
-- 2018.01.12 V1.0a4 FM Manage new anti splint position path when side pivot correspond to side door ( on offset and offsetintermediate type)
-- 2018.05.15 V1.0a5 FM Add manage new mode to count entity also on curvecompo path to allow assign note on connection entity
-- 2019.10.10 V1.0a6 FM Manage steel option (disable to generate pocket paths and antisplint path, make closed and extend face path)
-- 2019.10.18 V2.000 FM Manage use Materials
-- 2024.04.12 V2.001 FM Also Consider the latch strike wide to check if it's possible do the offset
-- 2024.07.19 V2.002 FM Set note 'NotCheckDir' to pocketing and antisplint paths
-- Tavola per definizione modulo (serve ma non usata)
local StrikeC = {}
-- Intestazioni
require( 'EgtBase')
EgtEnableDebug( false)
-- Valori limite
local dExtraH = 0.5
local sMaxFeed = 'MaxFeed'
local sRapid = 'Rapid'
-- contatori
local nTotContEnt = 0
local nTotContEnt_r = 0
local function DrawAddLineDrawCircle( pInitial, pFinal, nGroup, idTable, bPrev, nGroupCirc,
nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar, nCounter_r)
local nLine = EgtLine(nGroup, pInitial, pFinal, GDB_RT.LOC)
local nNumLine
-- serve per il conteggio delle entità in caso di concatenamento con curvecompo
if nCounter_r then
nTotContEnt_r = nTotContEnt_r + 1
else
nTotContEnt = nTotContEnt + 1
end
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, nCounter_r)
local nCircle = EgtArc( nGroup, pCenter, dRadius, dAngIni, dAngCen, 0, GDB_RT.LOC)
local nNumCircle
-- serve per il conteggio delle entità in caso di concatenamento con curvecompo
if nCounter_r then
nTotContEnt_r = nTotContEnt_r + 1
else
nTotContEnt = nTotContEnt + 1
end
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 DrawExternalPath( Lg, D_SS, L, LS, H, H3, IS, AS, R1, rf, nMode, H5, Dm)
local tPath = {}
local tPath2 = {}
local nPath1, nPath2
local pIni, pEnd, pCentr, pIni_c, pEnd_c
local dLS = H3 * tan(AS)
local H5r = EgtIf( H5, H5, H3)
local dLS5 = H5r * tan(AS)
local dR1 = R1 * tan((90-AS)/2)
local dR1s = dR1*sin(AS)
local dR1c = dR1*cos(AS)
-- Costruzione della geometria ( in senso orario) prima parte percorso
if nMode == 2 then
pIni = Point3d((-D_SS-dLS),(H3+(H/2)),0)
else
pIni_c = Point3d((-D_SS-dLS),(H3+(H/2)),0)
pIni = Point3d((-D_SS-dLS5),(H5r+(H/2)),0)
end
if R1 > 0 then
pEnd = Point3d((-D_SS-dR1s),((H/2)+dR1c),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni_c, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-D_SS+dR1,(H/2),0)
pCentr =Point3d(-D_SS+dR1,((H/2)+R1),0)
DrawAddCircleDrawCircle( pCentr, R1,(180+AS),(90-AS), Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, R1,(180+AS),(90-AS), Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(-D_SS,(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni_c, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if rf > 0 then
pEnd = Point3d(-rf,(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(0,(H/2)-rf,0)
pCentr = Point3d(-rf,(H/2)-rf,0)
DrawAddCircleDrawCircle( pCentr, rf, 90,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, 90,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(0,(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if rf > 0 then
if abs((2*rf)-H) < 0.0001 then
pEnd = Point3d(-rf,-(H/2),0)
pCentr = Point3d(-rf,-(H/2)+rf,0)
DrawAddCircleDrawCircle( pCentr, rf, 0,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, 0,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(0,-(H/2)+rf,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-rf,-(H/2),0)
pCentr = Point3d(-rf,-(H/2)+rf,0)
DrawAddCircleDrawCircle( pCentr, rf, 0,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, 0,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
else
pEnd = Point3d(0,-(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if rf > 0 then
if abs( L-rf-rf) > 0.001 then
pEnd = Point3d(-L+rf,-(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-L,-(H/2)+rf,0)
pCentr = Point3d(-L+rf,-(H/2)+rf,0)
DrawAddCircleDrawCircle( pCentr, rf, -90,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, -90,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(-L,-(H/2)+rf,0)
pCentr = Point3d(-L+rf,-(H/2)+rf,0)
DrawAddCircleDrawCircle( pCentr, rf, -90,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, -90,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
else
pEnd = Point3d(-L,-(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if rf > 0 then
if abs((2*rf)-H) < 0.0001 then
pEnd = Point3d(-L+rf,(H/2),0)
pCentr = Point3d(-L+rf,(H/2)-rf,0)
DrawAddCircleDrawCircle( pCentr, rf, 180,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, 180,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(-L,(H/2)-rf,0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-L+rf,(H/2),0)
pCentr = Point3d(-L+rf,(H/2)-rf,0)
DrawAddCircleDrawCircle( pCentr, rf, 180,-90, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, rf, 180,-90, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
else
pEnd = Point3d(-L,(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if R1 > 0 then
pEnd = Point3d((-D_SS-LS-IS-dR1),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d((-D_SS-LS-IS+dR1s),((H/2)+dR1c),0)
pCentr = Point3d((-D_SS-LS-IS-dR1),((H/2)+R1),0)
DrawAddCircleDrawCircle( pCentr, R1, -90,(90-AS), Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, R1, -90,(90-AS), Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d((-D_SS-LS-IS),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
-- risalita dente
pEnd = Point3d((-D_SS-LS-IS+dLS),(H3+(H/2)),0) -- punto idoneo per modo 2 o per modo 1 con doppio dente
if nMode == 1 then
pEnd_c = Point3d((-D_SS-LS-IS+dLS),(H3+(H/2)),0)
if abs(IS) < GEO.EPS_SMALL then -- se un solo dente
pEnd = Point3d((-D_SS-LS-IS+dLS5),(H5r+(H/2)),0)
end
DrawAddLineDrawCircle( pIni, pEnd_c, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
pIni_c = pEnd_c
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
if nMode == 2 then -- se modalità percorsi aperti
-- creo primo percorso
nPath1 = EgtCurveCompo( Lg, tPath, true)
pIni = Point3d((-D_SS-IS-dLS),(H3+(H/2)),0)
if IS > 0 then -- se passo per due denti
tPath = {}
end
else -- percorso chiuso
if abs(IS) > GEO.EPS_SMALL then -- se un solo dente
pEnd = Point3d((-D_SS-IS-dLS),(H3+(H/2)),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
end
pEnd_c = Point3d((-D_SS-IS-dLS),(H3+(H/2)),0)
DrawAddLineDrawCircle( pIni_c, pEnd_c, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
pIni_c = pEnd_c
end
if IS > 0 then -- se passo per due denti
if R1 > 0 then
pEnd = Point3d((-D_SS-IS-dR1s),((H/2)+dR1c),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni_c, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-D_SS-IS+dR1,(H/2),0)
pCentr = Point3d(-D_SS-IS+dR1,((H/2)+R1),0)
DrawAddCircleDrawCircle( pCentr, R1, (180+AS),(90-AS), Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, R1, (180+AS),(90-AS), Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d(-D_SS-IS,(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
if R1 > 0 then
pEnd = Point3d((-D_SS-LS-dR1),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
pEnd = Point3d(-D_SS-LS+dR1s,((H/2)+dR1c),0)
pCentr = Point3d(-D_SS-LS-dR1,((H/2)+R1),0)
DrawAddCircleDrawCircle( pCentr, R1, -90,(90-AS), Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddCircleDrawCircle( pCentr, R1, -90,(90-AS), Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
else
pEnd = Point3d((-D_SS-LS),(H/2),0)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
if nMode == 1 then
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
end
pIni = pEnd
end
-- risalita dente
pEnd = Point3d((-D_SS-LS+dLS),(H3+(H/2)),0)
if nMode == 1 then
pEnd_c = Point3d((-D_SS-LS+dLS),(H3+(H/2)),0)
pEnd = Point3d((-D_SS-LS+dLS5),(H5r+(H/2)),0)
DrawAddLineDrawCircle( pIni, pEnd_c, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
pIni_c = pEnd_c
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPath, bPreview, Dm, 0, false, false, RED(), RED())
pIni = pEnd
end
if nMode == 2 then -- se modalità percorsi aperti
-- creo primo percorso
nPath2 = EgtCurveCompo( Lg, tPath, true)
else -- percorso chiuso
pEnd_c = Point3d((-D_SS-dLS),(H3+(H/2)),0)
DrawAddLineDrawCircle( pIni_c, pEnd_c, Lg, tPath2, bPreview, Dm, 0, false, false, RED(), RED())
-- creo primo percorso
nPath1 = EgtCurveCompo( Lg, tPath, true)
-- creo secondo percorso
nPath2 = EgtCurveCompo( Lg, tPath2, true)
end
return nPath1, nPath2
end
-- Funzione di disegno
function StrikeC.Draw( EC, EM, tStrikeParam, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor)
-- Assegno le dimensioni
local L = tStrikeParam.L
local H = tStrikeParam.H
local T = tStrikeParam.T
local rf = tStrikeParam.rf
local cl = tStrikeParam.cl
local d = tStrikeParam.d
local p = tStrikeParam.p
local sf = tStrikeParam.sf
local jn = tStrikeParam.jn
local L2 = tStrikeParam.L2
local H2 = tStrikeParam.H2
local invG = tStrikeParam.invG
local est = tStrikeParam.est
local D_X = tStrikeParam.D_X
local D_Y = tStrikeParam.D_Y
local LS = tStrikeParam.LS
local HS = tStrikeParam.HS
local AS = tStrikeParam.AS
local IS = tStrikeParam.IS
local D_SS = tStrikeParam.D_SS
local R1 = tStrikeParam.rs
local d2 = tStrikeParam.da
local mkrev = tStrikeParam.mkrev
-- Assegno i nomi geometrie
local LG = tStrikeParam.LG
local LM = tStrikeParam.LM
local LA = tStrikeParam.LA
local DM = 'DUMMY'
-- variabili per messaggi e settaggi vari
local sCompoName = tStrikeParam.Nome
-- settaggio opzione per partenza ad angolo o meno
local bStartAng = true
local bStartOppo = true
-- RunByComponetInterface
local RC = true
if not bRunByCompo then -- controllo se lanciato da componente
RC = false
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
-- set variabili per compatibilità con vecchi componenti
-- step face: per compatibilità con tutti i componenti, se non è definito lo setto = alla profondità cava
if not sf or abs(sf) <= GEO.EPS_SMALL then
sf = T
end
-- rf face: per compatibilità con tutti i componenti, se non è definito lo setto a 0
if not rf or abs(rf) <= GEO.EPS_SMALL then
rf = 0
end
if cl == 0 then
rf = 0
end
if not D_Y then
D_Y = 0
end
-- single radius on face: per compatibilità con tutti i componenti, se non è definito lo setto a 0
if not R1 or abs(R1) <= GEO.EPS_SMALL then
R1 = 0
end
-- Layer
local Dm
if not Lg then
Lg = EgtGroup(Pz,GDB_RT.LOC) -- layer della figura principale
EgtSetName( Lg, sCompoName)
end
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 hintPk, hintAs1, hintAs2, hintAs3, hintAs4, hintPk_r
local pIni, pEnd, pCentr
-- creo lo stesso la geometria esterna perchè viene utilizzata anche per creare il percorso di lavorazione
-- se non è previsto viene eliminato dopo
local H3 = HS
local nMode = 2 -- make open/s path
local dLS = HS * tan(AS)
if est then
nMode = 1 -- make closed path
H3 = HS+(d/2)+ dExtraH
end
-- creo percorsi geometrici per eventuale chisel
hint1, hint2 = DrawExternalPath( Lg, D_SS, L, LS, H, H3, IS, AS, R1, rf, nMode, HS, Dm)
if hint1 then
if est then
EgtErase(hint1)
hint1 = nil
else
EgtModifyCurveThickness( hint1, -T)
EgtSetName( hint1, LG)
end
end
if hint2 then
EgtModifyCurveThickness( hint2, -T)
EgtSetName( hint2, LG)
end
---------------------------------------
---------------------------------------
-- Costruzione delle geometrie di lavorazione
---------------------------------------
---------------------------------------
if nDrawMach > 0 then -- se abilitata geometria lavorazione
local tPocket = {}
local tPocket_r = {}
local tPocketAs = {}
local tPocketAs_r = {}
local pIni , pEnd
local nCase1, nCase2
local nCase, nCaseNext
local dZedStart, dZedWork
local dRadius, hint_ofs, hint_ofs_c, hint_ofs_r, hint_ofs2, hint_ofs2_r, num_hint_o2, num_hint_o2_r
local pIni_r, pEnd_r
local nStep
local dStep
local nPass
local pStartStep
local pStartStep_r
if not Lg then
Lg = EgtGroup(Pz,GDB_RT.LOC)
EgtSetName(Lg,sCompoName)
end
-- geometria antischeggia
if d2 then -- se parametro valido
nStep = ceil(T/sf) -- numero di passate
dStep = (T/nStep) -- passo ricalcolato
nPass = 1
dZedStart = 0
local tMVar = {}
local tMVar_r = {}
local nConEnt
local sKindVar
local dPosY, dEndPosY, dIniPosY, dDeltaPosX, dCompoRadTool
while nPass <= nStep do
dZedWork = dZedStart - dStep
if nPass == nStep then
if nStep == 1 then
dZedWork = 0
else
dZedWork = -T
end
end
if bStartAng then -- se lead-in con angolo
dEndPosY = -(d2/4)
dPosY = dEndPosY + (d2/8)
dIniPosY = dPosY + (d2*7/8)
dDeltaPosX = ( (d2*7/8) / tan(30))
dCompoRadTool = (d2/2)/cos(AS)
-- linea inclinata entrante fino all'incrocio con linea discendente dislocata di 0.2
pIni = Point3d((((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))+dDeltaPosX)*invG, dIniPosY, dZedWork)
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))*invG, dPosY,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- discesa con linea inclinata disassata di 0.2
pIni = pEnd
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS)))*invG, (dEndPosY-(((d2/2)+0.2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- accostamento di 0.2mm sul profilo
pIni = pEnd
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- linea uscente
pIni = pEnd
pEnd = Point3d(((d2*3/4)*tan(AS))*invG, (d2*3/4),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d((((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))+dDeltaPosX)*invG, pIni:getY(), dZedWork)
if mkrev then -- se abilitato anche il percorso inverso
-- linea inclinata entrante fino all'incrocio con linea discendente dislocata di 0.2
pIni_r = Point3d(-(((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))+dDeltaPosX)*invG, dIniPosY,dZedWork)
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))*invG, dPosY,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- discesa con linea inclinata disassata di 0.2
pIni_r = pEnd_r
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS)))*invG, ((dEndPosY-(((d2/2)+0.2)*sin(AS)))),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- accostamento di 0.2mm sul profilo
pIni_r = pEnd_r
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), false, true, ORANGE(), ORANGE())
-- linea uscente
pIni_r = pEnd_r
pEnd_r = Point3d(-((d2*3/4)*tan(AS))*invG, (d2*3/4),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni_r = pEnd_r
pEnd_r = Point3d(-(((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS))-((dEndPosY-(((d2/2)+0.2)*sin(AS))-dPosY)*tan(AS)))+dDeltaPosX)*invG, pIni_r:getY(),dZedWork)
end
else -- lead-in diritto
dEndPosY = -(d2/4)
dIniPosY = (d2*3/4)
dCompoRadTool = (d2/2)/cos(AS)
if nStep == 1 then
-- linea entrante in Y
pIni = Point3d((dIniPosY*tan(AS))*invG, dIniPosY,dZedWork)
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
else
-- linea entrante in Y distaccata di 0.2mm
pIni = Point3d(((dIniPosY*tan(AS))+(0.2/cos(AS)))*invG, dIniPosY,dZedWork)
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS)))*invG, (dEndPosY-(((d2/2)+0.2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- accostamento sul lato profilo
pIni = pEnd
pEnd = Point3d(((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- risalita in Y
pIni = pEnd
pEnd = Point3d(((d2*3/4)*tan(AS))*invG, (d2*3/4),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni = pEnd
pEnd = Point3d(((dIniPosY*tan(AS))+(0.2/cos(AS)))*invG, pIni:getY(),dZedWork)
end
if mkrev then -- se abilitato anche il percorso inverso
if nStep == 1 then
-- linea entrante in Y
pIni_r = Point3d(-(dIniPosY*tan(AS))*invG, dIniPosY,dZedWork)
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
else
-- linea entrante in Y distaccata di 0.2mm
pIni_r = Point3d(-((dIniPosY*tan(AS))+(0.2/cos(AS)))*invG, dIniPosY,dZedWork)
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+(((d2/2)+0.2)*cos(AS)))*invG, (dEndPosY-(((d2/2)+0.2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- accostamento al profilo
pIni_r = pEnd_r
pEnd_r = Point3d(-((dEndPosY*tan(AS))-dCompoRadTool+((d2/2)*cos(AS)))*invG, (dEndPosY-((d2/2)*sin(AS))),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
-- risalita in Y
pIni_r = pEnd_r
pEnd_r = Point3d(-((d2*3/4)*tan(AS))*invG, (d2*3/4),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), true, true, ORANGE(), ORANGE())
pIni_r = pEnd_r
pEnd_r = Point3d(-((dIniPosY*tan(AS))+(0.2/cos(AS)))*invG, pIni_r:getY(),dZedWork)
end
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 mkrev then -- se abilitato anche il percorso inverso
pIniLoc = pEnd_r
pEnd_r = Point3d(pIniLoc:getX(), pIniLoc:getY(), (dZedStart - dStep))
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocketAs_r, bPreview, Dm, (d2/2), false, true,
ORANGE(), ORANGE(), sMaxFeed)
table.insert( tMVar_r, {nConEnt,sKindVar})
end
end
end -- end while
-- trasformo in geometria composita
if ( #tPocketAs > 0) then
hintAs1 = EgtCurveCompo( Lg, tPocketAs, true)
if hintAs1 then
if nStep == 1 then
EgtModifyCurveThickness(hintAs1, -T)
else
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
end
EgtSetName(hintAs1,LA)
-- muovo il percorso nella posizione corretta
if invG > 0 then
EgtMove( hintAs1, Point3d((-D_SS-LS+dLS+((d2/2)/cos(AS))),((H/2)+HS),0) - ORIG())
else
EgtMove( hintAs1, Point3d((-D_SS-dLS-((d2/2)/cos(AS))),((H/2)+HS),0) - ORIG())
end
-- faccio la copia se ha doppio dente
if IS > 0 then
hintAs3 = EgtCopyGlob( hintAs1, Lg)
EgtMove( hintAs3, Point3d(-IS,0,0) - ORIG())
end
end
end
if ( #tPocketAs_r > 0) then
hintAs2 = EgtCurveCompo( Lg, tPocketAs_r, true)
if hintAs2 then
if nStep == 1 then
EgtModifyCurveThickness(hintAs2, -T)
else
EgtModifyCurveThickness( hintAs2, 0)
-- assegno nota con la lista delle entità di variazione
local sListEnt = ''
for i = 1, #tMVar_r do
sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar_r[i][1], 0) .. ', ' .. 'code=' .. tMVar_r[i][2] .. '}'
if i < #tMVar_r then
sListEnt = sListEnt .. ','
end
end -- end for
if string.len( sListEnt) > 0 then EgtSetInfo( hintAs2, 'MVar', sListEnt) end
end
EgtSetName(hintAs2,(LA..'_R'))
-- muovo il percorso nella posizione corretta
if invG > 0 then
EgtMove( hintAs2, Point3d((-D_SS-dLS-((d2/2)/cos(AS))),((H/2)+HS),0) - ORIG())
else
EgtMove( hintAs2, Point3d((-D_SS-LS+dLS+((d2/2)/cos(AS))),((H/2)+HS),0) - ORIG())
end
-- faccio la copia se ha doppio dente
if IS > 0 then
hintAs4 = EgtCopyGlob( hintAs2, Lg)
EgtMove( hintAs4, Point3d(-IS,0,0) - ORIG())
end
end
end
end
---------------------------------------
-- geometria svuotatura giro esterno
---------------------------------------
if not est then -- se non c'è lavorazione steel
-- creo percorso per offset
H3 = HS+(d/2)+ dExtraH
local dLS = HS * tan(AS)
local H5 = HS
nMode = 1 -- make close path
hint3, hint4 = DrawExternalPath( Lg, D_SS, L, LS, H, H3, IS, AS, R1, rf, nMode, H5, Dm)
-- individuo in che caso sono considerando l'altezza dello strike
local dDimMin = H+HS
local dDimMinLs = LS
if (dDimMin-(d/2)+dExtraH) <= ( d*0.98) then -- solo passaggio di contornatura
nCase1 = 2
elseif ((dDimMin-(d/2)+dExtraH) > ( d*0.98)) and ((dDimMin-(d/2)+dExtraH) <= (d*(1+p))) then -- passaggio di contornatura + un passaggio centrale
nCase1 = 3
elseif (dDimMin-(d/2)+dExtraH) > (d*(1+p)) then -- passaggio di contornatura + passaggi offset
nCase1 = 4
end
-- individuo in che caso sono considerando la larghezza del dente dello strike
if dDimMinLs <= ( d*0.98) then -- solo passaggio di contornatura
nCase2 = 2
elseif (dDimMinLs > ( d*0.98)) and (dDimMinLs <= (d*(1+p))) then -- passaggio di contornatura + un passaggio centrale
nCase2 = 3
elseif dDimMinLs > (d*(1+p)) then -- passaggio di contornatura + passaggi offset
nCase2 = 4
end
nCase = max( nCase1, nCase2)
local nDirVers = 1
local tMVar = {}
local tMVar_r = {}
local nConEnt
local sKindVar
-- resetto contatori entità
nTotContEnt = 0
nTotContEnt_r = 0
-- calcolo il massimo tra altezza strike e larghezza dente
dRadius = max( dDimMin/2, LS/2)
nPass = 1
dZedStart = 0
nStep = ceil(T/sf) -- numero di passate
dStep = (T/nStep) -- passo ricalcolato
while nPass <= nStep do
dZedWork = dZedStart - dStep
if nPass == nStep then
dZedWork = -T
end
-- solo contornatura o contornatura + un passaggio centrale o contornatura + passaggi svuotatura
if ( nCase == 2) or ( nCase == 3) or ( nCase == 4) then
-- calcolo l'ampiezza dell'offset
dRadius = dRadius - (d/2)
-- offset sul percorso aperto per il primo giro e chiuso per gli offset successivi
hint_ofs = EgtOffsetCurveAdv( hint3, (d/2), GDB_OT.FILLET)
hint_ofs_c = EgtOffsetCurveAdv( hint4, (d/2), GDB_OT.FILLET)
if hint_ofs and hint_ofs > 0 then
if mkrev then -- se abilitato anche il percorso inverso
-- copia del percorso offsettato
hint_ofs_r = EgtCopyGlob( hint_ofs, Lg)
end
-- muovo la geometria in Z
EgtMove( hint_ofs, Point3d(0,0,dZedWork) - ORIG())
-- se flag inverso, inverto la geometria, solo qui non nelle altre copie
if invG < 0 then
EgtInvertCurve(hint_ofs)
end
if bStartOppo then
if invG > 0 then
pIni = Point3d((-D_SS-LS+dLS+(d/2)+0.2)*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep = pIni
-- linea in Y con centro utensile fuori
pEnd = Point3d((-D_SS-LS+dLS+(d/2)+0.2)*invG,(HS+(H/2)+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((-D_SS-dLS-(d/2))*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
-- linea entrante a prendere il percorso di offset
pIni = pEnd
pEnd = EgtSP( hint_ofs)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni, Point3d( pIni:getX(), pEnd:getY(), dZedWork), Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pIni = Point3d( pIni:getX(), pEnd:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pEnd = EgtEP( hint_ofs)
else
pIni = Point3d((D_SS+dLS+(d/2)+0.2)*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep = pIni
-- linea in Y con centro utensile fuori
pEnd = Point3d((D_SS+dLS+(d/2)+0.2)*invG,(HS+(H/2)+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((D_SS+LS-dLS-(d/2))*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
-- linea entrante a prendere il percorso di offset
pIni = pEnd
pEnd = EgtSP( hint_ofs)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni, Point3d( pIni:getX(), pEnd:getY(), dZedWork), Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pIni = Point3d( pIni:getX(), pEnd:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pEnd = EgtEP( hint_ofs)
end
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs)
nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom)
table.insert( tPocket, hint_ofs)
else
if invG > 0 then
-- prima linea entrante
pIni = Point3d((-D_SS-dLS-(d/2))*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep = pIni
pEnd = EgtSP( hint_ofs)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni, Point3d( pIni:getX(), pEnd:getY(), dZedWork), Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pIni = Point3d( pIni:getX(), pEnd:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pEnd = EgtEP( hint_ofs)
else
-- prima linea entrante
pIni = Point3d((D_SS+LS-dLS-(d/2))*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep = pIni
pEnd = EgtSP( hint_ofs)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni, Point3d( pIni:getX(), pEnd:getY(), dZedWork), Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pIni = Point3d( pIni:getX(), pEnd:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED())
pEnd = EgtEP( hint_ofs)
end
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs)
nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom)
table.insert( tPocket, hint_ofs)
end
if mkrev then -- se abilitato anche il percorso inverso
-- muovo la geometria in Z
EgtMove( hint_ofs_r, Point3d(0,0,dZedWork) - ORIG())
-- se flag non inverso, inverto la geometria, solo qui non nelle altre copie
if invG > 0 then
EgtInvertCurve(hint_ofs_r)
end
if bStartOppo then
if invG > 0 then
pIni_r = Point3d((-D_SS-dLS-(d/2)-0.2)*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep_r = pIni_r
-- linea in Y con centro utensile fuori
pEnd_r = Point3d((-D_SS-dLS-(d/2)-0.2)*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
-- linea traversa in X per andare sul vecchio punto iniziale (in X)
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-LS+dLS+(d/2))*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
-- linea entrante a prendere il percorso di offset
pIni_r = pEnd_r
pEnd_r = EgtSP( hint_ofs_r)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni_r, Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork), Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pIni_r = Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pEnd_r = EgtEP( hint_ofs_r)
else
pIni_r = Point3d((D_SS+LS-dLS-(d/2)-0.2)*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep_r = pIni_r
-- linea in Y con centro utensile fuori
pEnd_r = Point3d((D_SS+LS-dLS-(d/2)-0.2)*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
-- linea traversa in X per andare sul vecchio punto iniziale (in X)
pIni_r = pEnd_r
pEnd_r = Point3d((D_SS+dLS+(d/2))*invG,(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
-- linea entrante a prendere il percorso di offset
pIni_r = pEnd_r
pEnd_r = EgtSP( hint_ofs_r)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni_r, Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork), Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pIni_r = Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pEnd_r = EgtEP( hint_ofs_r)
end
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs_r)
nTotContEnt_r = nTotContEnt_r + ( nNumCurve - ntypeDom)
table.insert( tPocket_r, hint_ofs_r)
else
if invG > 0 then
-- prima linea entrante
pIni_r = Point3d((-D_SS-LS+dLS+(d/2))*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep_r = pIni_r
pEnd_r = EgtSP( hint_ofs_r)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni_r, Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork), Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pIni_r = Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pEnd_r = EgtEP( hint_ofs_r)
else
-- prima linea entrante
pIni_r = Point3d((D_SS+dLS+(d/2))*invG,(HS+(H/2)+(d*3/4)),dZedWork)
pStartStep_r = pIni_r
pEnd_r = EgtSP( hint_ofs_r)
-- in base all'angolo del dente, mi collego direttamente o prima scendo in Y
if AS > 0 then
-- scenso solo in Y
DrawAddLineDrawCircle( pIni_r, Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork), Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pIni_r = Point3d( pIni_r:getX(), pEnd_r:getY(), dZedWork)
end
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, 1)
pEnd_r = EgtEP( hint_ofs_r)
end
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs_r)
nTotContEnt_r = nTotContEnt_r + ( nNumCurve - ntypeDom)
table.insert( tPocket_r, hint_ofs_r)
end
end
end
if nCase == 3 then -- passaggio di contornatura + un passaggio centrale
-- linea posizionamento passata centrale
pIni = pEnd
pEnd = Point3d((-D_SS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
-- linee passata centrale
pIni = pEnd
pEnd = Point3d((-D_SS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
pEnd = Point3d(-(d*3/4),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
if IS > 0 then
pEnd = Point3d((-D_SS-IS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
pEnd = Point3d((-D_SS-IS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
pEnd = Point3d((-D_SS-IS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
end
pEnd = Point3d((-L+(d*3/4)),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
-- se non sono all'ultima passata ritorno al punto di inizio della passata centrale,
-- si perde un po' di tempo ma è l'unica per poter rifare il passo
if nPass < nStep then
pEnd = Point3d((-D_SS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
pEnd = Point3d((-D_SS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW())
pIni = pEnd
end
if mkrev then -- se abilitato anche il percorso inverso
-- linea posizionamento passata centrale
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
-- linee passata centrale
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
pEnd_r = Point3d(-(d*3/4),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
if IS > 0 then
pEnd_r = Point3d((-D_SS-IS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-IS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-IS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
end
pEnd_r = Point3d((-L+(d*3/4)),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
-- se non sono all'ultima passata ritorno al punto di inizio della passata centrale,
-- si perde un po' di tempo ma è l'unica per poter rifare il passo
if nPass < nStep then
pEnd_r = Point3d((-D_SS-(LS/2)),0,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
pEnd_r = Point3d((-D_SS-(LS/2)),(HS+(H/2)+dExtraH),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, 1)
pIni_r = pEnd_r
end
end
elseif nCase == 4 then -- passaggio di contornatura + passaggi svuotatura
local dDistYcentr = (d*p)
local dDistYApply = dDistYcentr
local bContinue
-- se percorso offset esiste
if hint_ofs_c and hint_ofs_c > 0 then
-- muovo la geometria in Z
EgtMove( hint_ofs_c, Point3d(0,0,dZedWork) - ORIG())
-- se flag inverso, inverto la geometria, solo qui non nelle altre copie
if invG < 0 then
EgtInvertCurve(hint_ofs_c)
end
hint5 = hint_ofs_c
-- faccio l'offset del raggio fresa
dRadius = dRadius - dDistYcentr
bContinue = dRadius > 0
local bCalcDir = true
-- se percorso offset esiste
while bContinue do
hint_ofs2, num_hint_o2 = EgtOffsetCurveAdv( hint_ofs_c, dDistYApply*invG, GDB_OT.FILLET)
if hint_ofs2 and hint_ofs2 > 0 then
pIni = pEnd
local nStartPath = hint_ofs2
local nIncIndex = 1
-- se ottengo più di una curva determino quale è più distante tra la prima e l'ultima
if bCalcDir and num_hint_o2 > 1 then
bCalcDir = false
local nFirstP = hint_ofs2
local nLastP = hint_ofs2 + ( num_hint_o2 - 1)
local nDistIni = dist( pIni, EgtSP( nFirstP))
local nDistLast = dist( pIni, EgtSP( nLastP))
-- se la prima curva è più lontana dall'inizio, inverto il valore di DX tramite il semi interasse passato
if nDistIni >= nDistLast then
nStartPath = nLastP
nIncIndex = -1
end
end
-- linea congiunzione tra offset
pEnd = EgtSP( nStartPath)
-- vado a X nuovo punto
DrawAddLineDrawCircle( pIni, Point3d( pEnd:getX(), pIni:getY(), pIni:getZ()), Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
-- congiungo a offset
DrawAddLineDrawCircle( Point3d( pEnd:getX(), pIni:getY(), pIni:getZ()), pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
pEnd = EgtEP( nStartPath)
local ntypeDom, nNumCurve = EgtCurveDomain(nStartPath)
nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom)
table.insert( tPocket, nStartPath)
-- per tutte le curve create
for i = 1, ( num_hint_o2 - 1) do
-- linea discesa a Y0
pIni = pEnd
pEnd = Point3d( pEnd:getX(), 0, pEnd:getZ())
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
-- linea X prossima curva
pIni = pEnd
pEnd = EgtSP( nStartPath+(i*nIncIndex))
DrawAddLineDrawCircle( pIni, Point3d( pEnd:getX(), 0, pEnd:getZ()), Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
-- linea congiunzione curva
pIni = Point3d( pEnd:getX(), 0, pEnd:getZ())
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW())
pEnd = EgtEP( nStartPath+(i*nIncIndex))
local ntypeDom, nNumCurve = EgtCurveDomain((nStartPath+(i*nIncIndex)))
nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom)
table.insert( tPocket, (nStartPath+(i*nIncIndex)))
end
if mkrev then -- se abilitato anche il percorso inverso
num_hint_o2_r = num_hint_o2
if nIncIndex > 0 then
nStartPath = hint_ofs2
else
nStartPath = hint_ofs2 + (num_hint_o2_r-1)
end
-- copia del percorso offsettato
hint_ofs2_r = EgtCopyGlob( nStartPath, Lg)
EgtInvertCurve(hint_ofs2_r)
-- linea congiunzione tra offset
pIni_r = pEnd_r
pEnd_r = EgtSP( hint_ofs2_r)
-- vado a X nuovo punto
DrawAddLineDrawCircle( pIni_r, Point3d( pEnd_r:getX(), pIni_r:getY(), pIni_r:getZ()), Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, 1)
-- congiungo a offset
DrawAddLineDrawCircle( Point3d( pEnd_r:getX(), pIni_r:getY(), pIni_r:getZ()), pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, 1)
pEnd_r = EgtEP( hint_ofs2_r)
hint_ofs_r = hint_ofs2_r
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs_r)
nTotContEnt_r = nTotContEnt_r + ( nNumCurve - ntypeDom)
table.insert( tPocket_r, hint_ofs_r)
for i = 1, ( num_hint_o2_r - 1) do
local nIdOf = EgtCopyGlob( (nStartPath+(i*nIncIndex)), Lg)
EgtInvertCurve(nIdOf)
-- linea discesa a Y0
pIni_r = pEnd_r
pEnd_r = Point3d( pEnd_r:getX(), 0, pEnd_r:getZ())
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, 1)
-- linea X prossima curva
pIni_r = pEnd_r
pEnd_r = EgtSP( nIdOf)
DrawAddLineDrawCircle( pIni_r, Point3d( pEnd:getX(), 0, pEnd:getZ()), Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, 1)
-- linea congiunzione curva
pIni_r = Point3d( pEnd_r:getX(), 0, pEnd_r:getZ())
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, 1)
pEnd_r = EgtEP( nIdOf)
hint_ofs_r = nIdOf
local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs_r)
nTotContEnt_r = nTotContEnt_r + ( nNumCurve - ntypeDom)
table.insert( tPocket_r, hint_ofs_r)
end
end
-- calcolo nuovo passo in Y e indice direzione
dRadius = dRadius - dDistYcentr
dDistYApply = dDistYApply + dDistYcentr
bContinue = dRadius > 0
else
bContinue = false
end
end -- end while
if hint5 then
EgtErase(hint5)
hint5 = nil
end
end
end
if nPass == nStep then
if jn then -- se uso un solo utensile mi porto in posizione di partenza per la prossima geometria
-- calcolo in che caso sono con la prossima geometria
if abs(H2-d) < 0.03 then -- solo 1 passaggio in centro
nCaseNext = 1
else
nCaseNext = 0
end
pIni = pEnd
if mkrev then -- se abilitato anche il percorso inverso
pIni_r = pEnd_r
end
if ( nCaseNext == 1) then -- se solo passaggio in centro parto dalla parte opposta
if nCase ~= 3 then -- posso trovarmi in una Y alta e per raggiungere la mortasa taglio il percorso
local nx = pIni:getX()
pEnd = Point3d(nx,D_Y,dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE())
pIni = pEnd
end
pEnd = Point3d(((-((L2-d)/2)*invG)-(L/2)+D_X),D_Y,dZedWork)
if mkrev then -- se abilitato anche il percorso inverso
if nCase ~= 3 then -- posso trovarmi in una Y alta e per raggiungere la mortasa taglio il percorso
local nx = pIni_r:getX()
pEnd_r = Point3d(nx,D_Y,dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE(), nil, 1)
pIni_r = pEnd_r
end
pEnd_r = Point3d(((((L2-d)/2)*invG)-(L/2)+D_X),D_Y,dZedWork)
end
else
if nCase ~= 3 then -- posso trovarmi in una Y alta e per raggiungere la mortasa taglio il percorso
local nx = pIni:getX()
pEnd = Point3d(nx,(((H2-d)/2)+D_Y),dZedWork)
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE())
pIni = pEnd
end
pEnd = Point3d(((((L2-d)/2)*invG)-(L/2)+D_X),(((H2-d)/2)+D_Y),dZedWork)
if mkrev then -- se abilitato anche il percorso inverso
if nCase ~= 3 then -- posso trovarmi in una Y alta e per raggiungere la mortasa taglio il percorso
local nx = pIni_r:getX()
pEnd_r = Point3d(nx,(((H2-d)/2)+D_Y),dZedWork)
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE(), nil, 1)
pIni_r = pEnd_r
end
pEnd_r = Point3d(((-((L2-d)/2)*invG)-(L/2)+D_X),(((H2-d)/2)+D_Y),dZedWork)
end
end
DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE())
if mkrev then -- se abilitato anche il percorso inverso
DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, PURPLE(), PURPLE(), nil, 1)
end
end
end
end
nPass = nPass + 1
dZedStart = dZedStart - dStep
dRadius = dDimMin/2
nDirVers = -nDirVers
-- se ho altri passi torno al punto di inizio
if nPass <= nStep and nCase > 1 then
pIni = pEnd
pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep))
-- salgo in Y
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, Point3d( pIni:getX(), pEnd:getY(), pIni:getZ()), Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed)
table.insert( tMVar, {nTotContEnt,sKindVar})
-- congiungo al punto di inizio
pIni = Point3d( pIni:getX(), pEnd:getY(), pIni:getZ())
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed)
table.insert( tMVar, {nTotContEnt,sKindVar})
if mkrev then -- se abilitato anche il percorso inverso
pIni_r = pEnd_r
pEnd_r = Point3d(pStartStep_r:getX(),pStartStep_r:getY(),(dZedStart - dStep))
-- salgo in Y
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni_r, Point3d( pIni_r:getX(), pEnd_r:getY(), pIni_r:getZ()), Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, 1)
table.insert( tMVar_r, {nTotContEnt_r,sKindVar})
-- congiungo al punto di inizio
pIni_r = Point3d( pIni_r:getX(), pEnd_r:getY(), pIni_r:getZ())
_, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni_r, pEnd_r, Lg, tPocket_r, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, 1)
table.insert( tMVar_r, {nTotContEnt_r,sKindVar})
end
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)
end
end
if ( #tPocket_r > 0) then
hintPk_r = EgtCurveCompo( Lg, tPocket_r, true)
if hintPk_r then
EgtModifyCurveThickness(hintPk_r, 0)
-- assegno nota con la lista delle entità di variazione
local sListEnt = ''
for i = 1, #tMVar_r do
sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar_r[i][1], 0) .. ', ' .. 'code=' .. tMVar_r[i][2] .. '}'
if i < #tMVar_r then
sListEnt = sListEnt .. ','
end
end -- end for
if string.len( sListEnt) > 0 then EgtSetInfo( hintPk_r, 'MVar', sListEnt) end
EgtSetName(hintPk_r,(LM..'_R'))
end
end
end
-- se variabile inversione negativa inverto la direzione del percorso geometrico principale
if invG < 0 then
if hint1 then
EgtInvertCurve(hint1)
end
if hint2 then
EgtInvertCurve(hint2)
end
end
end
-- se abilitata solo geometria di lavorazione elimino il percorso di sola geometria
if nDrawMach == 1 then
if hint1 then
-- cancello il percorso
EgtErase( hint1)
hint1 = nil
end
if hint2 then
-- cancello il percorso
EgtErase( hint2)
hint2 = nil
end
end
-- cambio colore alla geometria
if bPreview then
if EC == 0 then
if hint1 then
EgtSetColor(hint1,AQUA())
end
if hint2 then
EgtSetColor(hint2,AQUA())
end
if hintAs1 then
EgtSetColor(hintAs1,AQUA())
end
if hintAs2 then
EgtSetColor(hintAs2,AQUA())
end
if hintAs3 then
EgtSetColor(hintAs3,AQUA())
end
if hintAs4 then
EgtSetColor(hintAs4,AQUA())
end
if hintPk then
EgtSetColor(hintPk,AQUA())
end
if hintPk_r then
EgtSetColor(hintPk_r,AQUA())
end
else
if hint1 then
EgtSetColor(hint1,ORANGE())
end
if hint2 then
EgtSetColor(hint2,ORANGE())
end
if hintAs1 then
EgtSetColor(hintAs1,ORANGE())
end
if hintAs2 then
EgtSetColor(hintAs2,ORANGE())
end
if hintAs3 then
EgtSetColor(hintAs3,ORANGE())
end
if hintAs4 then
EgtSetColor(hintAs4,ORANGE())
end
if hintPk then
EgtSetColor(hintPk,ORANGE())
end
if hintPk_r then
EgtSetColor(hintPk_r,ORANGE())
end
end
else -- altrimenti non Preview
-- muovo tutti i percorsi di metà lunghezza
if EC == 0 then
if hint1 then
EgtMove( hint1, Point3d((L/2),0,0) - ORIG())
end
if hint2 then
EgtMove( hint2, Point3d((L/2),0,0) - ORIG())
end
if hintAs1 then
EgtMove( hintAs1, Point3d((L/2),0,0) - ORIG())
end
if hintAs2 then
EgtMove( hintAs2, Point3d((L/2),0,0) - ORIG())
end
if hintAs3 then
EgtMove( hintAs3, Point3d((L/2),0,0) - ORIG())
end
if hintAs4 then
EgtMove( hintAs4, Point3d((L/2),0,0) - ORIG())
end
if hintPk then
EgtMove( hintPk, Point3d((L/2),0,0) - ORIG())
end
if hintPk_r then
EgtMove( hintPk_r, Point3d((L/2),0,0) - ORIG())
end
end
-- elimino i percorsi non necessari
if hint3 then EgtErase(hint3) end
if hint4 then EgtErase(hint4) end
if hint5 then EgtErase(hint5) end
-- cancello le parti ausiliarie se disegnate
if Dm then
EgtErase(Dm)
end
-- assegno nota su percorsi antisplint e svuotatura
if hintPk then
EgtSetInfo( hintPk, 'NotCheckDir', '1')
end
if hintAs1 then
EgtSetInfo( hintAs1, 'NotCheckDir', '1')
end
if hintAs2 then
EgtSetInfo( hintAs2, 'NotCheckDir', '1')
end
if hintAs3 then
EgtSetInfo( hintAs3, 'NotCheckDir', '1')
end
if hintAs4 then
EgtSetInfo( hintAs4, 'NotCheckDir', '1')
end
if hintPk_r then
EgtSetInfo( hintPk_r, 'NotCheckDir', '1')
end
end
return hint1, hintPk, hint2, hintAs1, hintAs2, hintAs3, hintAs4, hintPk_r
end
return StrikeC