Files

337 lines
12 KiB
Lua

-- 2015/09/__0
-- PIANO CUCINA CON LAVORAZIONE A RIENTRAARE PER ANGOLO
-- Intestazioni
require('EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
require( 'EgtCompo')
local Nome = 'PCucinaB1'
-- Valori limite
local LgMin = 10 -- lati
local Q1Min = 10 -- profondità di sagomatura del profilo
local RdMin = 10 -- raggio
local AngMin =15
local AngMax = 180 - 1
-- Parametri : dichiarazione e valori standard
--.T (tipo) : 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string
local CMP = {}
CMP.N1 = 'A' -- lato esterno // muro
CMP.T1 = 3
CMP.V1 = 1000
CMP.N2 = 'B' -- profondità
CMP.T2 = 3
CMP.V2 = 500
CMP.N3 = 'C' -- profondità pezzo PCucinaB2
CMP.T3 = 3
CMP.V3 = 500
CMP.N4 = 'Z' -- profondità sagomatura bordo
CMP.T4 = 3
CMP.V4 = 30
CMP.N5 = 'R' -- raggio di raccordo
CMP.T5 = 3
CMP.V5 = 50
CMP.N6 = '←→' -- Simmetria dx/sx (true = svuotamento a dx)
CMP.T6 = 1
CMP.V6 = false
CMP.N7 = '↑↓' -- Simmetria su/giù ('ribaltamento') (true = 'L' capovolta)
CMP.T7 = 1
CMP.V7 = true
CMP.Npar = 7
CMP.Nome = Nome
CMP.WithInt = true
_G.CMP = CMP
-- Aggiorno con ultimi valori salvati (se presenti)
CMP.DATA = EgtGetSourceDir() .. CMP.Nome ..'.dat'
LoadCompoData()
function CMP_Draw(bPreview)
-- Carico i messaggi
local Msg = require('EgtCompoMsg')
-- Assegnazioni
local L1 = CMP.V1
local L2 = CMP.V2
local LC = CMP.V3
local LZ = CMP.V4
local LR = CMP.V5
local Simm = CMP.V6
local Rib = CMP.V7
local K1 = sqrt(2)/2
local Kx = LR*K1
local Ky = LR - LR*K1
local L3 = L1 - LC
local L4 = LZ / K1
local L6 = LC - LZ- Kx
local L7 = L2 -Ky -LZ
local L3label = 'D' -- lato interno // muro
local L6label = 'E' -- lato vs. pezzo PCucinaB2
local L7label = 'F' --
local D1label = 'd' -- diagonale
CMP.ERR = 0
CMP.MSG = ''
--Verifica di compatibilità dei dati di input
if L1 < LgMin then
L1 = LgMin
CMP.ERR = 1
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a ...
end
if L2 < LgMin then
L2 = LgMin
if CMP.ERR == 0 then
CMP.ERR = 2
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if LC < LgMin then
LC = LgMin
if CMP.ERR == 0 then
CMP.ERR = 3
CMP.MSG = Msg[2]..GetLenLimit(LgMin) --Le dimensioni dei lati devono essere > = a...
end
end
if LZ < Q1Min then
LZ = Q1Min
if CMP.ERR == 0 then
CMP.ERR = 4
CMP.MSG = Msg[205]..GetLenLimit(Q1Min) --La quota Z deve essere > = di...
end
end
if LR < RdMin then
LR = RdMin
if CMP.ERR == 0 then
CMP.ERR = 5
CMP.MSG = Msg[206]..GetLenLimit(RMin) -- Il raggio R deve essere > = RMin
end
end
if L3 < LgMin then
L3 = LgMin L1 = L3 + LC
if CMP.ERR == 0 then
CMP.ERR = 6
CMP.MSG = Msg[207]..GetLenLimit(LgMin) -- Differenza L1-LC troppo piccola
end
end
if L6 < LgMin then
L6 = LgMin LC = L6 + Kx + LZ L1 = LC + L3
if CMP.ERR == 0 then
CMP.ERR = 7
CMP.MSG = Msg[208]..GetLenLimit(LgMin) -- Differenza LC-(Kx+LZ) troppo piccola
end
end
if L7 < LgMin then
L7 = LgMin L2 = L7 + Ky + LZ
if CMP.ERR == 0 then
CMP.ERR = 8
CMP.MSG = Msg[209]..GetLenLimit(LgMin) -- Differenza LC-(Ky+LZ) troppo piccola
end
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 e relative etichette, assi)
EgtSetName(La,"LayAux")
local Le = EgtGroup(Pz,GDB_RT.LOC) -- layer 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
local l1 = EgtLinePDL(Ly,ORIG(),0,L1)
EgtSetName(l1,"A1")
local l2 = EgtLinePDL(Ly,EgtEP(l1),90,L2)
EgtSetName(l2,"A2")
local l3 = EgtLinePDL(Ly,EgtEP(l2),180,L3)
EgtSetName(l3,"A3")
local l4 = EgtLinePDL(Ly,EgtEP(l3),-135,L4)
local pC = EgtEP(l4) + Vector3d(-1,1,0)*K1*LR -- centro dell'arco di raccordo
local arc = EgtArc(Ly,pC,LR,-45,-45,0) -- arco di raccordo
local l6 = EgtLinePDL(Ly,EgtEP(arc),180,L6)
local l7 = EgtLine(Ly,EgtEP(l6),EgtSP(l1))
EgtSetName(l7,"A4")
-- assi
local a1 = EgtLinePDL(La,EgtMP(l2),180,L1)
local a2 = EgtLine(La,Point3d(LC/2,0,0),Point3d(LC/2,L7,0))
-- diagonale
local d1, D1
if CMP.ERR == 0 then
d1 = EgtLine(La,EgtEP(l7),EgtEP(l2))
D1 = EgtCurveLength(d1)
end
if Lc then
EgtErase(Lc)
end
-- Riempimento della figura
local e1 = EgtCurveCompo(Ly,{l1,l2,l3,l4,arc,l6,l7},false)
local s1 = EgtSurfFlatRegion(Lr,e1)
if CMP.ERR == 0 then
EgtSetColor(s1,AQUA())
else
EgtSetColor(s1,ORANGE())
end
EgtSetAlpha(s1,25)
EgtErase(e1)
local dim = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD):getRadius() * 0.1
-- linee di quotatura
local pt local vr -- generici punto e vettore per costruzione
pt = EgtEP(l2,Lq) + EgtEV(l2,Lq)*dim
local DimLineL3 = EgtLinePDL(Lq,pt,180,L3)
EgtLinePDL(Lq,EgtSP(DimLineL3)-Vector3d(0,dim*.25,0),90,dim*.5) -- trattino di estensione
EgtLinePDL(Lq,EgtEP(DimLineL3)-Vector3d(0,dim*.25,0),90,dim*.5) -- " "
local DimLineLC = EgtLinePDL(Lq,EgtEP(DimLineL3),180,LC)
EgtLinePDL(Lq,EgtSP(DimLineLC)-Vector3d(0,dim*.25,0),90,dim*.5) -- trattino di estensione
EgtLinePDL(Lq,EgtEP(DimLineLC)-Vector3d(0,dim*.25,0),90,dim*.5) -- " "
pt = EgtEP(l3,Lq) + EgtEV(l6,Lq)*(LC+dim)
local DimLineLZ = EgtLinePDL(Lq,pt,-90,LZ)
EgtLinePDL(Lq,EgtSP(DimLineLZ)-Vector3d(dim*.25,0,0),0,dim*.5) -- trattino di estensione
EgtLinePDL(Lq,EgtEP(DimLineLZ)-Vector3d(dim*.25,0,0),0,dim*.5) -- " "
pt = EgtMP(DimLineLZ,Lq)+Vector3d(-dim*.25,0,0)
local lnZ1 = EgtLinePDL(Lq,pt,135,dim*.5) -- trattino per direttrice
local lnZ2 = EgtLinePDL(Lq,EgtEP(lnZ1),90,dim*.5) -- " " "
local DimLineL7 = EgtLinePDL(Lq,EgtEP(DimLineLZ)+Vector3d(0,-Ky,0),-90,L7)
EgtLinePDL(Lq,EgtSP(DimLineL7)-Vector3d(dim*.25,0,0),0,dim*.5) -- trattino di estensione
EgtLinePDL(Lq,EgtEP(DimLineL7)-Vector3d(dim*.25,0,0),0,dim*.5) -- " "
-- raggio
vr = EgtMV(arc,Lq) --vr:rotate(Z_AX(),-90)
local DimLineR1 = EgtLine(Lq,EgtMP(arc)-VRotated(vr,-90)*2*dim,EgtMP(arc))
local DimLineR2 = EgtLine(Lq,EgtMP(arc),EgtMP(arc)+VRotated(vr,-90)*dim)
vr = EgtEV(DimLineR1,Lq) pt = EgtSP(DimLineR1)+vr*dim/2
local DimLineR3 = EgtLinePVL(Lq,pt,VRotated(-vr,90),dim)
--vr:rotate(Z_AX(),-15) EgtLinePVL(Lq,EgtEP(DimLineR1),-vr,10) -- freccia di quotatura
--vr:rotate(Z_AX(), 30) EgtLinePVL(Lq,EgtEP(DimLineR1),-vr,10)
EgtLinePVL(Lq,EgtEP(DimLineR1),VRotated(-vr,-15),dim*.4) -- freccia di quotatura
EgtLinePVL(Lq,EgtEP(DimLineR1),VRotated(-vr, 15),dim*.4)
-- Simmetria orizzontale
if Simm then
--EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),X_AX(),GDB_RT.GLOB)
GetAllSimm( Ly, Lr, La, Le, Lq)
EgtInvertCurve({l1,l2,l3,l4,arc,l6,l7,d1})
EgtInvertCurve({DimLineL3,DimLineLC,DimLineLZ,DimLineL7,lnZ2,DimLineR1,DimLineR2,DimLineR3})
EgtSetInfo(La,"SIMM","1")
end
-- Simmetria verticale ('ribaltamento')
if Rib then
--EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),Y_AX(),GDB_RT.GLOB)
GetAllRib( Ly,Lr,La,Le,Lq)
EgtInvertCurve({l1,l2,l3,l4,arc,l6,l7})
EgtInvertCurve({DimLineL3,DimLineLC,DimLineLZ,DimLineL7,lnZ2,DimLineR1,DimLineR2})
EgtSetInfo(La,"RIB","1")
end
EgtReorderCurvesInGroup(Ly,ORIG())
-- 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
local pVal
if Rib then
pVal= bbox:getMin() - Vector3d(0,dim*5,0)
else
pVal= bbox:getMin() - Vector3d(0,dim*3,0)
end
-- Dimensioni sull'oggetto
local ptP = 0.5 * ( bbox:getMin() + bbox:getMax())
local 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)
EgtSetStatus(LbOn,GDB_ST.OFF)
-- Etichette sulla figura
local stdoffset = 1
local LblL1 = AddLabel(Le,l1,stdoffset,CMP.N1,dim,-90,RED())
EgtSetInfo(LblL1,"Var",1)
local LblL2 = AddLabel(Le,l2,stdoffset,CMP.N2,dim,-90,RED())
EgtSetInfo(LblL2,"Var",2)
local LblL3 = AddLabel(Le,DimLineL3,stdoffset,L3label,dim*.75,-90,GREEN())
local LblL6 = AddLabel(Le,l6,stdoffset*.75,L6label,dim*.75,-90,GREEN())
local LblLC = AddLabel(Le,DimLineLC,stdoffset,CMP.N3,dim,-90,RED())
EgtSetInfo(LblLC,"Var",3)
local LblLZ = AddLabel(Le,lnZ2,stdoffset*.5,CMP.N4,dim,90,RED())
EgtSetInfo(LblLZ,"Var",4)
EgtErase(lnZ2)
local LblL7 = AddLabel(Le,DimLineL7,stdoffset,L7label,dim*.75,-90,GREEN())
local LblLR = AddLabelAl(Le,DimLineR3,stdoffset*.0,CMP.N5,dim*.8,90,RED())
EgtSetInfo(LblLR,"Var",5)
EgtErase(DimLineR3)
if CMP.ERR == 0 then
LblD1 = AddLabelAl(La,d1,stdoffset*.75,D1label,dim/2,90,GREEN())
end
-- Etichette sotto la figura
local lLenL3 = EgtToUiUnits(L3)
local sLenL3 = EgtNumToString(lLenL3,1)
local ValL3 = EgtTextAdv(Le,pVal,0,L3label..'='..sLenL3,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL3,GREEN())
EgtSetStatus(ValL3,GDB_ST.SEL)
local ValL3Len = (EgtEP(ValL3,GDB_RT.GLOB)-EgtSP(ValL3,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL3Len,0,0)
local lLenL7 = EgtToUiUnits(L7)
local sLenL7 = EgtNumToString(lLenL7,1)
local ValL7 = EgtTextAdv(Le,pVal,0,L7label..'='..sLenL7,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValL7,GREEN())
EgtSetStatus(ValL7,GDB_ST.SEL)
local ValL7Len = (EgtEP(ValL7,GDB_RT.GLOB)-EgtSP(ValL7,GDB_RT.GLOB)):getX() + dim/2
pVal = pVal + Vector3d(ValL7Len,0,0)
if CMP.ERR == 0 then
local lLenD1 = EgtToUiUnits(D1)
local sLenD1 = EgtNumToString(lLenD1,1)
local ValD1 = EgtTextAdv(La,pVal,0,D1label..'='..sLenD1,'',100,'S',dim*.5,1,0,GDB_TI.BL,GDB_RT.GLOB)
EgtSetColor(ValD1,GREEN())
EgtSetStatus(ValD1,GDB_ST.SEL)
end
-- Se non Preview
if not bPreview then
-- cancello etichette e parti ausiliarie (es.: altezze, diagonali )
EgtErase({La,Le,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
end
_G.CMP_Draw = CMP_Draw
CMP_Draw(true)
EgtZoom(SCE_ZM.ALL)