2 Commits

Author SHA1 Message Date
Carlo Baronchelli 8729cb5c33 Merge branch 'develop2' 2021-11-29 18:24:36 +01:00
Carlo Baronchelli a634b5640c Merge branch 'develop' 2021-08-10 20:24:45 +02:00
2 changed files with 31 additions and 120 deletions
+30 -119
View File
@@ -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
+1 -1
View File
@@ -3,7 +3,7 @@
-- Tavola per definizione modulo (serve ma non usata)
local EgtCompo = {}
print( 'EgtCompo 2.3l0 started')
print( 'EgtCompo Carlo started')
--[[ 2021/08