Aggiunto gestione Split Grid

This commit is contained in:
Annamaria Sassi
2025-09-04 15:09:58 +02:00
parent 199a6e30a5
commit 269cf703dd
3 changed files with 122 additions and 15 deletions
+66
View File
@@ -287,6 +287,10 @@ function WinCreate.AddSplit( nAreaLayerId, SplitType, MeasureType, nPosition, nP
elseif MeasureType == WIN_MEASURE.PERCENTAGE then
nCalcPosition = b3OutlineLayer:getDimY() * nPosition
end
if nCalcPosition > b3OutlineLayer:getDimY() - GEO.EPS_SMALL then
EgtErase( nTempSplitLayerId)
return
end
nTotSplitId = EgtLine( nTempSplitLayerId, b3OutlineLayer:getMin() + Y_AX() * nCalcPosition, b3OutlineLayer:getMin() + Y_AX() * nCalcPosition + X_AX() * b3OutlineLayer:getDimX())
end
-- calcolo split
@@ -307,6 +311,9 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList
EgtSetInfo( nResArea2, WIN_PRJ_ORIGSPLIT, nAreaLayerId)
end
nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion, nSplitType)
if not nResArea2 then
return
end
table.insert( AreaList, nResArea1)
if nIndex == #PositionList then
table.insert( AreaList, nResArea2)
@@ -321,6 +328,9 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList
EgtSetInfo( nResArea2, WIN_PRJ_ORIGSPLIT, nAreaLayerId)
end
nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion - dAddPosition, nSplitType)
if not nResArea2 then
return
end
table.insert( AreaList, nResArea1)
if nIndex == #PositionList then
table.insert( AreaList, nResArea2)
@@ -338,6 +348,9 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList
sChildAreas = sChildAreas .. nResArea2 .. EgtIf( nIndex < #PositionList, ',', '')
end
nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, EgtIf( nIndex == 1, PositionList[nIndex], PositionList[nIndex] / ( 1 - dAddPosition)), nProportion, nSplitType)
if not nResArea2 then
return
end
table.insert( AreaList, nResArea1)
if nIndex == #PositionList then
table.insert( AreaList, nResArea2)
@@ -349,6 +362,59 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList
return AreaList
end
----------------------------------------------------------------------------------
-- funzione che crea tagli split grid
function WinCreate.AddGridSplits( nAreaLayerId, MeasureType, PositionListVert, PositionListHoriz, bStartVertical, nSplitType)
local AreaResult = {}
if bStartVertical then
local nProportionVert = 0
if MeasureType == WIN_MEASURE.PROPORTIONAL then
for i = 1, # PositionListVert do
nProportionVert = nProportionVert + PositionListVert[i]
end
end
local AreaList = WinCreate.AddSplits( nAreaLayerId, WIN_SPLITORIENTATION.VERTICAL, MeasureType, PositionListVert, nProportionVert, nSplitType)
-- recupero contorno area precedente
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
local HorizAbs = {}
local dPositionCum = 0
local nProportionHoriz = 0
if MeasureType == WIN_MEASURE.PROPORTIONAL then
for i = 1, # PositionListHoriz do
nProportionHoriz = nProportionHoriz + PositionListHoriz[i]
end
end
for i = 1, #PositionListHoriz do
if MeasureType == WIN_MEASURE.ABSOLUT then
HorizAbs[i] = PositionListHoriz[i]
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
HorizAbs[i] = b3OutlineLayer:getDimY() / ( nProportion - dPositionCum) * PositionListHoriz[i]
dPositionCum = dPositionCum + PositionListHoriz[i]
elseif MeasureType == WIN_MEASURE.PERCENTAGE then
-- PositionCum = dPositionCum + PositionListHoriz[i]
-- HorizAbs[i] = b3OutlineLayer:getDimY() * dPositionCum
HorizAbs[i] = b3OutlineLayer:getDimY() * PositionListHoriz[i]
end
end
for i = 1, #AreaList do
local AreaTemp = WinCreate.AddSplits( AreaList[i], WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, HorizAbs, nProportion, nSplitType) or {}
for j = 1, #AreaTemp do
table.insert( AreaResult, AreaTemp[j])
end
end
else
local AreaList = WinCreate.AddSplits( nAreaLayerId, WIN_SPLITORIENTATION.HORIZONTAL, MeasureType, PositionListHoriz, nProportion, nSplitType)
for i = 1, #AreaList do
local AreaTemp = WinCreate.AddSplits( AreaList[i], WIN_SPLITORIENTATION.VERTICAL, MeasureType, PositionListVert, nProportion, nSplitType) or {}
for j = 1, #AreaTemp do
table.insert( AreaResult, AreaTemp[j])
end
end
end
return AreaResult
end
----------------------------------------------------------------------------------
-- funzione che assegna il nome alla curva di split nella sottoarea in base alla sua direzione
local function SetSplitName( nSplitId)