334 lines
12 KiB
Lua
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) |