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