From 1a9c3af0cffef419992aafc663ed00432daf6bb6 Mon Sep 17 00:00:00 2001 From: "carlo.baronchelli" Date: Wed, 21 Jul 2021 11:05:00 +0200 Subject: [PATCH] creazione file alz&front --- Frontalini_ecc/Alz&Front.lua | 227 +++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 Frontalini_ecc/Alz&Front.lua diff --git a/Frontalini_ecc/Alz&Front.lua b/Frontalini_ecc/Alz&Front.lua new file mode 100644 index 0000000..ee6bcd5 --- /dev/null +++ b/Frontalini_ecc/Alz&Front.lua @@ -0,0 +1,227 @@ +-- 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 + +_G.CMP = CMP + +-- Funzione di disegno +local function CMP_Draw(bPreview) + -- Carico i messaggi + local Msg = require('EgtCompoMsg') + + -- Assegno l'angolo di spoglia + 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 + + 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) \ No newline at end of file