-- 2015/10/__ -- PIANO CUCINA CON LAVORAZIONE A A SPORGERE PER ANGOLO -- Intestazioni require('EgtBase') _ENV = EgtProtectGlobal() EgtEnableDebug( false) EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua') require( 'EgtCompo') local Nome = 'PCucinaB2' -- 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 lungo muro CMP.T1 = 3 CMP.V1 = 800 CMP.N2 = 'B' -- profondità lato muro CMP.T2 = 3 CMP.V2 = 500 CMP.N3 = 'Z' -- profondità sagomatura bordo CMP.T3 = 3 CMP.V3 = 30 CMP.N4 = 'R' -- raggio di raccordo CMP.T4 = 3 CMP.V4 = 50 CMP.N5 = '←→' -- Simmetria dx/sx (true = svuotamento a dx) CMP.T5 = 1 CMP.V5 = false CMP.N6 = '↑↓' -- Simmetria su/giù ('ribaltamento') (true = 'L' capovolta) CMP.T6 = 1 CMP.V6 = false CMP.Npar = 6 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 L6 = CMP.V2 local LR = CMP.V4 local LZ = CMP.V3 local Simm = CMP.V5 local Rib = CMP.V6 local K1 = sqrt(2)/2 local Kx = LR*K1 local Ky = LR - LR*K1 local L4 = LZ / K1 local L2 = L6 - Kx - LZ local L5 = L1 - Ky - LZ local L2label = 'D' -- lato verso pezzo PCucinaB1 local L5label = 'C' -- lunghezza interna lato muro 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 L6 < LgMin then L6 = 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 LZ < Q1Min then LZ = Q1Min if CMP.ERR == 0 then CMP.ERR = 3 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 = 4 CMP.MSG = Msg[206]..GetLenLimit(RMin) -- Il raggio R deve essere > = RMin end end if L2 < LgMin then L2 = LgMin L6 = L2 + Kx + LZ if CMP.ERR == 0 then CMP.ERR = 5 CMP.MSG = Msg[210]..GetLenLimit(LgMin) -- L2 risulterebbe minore di ..0 end end if L5 < LgMin then L5 = LgMin L1 = L5 + Ky + LZ if CMP.ERR == 0 then CMP.ERR = 6 CMP.MSG = Msg[211]..GetLenLimit(LgMin) -- L5 risulterebbe 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()+Vector3d(0,L1,0),-90,L1) EgtSetName(l1,"A1") local l2 = EgtLinePDL(Ly,EgtEP(l1),0,L2) local pC = EgtEP(l2) + Vector3d(0,1,0)*LR -- centro dell'arco di raccordo local l3 = EgtArc(Ly,pC,LR,-90,45,0) -- arco di raccordo local l4 = EgtLinePDL(Ly,EgtEP(l3),45,L4) local l5 = EgtLinePDL(Ly,EgtEP(l4),90,L5) EgtSetName(l5,"A3") local l6 = EgtLine(Ly,EgtEP(l5),EgtSP(l1)) EgtSetName(l6,"A2") -- diagonali e assi di simmetria local d1, D1, a1 if CMP.ERR == 0 then d1 = EgtLine(La,EgtEP(l1),EgtSP(l6)) D1 = EgtCurveLength(d1) a1 = EgtLinePDL(La,EgtMP(l6),-90,L1) end if Lc then EgtErase(Lc) end -- Riempimento della figura local e1 = EgtCurveCompo(Ly,{l1,l2,l3,l4,l5,l6},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 -- punto e vettore per costruzioni pt = EgtEP(l2,Lq) + Vector3d(Kx,-dim,0) local DimLineLZ = EgtLinePDL(Lq,pt,0,LZ) EgtLinePDL(Lq,EgtSP(DimLineLZ)-Vector3d(0,dim*.25,0),90,dim/2) -- trattino di estensione EgtLinePDL(Lq,EgtEP(DimLineLZ)-Vector3d(0,dim*.25,0),90,dim/2) -- trattino di estensione pt = EgtMP(DimLineLZ,Lq)+Vector3d(0,-dim*.25,0) local lnZ1 = EgtLinePDL(Lq,pt,-60,dim/2) -- trattino per direttrice local lnZ2 = EgtLinePDL(Lq,EgtEP(lnZ1),-90,dim/2) -- " " " -- raggio pt = EgtMP(l3) vr = EgtMV(l3,Lq) --vr = VRotaded(EgtMV(l3,Lq),90) non può funzionare? local DimLineR1 =EgtLine(Lq,pt+VRotated(-vr,-90)*2*dim,pt) --local DimLineR2 =EgtLine(Lq,pt,pt+VRotated(-vr,90)*dim/2) vr = EgtSV(DimLineR1,Lq) pt = EgtSP(DimLineR1)+vr*dim/2 local DimLineR3 = EgtLine(Lq,pt-VRotated(vr,90)*dim,pt) pt = EgtEP(DimLineR1) vr = EgtEV(DimLineR1) EgtLinePVL(Lq,pt,VRotated(-vr,-15),dim*.4) -- freccia di quotatura EgtLinePVL(Lq,pt,VRotated(-vr, 15),dim*.4) -- Simmetria orizzontale if Simm then EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),X_AX(),GDB_RT.GLOB) EgtInvertCurve({l1,l2,l3,l4,l5,l6,d1}) EgtInvertCurve({DimLineLZ,lnZ2,DimLineR3}) EgtSetInfo(La,"SIMM","1") end -- Simmetria verticale ('ribaltamento') if Rib then EgtMirror({Ly,Lr,La,Le,Lq},ORIG(),Y_AX(),GDB_RT.GLOB) EgtInvertCurve({l1,l2,l3,l4,l5,l6}) EgtInvertCurve({DimLineLZ,lnZ2}) 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*3,0) else pVal= bbox:getMin() - Vector3d(0,dim*4,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) -- Etichette sulla figura local stdoffset = 1 local LblL1 = AddLabel(Le,l1,stdoffset,CMP.N1,dim,-90,RED()) EgtSetInfo(LblL1,"Var",1) local LblL6 = AddLabel(Le,l6,stdoffset*.75,CMP.N2,dim,-90,RED()) EgtSetInfo(LblL6,"Var",2) local LblLR = AddLabelAl(Le,DimLineR3,stdoffset*.0,CMP.N4,dim*.8,90,RED()) EgtSetInfo(LblLR,"Var",3) EgtErase(DimLineR3) local LblLZ = AddLabel(Le,lnZ2,stdoffset*.5,CMP.N3,dim,90,RED()) EgtSetInfo(LblLZ,"Var",4) EgtErase(lnZ2) local LblL2 = AddLabel(Le,l2,stdoffset,L2label,dim*.75,-90,GREEN()) local LblL5 = AddLabel(Le,l5,stdoffset,L5label,dim*.75,-90,GREEN()) if CMP.ERR == 0 then LblD1 = AddLabelAl(La,d1,stdoffset*.75,D1label,dim/2,90,GREEN()) end -- Etichette sotto la figura local lLenL2 = EgtToUiUnits(L2) local sLenL2 = EgtNumToString(lLenL2,1) local ValL2 = EgtTextAdv(Le,pVal,0,L2label..'='..sLenL2,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB) EgtSetColor(ValL2,GREEN()) EgtSetStatus(ValL2,GDB_ST.SEL) local ValL2Len = (EgtEP(ValL2,GDB_RT.GLOB)-EgtSP(ValL2,GDB_RT.GLOB)):getX() + dim/2 pVal = pVal + Vector3d(ValL2Len,0,0) local lLenL5 = EgtToUiUnits(L5) local sLenL5 = EgtNumToString(lLenL5,1) local ValL5 = EgtTextAdv(Le,pVal,0,L5label..'='..sLenL5,'',100,'S',dim*.75,1,0,GDB_TI.BL,GDB_RT.GLOB) EgtSetColor(ValL5,GREEN()) EgtSetStatus(ValL5,GDB_ST.SEL) local ValL5Len = (EgtEP(ValL5,GDB_RT.GLOB)-EgtSP(ValL5,GDB_RT.GLOB)):getX() + dim/2 pVal = pVal + Vector3d(ValL5Len,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