DataWindow :

- in WinGetAreaProfiles aggiunta gestione degli split.
This commit is contained in:
SaraP
2026-01-28 15:43:21 +01:00
parent 68425bd133
commit b8b10497a7
4 changed files with 131 additions and 25 deletions
+32 -7
View File
@@ -400,7 +400,7 @@ end
-- funzione che assegna il nome alla curva di split nella sottoarea in base alla sua direzione
local function SetSplitName( nSplitId)
local vtMedia = ( ( EgtEV( nSplitId) - EgtSV( nSplitId)) / 2)
local vtMedia = ( ( EgtEV( nSplitId) + EgtSV( nSplitId)) / 2)
if not vtMedia:normalize() then
vtMedia = EgtSV( nSplitId)
end
@@ -642,6 +642,7 @@ local function CalcSplitCurves( nLayerId, b3OutlineLayer, b3Limit, nSplitType, v
if nSplitCrv then
EgtSetName( nSplitCrv, WIN_SPLIT)
table.insert( vSplitCurves, nSplitCrv)
EgtSetInfo( nSplitCrv, WIN_SPLIT_POSITION, dPosition)
end
end
@@ -657,6 +658,9 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues,
return
end
local nParentOutlineLayerId = EgtGetFirstNameInGroup( nParentAreaId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nParentOutlineLayerId, GDB_BB.STANDARD)
-- creo area di split
local nAreaId = EgtGroup( nParentAreaId)
EgtSetInfo( nAreaId, WIN_AREATYPE, WIN_AREATYPES.SPLIT)
@@ -664,7 +668,11 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues,
if nAreaNbr then
EgtSetInfo( nAreaId, WIN_AREA_NBR, nAreaNbr)
end
EgtSetInfo( nAreaId, WIN_SPLIT_DIR, nSplitType)
EgtSetInfo( nAreaId, WIN_MEASURE_TYPE, vMeasureTypes)
EgtSetInfo( nAreaId, WIN_MEASURE_VALUE, vValues)
EgtSetInfo( nAreaId, WIN_SPLIT_REF_DIM, EgtIf( nSplitType == WIN_SPLITORIENTATION.VERTICAL, b3OutlineLayer:getDimX(), b3OutlineLayer:getDimY()))
-- creo layer per split
local nSplitLayerId = EgtGroup( nAreaId)
EgtSetName( nSplitLayerId, WIN_BASESPLIT)
@@ -674,8 +682,6 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues,
end
-- creo le curve di split
local nParentOutlineLayerId = EgtGetFirstNameInGroup( nParentAreaId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nParentOutlineLayerId, GDB_BB.STANDARD)
local vSplitCurves = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3OutlineLayer, nSplitType, vMeasureTypes, vValues)
-- se non ci sono curve valide cancello tutto ed esco
@@ -710,6 +716,7 @@ function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues,
if nAreaNbr then
EgtSetInfo( nAreaId, WIN_AREA_NBR, nAreaNbr)
end
EgtSetInfo( nAreaId, WIN_GRID_SPLIT, true)
-- copio il contorno dall'area parent e setto opportune corrispondenze sou/child
local nOutlineLayerId = CopyParentOutline( nAreaId, nParentAreaId)
@@ -734,11 +741,20 @@ function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues,
nMainSplitOrientation = WIN_SPLITORIENTATION.HORIZONTAL
vOtherTypes = vVertMeasureTypes
vOtherValues = vVertValues
nOtherSplitOrientation = WIN_SPLITORIENTATION.VERTICAL
nOtherSplitOrientation = WIN_SPLITORIENTATION.VERTICAL
end
-- salvo i dati dello split principale nell'area principale, i dati dello split secondario verranno salvati nelle aree virtuali
EgtSetInfo( nAreaId, WIN_SPLIT_DIR, nMainSplitOrientation)
EgtSetInfo( nAreaId, WIN_MEASURE_TYPE, vMainTypes)
EgtSetInfo( nAreaId, WIN_MEASURE_VALUE, vMainValues)
EgtSetInfo( nAreaId, WIN_SPLIT_REF_DIM, EgtIf( nMainSplitOrientation == WIN_SPLITORIENTATION.VERTICAL, b3OutlineLayer:getDimX(), b3OutlineLayer:getDimY()))
-- calcolo la suddivisione nella direzione principale
local vMainSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3OutlineLayer, nMainSplitOrientation, vMainTypes, vMainValues)
for i = 1, #vMainSplit do
EgtSetInfo( vMainSplit[i], WIN_GRIDSPLIT_ORDER, 0)
end
local vMainAreas = CreateAreasFromSplits( nAreaId, vMainSplit)
-- per ogni area della direzione principale calcolo la suddivisione nella direzione secondaria
@@ -750,6 +766,10 @@ function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues,
-- calcolo gli split nella direzione secondaria
local vOtherSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3Limit, nOtherSplitOrientation, vOtherTypes, vOtherValues)
if #vOtherSplit > 0 then
for j = 1, #vOtherSplit do
EgtSetInfo( vOtherSplit[j], WIN_GRIDSPLIT_ORDER, tostring( i))
end
-- calcolo le aree generate dagli split secondari
local vNewAreas = CreateAreasFromSplits( vMainAreas[i], vOtherSplit)
AreaResult = EgtJoinTables( AreaResult, vNewAreas)
end
@@ -760,9 +780,14 @@ function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues,
EgtRelocateGlob( AreaResult[i], nAreaId)
EgtSetName( AreaResult[i], WIN_AREA .. EgtNumToString( i))
end
-- le aree dello split principale diventano aree virtuali ausiliarie per i conti
-- le aree generate dallo split principale diventano aree virtuali ausiliarie per i conti
-- riporto come info quelle legate allo split secondario
for i = 1, #vMainAreas do
EgtSetName( vMainAreas[i], WIN_VIRTUAL_AREA)
EgtSetInfo( vMainAreas[i], WIN_SPLIT_DIR, nOtherSplitOrientation)
EgtSetInfo( vMainAreas[i], WIN_MEASURE_TYPE, vOtherTypes)
EgtSetInfo( vMainAreas[i], WIN_MEASURE_VALUE, vOtherValues)
EgtSetInfo( vMainAreas[i], WIN_SPLIT_REF_DIM, EgtIf( nOtherSplitOrientation == WIN_SPLITORIENTATION.VERTICAL, b3OutlineLayer:getDimX(), b3OutlineLayer:getDimY()))
end
return AreaResult