-- -- 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 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() 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) end end if not bFound then table.insert( WDG.SECTIONS_LENGTHS, { W = dWidth, H = dHeight, L = {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