4 Commits

Author SHA1 Message Date
carlo.baronchelli 0464742a5e (Aggiornato messaggio versione) 2021-12-02 12:46:15 +01:00
carlo.baronchelli 8720604fb3 Modificato colore bordi e label angoli per frontalini (da verde a blu) 2021-12-02 12:45:33 +01:00
carlo.baronchelli 9527509c62 Aggiunta gestione (provvisoria?) spessore lastra 2021-12-01 17:11:04 +01:00
carlo.baronchelli 5149644550 Aggiunto caso b.r1r3, aggiornato b1.r1r2r3, aggiunte funzioni <Spostemento31> e <Spostamento 41> 2021-11-30 20:55:24 +01:00
2 changed files with 120 additions and 31 deletions
+119 -30
View File
@@ -28,12 +28,10 @@
-- .. 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( true)
EgtEnableDebug( false)
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
require( 'EgtCompo')
@@ -42,9 +40,9 @@ require( 'EgtCompo')
--.T (tipo) : 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string
local CMP = {}
-- parametri visualizzati nell'interfaccia del programma OMAG-Cut
CMP.A_Height = 50 -- altezza delle alzatine
CMP.F_Height = 50 -- altezza dei frontalini
-- parametri passati da 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
@@ -85,8 +83,18 @@ 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)
local function SideSetInfoAF( SideId, Lay, Gamma, dOff, dH, GammaMin, GammaMax, sCol)
EgtSetInfo( SideId, "SideAng", Gamma) -- -F_Delta?
EgtSetInfo( SideId, "OrigSideAng", Gamma) -- -F_Delta
if abs( Gamma) < GammaMin then
@@ -101,10 +109,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, BLACK(), true)
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, StringColorConversion( sCol), true)
else
-- etichetta allineata ribaltata
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, BLACK(), false)
Lbl = AddLabelAl2( Lay, SideId, dOff, sLbl, dH, -90, StringColorConversion( sCol), false)
end
end
@@ -157,7 +165,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 AF in latio N+1
-- Caso di intersezione con A/F in latio N+1
local function Spostamento11( dOffsR, dOffsC, dH1, dH2, Beta)
local dSpX, dSpXa, dSpXb
if Beta <= 90 then
@@ -176,7 +184,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 AF in lato N-1
-- Caso di intersezione con A/F in lato N-1
local function Spostamento21( dOffsR, dOffsC, dH1, dH2, Beta)
local dSpX, dSpXa, dSpXb
if Beta <= 90 then
@@ -210,6 +218,31 @@ 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)
@@ -217,16 +250,40 @@ 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
@@ -283,7 +340,7 @@ local function LoadData( SideTab, Lw, Le, dOffset, dHLbl)
if InfoAF == 1 then
EgtSetColor(CurrSide, 'RED')
elseif InfoAF == 2 then
EgtSetColor(CurrSide, 'GREEN')
EgtSetColor(CurrSide, 'BLUE')
else
-- elimino eventuali angoli di taglio inseriti dovuti a precedenti frontalini
ResetSideAng( CurrSide)
@@ -341,14 +398,29 @@ 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 l'altezza
-- Assegno altezze AF/
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
@@ -361,6 +433,9 @@ 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)
@@ -480,7 +555,7 @@ local function CMP_Draw(bPreview)
-- **FRONTALINO**
elseif SideTab[SideNum].InfoSd == 2 then
EgtSetColor(Lay,GREEN(),100,true)
EgtSetColor(Lay,BLUE(),100,true)
BaseL = EgtCurveLength( SideId)
sText = sSideName..'-Fr.-'
HeightL = FH
@@ -575,8 +650,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)
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax)
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Red')
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Red')
-- 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
@@ -662,12 +737,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)
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax)
SideSetInfoAF ( l2, LayLbl, Gamma1, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
SideSetInfoAF ( l4, LayLbl, Gamma2, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
-- 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)
SideSetInfoAF ( l1, LayLbl, Gamma, dOffs, dHLbl*0.25, GammaMin, GammaMax, 'Blue')
--SideAngSetInfo ( Tab[N].IdSd, Le, Gamma, dOffs, dHLbl, GammaMin, GammaMax, sSideName..'/')
SideSetInfoC ( SideId, Le, Gamma, dOffs2, dHLbl*0.5, GammaMin, GammaMax, sSideName..'/')
@@ -787,20 +862,35 @@ 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 Beta < 180° per ipotesi
-- la somma dei due angoli Alpha1 e Alpha2 è ipotizzata < 180°
-- inoltre i due angoli compresi Beta1 e Beta2 sono ipotizzati > 90°
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 = Spostamento11( dOffsR, dOffsC, dH1, dH2, Beta1)
local dSpX1 = Spostamento31( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
EgtMoveGroup( Tab[N].IdPz, {dSpX1, 0, 0})
-- spostamento rettangolo 3 (lato N+2)
local dSpX3 = Spostamento21( dOffsR, dOffsC, dH2, dH3, Beta2)
local dSpX3 = Spostamento41( dSLength, dOffsR, dOffsC, dH1, dH3, Alpha1, Alpha2)
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
@@ -818,7 +908,6 @@ 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
+1 -1
View File
@@ -3,7 +3,7 @@
-- Tavola per definizione modulo (serve ma non usata)
local EgtCompo = {}
print( 'EgtCompo Carlo started')
print( 'EgtCompo 2.3l0 started')
--[[ 2021/08