178 lines
5.2 KiB
Lua
178 lines
5.2 KiB
Lua
-- 2015/07/08 11:45:00
|
|
-- Triangolo dati tre lati
|
|
|
|
-- Intestazioni
|
|
require( 'EgtBase')
|
|
_ENV = EgtProtectGlobal()
|
|
EgtEnableDebug( false)
|
|
|
|
EgtAddToPackagePath(EgtGetSourceDir() .. 'LuaLibs\\?.lua')
|
|
require( 'EgtCompo')
|
|
|
|
-- Valori limite
|
|
local LgMin = 10
|
|
local AngMin = 15
|
|
|
|
-- Parametri : dichiarazione e valori standard
|
|
local CMP = {}
|
|
CMP.N1 = 'L1'
|
|
CMP.T1 = 3 -- 0=null, 1=bool, 2=int, 3=len, 4=num, 5=string
|
|
CMP.V1 = 650
|
|
CMP.N2 = 'L2'
|
|
CMP.T2 = 3
|
|
CMP.V2 = 800
|
|
CMP.N3 = 'L3'
|
|
CMP.T3 = 3
|
|
CMP.V3 = 736.5
|
|
CMP.Npar = 3
|
|
CMP.Nome = 'Triangolo3L'
|
|
|
|
_G.CMP = CMP
|
|
-- Aggiorno con ultimi valori salvati (se presenti)
|
|
CMP.DATA = EgtGetSourceDir() .. CMP.Nome ..'.dat'
|
|
LoadCompoData()
|
|
|
|
-- Funzione di disegno
|
|
local function CMP_Draw(bPreview)
|
|
-- Carico i messaggi
|
|
local Msg = require('EgtCompoMsg')
|
|
|
|
-- Assegno i tre lati
|
|
local L1 = CMP.V1
|
|
local L2 = CMP.V2
|
|
local L3 = CMP.V3
|
|
|
|
-- Verifiche sui dati di input
|
|
CMP.ERR = 0
|
|
CMP.MSG = ''
|
|
if L1 < LgMin then
|
|
L1 = LgMin
|
|
CMP.ERR = 1
|
|
CMP.MSG = Msg[2]..GetLenLimit(LgMin) -- La lunghezza dei lati deve essere maggiore di LgMin
|
|
end
|
|
if L2 < LgMin then
|
|
L2 = LgMin
|
|
if CMP.ERR == 0 then
|
|
CMP.ERR = 2
|
|
CMP.MSG = Msg[2]..GetLenLimit(LgMin) -- La lunghezza dei lati deve essere maggiore di LgMin
|
|
end
|
|
end
|
|
if L3 < LgMin then
|
|
L3 = LgMin
|
|
if CMP.ERR == 0 then
|
|
CMP.ERR = 3
|
|
CMP.MSG = Msg[2]..GetLenLimit(LgMin) -- La lunghezza dei lati deve essere maggiore di LgMin
|
|
end
|
|
end
|
|
if L1 >= ( L2 + L3) then
|
|
L1 = L2 + L3 - LgMin
|
|
if CMP.ERR == 0 then
|
|
CMP.ERR = 4
|
|
CMP.MSG = Msg[3] -- La lunghezza di un lato è troppo grande rispetto agli altri due
|
|
end
|
|
end
|
|
if L2 >= ( L1 + L3) then
|
|
L2 = L1 + L3 - LgMin
|
|
if CMP.ERR == 0 then
|
|
CMP.ERR = 5
|
|
CMP.MSG = Msg[3] -- La lunghezza di un lato è troppo grande rispetto agli altri due
|
|
end
|
|
end
|
|
if L3 >= ( L1 + L2) then
|
|
L3 = L1 + L2 - LgMin
|
|
if CMP.ERR == 0 then
|
|
CMP.ERR = 6
|
|
CMP.MSG = Msg[3] -- La lunghezza di un lato è troppo grande rispetto agli altri due
|
|
end
|
|
end
|
|
if not bPreview and CMP.ERR ~= 0 then
|
|
return
|
|
end
|
|
|
|
-- Se Preview cancello tutto
|
|
if bPreview then
|
|
EgtNewFile()
|
|
EgtSetDefaultMaterial( BLACK())
|
|
end
|
|
|
|
-- Pezzo e Layer
|
|
local Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- pezzo
|
|
local Ly = EgtGroup(Pz,GDB_RT.LOC) -- layer
|
|
EgtSetName(Ly,'OutLoop')
|
|
local Lc = EgtGroup(Pz,GDB_RT.LOC) -- layer di costruzione
|
|
local Lr = EgtGroup(Pz,GDB_RT.LOC) -- layer regione
|
|
EgtSetName(Lr,'Region')
|
|
local La = EgtGroup(Pz,GDB_RT.LOC) -- layer ausiliario
|
|
EgtSetName(La,"LayAux")
|
|
local Le = EgtGroup(Pz,GDB_RT.LOC) -- layer etichette
|
|
EgtSetName(Le,"Etichette")
|
|
EgtSetCurrPartLayer(Pz,Ly)
|
|
|
|
-- Lati del triangolo
|
|
local l2 = EgtLine(Ly,Point3d(0,0,0),Point3d(L2,0,0))
|
|
EgtSetName(l2,"A2")
|
|
local c1 = EgtCircle(Lc,Point3d(0,0,0),L1)
|
|
local c2 = EgtCircle(Lc,Point3d(L2,0,0),L3)
|
|
local l3 = EgtLine(Ly,EgtEP(l2),EgtIP(c1,c2,Point3d(0,10,0)))
|
|
EgtSetName(l3,"A3")
|
|
local l1 = EgtLine(Ly,EgtEP(l3),EgtSP(l2))
|
|
EgtSetName(l1,"A1")
|
|
EgtErase(Lc)
|
|
-- Riempimento del triangolo
|
|
local e1 = EgtCurveCompo(Ly,{l1,l2,l3},false)
|
|
local s1 = EgtSurfFlatRegion(Lr,e1)
|
|
if CMP.ERR == 0 then
|
|
EgtSetColor(s1,AQUA())
|
|
else
|
|
EgtSetColor(s1,ORANGE())
|
|
end
|
|
EgtSetAlpha(s1,25)
|
|
EgtErase(e1)
|
|
|
|
-- Dimensioni dell'oggetto
|
|
local bbox = EgtGetBBoxGlob(Ly,GDB_BB.STANDARD)
|
|
local dimX = EgtToUiUnits(bbox:getDimX())
|
|
local dimY = EgtToUiUnits(bbox:getDimY())
|
|
if CMP.ERR == 0 then
|
|
CMP.MSG = Msg[1] .. EgtNumToString(dimX,2) .. ' x ' .. EgtNumToString(dimY,2)
|
|
end
|
|
|
|
-- Dimensioni sull'oggetto
|
|
local ptP = 1 / 3 * ( EgtEP(l1,GDB_ID.ROOT) + EgtEP(l2,GDB_ID.ROOT) + EgtEP(l3,GDB_ID.ROOT))
|
|
local sDim = EgtNumToString(dimX,2) .. ' x ' .. EgtNumToString(dimY,2)
|
|
local dDim = bbox:getRadius() * 0.1
|
|
local dRot = 0
|
|
if dimY > dimX then
|
|
dRot = 90
|
|
end
|
|
local LbOn = AddLabelPnt(Lr,ptP,sDim,dDim,dRot,BLACK())
|
|
EgtSetStatus(LbOn,GDB_ST.OFF)
|
|
|
|
-- Etichette sulla figura
|
|
local dim = bbox:getRadius() * 0.1
|
|
local stdoffset = 1.2
|
|
local LblL1 = AddLabel(Le,l1,stdoffset,'L1',dim,-90,RED())
|
|
EgtSetInfo(LblL1,"Var",1)
|
|
local LblL2 = AddLabel(Le,l2,stdoffset,'L2',dim,-90,RED())
|
|
EgtSetInfo(LblL2,"Var",2)
|
|
local LblL3 = AddLabel(Le,l3,stdoffset,'L3',dim,-90,RED())
|
|
EgtSetInfo(LblL3,"Var",3)
|
|
|
|
-- Se non Preview
|
|
if not bPreview then
|
|
-- cancello le parti ausiliarie
|
|
EgtErase({La,Le})
|
|
-- rendo visibile label sul pezzo
|
|
EgtSetStatus(LbOn,GDB_ST.ON)
|
|
end
|
|
|
|
-- Se non ci sono errori salvo i dati
|
|
if CMP.ERR == 0 then
|
|
-- scrivo i parametri nelle info del pezzo
|
|
WriteCompoDataToPart( Pz, CMP.Nome, CMP.Npar)
|
|
-- salvo i parametri come nuovo default
|
|
SaveCompoData( CMP.Npar)
|
|
end
|
|
end
|
|
_G.CMP_Draw = CMP_Draw
|