Files
egwwindowlua/Designing/WinProject.lua
T

380 lines
15 KiB
Lua

--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
-- Imposto direttorio per librerie
local sBaseDir = EgtGetSourceDir()
EgtOutLog("BaseDir=" .. sBaseDir)
EgtAddToPackagePath( sBaseDir .. '?.lua')
EgtAddToPackagePath( sBaseDir .. 'WinLib\\' .. '?.lua')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinCreate = nil
local WinCreate = require( 'WinCreate')
_G.package.loaded.WinCalculate = nil
local WinCalculate = require( 'WinCalculate')
_G.package.loaded.WinManageProject = nil
local WinManageProject = require( 'WinManageProject')
-- WDG
-- funzioni
----------------------------------------------------------------------------------
local function GetVariableList( sName)
local List = {}
local nIndex = 1
while WDG[sName .. nIndex] do
table.insert(List, WDG['JOINT' .. nIndex])
nIndex = nIndex + 1
end
return List
end
----------------------------------------------------------------------------------
local function CleanVariableList( sName)
local nIndex = 1
while WDG[sName .. nIndex] do
WDG[sName .. nIndex] = nil
nIndex = nIndex + 1
end
end
----------------------------------------------------------------------------------
local function SetProfilePath()
_G.sProfilePath = WDG.PROFILEPATH
end
_G.SetProfilePath = SetProfilePath
----------------------------------------------------------------------------------
local function WinCreate_ImportProfile()
_G.sProfile = WDG.PROFILE
if _G.sProfilePath then
WinCreate.ImportProfile( _G.sProfilePath .. '\\' .. WDG.PROFILE .. '.nge')
end
end
_G.WinCreate_ImportProfile = WinCreate_ImportProfile
----------------------------------------------------------------------------------
local function FindThresholds( nGrpId)
local tThresholds = {} -- array delle soglie
-- ogni soglia è una tabella con due chiavi : nType = intero che indica la tipologia ( cfr. WIN_THRESHOLD_TYPES), sName = nome della soglia nel file dei profili
local tHash = {}
-- scorro tutti i profili del telaio
local nCurrId = EgtGetFirstInGroup( nGrpId)
while nCurrId do
-- verifico se di tipo bottom
local nBottomType = EgtGetInfo( nCurrId, WIN_BOTTOM, 'i') or WIN_THRESHOLD_TYPES.NULL
if nBottomType ~= WIN_THRESHOLD_TYPES.NULL then
-- recupero il nome
local vNames = EgtSplitString( EgtGetName( nCurrId), '_')
local sName = vNames[#vNames]
if not tHash[sName] then
table.insert( tThresholds, { nType = nBottomType, sName = sName})
tHash[sName] = 1
end
end
nCurrId = EgtGetNext( nCurrId)
end
return tThresholds
end
local function GetProfileThresholdsList()
local tThresholds = {}
if _G.sProfile == WDG.PROFILE then
-- se profilo corrente
local nProfileGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nFrameGrp = EgtGetFirstNameInGroup( nProfileGrp, WIN_FRAME)
tThresholds = FindThresholds( nFrameGrp)
else
-- importo temporaneamente il profilo
local nLastId = EgtGetLastInGroup( GDB_ID.ROOT)
local bOk = EgtInsertFile( _G.sProfilePath .. '\\' .. WDG.PROFILE .. '.nge')
local nCurrId = EgtGetNext( nLastId or GDB_ID.NULL) or EgtGetFirstInGroup( GDB_ID.ROOT)
while nCurrId do
if EgtGetName( nCurrId) == WIN_FRAME then
tThresholds = FindThresholds( nCurrId)
end
-- passo al successivo e cancello il corrente
local nOldId = nCurrId
nCurrId = EgtGetNext( nCurrId)
EgtErase( nOldId)
end
end
WDG.THRESHOLDSLIST = tThresholds
end
_G.GetProfileThresholdsList = GetProfileThresholdsList
----------------------------------------------------------------------------------
local function WinCreate_CreateFrame()
local JointList = GetVariableList( 'JOINT')
WDG.AREAID = WinCreate.CreateFrame( WDG.FRAMETYPE, JointList, WDG.WIDTH, WDG.HEIGHT, WDG.HEIGHT2)
CleanVariableList('JOINT')
end
_G.WinCreate_CreateFrame = WinCreate_CreateFrame
----------------------------------------------------------------------------------
local function WinCreate_AddSash()
local JointList = GetVariableList( 'JOINT')
WDG.AREAID = WinCreate.AddSash( WDG.AREAID, JointList, WDG.SASHTYPE, WDG.OPENINGTYPE)
CleanVariableList( 'JOINT')
end
_G.WinCreate_AddSash = WinCreate_AddSash
----------------------------------------------------------------------------------
local function WinCreate_AddHardware()
WinCreate.AddHardware( WDG.AREAID, WDG.FAVOURITE, WDG.HANDLE)
end
_G.WinCreate_AddHardware = WinCreate_AddHardware
----------------------------------------------------------------------------------
local function WinCreate_AddFill()
WDG.AREAID = WinCreate.AddFill( WDG.AREAID, WDG.FILLTYPE)
end
_G.WinCreate_AddFill = WinCreate_AddFill
----------------------------------------------------------------------------------
local function WinCreate_AddBottomRail()
WinCreate.AddBottomRail( WDG.AREAID, WDG.NBR)
end
_G.WinCreate_AddBottomRail = WinCreate_AddBottomRail
----------------------------------------------------------------------------------
local function WinCreate_AddThreshold()
WinCreate.AddThreshold( WDG.AREAID, WDG.THRESHOLDPROFILE)
end
_G.WinCreate_AddThreshold = WinCreate_AddThreshold
----------------------------------------------------------------------------------
local function WinCreate_AddSplits()
local AreaIndex = 1
while WDG['AREAID' .. AreaIndex] do
WDG['AREAID' .. AreaIndex] = nil
AreaIndex = AreaIndex + 1
end
local PositionList = {}
local PositionIndex = 1
while WDG['POSITION' .. PositionIndex] do
table.insert( PositionList, WDG['POSITION' .. PositionIndex])
PositionIndex = PositionIndex + 1
end
local AreaList = WinCreate.AddSplits(WDG.AREAID, WDG.SPLITORIENTATION, WDG.MEASURETYPE, PositionList, WDG.PROPORTION, WDG.SPLITTYPE)
for AreaIndex = 1, #AreaList do
WDG['AREAID' .. AreaIndex] = AreaList[ AreaIndex]
end
PositionIndex = 1
while WDG['POSITION' .. PositionIndex] do
WDG['POSITION' .. PositionIndex] = nil
PositionIndex = PositionIndex + 1
end
end
_G.WinCreate_AddSplits = WinCreate_AddSplits
----------------------------------------------------------------------------------
local function WinCreate_AddGridSplits()
local AreaIndex = 1
while WDG['AREAID' .. AreaIndex] do
WDG['AREAID' .. AreaIndex] = nil
AreaIndex = AreaIndex + 1
end
local PositionListVert = {}
local PositionIndex = 1
while WDG['POSITION_VERT' .. PositionIndex] do
table.insert( PositionListVert, WDG['POSITION' .. PositionIndex])
PositionIndex = PositionIndex + 1
end
local PositionListHoriz = {}
PositionIndex = 1
while WDG['POSITION_HORIZ' .. PositionIndex] do
table.insert( PositionListHoriz, WDG['POSITION' .. PositionIndex])
PositionIndex = PositionIndex + 1
end
local AreaList = WinCreate.AddGridSplits(WDG.AREAID, WDG.MEASURETYPE, PositionListVert, PositionListHoriz, WDG.STARTVERTICAL, WDG.SPLITTYPE)
for AreaIndex = 1, #AreaList do
WDG['AREAID' .. AreaIndex] = AreaList[ AreaIndex]
end
PositionIndex = 1
while WDG['POSITION_VERT' .. PositionIndex] do
WDG['POSITION_VERT' .. PositionIndex] = nil
PositionIndex = PositionIndex + 1
end
PositionIndex = 1
while WDG['POSITION_HORIZ' .. PositionIndex] do
WDG['POSITION_HORIZ' .. PositionIndex] = nil
PositionIndex = PositionIndex + 1
end
end
_G.WinCreate_AddGridSplits = WinCreate_AddGridSplits
----------------------------------------------------------------------------------
local function WinCalculate_SetCalcSolid()
WinCalculate.SetCalcSolid( WDG.VALUE)
end
_G.WinCalculate_SetCalcSolid = WinCalculate_SetCalcSolid
----------------------------------------------------------------------------------
local function WinCalculate_SetSimplifiedSolid()
WinCalculate.SetSimplifiedSolid( WDG.VALUE)
end
_G.WinCalculate_SetSimplifiedSolid = WinCalculate_SetSimplifiedSolid
----------------------------------------------------------------------------------
local function WinCalculate_SetCalcPreview()
WinCalculate.SetCalcPreview( WDG.VALUE)
end
_G.WinCalculate_SetCalcPreview = WinCalculate_SetCalcPreview
----------------------------------------------------------------------------------
local function WinCalculate_CreatePartFromArea()
WinCalculate.CreatePartFromArea( WDG.FRAMEID)
end
_G.WinCalculate_CreatePartFromArea = WinCalculate_CreatePartFromArea
----------------------------------------------------------------------------------
local function WinCalculate_RecalcSolids()
WinCalculate.RecalcSolids( WDG.FRAMEID)
end
_G.WinCalculate_RecalcSolids = WinCalculate_RecalcSolids
----------------------------------------------------------------------------------
local function WinCalculate_AddHardware()
WDG.HARDWAREKIT_LIST, WDG.HARDWAREPOSITION_LIST = WinCalculate.AddHardware( WDG.FRAMEID)
end
_G.WinCalculate_AddHardware = WinCalculate_AddHardware
----------------------------------------------------------------------------------
local function WinCreate_GetHardwareOptionPath()
WDG.HWDOPTPATH = WinCalculate.AddHardwareForSash( WDG.AREAID, true)
end
_G.WinCreate_GetHardwareOptionPath = WinCreate_GetHardwareOptionPath
----------------------------------------------------------------------------------
local function WinCalculate_AddAccessories()
WinCalculate.AddAccessories( WDG.FRAMEID, WDG.DRAW)
end
_G.WinCalculate_AddAccessories = WinCalculate_AddAccessories
----------------------------------------------------------------------------------
local function WinManage_LoadJwd()
WDG.AREAID = WinManageProject.ReadFromJwd( WDG.JWD)
end
_G.WinManage_LoadJwd = WinManage_LoadJwd
----------------------------------------------------------------------------------
local function WinGetImage()
-- sistemo la vista
EgtSetView( SCE_VD.TOP, false)
EgtZoom( SCE_ZM.ALL, false)
-- salvo immagine
EgtGetImage( SCE_SM.SH, EgtStdColor('WHITE'), EgtStdColor('WHITE'), 1920, 1080, WDG.FILE)
end
_G.WinGetImage = WinGetImage
----------------------------------------------------------------------------------
local function WinGetSvg()
-- sistemo la vista
EgtSetView( SCE_VD.TOP, false)
EgtZoom( SCE_ZM.ALL, false)
-- salvo immagine
EgtExportSvg( WDG.GROUPID, WDG.FILE, EEX_FLT.LEV_SYSTEM + EEX_FLT.MODE_STD + EEX_FLT.STAT_OFF)
end
_G.WinGetSvg = WinGetSvg
----------------------------------------------------------------------------------
local function WinSetAuxGrpStatus()
-- recupero il gruppo aux della ferramenta e accessori e assegno stato
local nAuxGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AUX) or GDB_ID.NULL
EgtSetStatus( nAuxGrp, EgtIf( WDG.AUXSTATUS, GDB_ST.ON, GDB_ST.OFF))
end
_G.WinSetAuxGrpStatus = WinSetAuxGrpStatus
----------------------------------------------------------------------------------
local function WinGetSectionsTotalLenghts()
WDG.SECTIONS_LENGTHS = {} -- array con le sezioni
-- ogni sezione è una tabella con le seguenti chiavi : w = spessore, h = altezza, l = array con le lunghezze dei pezzi di tale sezione
-- scorro tutti i pezzi
local nPartId = EgtGetFirstPart()
while nPartId do
local nPartType = EgtGetInfo( nPartId, WIN_PART_TYPE, 'i') or WIN_PART_TYPES.NULL
if nPartType ~= WIN_PART_TYPES.FILL then
-- recupero il gruppo logs ( per archi) o geo dove sono salvate le dimensioni del pezzo
local nLayerId = EgtGetFirstNameInGroup( nPartId, WIN_LOGS) or EgtGetFirstNameInGroup( nPartId, WIN_GEO) or GDB_ID.NULL
if nLayerId ~= GDB_ID.NULL then
local dWidth = EgtGetInfo( nLayerId, WIN_GEOWIDTH, 'd')
local dHeight = EgtGetInfo( nLayerId, WIN_GEOHEIGHT, 'd')
local dLen = EgtGetInfo( nLayerId, WIN_GEOLEN, 'd')
if dLen then
-- verfico se devo aggiornare sezione già presente o se devo aggiungerla
local bFound = false
for i = 1, #WDG.SECTIONS_LENGTHS do
if ( abs( WDG.SECTIONS_LENGTHS[i].W - dWidth) < GEO.EPS_SMALL and abs( WDG.SECTIONS_LENGTHS[i].H - dHeight) < GEO.EPS_SMALL) then
bFound = true
table.insert( WDG.SECTIONS_LENGTHS[i].L, dLen)
WDG.SECTIONS_LENGTHS[i].TotL = WDG.SECTIONS_LENGTHS[i].TotL + dLen
end
end
if not bFound then
table.insert( WDG.SECTIONS_LENGTHS, { W = dWidth, H = dHeight, L = {dLen}, TotL = dLen})
end
end
end
end
nPartId = EgtGetNextPart( nPartId)
end
end
_G.WinGetSectionsTotalLenghts = WinGetSectionsTotalLenghts
----------------------------------------------------------------------------------
local function WinGetGlassesList()
WDG.GLASSES_LIST = {} -- array dei vetri
-- ogni vetro è una tabella con le seguenti chiavi : bRect = true se rettangolo/false altrimenti, w/l/t sono le tre dimensioni
local nPartId = EgtGetFirstPart()
while nPartId do
local nFillType = EgtGetInfo( nPartId, WIN_FILLTYPE)
if nFillType == WIN_GLASS then
local nLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO)
local bShapeRect = EgtGetInfo( nLayerId, WIN_GLASS_RECT, 'b') or false
local dW = EgtGetInfo( nLayerId, WIN_GEOWIDTH, 'd') or 0
local dL = EgtGetInfo( nLayerId, WIN_GEOHEIGHT, 'd') or 0
local dT = EgtGetInfo( nLayerId, WIN_GLASSTHICKNESS, 'd') or 0
table.insert( WDG.GLASSES_LIST, { Rect = bShapeRect, W = dW, L = dL, T = dT})
end
nPartId = EgtGetNextPart( nPartId)
end
end
_G.WinGetGlassesList = WinGetGlassesList
----------------------------------------------------------------------------------
local function WinCalculate_SetCalcHardwareKit()
WinCalculate.SetCalcHardwareKit( WDG.VALUE)
end
_G.WinCalculate_SetCalcHardwareKit = WinCalculate_SetCalcHardwareKit
----------------------------------------------------------------------------------
local function WinCalculate_SetCalcHardwarePosition()
WinCalculate.SetCalcHardwarePosition( WDG.VALUE)
end
_G.WinCalculate_SetCalcHardwarePosition = WinCalculate_SetCalcHardwarePosition
----------------------------------------------------------------------------------
local function WinCalculate_GetHardwareOptions()
WDG.HARDWAREOPTIONS = WinCalculate.GetHardwareOptions( WDG.AREAID)
end
_G.WinCalculate_GetHardwareOptions = WinCalculate_GetHardwareOptions