Files

334 lines
12 KiB
Lua

-- 2020/02/08
-- Piano cucina 'E' : quadrangolare, da uno a tre lati fuori squadra
-- rel.03e 13/07/2020 : riposizionamento del paragrafo "Dimesioni sull'oggetto"
-- Intestazioni
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
require( 'EgtCompo')
-- Valori limite
local LgMin = 10
local LgMinDeltaA = 5 -- ?
-- Parametri : dichiarazione e valori standard
local CMP = {}
-- 0=null, 1=bool, 2=int, 3=len, 4=num, 5=stringlocal CMP = {}
CMP.N1 = 'A' -- lato libero (frontale)
CMP.T1 = 3
CMP.V1 = 800
CMP.N2 = 'H1' -- perpendicolare a LA, a sx
CMP.T2 = 3
CMP.V2 = 600
CMP.N3 = 'H2' -- perpendicolare a LA, a dx
CMP.T3 = 3
CMP.V3 = 650
CMP.N4 = 'A1' -- 'prolungamento' fuori squadro ; se>0 angolo 'aperto', se <0 angolo 'chiuso'
CMP.T4 = 3
CMP.V4 = 10
CMP.N5 = 'A2' -- come A1
CMP.T5 = 3
CMP.V5 = 10
CMP.N6 = '↑↓' -- Ribaltamento su/giù
CMP.T6 = 1
CMP.V6 = true
--
CMP.Npar = 6
CMP.Nome = 'PCucinaRett'
CMP.INFO = nil
CMP.WithInt = true
--
_G.CMP = CMP
-- Aggiorno con ultimi valori salvati (se presenti)
CMP.DATA = EgtGetSourceDir() .. CMP.Nome ..'.dat'
LoadCompoData()
--
-- Funzione di disegno
local function CMP_Draw(bPreview)
-- Carico i messaggi
local Msg = require('EgtCompoMsg')
-- Assegno le dimensioni
local LA = CMP.V1
local H1 = CMP.V2
local H2 = CMP.V3
local A1 = CMP.V4
local A2 = CMP.V5
local Rib = CMP.V6
--
local sLBLabel = 'B' -- lato sx
local sLCLabel = 'C' -- lato dx
local sLDLabel = 'D' -- lato dx
local sLD1Label = 'd1' -- diagonale
local sLD2Label = 'd2' -- diagonale
--
CMP.ERR = 0
CMP.MSG = ''
-- Verifica della dimensioni
if LA < LgMin then
LA = 800 --LgMin
CMP.ERR = 1
CMP.MSG = Msg[2]..GetLenLimit( LgMin) -- La lunghezza dei lati deve essere maggiore di
elseif H1 < LgMin then
H1 = 600 --LgMin
CMP.ERR = 2
CMP.MSG = Msg[2]..GetLenLimit( LgMin) -- La lunghezza dei lati deve essere maggiore di
elseif H2 < LgMin then
H2 = 600 --LgMin
CMP.ERR = 2
CMP.MSG = Msg[2]..GetLenLimit( LgMin) -- La lunghezza dei lati deve essere maggiore di
elseif A1 > 0 and A1 < LgMinDeltaA then
A1 = LgMinDeltaA
CMP.ERR = 2
CMP.MSG = Msg[225]..GetLenLimit( LgMinDeltaA) -- | A1|, | A2| se diversi da zero devono essere maggiorni di
elseif A1 < 0 and abs( A1) < LgMinDeltaA then
A1 = -LgMinDeltaA
CMP.ERR = 2
CMP.MSG = Msg[225]..GetLenLimit( LgMinDeltaA) -- | A1|, | A2| se diversi da zero devono essere maggiorni di
elseif A2 > 0 and A2 < LgMinDeltaA then
A2 = LgMinDeltaA
CMP.ERR = 2
CMP.MSG = Msg[225]..GetLenLimit( LgMinDeltaA) -- | A1|, | A2| se diversi da zero devono essere maggiorni di
elseif A2 < 0 and abs( A2) < LgMinDeltaA then
A2 = -LgMinDeltaA
CMP.ERR = 2
CMP.MSG = Msg[225]..GetLenLimit( LgMinDeltaA) -- | A1|, | A2| se diversi da zero devono essere maggiorni di
end
if not bPreview and CMP.ERR ~= 0 then
return
end
--
-- Se Preview cancello tutto
if bPreview then
EgtNewFile()
EgtSetDefaultMaterial( BLACK())
end
--
-- Pezzo e Layer
local Pz = EgtGroup( GDB_ID.ROOT, GDB_RT.LOC) -- pezzo
local Ly = EgtGroup( Pz, GDB_RT.LOC) -- layer della figura principale
EgtSetName( Ly, 'OutLoop')
local Lr = EgtGroup( Pz, GDB_RT.LOC) -- layer regione
EgtSetName( Lr, 'Region')
local Lc = EgtGroup( Pz, GDB_RT.LOC) -- layer di costruzione
local La = EgtGroup( Pz, GDB_RT.LOC) -- layer ausiliario (diagonali ausiliarie e relative etichette, assi)
EgtSetName( La, "LayAux")
local Le = EgtGroup( Pz, GDB_RT.LOC) -- layer di quotatura e delle etichette pezzo
EgtSetName( Le, "Etichette")
local Lq = EgtGroup( Pz, GDB_RT.LOC) -- layer delle linee di quotatura
EgtSetName( Lq, "Quotature")
EgtSetCurrPartLayer(Pz, Ly)
--
-- Costruzione della figura: lati
local lA = EgtLine( Ly, Point3d( 0,0,0), Point3d( LA,0,0))
EgtSetName( lA, "A1")
local ptH1 = EgtSP( lA)
local ptH2 = EgtEP( lA)
if A1 > 0 then
ptH1 = ptH1 + Vector3d( A1, 0, 0)
end
if A2 > 0 then
ptH2 = ptH2 - Vector3d( A2, 0, 0)
end
-- altezze H1, H2
local lH1 = EgtLinePDL( Lq, ptH1, 90, H1)
local lH2 = EgtLinePDL( Lq, ptH2, 90, H2)
--
local lC = EgtLine( Ly, EgtEP( lH2), EgtEP( lH1))
EgtSetName( lC, "A3")
if A2 < 0 then
EgtExtendCurveStartByLen( lC, -A2)
end
if A1 < 0 then
EgtExtendCurveEndByLen( lC, -A1)
end
local lB = EgtLine( Ly, EgtEP( lA), EgtSP( lC))
EgtSetName( lB, "A2")
local lD = EgtLine( Ly, EgtEP( lC), EgtSP( lA))
EgtSetName( lD, "A4")
--
-- Riempimento della figura
local e1 = EgtCurveCompo( Ly, {lA,lB,lC,lD}, false)
local s1 = EgtSurfFlatRegion( Lr, e1)
if CMP.ERR == 0 then
EgtSetColor( s1, AQUA())
else
EgtSetColor( s1, ORANGE())
end
EgtSetAlpha( s1, 25)
EgtErase( e1)
--
-- **Linee di quotatura**
local dim = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD):getRadius() * 0.1
local dim1 = dim * 1 ; local dim2 = dim * 2 ; local dim3 = dim * 3
local DimLineA1, DimLineA2
-- Linee di quotatura **lato 'esterno'**
local ptQ
if A1 > 0 or A2 > 0 then
ptQ = EgtSP( lA, Lq) - Vector3d( 0, dim * 3, 0)
else
ptQ = EgtSP( lA, Lq) - Vector3d( 0, dim * 2, 0)
end
local DimLineLA = EgtLinePDL( Lq, ptQ, 0, LA)
AddLineDashes( Lq, DimLineLA, dim/2)
--local DimLineA1
if A1 > 0 then
ptQ = EgtSP( lA, Lq) - Vector3d( 0, dim * 1.5, 0)
DimLineA1 = EgtLinePDL( Lq, ptQ, 0, A1)
AddLineDashes( Lq, DimLineA1, dim/2)
end
--local DimLineA2
if A2 > 0 then
ptQ = EgtEP( lA, Lq) - Vector3d( A2, dim * 1.5, 0)
DimLineA2 = EgtLinePDL( Lq, ptQ, 0, A2)
AddLineDashes( Lq, DimLineA2, dim/2)
end
-- Linee di quotatura **lato 'interno'**
if A1 < 0 or A2 < 0 then
ptQ = EgtSP( lC, Lq) + VRotated( EgtSV( lC) * dim * 3, -90)
else
ptQ = EgtSP( lC, Lq) + VRotated( EgtSV( lC) * dim * 2, -90)
end
local DimLineLC = EgtLinePVL( Lq, ptQ, EgtSV( lC), EgtCurveLength( lC))
AddLineDashes( Lq, DimLineLC, dim/2)
if A1 < 0 then
ptQ = EgtEP( lC, Lq) + VRotated( EgtSV( lC) * dim * 1.5, -90)
DimLineA1 = EgtLinePVL( Lq, ptQ, - EgtSV( lC), -A1)
AddLineDashes( Lq, DimLineA1, dim/2)
end
if A2 < 0 then
ptQ = EgtSP( lC, Lq) + VRotated( EgtSV( lC) * dim * 1.5, -90)
DimLineA2 = EgtLinePVL( Lq, ptQ, EgtSV( lC), -A2)
EgtInvertCurve( DimLineA2)
AddLineDashes( Lq, DimLineA2, dim/2)
end
--
-- Simmetria verticale ('ribaltamento')
if Rib then
--EgtMirror( { Ly, Lr, La, Le, Lq}, ORIG(), Y_AX(), GDB_RT.GLOB)
EgtMirror( EgtGetAllInGroup( Ly), ORIG(), Y_AX(), GDB_RT.GLOB)
EgtMirror( EgtGetAllInGroup( Lr), ORIG(), Y_AX(), GDB_RT.GLOB)
EgtMirror( EgtGetAllInGroup( La), ORIG(), Y_AX(), GDB_RT.GLOB)
EgtMirror( EgtGetAllInGroup( Le), ORIG(), Y_AX(), GDB_RT.GLOB)
EgtMirror( EgtGetAllInGroup( Lq), ORIG(), Y_AX(), GDB_RT.GLOB)
EgtInvertCurve( {lA,lB,lD,lC,lH1,lH2})
EgtInvertCurve({DimLineLA,DimLineA1 or GDB_ID.NULL,DimLineA2 or GDB_ID.NULL,DimLineLC,})
EgtSetInfo( La, "RIB", "1")
lB, lD = lD, lB
end
--
-- **Dimensioni dell'oggetto**
local bbox = EgtGetBBoxGlob( Ly, GDB_BB.STANDARD)
local dimX = EgtToUiUnits( bbox:getDimX())
local dimY = EgtToUiUnits( bbox:getDimY())
dim = bbox:getRadius() * 0.1
if CMP.ERR == 0 then
CMP.MSG = Msg[1] .. EgtNumToString( dimX,2) .. ' x ' .. EgtNumToString( dimY,2)
end
--
-- **Dimensioni sull'oggetto**
local ptP = 0.5 * ( bbox:getMin() + bbox:getMax())
local sDim = ''
if CMP.INFO then
sDim = sDim .. CMP.INFO
if ( min( dimX, dimY) / max( dimX, dimY)) > 0.3 then
sDim = sDim .. '<br/>'
else
sDim = sDim .. ' '
end
end
sDim = sDim .. EgtNumToString( dimX,2) .. ' x ' .. EgtNumToString( dimY,2)
local dDim = bbox:getRadius() * 0.1
local dRot = 0
if dimY > dimX then
dRot = 90
end
local LbOn = AddLabelPnt( Lr, ptP, sDim, dDim, dRot, BLACK())
EgtSetStatus( LbOn, GDB_ST.OFF)
-- **Etichette sulla figura**
local stdoffset = 1
local sA = CMP.N1
local vA = AddLabel( Le, DimLineLA, stdoffset*.8, sA, dim, 90, RED())
EgtSetInfo( vA, "Var", 1)
local sH1 = CMP.N2
local vH1 = AddLabel( Le, lH1, stdoffset*1.2, sH1, dim, -90, RED())
EgtSetInfo( vH1, "Var", 2)
local sH2 = CMP.N3
local vH2 = AddLabel( Le, lH2, stdoffset*1.2, sH2, dim, 90, RED())
EgtSetInfo( vH2, "Var", 3)
if A1 ~= 0 then
local sA1 = CMP.N4
local vA1 = AddLabel( Le, DimLineA1, stdoffset*.8, sA1, dim*.75, 90, RED())
EgtSetInfo( vA1, "Var", 4)
end
if A2 ~= 0 then
local sA2 = CMP.N5
local vA2 = AddLabel( Le, DimLineA2, stdoffset*.8, sA2, dim*.75, 90, RED())
EgtSetInfo( vA2, "Var", 5)
end
--
local LblLB, LblLC, LblLD
if CMP.ERR == 0 then
LblLB = AddLabel( Le, lB, stdoffset, sLBLabel, dim, -90, GREEN())
LblLC = AddLabel( Le, DimLineLC, stdoffset, sLCLabel, dim, -90, GREEN())
LblLD = AddLabel( Le, lD, stdoffset, sLDLabel, dim, -90, GREEN())
end
--
-- **Etichette sotto la figura**
if CMP.ERR == 0 then
bbox = EgtGetBBoxGlob( Lq,GDB_BB.STANDARD)
local pVal
if Rib then
pVal= bbox:getMin() - Vector3d( 0,dim*2,0)
else
pVal= bbox:getMin() - Vector3d( 0,dim*2,0)
end
local dLenLB = EgtToUiUnits( EgtCurveLength(lB))
local sLenLB = EgtNumToString( dLenLB,1)
local tValLB = EgtTextAdv( Le,pVal,0,sLBLabel..'='..sLenLB,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor( tValLB,GREEN())
EgtSetStatus( tValLB,GDB_ST.SEL)
local dLengthValLB = ( EgtEP( tValLB,GDB_RT.GLOB)-EgtSP( tValLB,GDB_RT.GLOB)):getX() + dim*1
pVal = pVal + Vector3d( dLengthValLB,0,0)
local dLenLC = EgtToUiUnits( EgtCurveLength(lC))
local sLenLC = EgtNumToString( dLenLC,1)
local tValLC = EgtTextAdv( Le,pVal,0,sLCLabel..'='..sLenLC,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor( tValLC,GREEN())
EgtSetStatus( tValLC,GDB_ST.SEL)
local dLengthValLC = ( EgtEP( tValLC,GDB_RT.GLOB)-EgtSP( tValLC,GDB_RT.GLOB)):getX() + dim*1
pVal = pVal + Vector3d( dLengthValLC,0,0)
local dLenLD = EgtToUiUnits( EgtCurveLength( lD))
local sLenLD = EgtNumToString( dLenLD,1)
local tValLD = EgtTextAdv( Le,pVal,0, sLDLabel..'='..sLenLD,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor( tValLD,GREEN())
EgtSetStatus( tValLD,GDB_ST.SEL)
local dLengthValLD = ( EgtEP( tValLD,GDB_RT.GLOB)-EgtSP( tValLD,GDB_RT.GLOB)):getX() + dim*1
pVal = pVal + Vector3d( dLengthValLD,0,0)
end
-- Se non Preview
if not bPreview then
-- cancello le parti ausiliarie
EgtErase({La,Le,Lc,Lq})
-- rendo visibile label sul pezzo
EgtSetStatus(LbOn,GDB_ST.ON)
end
-- Se ok
if CMP.ERR == 0 then
-- scrivo i parametri nelle info del pezzo
WriteCompoDataToPart( Pz, CMP.Nome, CMP.Npar)
-- salvo i parametri come nuovo default
SaveCompoData( CMP.Npar)
end
return
end
_G.CMP_Draw = CMP_Draw
CMP_Draw(true)
EgtZoom(SCE_ZM.ALL)