From 407e32d6b0b6e3c331d191b67c7321a0134abb83 Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 21 Oct 2025 10:04:35 +0200 Subject: [PATCH] DataWindow : - se non definita altezza maniglia, richiesta delle opzioni della ferramenta per ricavarne valore di default - aggiunta forma dell'anta. --- Designing/WinConst.lua | 13 ++ Designing/WinLib/WinCalculate.lua | 281 +++++++++++------------------- Designing/WinLib/WinCreate.lua | 63 ++++++- Designing/WinProject.lua | 33 +++- 4 files changed, 200 insertions(+), 190 deletions(-) diff --git a/Designing/WinConst.lua b/Designing/WinConst.lua index eac8888..29bb587 100644 --- a/Designing/WinConst.lua +++ b/Designing/WinConst.lua @@ -29,6 +29,19 @@ WIN_FRAME_TYPES = { TRG = 7, } +-- forme per anta +WIN_SASH_SHAPE = 'SashShape' +WIN_SASH_SHAPES = { + RECT = 'R', + TRAP = 'T', + ROUND_ARC = 'AS', + SEGMENTAL_ARC = 'AR', + SEMI_ROUND_ARC = 'SS', + SEMI_SEGMENTAL_ARC = 'SR', + CIRCLE = 'C', + GENERIC = 'G', +} + -- direzioni di split WIN_SPLITORIENTATION = { VERTICAL = 1, diff --git a/Designing/WinLib/WinCalculate.lua b/Designing/WinLib/WinCalculate.lua index 115f9dd..d991939 100644 --- a/Designing/WinLib/WinCalculate.lua +++ b/Designing/WinLib/WinCalculate.lua @@ -22,6 +22,11 @@ require( 'WinConst') _G.package.loaded.JSON = nil local JSON = require( 'JSON') +_G.package.loaded.XML = nil +local XML = require( 'xml2lua') +_G.package.loaded.XMLHandler = nil +local XMLHandler = require( 'xml2lua_tree') + local s_dDowelTol = 1 local s_dSimplSolidApprox = 0.2 -- approssimazione lineare nel caso di solidi semplificati @@ -4989,6 +4994,40 @@ local function DrawHandle( nOutlineId, sHandleSide, dHandleH, nLayerId, bSlide, end end +--------------------------------------------------------------------- +local function GetHandleHeight( nAreaId) + + -- verifico se è definita tra le opzioni + local vOptions = EgtGetInfo( nAreaId, WIN_HDW_OPTIONS, 'vs') or {} + for i = 1, #vOptions do + local vString = EgtSplitString( vOptions[i], '=') + if #vString == 2 and vString[1] == WIN_HDW_HANDLE_HEIGHT then + local dVal = tonumber( vString[2]) + return dVal + end + end + + -- chiedo il file di opzioni dalla ferramenta. Se viene fatto solo il calcolo delle opzioni Hman viene lasciato a 0, per avere valore di default + -- è necessario fargli calcolare anche altro ( e.g. lista ferramenta) + local _, _, tOptions = WinCalculate.AddHardware( nAreaId, false, true, false, true) + if #tOptions > 0 then + -- lettura della stringa xml delle opzioni + local handler = XMLHandler:new() + local parser = XML.parser( handler) + parser:parse( tOptions[1]) + local tabOptions = handler.root + -- cerco parametro altezza maniglia + for i = 1, #tabOptions['ParametriOpzioni']['Parametri'] do + if tabOptions['ParametriOpzioni']['Parametri'][i]['NomeParametro'] == WIN_HDW_HANDLE_HEIGHT then + local sHandleH = tabOptions['ParametriOpzioni']['Parametri'][i]['ValoreCorrente'] + return tonumber( sHandleH) + end + end + end + + return 500 -- restituisco valore di default +end + --------------------------------------------------------------------- -- funzione che disegna la ferramenta local function DrawSashHardware( nAreaId, nRefAreaId, nLayerId, bPreview) @@ -5040,15 +5079,7 @@ local function DrawSashHardware( nAreaId, nRefAreaId, nLayerId, bPreview) local sHandleSide = EgtIf( bLeftSlide, 'Sx', 'Dx') -- recupero altezza maniglia dalle opzioni - local dHandleH = 400 - local vOptions = EgtGetInfo( nRefAreaId, WIN_HDW_OPTIONS, 'vs') or {} - for i = 1, #vOptions do - local vString = EgtSplitString( vOptions[i], '=') - if #vString == 2 and vString[1] == WIN_HDW_HANDLE_HEIGHT then - dHandleH = tonumber( vString[2]) - break - end - end + local dHandleH = GetHandleHeight( nRefAreaId) DrawHandle( nOutlineId, sHandleSide, dHandleH, nLayerId, true, bPreview) @@ -5060,17 +5091,8 @@ local function DrawSashHardware( nAreaId, nRefAreaId, nLayerId, bPreview) local nLeftId = EgtGetFirstNameInGroup( nOutlineLayId, WIN_LEFT) local nRightId = EgtGetFirstNameInGroup( nOutlineLayId, WIN_RIGHT) - -- recupero dati della maniglia + -- recupero lato maniglia local sHandleSide = EgtGetInfo( nRefAreaId, WIN_HDW_HANDLE) - local dHandleH = 500 - local vOptions = EgtGetInfo( nRefAreaId, WIN_HDW_OPTIONS, 'vs') or {} - for i = 1, #vOptions do - local vString = EgtSplitString( vOptions[i], '=') - if #vString == 2 and vString[1] == WIN_HDW_HANDLE_HEIGHT then - dHandleH = tonumber( vString[2]) - break - end - end -- cerniere if nSashType == WIN_SASHTYPES.INACTIVE or nSashType == WIN_SASHTYPES.INACTIVE_OUT or @@ -5091,6 +5113,8 @@ local function DrawSashHardware( nAreaId, nRefAreaId, nLayerId, bPreview) -- maniglia if nSashType == WIN_SASHTYPES.ACTIVE or nSashType == WIN_SASHTYPES.ACTIVE_IN or nSashType == WIN_SASHTYPES.NULL then + -- recupero altezza maniglia + local dHandleH = GetHandleHeight( nRefAreaId) if sHandleSide == 'Sx' then DrawHandle( nRightId, sHandleSide, dHandleH, nLayerId, false, bPreview) else @@ -5442,7 +5466,7 @@ end --------------------------------------------------------------------- -- funzione che aggiunge l'hardware -function WinCalculate.AddHardwareForSash( nFrameId, bMachiningList, bHardwareList, bPositionList, bOptionList, OutputKitList, OutputPositionList, OutputOptionList) +local function AddHardwareForSash( nFrameId, nReturnMode, OutputKitList, OutputPositionList, OutputOptionList) -- cerco ed indicizzo ante del serramento local SashList = {} SearchSash( nFrameId, SashList) @@ -5545,21 +5569,6 @@ function WinCalculate.AddHardwareForSash( nFrameId, bMachiningList, bHardwareLis sText = sText .. vOptions[i] .. '\n' end - -- Calcolo codice di ritorno - local nReturnMode = 0 - if bHardwareList then - nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.HARDWARELIST - end - if bPositionList then - nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.POSITIONLIST - end - if bMachiningList then - nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.MACHININGLIST - end - if bOptionList then - nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.OPTIONLIST - end - -- Canali local QuestionChannel = "EgwHardwareQuestion" local AnswerChannel = "EgwHardwareAnswer" .. os.time() @@ -5580,36 +5589,36 @@ function WinCalculate.AddHardwareForSash( nFrameId, bMachiningList, bHardwareLis local bOk = EgtRedisAsyncPublish( QuestionChannel, JsonQuestion) local AnswerArgs if bOk then - EgtOutLog('Messaggio Redis pubblicato:' .. QuestionChannel .. ' ' .. JsonQuestion) + -- EgtOutLog( 'Messaggio Redis pubblicato:' .. QuestionChannel .. ' ' .. JsonQuestion) + EgtOutLog( 'Messaggio Redis pubblicato') local bOk, Answer = EgtRedisAsyncSubscribeOneMessage( AnswerChannel, 1500) if bOk then - EgtOutLog('Risposta Redis ricevuta:' .. Answer) + -- EgtOutLog( 'Risposta Redis ricevuta:' .. Answer) + EgtOutLog( 'Risposta Redis ricevuta') local JsonAnswer = JSON:decode( Answer) AnswerArgs = JsonAnswer['Args'] AnswerArgs.OutputChannel = nil else - local sErrorMsg = 'Errore! Risposta dal canale calcolo hardware Agb non arrivata!' - EgtOutLog(sErrorMsg) - return 0, { Error = sErrorMsg} + EgtOutLog( 'Errore! Risposta dal canale calcolo hardware Agb non arrivata!') + return end else - local sErrorMsg = 'Errore! Pubblicazione sul canale calcolo hardware Agb fallita!' - EgtOutLog(sErrorMsg) - return 0, { Error = sErrorMsg} + EgtOutLog( 'Errore! Pubblicazione sul canale calcolo hardware Agb fallita!') + return end - if bHardwareList then - local tHardware= JSON:decode( AnswerArgs.HardwareList) + if ( nReturnMode & WIN_HDW_RETURNMODE.HARDWARELIST) ~= 0 then + local tHardware = JSON:decode( AnswerArgs.HardwareList) table.insert( OutputKitList, tHardware) end - if bPositionList then - local tPosition= JSON:decode( AnswerArgs.PositionList) + if ( nReturnMode & WIN_HDW_RETURNMODE.POSITIONLIST) ~= 0 then + local tPosition = JSON:decode( AnswerArgs.PositionList) table.insert( OutputPositionList, tPosition) end - if bMachiningList then - local tMachining= JSON:decode( AnswerArgs.MachiningList) + if ( nReturnMode & WIN_HDW_RETURNMODE.MACHININGLIST) ~= 0 then + local tMachining = JSON:decode( AnswerArgs.MachiningList) CalcHdwMachining( tMachining, SashList) - --disegno la ferramenta + -- disegno la ferramenta if s_bCalcSolid then -- recupero o creo il gruppo per disegno ferramenta local nAuxLayerId = GetAuxLayer() @@ -5618,157 +5627,63 @@ function WinCalculate.AddHardwareForSash( nFrameId, bMachiningList, bHardwareLis end end end - if bOptionList then + if ( nReturnMode & WIN_HDW_RETURNMODE.OPTIONLIST) ~= 0 then table.insert( OutputOptionList, AnswerArgs.OptionList) end end --------------------------------------------------------------------- --- funzione che crea stringa per richiesta hardware AGB -function WinCalculate.GetAGBSashDescription( nFrameId) - -- cerco ed indicizzo ante del serramento - local SashList = {} - SearchSash( nFrameId, SashList) - - -- ordino per X e Y - local function compareXY(a,b) - if abs( a.ptCenter:getX() - b.ptCenter:getX()) < GEO.EPS_SMALL then - return a.ptCenter:getY() < b.ptCenter:getY() - else - return a.ptCenter:getX() < b.ptCenter:getX() - end - end - table.sort( SashList, compareXY) - - -- correggo nomi Frame del telaio in base all'ordinamento delle ante - for nIndex = 1, #SashList do - for nFrameIndex = 1, #SashList[nIndex].Frame do - local nFrameId = SashList[nIndex].Frame[nFrameIndex] - local sName = EgtGetName( nFrameId) - EgtSetName( nFrameId, nIndex .. '.' .. sName) - end - end - - -- recupero preferito della ferramenta - --local nFavourite = EgtGetInfo( nFrameId, WIN_HDW_FAVOURITE) - --if bOnlyRequest then - nFavourite = WDG.HDWFAVOURITE - --end - if not nFavourite or nFavourite == WIN_HDW_NULL then - EgtOutLog('Warning! No hardware favourite set!') - return - end - local sHandle = EgtGetInfo( nFrameId, WIN_HDW_HANDLE) - if bOnlyRequest then - sHandle = WDG.HDWHANDLE - end - if not sHandle then - EgtOutLog('Warning! No hardware handle set!') - return - end - - local sText = 'S_NAME=' .. nFavourite .. '\n' .. - 'RECORDID=15A' .. '\n' - - -- recupero il tipo di apertura - local nOpeningType = WIN_OPENING_TYPES.NULL - if #SashList > 0 then - nOpeningType = EgtGetInfo( SashList[1].nAreaId, WIN_OPENING_TYPE, 'i') - end - -- recupero se scorrevole - local bSlide = EgtGetInfo( nFrameId, WIN_SLIDE_WINDOW, 'b') or false - - if bSlide then - -- le dimensioni per alzante scorrevole sono quelle del telaio - local nOutlineLayId = EgtGetFirstInGroup( nFrameId, WIN_AREAOUTLINE) - local nBottomId = EgtGetFirstNameInGroup( nOutlineLayId, WIN_BOTTOM) - local dMet = EgtCurveLength( nBottomId) - local nLeftId = EgtGetFirstNameInGroup( nOutlineLayId, WIN_LEFT) - local dHet = EgtCurveLength( nLeftId) - sText = sText .. 'MET=' .. tostring( dMet) .. '\n' - sText = sText .. 'HET=' .. tostring( dHet) .. '\n' - - else - if #SashList >= 1 and abs( SashList[1].LHeight - SashList[1].RHeight) < GEO.EPS_SMALL then - sText = sText .. 'HBB=' .. tostring( SashList[1].LHeight) .. '\n' - else - for nSashIndex = 1, #SashList do - if nSashIndex == 1 then - sText = sText .. 'HBB_sx=' .. tostring( SashList[nSashIndex].LHeight) .. '\n' - else - sText = sText .. 'HBB_' .. tostring( nSashIndex - 1) .. 'B=' .. tostring( SashList[nSashIndex].LHeight) .. '\n' - end - if nSashIndex == #SashList then - sText = sText .. 'HBB_dx=' .. tostring( SashList[nSashIndex].RHeight) .. '\n' - else - sText = sText .. 'HBB_' .. tostring( nSashIndex) .. '=' .. tostring( SashList[nSashIndex].RHeight) .. '\n' - end - end - end - - if #SashList == 1 then - sText = sText .. 'LBB=' .. tostring( SashList[1].BWidth) .. '\n' - if SashList[1].BCArrow then - sText = sText .. 'FRECCIA_1=' .. tostring( SashList[1].BCArrow) .. '\n' - end - else - for nSashIndex = 1, #SashList do - sText = sText .. 'LBB' .. nSashIndex .. '=' .. tostring( SashList[nSashIndex].BWidth) .. '\n' - if SashList[nSashIndex].BCArrow then - sText = sText .. 'FRECCIA_' .. nSashIndex .. '=' .. tostring( SashList[nSashIndex].BCArrow) .. '\n' - end - end - end - end - - sText = sText .. 'FINESTRAPORTAFINESTRA=Finestra' .. '\n' .. - 'Q=1' .. '\n' - - -- opzione manoserramento ( non per vasistas altrimenti sovrascrive l'opzione) - if nOpeningType ~= WIN_OPENING_TYPES.TILTONLY_TOP then - sText = sText .. 'MANOSERRAMENTO=' .. sHandle .. '\n' - end - - local vOptions = EgtGetInfo( nFrameId, WIN_HDW_OPTIONS, 'vs') or {} - for i = 1, #vOptions do - sText = sText .. vOptions[i] .. '\n' - end - return sText -end - ---------------------------------------------------------------------- --- funzione che aggiunge l'hardware -function WinCalculate.AddHardware( nAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList) - --local bRedisConnect = EgtRedisAsyncConnect( ENG.Param2) - local bRedisConnect = EgtRedisAsyncConnect( 'redis.ufficio:26379, serviceName=devel, DefaultDatabase=6, keepAlive=180, connectTimeout=15000, syncTimeout=15000, asyncTimeout=15000, abortConnect=false, ssl=false, allowAdmin=true') - if not bRedisConnect then - EgtOutLog('Errore! Impossibile connettersi con il server Redis dal Lua!') - end - - local OutputKitList = {} - local OutputPositionList = {} - local OutputOptionList ={} - WinCalculate.AddHardwareRec( nAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList, OutputKitList, OutputPositionList, OutputOptionList) - EgtRedisAsyncDisconnect() - return OutputKitList, OutputPositionList, OutputOptionList -end - -function WinCalculate.AddHardwareRec( nAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList, OutputKitList, OutputPositionList, OutputOptionList) +local function AddHardwareRec( nAreaId, nReturnMode, OutputKitList, OutputPositionList, OutputOptionList) if EgtExistsInfo( nAreaId, WIN_HDW_FAVOURITE) then -- se area ha un preferito definito allora devo calcolare la ferramenta sulle sue ante - return WinCalculate.AddHardwareForSash( nAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList, OutputKitList, OutputPositionList, OutputOptionList) + return AddHardwareForSash( nAreaId, nReturnMode, OutputKitList, OutputPositionList, OutputOptionList) else -- verifico se ci sono sotto-aree local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREA .. '*') while nChildAreaId do -- lancio verifica di quell'area - WinCalculate.AddHardwareRec( nChildAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList, OutputKitList, OutputPositionList, OutputOptionList) + AddHardwareRec( nChildAreaId, nReturnMode, OutputKitList, OutputPositionList, OutputOptionList) nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREA .. '*') end end end +--------------------------------------------------------------------- +-- funzione che aggiunge l'hardware +function WinCalculate.AddHardware( nAreaId, bMachiningList, bHardwareList, bPositionList, bOptionList) + -- connessione a Redis + local bRedisConnect = EgtRedisAsyncConnect( 'redis.ufficio:26379, serviceName=devel, DefaultDatabase=6, keepAlive=180, connectTimeout=15000, syncTimeout=15000, asyncTimeout=15000, abortConnect=false, ssl=false, allowAdmin=true') + if not bRedisConnect then + EgtOutLog('Errore! Impossibile connettersi con il server Redis dal Lua!') + end + + -- calcolo codice di ritorno, i.e. tipologie di conti da fare sulla ferramenta ( e.g calcolo lavorazioni, calcolo lista ferramenta, ...) + local nReturnMode = 0 + if bMachiningList then + nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.MACHININGLIST + end + if bHardwareList then + nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.HARDWARELIST + end + if bPositionList then + nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.POSITIONLIST + end + if bOptionList then + nReturnMode = nReturnMode + WIN_HDW_RETURNMODE.OPTIONLIST + end + + local OutputKitList = {} + local OutputPositionList = {} + local OutputOptionList = {} + AddHardwareRec( nAreaId, nReturnMode, OutputKitList, OutputPositionList, OutputOptionList) + + EgtRedisAsyncDisconnect() + + return OutputKitList, OutputPositionList, OutputOptionList +end + + --------------------------------------------------------------------- -- funzione che disegna l'hardware local function DrawHardware( nAreaId, nAuxLayerId) diff --git a/Designing/WinLib/WinCreate.lua b/Designing/WinLib/WinCreate.lua index 94e5c17..b3c66e8 100644 --- a/Designing/WinLib/WinCreate.lua +++ b/Designing/WinLib/WinCreate.lua @@ -221,6 +221,62 @@ end ---------------------------------------------------------------------------------- -------------------------------------- ANTA -------------------------------------- +---------------------------------------------------------------------------------- +-- funzione che identifica la forma dell'anta/gruppo di ante +local function IdentifySashShape( nAreaId, nOutlineLayerId) + + local vOutlines = EgtGetAllInGroup( nOutlineLayerId) + local nCompoId = EgtCurveCompo( nOutlineLayerId, vOutlines, false) + + -- verifico se trapezio + local bTrap, ptOrig, vtB1, vtE1, vtB2 = EgtCurveIsATrapezoid( nCompoId) + if bTrap then + -- verifico se rettangolo controllando se lati sono paralleli + local vtE2 = vtB1 + vtE1 - vtB2 + if AreSameOrOppositeVectorApprox( vtE1, vtE2) then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.RECT) + else + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.TRAP) + end + + else + -- verifico se cerchio + local bCircle = EgtCurveIsACircle( nCompoId) + if bCircle then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.CIRCLE) + + -- verifico se forma con arco + elseif #vOutlines == 4 and EgtGetType( vOutlines[3]) == GDB_TY.CRV_ARC then + local dAngCenter = EgtArcAngCenter( vOutlines[3]) + if abs( dAngCenter - 180) < GEO.EPS_SMALL then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.ROUND_ARC) + else + if abs( EgtCurveLength( vOutlines[2]) - EgtCurveLength( vOutlines[4])) < GEO.EPS_SMALL then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.SEGMENTAL_ARC) + else + -- verifico se metà di arco a tutto sesto o ribassato + if abs( dAngCenter - 90) < GEO.EPS_SMALL then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.SEMI_ROUND_ARC) + else + local ptS = EgtSP( vOutlines[3]) + local ptE = EgtEP( vOutlines[3]) + local ptC = EgtCP( vOutlines[3]) + if abs( ptS:getX() - ptC:getX()) < GEO.EPS_SMALL or abs( ptE:getX() - ptC:getX()) < GEO.EPS_SMALL then + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.SEMI_SEGMENTAL_ARC) + else + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.GENERIC) + end + end + end + end + else + EgtSetInfo( nAreaId, WIN_SASH_SHAPE, WIN_SASH_SHAPES.GENERIC) + end + end + + EgtErase( nCompoId) +end + ---------------------------------------------------------------------------------- -- funzione che aggiunge una anta function WinCreate.AddSash( nParentAreaId, vJoints, nOpeningType, nAreaNbr) @@ -237,7 +293,7 @@ function WinCreate.AddSash( nParentAreaId, vJoints, nOpeningType, nAreaNbr) EgtSetInfo( nAreaId, WIN_AREATYPE, WIN_AREATYPES.SASH) -- copio outline dall'area parent local nOutlineLayerId = CopyParentOutline( nAreaId, nParentAreaId) - -- imposto tipo giunzioni + IdentifySashShape( nAreaId, nOutlineLayerId) EgtSetInfo( nOutlineLayerId, WIN_JOINTS, vJoints) -- imposto apertura se presente if nOpeningType then @@ -263,6 +319,11 @@ function WinCreate.AddSashGroup( nParentAreaId, nMeasureType, vDimensions, vJoin -- creo gli split di tipo french local vAreas = WinCreate.AddSplits( nParentAreaId, WIN_SPLITORIENTATION.VERTICAL, nMeasureType, vDimensions, true, nAreaNbr) + -- identifico la forma del gruppo di ante + local nAreaSplit = EgtGetParent( vAreas[1]) + local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaSplit, WIN_AREAOUTLINE) + IdentifySashShape( nAreaSplit, nOutlineLayerId) + -- trasformo le aree risultanti ( che sono null) nelle aree dell'anta settando le info opportune for i = 1, #vAreas do EgtSetName( vAreas[i], EgtGetName( vAreas[i]) .. '(' .. WIN_SASH .. ')') diff --git a/Designing/WinProject.lua b/Designing/WinProject.lua index 957d88b..3948335 100644 --- a/Designing/WinProject.lua +++ b/Designing/WinProject.lua @@ -245,12 +245,6 @@ local function WinCalculate_AddHardware() 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) @@ -347,3 +341,30 @@ local function WinGetGlassesList() end _G.WinGetGlassesList = WinGetGlassesList +---------------------------------------------------------------------------------- +local function WinGetSashShape() + -- recupero l'area richiesta + local vStack = { EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AREA .. '*')} + local nAreaId + local i = 1 + while vStack[i] do + local nAreaNbr = EgtGetInfo( vStack[i], WIN_AREA_NBR, 'i') or -1 + if nAreaNbr == WDG.AREANBR then + nAreaId = vStack[i] + break + else + -- ricerco nelle sue sottoaree + local vChildren = EgtGetNameInGroup( vStack[i], WIN_AREA .. '*') + vStack = EgtJoinTables( vStack, vChildren) + end + i = i + 1 + end + + -- se non l'ho trovata errore + if not nAreaId then + return + end + + WDG.SASHSHAPE = EgtGetInfo( nAreaId, WIN_SASH_SHAPE) +end +_G.WinGetSashShape = WinGetSashShape \ No newline at end of file