-- 2021/06/__ -- (exRettangolo interno dati base e altezza) -- 21/06/2021 Nicola Pievani: creazione del file Alz&Front -- 05/07/2021 Nicola Pievani: Inserisco commenti -- 08/07/2021 CB: inizio disegno dei 'rettangoli esterni' -- 00b 10/07/2020 CB: costruzione della tabella "MyTab" -- 00c 13/07/2021 CB: introduzone record "SideREc" e tabella "SideTab" -- 00d 15/07/2021 CB: introduzione funzione per disegno rettangoli -- 00e 16/07/2021 -- 00f 20/07/2021 -- Intestazioni require( 'EgtBase') _ENV = EgtProtectGlobal() EgtEnableDebug( true) EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua') require( 'EgtCompo') -- Valori limite local LgMin = 10 local RMin = 5 -- Parametri : dichiarazione e valori standard --.T (tipo) : 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string local CMP = {} -- elenco dei parametri visualizzati nell'interfaccia del programma OMAG-Cut CMP.A_Height=30 CMP.F_Height=30 CMP.A_DeltaAng=0 CMP.F_DeltaAng=0 -- parametri passati da OmagCut CMP.BBoxRad = 1000 CMP.HeightText = 100 -- _G.CMP = CMP -- Funzione di disegno local function CMP_Draw(bPreview) -- Carico i messaggi local Msg = require('EgtCompoMsg') -- Assegno l'angolo di incremento per i tagli inclinati local F_Delta = CMP.F_DeltaAng local A_Delta = CMP.A_DeltaAng -- Assegno l'altezza local FH = CMP.F_Height local AH = CMP.A_Height -- Assegno la dimensione di riferimento (=1/10 del 'raggio' della figura) local dDim = CMP.BBoxRad*0.1 CMP.ERR = 0 CMP.MSG = '' -- Pezzo e Layer già definiti local Pz = EgtGetFirstGroupInGroup( GDB_ID.ROOT) if not Pz then CMP.ERR = 5 CMP.MSG = "Pezzo non trovato" return end local La = EgtGetFirstNameInGroup( Pz, "LayAux") local Lo = EgtGetFirstNameInGroup( Pz, "Region") local Lw = EgtGetFirstNameInGroup( Pz, "OutLoop") local Le = EgtGetFirstNameInGroup( Pz, "Etichette") local Lq = EgtGetFirstNameInGroup( Pz, "Quotature") local Ls = EgtGetFirstNameInGroup( Pz, "SelectRegion") local PzAF = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- ??? nuova part: alzatine e frontalini ??????? local LyA = EgtGroup(PzAF,GDB_RT.LOC) -- layer alzatine EgtSetName(LyA,'Alzatine') local LyF = EgtGroup(PzAF,GDB_RT.LOC) -- layer frontalini EgtSetName(LyF,'Frontalini') local LyAe = EgtGroup(PzAF,GDB_RT.LOC) -- layer etichette alzatine EgtSetName(LyAe,'Etich_Alzatine') local LyFe = EgtGroup(PzAF,GDB_RT.LOC) -- layer etichette frontalini EgtSetName(LyFe,'Etich_Frontalini') if not Ls then Ls = EgtGroup( Pz, GDB_RT.LOC) EgtSetName( Ls, "SelectRegion") end if not La or not Lo or not Lw or not Le or not Lq then CMP.ERR = 6 CMP.MSG = "Layer non trovato" return end local Lr = EgtGetFirstNameInGroup( Pz, "ErrorLay") if Lr then EgtEmptyGroup(Lr) else Lr = EgtGroup( Pz, GDB_RT.LOC) EgtSetName( Lr, "ErrorLay") end -- spengo i layer Aux e Quotature EgtSetStatus( La, GDB_ST.OFF) EgtSetStatus( Lq, GDB_ST.OFF) local sInd = nil --[[ faccio scorrere tutti gli elementi del layer OutLoop e di ognuno leggo se contiente nelle info "AF=.." "AF=0" al lato non deve essere associatu nulla "AF=1" al lato deve essere associto un'alzatina "AF=2" al lato deve essere associato un frontalino nel ciclo while che segue carico una tabella che contine tutti i lati e i riferimenti ai lati successivi in questa fase possono essere aggiunte altre informazioni, per ora questo è solo un prototipo La variabile sMsg è usta dal programma per verificare che i lati letti dalla tabella siano gli stessi passati dal programma ]] local sMsg = " " local SideNum =1 --local SideTab = {} SideTab = {} -- faccio scorrere tutti gli elementi del layer OutLoop e di ognuno leggo se contiente nelle info "AF=1/2" -- costruisco una tabelle con i dati utili dei lati consecutivi local CurrSide = EgtGetFirstInGroup( Lw) local PrecSide = nil while CurrSide ~= nil do local SideRec = {} local Info = EgtGetInfo( CurrSide, "AF", 'i') --if Info ~= nil then --if Info == 1 then if SideNum == 1 then -- |a = SideId, b = SideInfo-A/F, c= PrecSideInfo, d = ProxSideInfo,| -- |e = SideStartVector, f = PrecSideStartvector, g = ProxSideStartVector| SideRec = {a = CurrSide, b = Info, c = 0, d = 0, e = EgtSV(CurrSide), f = nil, g = nil } else SideRec = {a=CurrSide, b=Info, c = SideTab[SideNum-1].b, d = 0, e = EgtSV(CurrSide), f = SideTab[SideNum-1].e , g = nil } SideTab[SideNum-1].d = SideRec.b ; SideTab[SideNum-1].g = SideRec.e --SideTab[SideNum-1].d = 1; SideTab[SideNum-1].g = 2 end -- if Info == 1 then sMsg = sMsg ..EgtGetName(CurrSide).."=Alzatina " EgtSetColor(CurrSide, 'RED') elseif Info == 2 then sMsg = sMsg ..EgtGetName(CurrSide).."=Frontalino " EgtSetColor(CurrSide, 'GREEN') else EgtSetColor(CurrSide, 'BLACK') end table.insert(SideTab, SideRec) --[[ -- creo un rettangolo parallelo al lato corrente sMsg = sMsg ..EgtGetName(CurrSide).."=Frontalino " EgtSetColor(CurrSide, 'GREEN') table.insert( MyTab, {CurrId=CurrSide, AF=Info, PrecId=PrecSide} else EgtSetColor(CurrSide, 'BLACK') table.insert( MyTab, {CurrId=CurrSide, AF=0, PrecId=PrecSide} end end ]] -- passo al lato successivo PrecSide = CurrSide CurrSide = EgtGetNext( CurrSide) SideNum = SideNum + 1 end -- completo la tabella con i riferimenti tra primo e ultimo lato e viceversa) if #SideTab > 1 then SideTab[1].c = SideTab[#SideTab].b SideTab[1].f = SideTab[#SideTab].e SideTab[#SideTab].d = SideTab[1].b SideTab[#SideTab].g = SideTab[1].e end -- restituisco un messaggio al programma OMAG-Cut CMP.MSG = sMsg -- costruisco le figure (rettangoli) rappresentative di alzatine e frontalini -- ++++++++++++++++++++++++++++ QUI ++++++++++++++ SideNum = 1 local Dim = 10 --For ............... if SideTab[SideNum].b ~= 0 then local Lay local BaseL = 200 -- prendere la lunghezza effettiva del lato della figura local HeightL -- altezza Alzatina o Frontalino local Vect = EgtSV( SideTab[SideNum].a) -- caso di alzatina if SideTab[SideNum].b == 1 then Lay = LyA HeightL = CMP.A_Height sName = "A"..SideNum -- (=2) caso di frontalino else Lay = LyF HeightL = CMP.F_Height sName = "F"..SideNum end Pt = EgtSP( SideTab[SideNum].a) + VRotated( SideTab[SideNum].e*Dim, -90) -- -- -- -- chiamo funzione DrawRect (Lay, Pt, Base, Altezza, Vect, sName) DrawRect (Lay, Pt, BaseL, HeightL, Vect, sName) end --[==[ -- Lati local stdoffset = 1 local LblL1 = AddLabel(Ll,l1,stdoffset,CMP.N3,dim,-90,RED()) -- EgtSetInfo(LblL1,"Var",1) local LblL4 = AddLabel(Ll,l4,stdoffset,CMP.N4,dim,-90,RED()) --EgtSetInfo(LblL2,"Var",2) -- Etichetta del centro della figura ( = PUNTO DI INSERIMENTO ) local ln01 = EgtLinePDL(Ll,ptXY0-Vector3d(dim*.25,0,0),0,dim*.5) local ln02 = EgtLinePDL(Ll,ptXY0-Vector3d(0,dim*.25,0),90,dim*.5) local ln1 = EgtLinePDL(Ll,ptXY0,45,dim) pt1 = EgtEP(ln1) local ln2 = EgtLinePDL(Ll,pt1,0,dim) local lblXY = AddLabel(Ll,ln2,stdoffset,"("..CMP.N1..";"..CMP.N2..")",dim,90,RED()) EgtErase(ln2) ]==] -- ++++++++++++++++++++++++++++ QUI ++++++++++++++ return end _G.CMP_Draw = CMP_Draw --CMP_Draw(true) --EgtZoom(SCE_ZM.ALL)