-- 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)