DataWindow :
- nella creazione degli split aggiunto measure type per ogni valore.
This commit is contained in:
@@ -304,7 +304,7 @@ local function IdentifySashShape( nAreaId, nOutlineLayerId)
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che aggiunge una anta
|
||||
-- funzione che aggiunge una singola anta
|
||||
function WinCreate.AddSash( nParentAreaId, vJoints, nOpeningType, nAreaNbr)
|
||||
|
||||
-- se già presente area errore
|
||||
@@ -335,7 +335,7 @@ end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che aggiunge un gruppo di ante
|
||||
function WinCreate.AddSashGroup( nParentAreaId, nMeasureType, vDimensions, vJoints, vSashTypes, vOpeningTypes, nAreaNbr, vSashNbrs)
|
||||
function WinCreate.AddSashGroup( nParentAreaId, vMeasureTypes, vDimensions, vJoints, vSashTypes, vOpeningTypes, nAreaNbr, vSashNbrs)
|
||||
|
||||
-- se già presente sottoarea errore
|
||||
if EgtGetFirstNameInGroup( nParentAreaId, WIN_AREA .. '*') then
|
||||
@@ -343,7 +343,7 @@ function WinCreate.AddSashGroup( nParentAreaId, nMeasureType, vDimensions, vJoin
|
||||
end
|
||||
|
||||
-- creo gli split di tipo french
|
||||
local vAreas = WinCreate.AddSplits( nParentAreaId, WIN_SPLITORIENTATION.VERTICAL, nMeasureType, vDimensions, true, nAreaNbr)
|
||||
local vAreas = WinCreate.AddSplits( nParentAreaId, WIN_SPLITORIENTATION.VERTICAL, vMeasureTypes, vDimensions, true, nAreaNbr)
|
||||
|
||||
-- identifico la forma del gruppo di ante
|
||||
local nAreaSplit = EgtGetParent( vAreas[1])
|
||||
@@ -572,50 +572,71 @@ local function CreateAreasFromSplits( nAreaId, vSplitCrvs)
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
local function CalcSplitCurves( nLayerId, b3OutlineLayer, b3Limit, nSplitType, nMeasureType, PositionList)
|
||||
|
||||
local vSplitCurves = {}
|
||||
local nProportion = 0
|
||||
if nMeasureType == WIN_MEASURE.PROPORTIONAL then
|
||||
for i = 1, #PositionList do
|
||||
nProportion = nProportion + PositionList[i]
|
||||
-- funzione che calcola le dimensioni assolute delle divisioni
|
||||
local function CalcSplitDimensions( vMeasureTypes, vValues, dDim)
|
||||
|
||||
local vDimensions = {}
|
||||
-- calcolo le dimensioni di tutti gli split assoluti e percentuali e calcolo i valori di riferimento per eventuali split proporzionali
|
||||
local nPropTot = 0
|
||||
local dPropDim = dDim
|
||||
local bProportional = false
|
||||
for i = 1, #vMeasureTypes do
|
||||
if vMeasureTypes[i] == WIN_MEASURE.ABSOLUTE then
|
||||
vDimensions[i] = vValues[i]
|
||||
dPropDim = dPropDim - vDimensions[i]
|
||||
elseif vMeasureTypes[i] == WIN_MEASURE.PERCENTAGE then
|
||||
vDimensions[i] = dDim * vValues[i] / 100
|
||||
dPropDim = dPropDim - vDimensions[i]
|
||||
elseif vMeasureTypes[i] == WIN_MEASURE.PROPORTIONAL then
|
||||
nPropTot = nPropTot + vValues[i]
|
||||
bProportional = true
|
||||
end
|
||||
end
|
||||
local dCurrPosition = 0
|
||||
for i = 1, #PositionList do
|
||||
-- calcolo la posizione corrente
|
||||
dCurrPosition = dCurrPosition + PositionList[i]
|
||||
local dCalcPosition
|
||||
local nSplitCrv
|
||||
|
||||
-- calcolo le dimensioni degli split proporzionali
|
||||
if bProportional then
|
||||
if dPropDim < GEO.EPS_SMALL then
|
||||
return {}
|
||||
end
|
||||
for i = 1, #vValues do
|
||||
if vMeasureTypes[i] == WIN_MEASURE.PROPORTIONAL then
|
||||
vDimensions[i] = dPropDim * vValues[i] / nPropTot
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return vDimensions
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
local function CalcSplitCurves( nLayerId, b3OutlineLayer, b3Limit, nSplitType, vMeasureTypes, vValues)
|
||||
|
||||
-- calcolo le dimensioni assolute di tutti gli split
|
||||
local vDimensions = CalcSplitDimensions( vMeasureTypes, vValues, EgtIf( nSplitType == WIN_SPLITORIENTATION.VERTICAL, b3OutlineLayer:getDimX(), b3OutlineLayer:getDimY()))
|
||||
|
||||
local vSplitCurves = {}
|
||||
local dPosition = 0
|
||||
for i = 1, #vDimensions do
|
||||
-- calcolo la posizione cumulata
|
||||
dPosition = dPosition + vDimensions[i]
|
||||
|
||||
local nSplitCrv
|
||||
if nSplitType == WIN_SPLITORIENTATION.VERTICAL then
|
||||
-- aree ordinate da sx a dx
|
||||
if nMeasureType == WIN_MEASURE.ABSOLUT then
|
||||
dCalcPosition = dCurrPosition
|
||||
elseif nMeasureType == WIN_MEASURE.PROPORTIONAL then
|
||||
dCalcPosition = b3OutlineLayer:getDimX() * dCurrPosition / nProportion
|
||||
elseif nMeasureType == WIN_MEASURE.PERCENTAGE then
|
||||
dCalcPosition = b3OutlineLayer:getDimX() * dCurrPosition
|
||||
end
|
||||
local dCurrPosition = dPosition
|
||||
-- creo la linea se rientra nella regione limite
|
||||
local dX = b3OutlineLayer:getMin():getX() + dCalcPosition
|
||||
local dX = b3OutlineLayer:getMin():getX() + dCurrPosition
|
||||
if dX > b3Limit:getMin():getX() + GEO.EPS_SMALL and dX < b3Limit:getMax():getX() - GEO.EPS_SMALL then
|
||||
nSplitCrv = EgtLinePVL( nLayerId, b3OutlineLayer:getMin() + X_AX() * dCalcPosition, Y_AX(), b3OutlineLayer:getDimY())
|
||||
nSplitCrv = EgtLinePVL( nLayerId, b3OutlineLayer:getMin() + X_AX() * dCurrPosition, Y_AX(), b3OutlineLayer:getDimY())
|
||||
end
|
||||
|
||||
elseif nSplitType == WIN_SPLITORIENTATION.HORIZONTAL then
|
||||
-- aree ordinate dall'alto al basso
|
||||
if nMeasureType == WIN_MEASURE.ABSOLUT then
|
||||
dCalcPosition = b3OutlineLayer:getDimY() - dCurrPosition
|
||||
elseif nMeasureType == WIN_MEASURE.PROPORTIONAL then
|
||||
dCalcPosition = b3OutlineLayer:getDimY() * ( 1 - dCurrPosition / nProportion)
|
||||
elseif nMeasureType == WIN_MEASURE.PERCENTAGE then
|
||||
dCalcPosition = b3OutlineLayer:getDimY() * ( 1 - dCurrPosition)
|
||||
end
|
||||
local dCurrPosition = b3OutlineLayer:getDimY() - dPosition
|
||||
-- creo la linea se rientra nella regione limite
|
||||
local dY = b3OutlineLayer:getMin():getY() + dCalcPosition
|
||||
local dY = b3OutlineLayer:getMin():getY() + dCurrPosition
|
||||
if dY > b3Limit:getMin():getY() + GEO.EPS_SMALL and dY < b3Limit:getMax():getY() - GEO.EPS_SMALL then
|
||||
nSplitCrv = EgtLinePVL( nLayerId, b3OutlineLayer:getMin() + Y_AX() * dCalcPosition, X_AX(), b3OutlineLayer:getDimX())
|
||||
nSplitCrv = EgtLinePVL( nLayerId, b3OutlineLayer:getMin() + Y_AX() * dCurrPosition, X_AX(), b3OutlineLayer:getDimX())
|
||||
end
|
||||
end
|
||||
|
||||
@@ -630,7 +651,7 @@ end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che crea tagli split multipli
|
||||
function WinCreate.AddSplits( nParentAreaId, nSplitType, nMeasureType, PositionList, bFrench, nAreaNbr)
|
||||
function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues, bFrench, nAreaNbr)
|
||||
|
||||
-- se area ha già sottoarea errore
|
||||
if EgtGetFirstNameInGroup( nParentAreaId, WIN_AREA .. '*') then
|
||||
@@ -644,11 +665,7 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, nMeasureType, PositionL
|
||||
if nAreaNbr then
|
||||
EgtSetInfo( nAreaId, WIN_AREA_NBR, nAreaNbr)
|
||||
end
|
||||
|
||||
-- copio il contorno dall'area parent e setto opportune corrispondenze sou/child
|
||||
local nOutlineLayerId = CopyParentOutline( nAreaId, nParentAreaId)
|
||||
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
|
||||
|
||||
|
||||
-- creo layer per split
|
||||
local nSplitLayerId = EgtGroup( nAreaId)
|
||||
EgtSetName( nSplitLayerId, WIN_BASESPLIT)
|
||||
@@ -658,7 +675,9 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, nMeasureType, PositionL
|
||||
end
|
||||
|
||||
-- creo le curve di split
|
||||
local vSplitCurves = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3OutlineLayer, nSplitType, nMeasureType, PositionList)
|
||||
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
|
||||
if #vSplitCurves == 0 then
|
||||
@@ -666,6 +685,9 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, nMeasureType, PositionL
|
||||
return
|
||||
end
|
||||
|
||||
-- copio il contorno dall'area parent e setto opportune corrispondenze sou/child
|
||||
local nOutlineLayerId = CopyParentOutline( nAreaId, nParentAreaId)
|
||||
|
||||
-- creo le aree generate dagli split
|
||||
local vAreas = CreateAreasFromSplits( nAreaId, vSplitCurves)
|
||||
return vAreas
|
||||
@@ -673,7 +695,7 @@ end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che crea tagli split grid
|
||||
function WinCreate.AddGridSplits( nParentAreaId, nMeasureType, PositionListVert, PositionListHoriz, bStartVertical, nAreaNbr)
|
||||
function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues, vHorizMeasureTypes, vHorizValues, bStartVertical, nAreaNbr)
|
||||
|
||||
local AreaResult = {}
|
||||
|
||||
@@ -699,21 +721,25 @@ function WinCreate.AddGridSplits( nParentAreaId, nMeasureType, PositionListVert,
|
||||
EgtSetName( nSplitLayerId, WIN_BASESPLIT)
|
||||
|
||||
-- stabilisco direzione principale e secondaria
|
||||
local PositionListMain, PositionListOther, nSplitOrientationMain, nSplitOrientationOther
|
||||
local vMainTypes, vOtherTypes, vMainValues, vOtherValues, nMainSplitOrientation, nOtherSplitOrientation
|
||||
if bStartVertical then
|
||||
PositionListMain = PositionListVert
|
||||
PositionListOther = PositionListHoriz
|
||||
nSplitOrientationMain = WIN_SPLITORIENTATION.VERTICAL
|
||||
nSplitOrientationOther = WIN_SPLITORIENTATION.HORIZONTAL
|
||||
vMainTypes = vVertMeasureTypes
|
||||
vMainValues = vVertValues
|
||||
nMainSplitOrientation = WIN_SPLITORIENTATION.VERTICAL
|
||||
vOtherTypes = vHorizMeasureTypes
|
||||
vOtherValues = vHorizValues
|
||||
nOtherSplitOrientation = WIN_SPLITORIENTATION.HORIZONTAL
|
||||
else
|
||||
PositionListMain = PositionListHoriz
|
||||
PositionListOther = PositionListVert
|
||||
nSplitOrientationMain = WIN_SPLITORIENTATION.HORIZONTAL
|
||||
nSplitOrientationOther = WIN_SPLITORIENTATION.VERTICAL
|
||||
vMainTypes = vHorizMeasureTypes
|
||||
vMainValues = vHorizValues
|
||||
nMainSplitOrientation = WIN_SPLITORIENTATION.HORIZONTAL
|
||||
vOtherTypes = vVertMeasureTypes
|
||||
vOtherValues = vVertValues
|
||||
nOtherSplitOrientation = WIN_SPLITORIENTATION.VERTICAL
|
||||
end
|
||||
|
||||
-- calcolo la suddivisione nella direzione principale
|
||||
local vMainSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3OutlineLayer, nSplitOrientationMain, nMeasureType, PositionListMain)
|
||||
local vMainSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3OutlineLayer, nMainSplitOrientation, vMainTypes, vMainValues)
|
||||
local vMainAreas = CreateAreasFromSplits( nAreaId, vMainSplit)
|
||||
|
||||
-- per ogni area della direzione principale calcolo la suddivisione nella direzione secondaria
|
||||
@@ -723,7 +749,7 @@ function WinCreate.AddGridSplits( nParentAreaId, nMeasureType, PositionListVert,
|
||||
local b3Limit = EgtGetBBox( nAreaOutlineLayerId, GDB_BB.STANDARD)
|
||||
|
||||
-- calcolo gli split nella direzione secondaria
|
||||
local vOtherSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3Limit, nSplitOrientationOther, nMeasureType, PositionListOther)
|
||||
local vOtherSplit = CalcSplitCurves( nSplitLayerId, b3OutlineLayer, b3Limit, nOtherSplitOrientation, vOtherTypes, vOtherValues)
|
||||
if #vOtherSplit > 0 then
|
||||
local vNewAreas = CreateAreasFromSplits( vMainAreas[i], vOtherSplit)
|
||||
AreaResult = EgtJoinTables( AreaResult, vNewAreas)
|
||||
|
||||
@@ -103,7 +103,7 @@ end
|
||||
local function GetMeasureType( sMeasureType)
|
||||
|
||||
if sMeasureType == 'ABSOLUT' then
|
||||
return WIN_MEASURE.ABSOLUT
|
||||
return WIN_MEASURE.ABSOLUTE
|
||||
elseif sMeasureType == 'PROPORTIONAL' then
|
||||
return WIN_MEASURE.PROPORTIONAL
|
||||
elseif sMeasureType == 'PERCENTAGE' then
|
||||
@@ -214,7 +214,6 @@ local function ConvertTableToGeometry( AreaTable, nParentId)
|
||||
|
||||
-- recupero dati
|
||||
local tSashes = AreaTable[JWD_SASH_LIST]
|
||||
--local vJoints = GetJoints( AreaTable[JWD_JOINTS])
|
||||
local nBottomRailNbr = 0
|
||||
if AreaTable[JWD_BOTTOMRAIL] then
|
||||
nBottomRailNbr = AreaTable[JWD_BOTTOMRAIL_QTY]
|
||||
@@ -267,18 +266,14 @@ local function ConvertTableToGeometry( AreaTable, nParentId)
|
||||
for i = 1, #tSashes do
|
||||
vMeasureType[i] = GetMeasureType( tSashes[i][JWD_MEASURE_TYPE])
|
||||
vDimensions[i] = tSashes[i][JWD_DIMENSION]
|
||||
if vMeasureType[i] == WIN_MEASURE.PERCENTAGE then
|
||||
vDimensions[i] = vDimensions[i] / 100
|
||||
end
|
||||
vOpeningTypes[i] = GetOpeningType( tSashes[i][JWD_OPENING_TYPE])
|
||||
vSashNbrs[i] = tSashes[i][JWD_ID_SASH]
|
||||
vJoints[i] = GetJoints( tSashes[i][JWD_JOINTS])
|
||||
end
|
||||
table.remove( vDimensions)
|
||||
local vSashTypes, sHandleSide = GetSashTypes( tSashes, vOpeningTypes)
|
||||
|
||||
|
||||
-- aggiungo il gruppo di ante
|
||||
local vAreas = WinCreate.AddSashGroup( nParentId, vMeasureType[1], vDimensions, vJoints, vSashTypes, vOpeningTypes, nAreaNbr, vSashNbrs)
|
||||
local vAreas = WinCreate.AddSashGroup( nParentId, vMeasureType, vDimensions, vJoints, vSashTypes, vOpeningTypes, nAreaNbr, vSashNbrs)
|
||||
-- aggiungo le ante
|
||||
for i = 1, #vAreas do
|
||||
-- bottomrail
|
||||
@@ -305,30 +300,24 @@ local function ConvertTableToGeometry( AreaTable, nParentId)
|
||||
local vVertDimensions = {}
|
||||
local vVertMeasureType = {}
|
||||
local vSplitVertDimensions = AreaTable[JWD_SPLIT_VERT_POS]
|
||||
for i = 1, #vSplitVertDimensions - 1 do
|
||||
for i = 1, #vSplitVertDimensions do
|
||||
vVertMeasureType[i] = GetMeasureType( vSplitVertDimensions[i][JWD_MEASURE_TYPE])
|
||||
vVertDimensions[i] = vSplitVertDimensions[i][JWD_DIMENSION]
|
||||
if vVertMeasureType[i] == WIN_MEASURE.PERCENTAGE then
|
||||
vVertDimensions[i] = vVertDimensions[i] / 100
|
||||
end
|
||||
end
|
||||
local vHorizDimensions = {}
|
||||
local vHorizMeasureType = {}
|
||||
local vSplitHorizDimensions = AreaTable[JWD_SPLIT_HORIZ_POS]
|
||||
for i = 1, #vSplitHorizDimensions - 1 do
|
||||
for i = 1, #vSplitHorizDimensions do
|
||||
vHorizMeasureType[i] = GetMeasureType( vSplitHorizDimensions[i][JWD_MEASURE_TYPE])
|
||||
vHorizDimensions[i] = vSplitHorizDimensions[i][JWD_DIMENSION]
|
||||
if vHorizMeasureType[i] == WIN_MEASURE.PERCENTAGE then
|
||||
vHorizDimensions[i] = vHorizDimensions[i] / 100
|
||||
end
|
||||
end
|
||||
local vSplitAreas
|
||||
if AreaTable[JWD_SPLIT_TYPE] == 'GRID' then
|
||||
vSplitAreas = WinCreate.AddGridSplits( nParentId, vVertMeasureType[1], vVertDimensions, vHorizDimensions, AreaTable[JWD_SPLIT_START_VERT], nAreaNbr)
|
||||
vSplitAreas = WinCreate.AddGridSplits( nParentId, vVertMeasureType, vVertDimensions, vHorizMeasureType, vHorizDimensions, AreaTable[JWD_SPLIT_START_VERT], nAreaNbr)
|
||||
elseif AreaTable[JWD_SPLIT_TYPE] == 'VERTICAL' then
|
||||
vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.VERTICAL, vVertMeasureType[1], vVertDimensions, false, nAreaNbr)
|
||||
vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.VERTICAL, vVertMeasureType, vVertDimensions, false, nAreaNbr)
|
||||
else
|
||||
vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.HORIZONTAL, vHorizMeasureType[1], vHorizDimensions, false, nAreaNbr)
|
||||
vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.HORIZONTAL, vHorizMeasureType, vHorizDimensions, false, nAreaNbr)
|
||||
end
|
||||
for i = 1, #vSplitAreas do
|
||||
ConvertTableToGeometry( AreaTable[JWD_AREA_LIST][i], vSplitAreas[i])
|
||||
|
||||
Reference in New Issue
Block a user