This commit is contained in:
carlo.baronchelli
2021-07-29 13:08:25 +02:00
3 changed files with 112 additions and 66 deletions
+86 -61
View File
@@ -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
@@ -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
+26 -3
View File
@@ -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)
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)