diff --git a/Frontalini_ecc/CompoAF/Alz&Front.lua b/Frontalini_ecc/CompoAF/Alz&Front.lua index 525c340..65f72fa 100644 --- a/Frontalini_ecc/CompoAF/Alz&Front.lua +++ b/Frontalini_ecc/CompoAF/Alz&Front.lua @@ -11,6 +11,7 @@ -- 21/07/2021 - aggiornato progetto in GIT -- 26/07/2021 - 'chiuso' i rettangoli, noiminati i rispettivi lati -- - studio casi per inserimento info per tagli inclinati +-- 28/07/2021 - semplificazione di SideTab e aggiunta angoli tra lati consecutivi -- Intestazioni require( 'EgtBase') @@ -110,21 +111,19 @@ local function CMP_Draw(bPreview) ]] local sInd = nil - --[[ faccio scorrere tutti gli elementi del layer OutLoop e di ognuno leggo se contiente nelle info "AF=.." - "AF=0" ( o nil) 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, + "AF=0" ( o nil) => 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 contenente tutti i lati e i riferimenti ai lati successivi, oltre a informazioni sulle direzioni iniziali/finali dei lati cghe seguono/precedono. (In questa fase possono essere aggiunte altre informazioni...) 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 = {} + -- **COSTRUZIONE DELLA TABELLA** SideTab = {} local CurrSide = EgtGetFirstInGroup( Lw) local PrecSide = nil @@ -132,72 +131,79 @@ local function CMP_Draw(bPreview) while CurrSide ~= nil do local SideRec = {} local Info = EgtGetInfo( CurrSide, "AF", 'i') + -- se primo lato if SideNum == 1 then - -- |a = SideId, b = SideInfo-A/F, c= PrecSideInfo, d = ProxSideInfo,| - -- |e = SideStartVector, f = SideEndVector| - -- |g = PrecSideEndvector, h = ProxSideStartVector| - SideRec = {a = CurrSide, b = Info, c = 0, d = 0, - e = EgtSV(CurrSide), f = EgtEV(CurrSide), - g = nil, h = nil - } - else - SideRec = {a=CurrSide, b=Info, c = SideTab[SideNum-1].b, d = 0, - e = EgtSV(CurrSide), f = EgtEV(CurrSide), - g = SideTab[SideNum-1].f, h = nil - } - SideTab[SideNum-1].d = SideRec.b ; SideTab[SideNum-1].h = SideRec.e - 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') + -- |LEGENDA| + -- |.a = SideId; .b = SideInfo-A/F;| .c= PrecSideInfo, .d = ProxSideInfo, + -- |.u = SideStartVector; .v = SideEndVector;| + -- .g = PrecSideEndvector; .h = ProxSideStartVector; + -- |.y = PrecSide-Side_Angle; .z = Side-ProxSide_Angle.!| + SideRec = {a = CurrSide, b = Info, --c = 0, d = 0, + u = EgtSV(CurrSide), v = EgtEV(CurrSide), + --g = nil, h = nil, + y = nil, z = nil } + -- se lato successivo al primo else - EgtSetColor(CurrSide, 'BLACK') - end + local v1 = SideTab[SideNum-1].v + local v2 = EgtEV(CurrSide) + local angv1v2 = atan2( (v1^v2)*Z_AX(),v1*v2) + SideRec = {a=CurrSide, b=Info, --c = SideTab[SideNum-1].b, d = 0, + u = EgtSV(CurrSide), v = EgtEV(CurrSide), + --g = SideTab[SideNum-1].f, h = nil + y = angv1v2, z = nil } + -- completo record precedente + SideTab[SideNum-1].z = angv1v2 + end + -- per visualizzazione in OmagCUT + 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) - --[[ da eliminare - -- 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) - -- |a = SideId, b = SideInfo-A/F, c= PrecSideInfo, d = ProxSideInfo,| - -- |e = SideStartVector, f = SideEndVector| - -- |g = PrecSideEndvector, h = ProxSideStartVector| + -- completo la tabella con i riferimenti tra ultimo lato e primo (in quanto successivo all'ultimo) + -- |(ripeti LEGENDA| + -- |.a = SideId; .b = SideInfo-A/F;| .c= PrecSideInfo, .d = ProxSideInfo, + -- |.u = SideStartVector; .v = SideEndVector;| + -- .g = PrecSideEndvector; .h = ProxSideStartVector; + -- |.y = PrecSide-Side_Angle; .z = Side-ProxSide_Angle.)| if #SideTab > 1 then - SideTab[1].c = SideTab[#SideTab].b - SideTab[1].g = SideTab[#SideTab].f - SideTab[#SideTab].d = SideTab[1].b - SideTab[#SideTab].h = SideTab[1].e + --SideTab[1].c = SideTab[#SideTab].b + --SideTab[1].g = SideTab[#SideTab].f + local v1 = SideTab[#SideTab].v + local v2 = SideTab[1].u + local angv1v2 = atan2( (v1^v2)*Z_AX(),v1*v2) + SideTab[#SideTab].z = angv1v2 + SideTab[1].y = angv1v2 end - -- restituisco un messaggio al programma OMAG-Cut CMP.MSG = sMsg - - -- costruisco le figure (rettangoli) rappresentative di alzatine e frontalini + -- + -- **COSTRUZIONE DELLE FIGURE** (rettangoli) rappresentative di alzatine e frontalini + -- |(ripeti LEGENDA| + -- |.a = SideId; .b = SideInfo-A/F;| .c= PrecSideInfo, .d = ProxSideInfo, + -- |.u = SideStartVector; .v = SideEndVector;| + -- .g = PrecSideEndvector; .h = ProxSideStartVector; + -- |.y = PrecSide-Side_Angle; .z = Side-ProxSide_Angle.)| for SideNum = 1 , #SideTab do if (SideTab[SideNum].b ~= 0 and SideTab[SideNum].b ~= nil) then local Side = SideTab[SideNum].a - local SVect = SideTab[SideNum].e - local EVect = SideTab[SideNum].f + local SVect = SideTab[SideNum].u + local EVect = SideTab[SideNum].v local Pz; local Lay; local BaseL; local HeightL local sName -- caso di alzatina if SideTab[SideNum].b == 1 then - -- ++++++++++++++++++++++++++++ QUI ++++++++++++++ --Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- nuova parte per alzatina o frontalino Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.GLOB) -- nuova parte per alzatina o frontalino Lay = EgtGroup(Pz,GDB_RT.GLOB) -- layer della figura @@ -206,6 +212,7 @@ local function CMP_Draw(bPreview) BaseL = EgtCurveLength( Side) sName = "A"..SideNum.."-A-" HeightL = AH --(=CMP.A_Heigth) + -- caso di frontalino elseif SideTab[SideNum].b == 2 then Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.GLOB) -- nuova parte per alzatina o frontalino Lay = EgtGroup(Pz,GDB_RT.GLOB) -- layer della figura @@ -215,19 +222,37 @@ local function CMP_Draw(bPreview) sName = "A"..SideNum.."-F-" HeightL = FH --(=CMP.F_Heigth) end - - - -- ++++++++++++++++++++++++++++ QUI ++++++++++++++ - Pt = EgtSP( Side) + VRotated( SVect*dDim, -90) - -- - -- - -- -- chiamo la funzione per il disegno del rettangolo (Lay, Pt, Base, Altezza, Vettore direz. iniziale, prefisso per nome lati) DrawRect (Lay, Pt, BaseL, HeightL, SVect, sName) + + + -- >>>>>>>>>>>>>>>>>>>>>>> QUI >>>>>>>>>>>>>>>>>> + + -- assegno eventualmente ai lati del rettangolo info per taglio inclinato + --[[ + local Tab = SideTab ; local N = SideNum + -- **caso Fp1.sx** = frontalino anche sul lato precedente, angolo 'a sx' + if Tab[N].b == 2 and Tab[N].y >0 then + EgtSetInfo( id, "SideAng", -(90-Tab[N].y/2+F_Delta) + + end ]] + + end end -- for + + + + + + + + + + + --[==[ -- Lati local stdoffset = 1 diff --git a/Frontalini_ecc/CompoAF/LuaLibs/EgtCompo.lua b/Frontalini_ecc/CompoAF/LuaLibs/EgtCompo.lua index a39d64e..fed1c95 100644 --- a/Frontalini_ecc/CompoAF/LuaLibs/EgtCompo.lua +++ b/Frontalini_ecc/CompoAF/LuaLibs/EgtCompo.lua @@ -17,8 +17,6 @@ function DrawRect (Lay, Pt, BaseL, HeightL, Vect, sName) EgtSetName(lC,sName.."l4") local lD = EgtLine(Lay,EgtEP(lC),EgtSP(lA)) EgtSetName(lD,sName.."l1") - - end -- Restituisce l'angolo interno di due lati consecutivi di un poligono diff --git a/Frontalini_ecc/CompoAF/Prova.lua b/Frontalini_ecc/CompoAF/Prova.lua index 35da0ad..c26a470 100644 --- a/Frontalini_ecc/CompoAF/Prova.lua +++ b/Frontalini_ecc/CompoAF/Prova.lua @@ -6,13 +6,36 @@ EgtEnableDebug( true) EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua') require( 'EgtCompo') -Vett = Vector3d(100,100,0) +--[[Vett = Vector3d(100,100,0) EgtVector( 2,Vett) Point = Point3d( 200,200,0) EgtPoint(2, Point3d( 200,200,0)) EgtPoint( 2, -Point) EgtLinePDL(2, Point, 0, 500) EgtLinePDL(2, -Point+Vett, 0, 500) - +]] --_G.CMP_Draw = CMP_Draw - EgtZoom(SCE_ZM.ALL) \ No newline at end of file + +local v1x, v1y, v1z +local v2x, v2y, v2z +v1x = 500 v1y = 0 v1z = 0 +v2x = 500 v2y = 500 v2z = 0 + +local v1 = Vector3d( v1x,v1y,v1z) +--EgtSetColor(v1,BLACK()) +local v2 = Vector3d( v2x,v2y,v2z) +--EgtSetColor(v2,BLACK()) +local vv1= EgtVector( 2, v1, {0,-100,0}) + EgtSelectObj(vv1) + EgtSetColor({GDB_ID.SEL},GREEN(),false) + EgtDeselectObj (vv1) +local vv2 = EgtVector( 2, v2,{v1x,v1y-100,v1z}) + EgtSelectObj(vv2) + EgtSetColor({GDB_ID.SEL},RED(),false) +--************************************************************************ +local Ang = atan2((v1^v2)*Z_AX(),v1*v2) +-- *************************************************************************** +EgtText(GDB_ID.CL,{0,0,0}, Ang ,50,GDB_RT.GRID) + +--G.CMP_Draw = CMP_Draw +EgtZoom(SCE_ZM.ALL)