DataWindow :

- se non definita altezza maniglia, richiesta delle opzioni della ferramenta per ricavarne valore di default
- aggiunta forma dell'anta.
This commit is contained in:
SaraP
2025-10-21 10:04:35 +02:00
parent 0173df493d
commit 407e32d6b0
4 changed files with 200 additions and 190 deletions
+13
View File
@@ -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,
+98 -183
View File
@@ -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)
+62 -1
View File
@@ -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 .. ')')
+27 -6
View File
@@ -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