|
|
|
@@ -28,10 +28,12 @@
|
|
|
|
|
-- .. 16/11/2021 - correzioni a spostamenti
|
|
|
|
|
-- 17/11/2021 - taratura e sistemazione 'definitiva' delle etichettature dei lati con indicazione degli angoli di taglio
|
|
|
|
|
|
|
|
|
|
-- |TO DO - SPOSTAMENTI, casi mancanti|
|
|
|
|
|
|
|
|
|
|
-- Intestazioni
|
|
|
|
|
require( 'EgtBase')
|
|
|
|
|
_ENV = EgtProtectGlobal()
|
|
|
|
|
EgtEnableDebug( false)
|
|
|
|
|
EgtEnableDebug( true)
|
|
|
|
|
|
|
|
|
|
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
|
|
|
|
|
require( 'EgtCompo')
|
|
|
|
@@ -40,9 +42,9 @@ require( 'EgtCompo')
|
|
|
|
|
--.T (tipo) : 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string
|
|
|
|
|
local CMP = {}
|
|
|
|
|
|
|
|
|
|
-- parametri passati da interfaccia del programma OMAG-Cut
|
|
|
|
|
CMP.A_Height = 50 -- altezza delle alzatine
|
|
|
|
|
CMP.F_Height = 50 -- altezza dei frontalini
|
|
|
|
|
-- parametri visualizzati nell'interfaccia del programma OMAG-Cut
|
|
|
|
|
CMP.A_Height = 50 -- altezza delle alzatine
|
|
|
|
|
CMP.F_Height = 50 -- altezza dei frontalini
|
|
|
|
|
CMP.A_DeltaAng = 1 -- angolo di incremento per tagli inclinati
|
|
|
|
|
CMP.F_DeltaAng = 1
|
|
|
|
|
CMP.ThicknessRaw = 10 -- spessore del grezzo
|
|
|
|
@@ -83,18 +85,8 @@ local function DrawRectangle (Pz, Lay, LayR, BaseL, HeightL, sText, sReference,
|
|
|
|
|
return l1, l2, l3, l4
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function StringColorConversion( sColor)
|
|
|
|
|
if sColor == 'Green' then
|
|
|
|
|
return GREEN()
|
|
|
|
|
elseif sColor== 'Red' then
|
|
|
|
|
return RED()
|
|
|
|
|
elseif sColor =='Blue' then
|
|
|
|
|
return BLUE()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Scrittura info e apposizione etichetta con inclinazione del taglio dei lati dei rettangoli A/F
|
|
|
|
|
local function SideSetInfoAF( SideId, Lay, Gamma, dOff, dH, GammaMin, GammaMax, sCol)
|
|
|
|
|
local function SideSetInfoAF( SideId, Lay, Gamma, dOff, dH, GammaMin, GammaMax)
|
|
|
|
|
EgtSetInfo( SideId, "SideAng", Gamma) -- -F_Delta?
|
|
|
|
|
EgtSetInfo( SideId, "OrigSideAng", Gamma) -- -F_Delta
|
|
|
|
|
if abs( Gamma) < GammaMin then
|
|
|
|
@@ -109,10 +101,10 @@ local function SideSetInfoAF( SideId, Lay, Gamma, dOff, dH, GammaMin, GammaMax,
|
|
|
|
|
local dIncl = atan2( EgtMV( SideId, GDB_ID.ROOT ):getY(), EgtMV( SideId, GDB_ID.ROOT):getX())
|
|
|
|
|
if dIncl >= -75 and dIncl <= 115 then
|
|
|
|
|
-- etichetta allineata
|
|
|
|
|
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, StringColorConversion( sCol), true)
|
|
|
|
|
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, BLACK(), true)
|
|
|
|
|
else
|
|
|
|
|
-- etichetta allineata ribaltata
|
|
|
|
|
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, StringColorConversion( sCol), false)
|
|
|
|
|
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, BLACK(), false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@@ -165,7 +157,7 @@ local function Spostamento10( dOffsR, dOffsC, dH1, Beta)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Calcolo dello spostamento 'indietro' (positivo in coord. locali) per A/F seguito da altro A/F
|
|
|
|
|
-- Caso di intersezione con A/F in latio N+1
|
|
|
|
|
-- Caso di intersezione con AF in latio N+1
|
|
|
|
|
local function Spostamento11( dOffsR, dOffsC, dH1, dH2, Beta)
|
|
|
|
|
local dSpX, dSpXa, dSpXb
|
|
|
|
|
if Beta <= 90 then
|
|
|
|
@@ -184,7 +176,7 @@ local function Spostamento10( dOffsR, dOffsC, dH1, Beta)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Calcolo dello spostamento 'in avanti' (negativo in coord. locali) per A/F preceduto da altro A/F
|
|
|
|
|
-- Caso di intersezione con A/F in lato N-1
|
|
|
|
|
-- Caso di intersezione con AF in lato N-1
|
|
|
|
|
local function Spostamento21( dOffsR, dOffsC, dH1, dH2, Beta)
|
|
|
|
|
local dSpX, dSpXa, dSpXb
|
|
|
|
|
if Beta <= 90 then
|
|
|
|
@@ -218,31 +210,6 @@ local function Spostamento30( Len, dOffsR, dOffsC, dH1, Alpha1, Alpha2)
|
|
|
|
|
return dSpX
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Calcolo di spostamento 'indietro' (positivo in coord. locali)
|
|
|
|
|
-- Caso di intersezione con A/F in lato N+2
|
|
|
|
|
local function Spostamento31( Len, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
local dSpX, dSpXa, dSpXb, dSpXb1, dSpXb2, dSpXc
|
|
|
|
|
local Beta = 180 + Alpha1 + Alpha2
|
|
|
|
|
if Beta <= 90 then
|
|
|
|
|
--(in ipotesi Beta 1 > 90)
|
|
|
|
|
dSpXa = (dOffsR + dH1) * tan( 90-Beta)
|
|
|
|
|
dSpXc = Len * (cos( Alpha1) + sin( -Alpha1) / tan( Beta))
|
|
|
|
|
dSpX = dSpXa - dSpXc
|
|
|
|
|
else
|
|
|
|
|
dSpX = 0
|
|
|
|
|
end
|
|
|
|
|
dSpXb1 = (dOffsR + dH3) * cos( 90-Beta)
|
|
|
|
|
dSpXb2 = Len * cos( Alpha1)
|
|
|
|
|
dSpXb = dSpXb1 - dSpXb2
|
|
|
|
|
dSpX = dSpX + dSpXb
|
|
|
|
|
if dSpX > 0 then
|
|
|
|
|
dSpX = dSpX + dOffsC
|
|
|
|
|
else
|
|
|
|
|
dSpX = dOffsC
|
|
|
|
|
end
|
|
|
|
|
return dSpX
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Calcolo di spostamento 'avanti' (negativo in coord. locali)
|
|
|
|
|
-- Caso di intersezione con lato N-2
|
|
|
|
|
local function Spostamento40( Len, dOffsR, dOffsC, dH3, Alpha1, Alpha2)
|
|
|
|
@@ -250,40 +217,16 @@ local function Spostamento40( Len, dOffsR, dOffsC, dH3, Alpha1, Alpha2)
|
|
|
|
|
local Beta = 180 + Alpha1 + Alpha2
|
|
|
|
|
if Beta <= 90 then
|
|
|
|
|
--(in ipotesi Beta 1 > 90)
|
|
|
|
|
dSpXa = -(dOffsR+dH3) * tan( 90-Beta)
|
|
|
|
|
dSpXa = (dOffsR+dH3) * tan( 90-Beta)
|
|
|
|
|
dSpXc = Len * (cos( Alpha2) + sin( -Alpha2) / tan( Beta))
|
|
|
|
|
dSpX = dSpXa + dSpXc - dOffsC
|
|
|
|
|
dSpX = -dSpXa + dSpXc - dOffsC
|
|
|
|
|
else
|
|
|
|
|
dSpX = -dOffsC
|
|
|
|
|
end
|
|
|
|
|
return dSpX
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- Calcolo di spostamento 'avanti' (negativo in coord. locali)
|
|
|
|
|
-- Caso di intersezione con A/F in lato N-2
|
|
|
|
|
local function Spostamento41( Len, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
local dSpX, dSpXa, dSpXb, dSpXb1, dSpXb2, dSpXc
|
|
|
|
|
local Beta = 180 + Alpha1 + Alpha2
|
|
|
|
|
if Beta <= 90 then
|
|
|
|
|
--(in ipotesi Beta 1 > 90)
|
|
|
|
|
dSpXa = -(dOffsR + dH3) * tan( 90-Beta)
|
|
|
|
|
dSpXc = Len * (cos( Alpha2) + sin( -Alpha2) / tan( Beta))
|
|
|
|
|
dSpX = dSpXa + dSpXc
|
|
|
|
|
else
|
|
|
|
|
dSpX = 0
|
|
|
|
|
end
|
|
|
|
|
dSpXb1 = -(dOffsR+dH1) / cos( 90-Beta)
|
|
|
|
|
dSpXb2 = Len * sin( -Alpha2) / tan( Beta)
|
|
|
|
|
dSpXb = dSpXb1 + dSpXb2
|
|
|
|
|
dSpX = dSpX + dSpXb
|
|
|
|
|
if dSpX < 0 then
|
|
|
|
|
dSpX = dSpX - dOffsC
|
|
|
|
|
else
|
|
|
|
|
dSpX = - dOffsC
|
|
|
|
|
end
|
|
|
|
|
return dSpX
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- rimuove l'informazione del taglio inclinato dal lato indicato del piano cucina
|
|
|
|
|
local function ResetSideAng( CurrSide) -- IsModify
|
|
|
|
|
if EgtGetInfo( CurrSide, "IsModify", 'i') == 0 then
|
|
|
|
@@ -340,7 +283,7 @@ local function LoadData( SideTab, Lw, Le, dOffset, dHLbl)
|
|
|
|
|
if InfoAF == 1 then
|
|
|
|
|
EgtSetColor(CurrSide, 'RED')
|
|
|
|
|
elseif InfoAF == 2 then
|
|
|
|
|
EgtSetColor(CurrSide, 'BLUE')
|
|
|
|
|
EgtSetColor(CurrSide, 'GREEN')
|
|
|
|
|
else
|
|
|
|
|
-- elimino eventuali angoli di taglio inseriti dovuti a precedenti frontalini
|
|
|
|
|
ResetSideAng( CurrSide)
|
|
|
|
@@ -398,29 +341,14 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
-- Valori limite
|
|
|
|
|
local GammaMin = 1 -- angolo di inclinazione taglio minimo (in valore assoluto) da considerare
|
|
|
|
|
local GammaMax = 75 -- angolo di inclinazione taglio massimo (in valore assoluto) da considerare
|
|
|
|
|
local MinThick = 10 -- spessore minimo 'standard' del grezzo
|
|
|
|
|
|
|
|
|
|
-- Assegno l'angolo di incremento per i tagli inclinati
|
|
|
|
|
local F_Delta = CMP.F_DeltaAng
|
|
|
|
|
local A_Delta = CMP.A_DeltaAng
|
|
|
|
|
-- Assegno altezze AF/
|
|
|
|
|
-- Assegno l'altezza
|
|
|
|
|
local FH = CMP.F_Height
|
|
|
|
|
local AH = CMP.A_Height
|
|
|
|
|
|
|
|
|
|
-- ++++++ PROVVISORIO +++++
|
|
|
|
|
-- Assegno spessore lastra
|
|
|
|
|
local Thick
|
|
|
|
|
if CMP.ThicknessRaw then
|
|
|
|
|
if CMP.ThicknessRaw >= MinThick then
|
|
|
|
|
Thick = CMP.TThicknessRaw
|
|
|
|
|
else
|
|
|
|
|
Thick = MinThick
|
|
|
|
|
end
|
|
|
|
|
else
|
|
|
|
|
Thick = MinThick
|
|
|
|
|
end
|
|
|
|
|
-- ++++++ PROVVISORIO +++++
|
|
|
|
|
|
|
|
|
|
-- Assegno la dimensione di riferimento (=1/100 del 'raggio' della figura)
|
|
|
|
|
local dDim = CMP.BBoxRad / 1000
|
|
|
|
|
local dHLbl = CMP.HeightText
|
|
|
|
@@ -433,9 +361,6 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
CMP.MSG = ''
|
|
|
|
|
-- Pezzo e Layer già definiti
|
|
|
|
|
local Pz = EgtGetFirstGroupInGroup( GDB_ID.ROOT)
|
|
|
|
|
-- salva info spessore nominale pezzi in Pz
|
|
|
|
|
EgtSetInfo( Pz, "RawTN", Thick)
|
|
|
|
|
|
|
|
|
|
-- ripulisco il disegno
|
|
|
|
|
ResetDraw( Pz)
|
|
|
|
|
|
|
|
|
@@ -555,7 +480,7 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
|
|
|
|
|
-- **FRONTALINO**
|
|
|
|
|
elseif SideTab[SideNum].InfoSd == 2 then
|
|
|
|
|
EgtSetColor(Lay,BLUE(),100,true)
|
|
|
|
|
EgtSetColor(Lay,GREEN(),100,true)
|
|
|
|
|
BaseL = EgtCurveLength( SideId)
|
|
|
|
|
sText = sSideName..'-Fr.-'
|
|
|
|
|
HeightL = FH
|
|
|
|
@@ -650,8 +575,8 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
-- inserisco gli Id dei lati del rettangolo nel Side_Record in SideTab
|
|
|
|
|
SideTab[SideNum].l1 = l1; SideTab[SideNum].l2 = l2; SideTab[SideNum].l3 = l3; SideTab[SideNum].l4 = l4
|
|
|
|
|
-- aggiungo info e etichette per i tagli inclinati
|
|
|
|
|
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Red')
|
|
|
|
|
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Red')
|
|
|
|
|
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax)
|
|
|
|
|
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax)
|
|
|
|
|
-- aggiungo etichetta con nome del lato del piano ed angolo di taglio (pari a 0, in quanto
|
|
|
|
|
-- non è prevista la possibilità di Alz./Fr. su lati con angolo di taglio già impsostato diverso da 0)
|
|
|
|
|
Gamma = 0
|
|
|
|
@@ -737,12 +662,12 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
-- inserisco gli Id dei lati del rettangolo nel Side_Record in SideTab
|
|
|
|
|
SideTab[SideNum].l1 = l1; SideTab[SideNum].l2 = l2; SideTab[SideNum].l3 = l3; SideTab[SideNum].l4 = l4
|
|
|
|
|
-- aggiungo info e etichette per i tagli inclinati
|
|
|
|
|
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
|
|
|
|
|
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
|
|
|
|
|
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax)
|
|
|
|
|
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax)
|
|
|
|
|
-- aggiungo taglio inclinato a -(45+delta) del lato superiore del frontalino
|
|
|
|
|
-- e corrispondente lato del piano cucina
|
|
|
|
|
Gamma = -(45+F_Delta)
|
|
|
|
|
SideSetInfoAF ( l1, LayLbl, Gamma, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
|
|
|
|
|
SideSetInfoAF ( l1, LayLbl, Gamma, dOffs, dHLbl*0.25, GammaMin, GammaMax)
|
|
|
|
|
--SideAngSetInfo ( Tab[N].IdSd, Le, Gamma, dOffs, dHLbl, GammaMin, GammaMax, sSideName..'/')
|
|
|
|
|
SideSetInfoC ( SideId, Le, Gamma, dOffs2, dHLbl*0.5, GammaMin, GammaMax, sSideName..'/')
|
|
|
|
|
|
|
|
|
@@ -862,35 +787,20 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
SideNum = SideNum + 2
|
|
|
|
|
|
|
|
|
|
-- **[b]** due angoli consecutivi a dx; tre lati, N, N+1, N+2 interesssati da A/F
|
|
|
|
|
-- la somma dei due angoli Alpha1 e Alpha2 è ipotizzata < 180°
|
|
|
|
|
-- inoltre i due angoli compresi Beta1 e Beta2 sono ipotizzati > 90°
|
|
|
|
|
-- la somma dei due angoli Beta < 180° per ipotesi
|
|
|
|
|
elseif Alpha1 < 0 and Alpha2 < 0 then
|
|
|
|
|
local dSLength = Tab[Tab[N].RecNxt].IdSd
|
|
|
|
|
-- **[b1.r1r2r3]** = tre lati consecutivi N, N+1, N+2 interessati da A/F
|
|
|
|
|
-- i due angoli compresi sono ipotizzati ottusi
|
|
|
|
|
if (Tab[N].InfoSd > 0 and Tab[Tab[N].RecNxt].InfoSd > 0 and Tab[Tab[Tab[N].RecNxt].RecNxt].InfoSd > 0 ) then
|
|
|
|
|
-- calcolo spostamento rettangolo 1 (lato N) per intersezione con r2
|
|
|
|
|
local dSpX1r2 = Spostamento11( dOffsR, dOffsC, dH1, dH2, Beta1)
|
|
|
|
|
-- calcolo spostamento rettangolo 1 (lato N) per intersezione con r3
|
|
|
|
|
local dSpX1r3 = Spostamento31( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
-- spostamento rettangolo 1
|
|
|
|
|
EgtMoveGroup( Tab[N].IdPz, {max( dSpX1r2, dSpX1r3), 0, 0})
|
|
|
|
|
-- calcolo spostamento rettangolo 3 (lato N+2) per intersezione con r2
|
|
|
|
|
local dSpX3r2 = Spostamento21( dOffsR, dOffsC, dH2, dH3, Beta2)
|
|
|
|
|
-- calcolo spostamento rettangolo 3 (lato N+2) per intersezione con r1
|
|
|
|
|
local dSpX3r1 = Spostamento41( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
-- spostamento rettangolo 3
|
|
|
|
|
EgtMoveGroup( Tab[Tab[Tab[N].RecNxt].RecNxt].IdPz, {min( dSpX3r2,dSpX3r1), 0, 0})
|
|
|
|
|
|
|
|
|
|
-- **[b1.r1r3]** = lati N, e N+2 interessati da A/F
|
|
|
|
|
-- i due angoli compresi sempre ipotizzati ottusi
|
|
|
|
|
elseif (Tab[N].InfoSd > 0 and Tab[Tab[Tab[N].RecNxt].RecNxt].InfoSd > 0 ) then
|
|
|
|
|
--local SLength = Tab[Tab[N].RecNxt].IdSd
|
|
|
|
|
-- spostamento rettangolo 1 (lato N)
|
|
|
|
|
local dSpX1 = Spostamento31( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
local dSpX1 = Spostamento11( dOffsR, dOffsC, dH1, dH2, Beta1)
|
|
|
|
|
EgtMoveGroup( Tab[N].IdPz, {dSpX1, 0, 0})
|
|
|
|
|
-- spostamento rettangolo 3 (lato N+2)
|
|
|
|
|
local dSpX3 = Spostamento41( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
|
|
|
|
|
local dSpX3 = Spostamento21( dOffsR, dOffsC, dH2, dH3, Beta2)
|
|
|
|
|
EgtMoveGroup( Tab[Tab[Tab[N].RecNxt].RecNxt].IdPz, {dSpX3, 0, 0})
|
|
|
|
|
-- +++++++++++++++++++++++++++++++++++++ |QUI| +++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
-- |Da VEDERE anche il caso in cui r1 e r3 si intersecano tra di loro dopo l'allontanamento da r2! ++++++++++|
|
|
|
|
|
-- +++++++++++++++++++++++++++++++++++++ |QUI| +++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
-- **[b1.r1r2]** = solo lati N e N+1 interessati da A/F
|
|
|
|
|
elseif (Tab[N].InfoSd > 0 and Tab[Tab[N].RecNxt].InfoSd > 0 and Tab[Tab[Tab[N].RecNxt].RecNxt].InfoSd == 0 ) then
|
|
|
|
@@ -908,6 +818,7 @@ local function CMP_Draw(bPreview)
|
|
|
|
|
elseif (Tab[N].InfoSd > 0 and Tab[Tab[N].RecNxt].InfoSd == 0 and Tab[Tab[Tab[N].RecNxt].RecNxt].InfoSd == 0 ) then
|
|
|
|
|
local SLength = Tab[Tab[N].RecNxt].IdSd
|
|
|
|
|
local dSpX1 = Spostamento30( SLength, dOffsR, dOffsC, dH1, Alpha1, Alpha2)
|
|
|
|
|
-- provvisoriamente (caso comunque già analizzato):
|
|
|
|
|
EgtMoveGroup( Tab[N].IdPz, {dSpX1, 0, 0})
|
|
|
|
|
|
|
|
|
|
-- **[b1.r3]** = solo lato N+2 interessato da A/F
|
|
|
|
|