From 87811ba2b76686f5a3ecaf28e3c758d946f180b5 Mon Sep 17 00:00:00 2001 From: Carlo Baronchelli Date: Wed, 28 Jul 2021 16:27:29 +0200 Subject: [PATCH 1/3] File prova.lua per test calcolo angoli tra lati consecutivi --- Frontalini_ecc/CompoAF/Prova.lua | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/Frontalini_ecc/CompoAF/Prova.lua b/Frontalini_ecc/CompoAF/Prova.lua index 35da0ad..05b1c4b 100644 --- a/Frontalini_ecc/CompoAF/Prova.lua +++ b/Frontalini_ecc/CompoAF/Prova.lua @@ -6,13 +6,35 @@ 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) From 8f4fcff0a4130bc83a582540607720f00d5344d5 Mon Sep 17 00:00:00 2001 From: Carlo Baronchelli Date: Wed, 28 Jul 2021 18:22:39 +0200 Subject: [PATCH 2/3] semplificazione di SideTab e aggiunta angoli tra lati consecutivi --- Frontalini_ecc/CompoAF/Alz&Front.lua | 113 +++++++++++++++------------ Frontalini_ecc/CompoAF/Prova.lua | 5 +- 2 files changed, 64 insertions(+), 54 deletions(-) diff --git a/Frontalini_ecc/CompoAF/Alz&Front.lua b/Frontalini_ecc/CompoAF/Alz&Front.lua index 525c340..1686f64 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 inserimento angoli tra lati consecutivi -- Intestazioni require( 'EgtBase') @@ -112,10 +113,10 @@ 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 @@ -132,72 +133,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 + -- + -- costruisco le figure (rettangoli) rappresentative di alzatine e + -- |(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 +214,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 @@ -217,7 +226,7 @@ local function CMP_Draw(bPreview) end - -- ++++++++++++++++++++++++++++ QUI ++++++++++++++ + -- >>>>>>>>>>>>>>>>>>>>>>> QUI >>>>>>>>>>>>>>>>>> Pt = EgtSP( Side) + VRotated( SVect*dDim, -90) -- diff --git a/Frontalini_ecc/CompoAF/Prova.lua b/Frontalini_ecc/CompoAF/Prova.lua index 05b1c4b..c26a470 100644 --- a/Frontalini_ecc/CompoAF/Prova.lua +++ b/Frontalini_ecc/CompoAF/Prova.lua @@ -32,8 +32,9 @@ local vv1= EgtVector( 2, v1, {0,-100,0}) 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) +--************************************************************************ +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 From 87f29dfaa6f4a8297b2bcc97ac43ba1bff9180c1 Mon Sep 17 00:00:00 2001 From: Carlo Baronchelli Date: Wed, 28 Jul 2021 19:40:37 +0200 Subject: [PATCH 3/3] Inizio casi per lati inclinati --- Frontalini_ecc/CompoAF/Alz&Front.lua | 38 +++++++++++++++------ Frontalini_ecc/CompoAF/LuaLibs/EgtCompo.lua | 2 -- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Frontalini_ecc/CompoAF/Alz&Front.lua b/Frontalini_ecc/CompoAF/Alz&Front.lua index 1686f64..65f72fa 100644 --- a/Frontalini_ecc/CompoAF/Alz&Front.lua +++ b/Frontalini_ecc/CompoAF/Alz&Front.lua @@ -11,7 +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 inserimento angoli tra lati consecutivi +-- 28/07/2021 - semplificazione di SideTab e aggiunta angoli tra lati consecutivi -- Intestazioni require( 'EgtBase') @@ -111,7 +111,6 @@ 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 @@ -122,10 +121,9 @@ local function CMP_Draw(bPreview) 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 @@ -191,7 +189,7 @@ local function CMP_Draw(bPreview) -- restituisco un messaggio al programma OMAG-Cut CMP.MSG = sMsg -- - -- costruisco le figure (rettangoli) rappresentative di alzatine e + -- **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;| @@ -224,19 +222,37 @@ local function CMP_Draw(bPreview) sName = "A"..SideNum.."-F-" HeightL = FH --(=CMP.F_Heigth) end + 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 >>>>>>>>>>>>>>>>>> - 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) + -- 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