Merge branch 'master' of https://gitlab.steamware.net/egalware/frontalini
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user