- alzante scorrevole.
This commit is contained in:
@@ -446,13 +446,58 @@ local function CalcProfileType( nAreaId)
|
||||
-- recupero il tipo dei figli
|
||||
local nChildrenType = GetChildrenType( nOutlineId)
|
||||
|
||||
if nChildrenType == WIN_CHILDREN_TYPES.NULL or nChildrenType == WIN_CHILDREN_TYPES.SASH then
|
||||
-- a) se non definiti gestisco come anta
|
||||
if nChildrenType == WIN_CHILDREN_TYPES.NULL then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_TOP)
|
||||
end
|
||||
|
||||
-- b) se anta
|
||||
elseif nChildrenType == WIN_CHILDREN_TYPES.SASH then
|
||||
-- verifico tipologia di anta contro cui poggia
|
||||
local vChildren = EgtGetInfo( nOutlineId, WIN_SASH_CHILDREN, 'vi')
|
||||
local nSashArea = EgtGetParent( EgtGetParent( vChildren[1]))
|
||||
local nSashType = EgtGetInfo( nSashArea, WIN_SASHTYPE, 'i') or WIN_SASHTYPES.NULL
|
||||
-- b1) alzante scorrevole
|
||||
if nSashType == WIN_SASHTYPES.SLIDE_MOVABLE or nSashType == WIN_SASHTYPES.SLIDE_FIXED or nSashType == WIN_SASHTYPES.SLIDE_MOVABLE_BACK then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_BOTTOM)
|
||||
-- se le ante contro cui poggia sono tutte mobili devo aggiornare il profilo
|
||||
if nSashType == WIN_SASHTYPES.SLIDE_MOVABLE_BACK then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_BOTTOM_MOVABLEBACK)
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_MOVABLE then
|
||||
for i = 2, #vChildren do
|
||||
local nSashArea = EgtGetParent( EgtGetParent( vChildren[i]))
|
||||
local nSashType = EgtGetInfo( nSashArea, WIN_SASHTYPE, 'i') or WIN_SASHTYPES.NULL
|
||||
if nSashType == WIN_SASHTYPES.SLIDE_MOVABLE_BACK then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_BOTTOM_MOVABLEBACK)
|
||||
break
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_FIXED then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif sName == WIN_TOP then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_TOP)
|
||||
else
|
||||
if nSashType == WIN_SASHTYPES.SLIDE_MOVABLE then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_MOVABLE)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_FIXED)
|
||||
end
|
||||
end
|
||||
-- b2) standard
|
||||
else
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_TOP)
|
||||
end
|
||||
end
|
||||
|
||||
-- c) se riempimento
|
||||
elseif nChildrenType == WIN_CHILDREN_TYPES.FILL then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FIXED_BOTTOM)
|
||||
@@ -460,7 +505,8 @@ local function CalcProfileType( nAreaId)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FIXED_TOP)
|
||||
end
|
||||
|
||||
|
||||
-- d) se cambio profilo
|
||||
elseif nChildrenType == WIN_CHILDREN_TYPES.MIXED then
|
||||
EgtSetInfo( nOutlineId, WIN_PRF_CHANGE, true)
|
||||
if sName == WIN_BOTTOM then
|
||||
@@ -488,14 +534,24 @@ local function CalcProfileType( nAreaId)
|
||||
|
||||
-- SASH
|
||||
elseif nAreaType == WIN_AREATYPES.SASH then
|
||||
-- verifico se e' di tipo battente ricevente
|
||||
local nSashType = EgtGetInfo( nAreaId, WIN_SASHTYPE, 'i')
|
||||
if nSashType and nSashType ~= WIN_SASHTYPES.NULL then
|
||||
-- imposto profili sash
|
||||
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
|
||||
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
|
||||
while nOutlineId do
|
||||
-- verifico se deriva da una curva di split di tipo french ( e quindi deve avere profilo battente/ricevente)
|
||||
-- verifico tipologia di anta ( battente, ricevente, alzante scorrevole)
|
||||
local nSashType = EgtGetInfo( nAreaId, WIN_SASHTYPE, 'i') or WIN_SASHTYPES.NULL
|
||||
-- imposto profili sash
|
||||
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
|
||||
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
|
||||
while nOutlineId do
|
||||
local sName = EgtGetName( nOutlineId)
|
||||
|
||||
-- se non è definita tipologia
|
||||
if nSashType == WIN_SASHTYPES.NULL then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_TOP)
|
||||
end
|
||||
|
||||
else
|
||||
-- verifico se deriva da una curva di split di tipo french ( e quindi deve avere profilo speciale e.g. battente/ricevente)
|
||||
local nSouId = EgtGetInfo( nOutlineId, WIN_SOU, 'i')
|
||||
local nSouPrevId
|
||||
local nSplitType
|
||||
@@ -510,18 +566,19 @@ local function CalcProfileType( nAreaId)
|
||||
end
|
||||
end
|
||||
until not nSouId or nSplitType == WIN_SPLITTYPES.FRENCH
|
||||
|
||||
|
||||
if nSplitType == WIN_SPLITTYPES.FRENCH then
|
||||
-- setto info sulla curva per ricordare che deriva da un french split ( utile nel calcolo degli outlines)
|
||||
EgtSetInfo( nOutlineId, WIN_CRV_ON_FRENCH_SPLIT, true)
|
||||
|
||||
-- a) battente/ricevente
|
||||
if nSashType == WIN_SASHTYPES.ACTIVE then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_ACTIVE)
|
||||
elseif nSashType == WIN_SASHTYPES.INACTIVE then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_INACTIVE)
|
||||
elseif nSashType == WIN_SASHTYPES.ACTIVE_OUT or nSashType == WIN_SASHTYPES.INACTIVE_OUT then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRENCH_OUT)
|
||||
else
|
||||
elseif nSashType == WIN_SASHTYPES.ACTIVE_IN or nSashType == WIN_SASHTYPES.INACTIVE_IN then
|
||||
-- devo verificare il tipo dell'anta adiacente
|
||||
local nAdjSashType = FindAdjacentSashType( nSouId, nSouPrevId)
|
||||
if nSashType == WIN_SASHTYPES.ACTIVE_IN then
|
||||
@@ -537,30 +594,53 @@ local function CalcProfileType( nAreaId)
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_INACTIVE)
|
||||
end
|
||||
end
|
||||
|
||||
-- b) alzante scorrevole
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_MOVABLE then
|
||||
local nAdjSashType = FindAdjacentSashType( nSouId, nSouPrevId)
|
||||
if nAdjSashType == WIN_SASHTYPES.SLIDE_MOVABLE then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_ACTIVE_IN)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_ACTIVE)
|
||||
end
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_FIXED then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_INACTIVE)
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_MOVABLE_BACK then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_INACTIVE)
|
||||
end
|
||||
|
||||
else
|
||||
local sName = EgtGetName( nOutlineId)
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_BOTTOM)
|
||||
-- a) alzante scorrevole
|
||||
if nSashType == WIN_SASHTYPES.SLIDE_MOVABLE then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_MOVABLE_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_MOVABLE_TOP)
|
||||
end
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_FIXED then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_FIXED_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_FIXED_TOP)
|
||||
end
|
||||
elseif nSashType == WIN_SASHTYPES.SLIDE_MOVABLE_BACK then
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_MOVABLE_BACK_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SLIDE_MOVABLE_BACK_TOP)
|
||||
end
|
||||
|
||||
-- b) standard
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_TOP)
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_TOP)
|
||||
end
|
||||
end
|
||||
end
|
||||
nOutlineId = EgtGetNext( nOutlineId)
|
||||
end
|
||||
else
|
||||
-- imposto profili sash
|
||||
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
|
||||
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
|
||||
while nOutlineId do
|
||||
local sName = EgtGetName( nOutlineId)
|
||||
if sName == WIN_BOTTOM then
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_BOTTOM)
|
||||
else
|
||||
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_FRAME_TOP)
|
||||
end
|
||||
nOutlineId = EgtGetNext( nOutlineId)
|
||||
end
|
||||
nOutlineId = EgtGetNext( nOutlineId)
|
||||
end
|
||||
|
||||
-- verifico se ci sono split
|
||||
@@ -670,12 +750,22 @@ local function CalculateOutlineFromAreaOutline( nAreaId)
|
||||
TrimSplitWithOutline( nSplitId)
|
||||
-- recupero tipo di profilo
|
||||
local sSplitProfile = EgtGetInfo( nSplitId, WIN_PROFILETYPE)
|
||||
-- se split interno ad anta
|
||||
-- se split interno ad anta devo alzarlo in z come l'anta che lo contiene
|
||||
if sSplitProfile == WIN_SASH_SPLIT then
|
||||
-- recupero profilo usato per anta
|
||||
-- recupero l'anta
|
||||
local nSashAreaId = EgtGetParent( nAreaId)
|
||||
local nAreaType = EgtGetInfo( nSashAreaId, WIN_AREATYPE, 'i')
|
||||
while nAreaType ~= WIN_AREATYPES.SASH do
|
||||
nSashAreaId = EgtGetParent( nSashAreaId)
|
||||
nAreaType = EgtGetInfo( nSashAreaId, WIN_AREATYPE, 'i')
|
||||
end
|
||||
local nSashBaseOutlineLayerId = EgtGetFirstNameInGroup( nSashAreaId, WIN_AREAOUTLINE)
|
||||
local nSashBaseOutlineId = EgtGetFirstInGroup( nSashBaseOutlineLayerId)
|
||||
-- recupero il profilo dell'anta
|
||||
local sSashProfile = EgtGetInfo( nSashBaseOutlineId, WIN_PROFILETYPE)
|
||||
local nProfileLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
|
||||
local nSashProfileLayerId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_SASH)
|
||||
local nSashProfileId = EgtGetFirstNameInGroup( nSashProfileLayerId, sSplitProfile)
|
||||
local nSashProfileId = EgtGetFirstNameInGroup( nSashProfileLayerId, sSashProfile)
|
||||
-- calcolo offset sulla z dell'anta
|
||||
local dSashZOffset = EgtGetInfo( nSashProfileId, WIN_DELTA, 'd')
|
||||
-- sposto Split in Z
|
||||
@@ -765,11 +855,12 @@ local function CalculateOutlineFromAreaOutline( nAreaId)
|
||||
-- la taglio con outline
|
||||
TrimSplitWithOutline( nSplitId)
|
||||
|
||||
-- recupero profilo usato per anta
|
||||
local sSplitProfile = EgtGetInfo( nBaseSplitId, WIN_PROFILETYPE)
|
||||
local nSplitProfileId = EgtGetFirstNameInGroup( nSashProfileLayerId, sSplitProfile)
|
||||
-- calcolo offset sulla z dell'anta
|
||||
local dSplitZOffset = EgtGetInfo( nSplitProfileId, WIN_DELTA, 'd')
|
||||
-- calcolo offset sulla z dal profilo dell'anta
|
||||
local nPrevId = EgtGetInfo( nBaseSplitId, WIN_SPLIT_STARTINTERS, 'i')
|
||||
local sSashProfile = EgtGetInfo( nPrevId, WIN_PROFILETYPE)
|
||||
local nSashProfileId = EgtGetFirstNameInGroup( nSashProfileLayerId, sSashProfile)
|
||||
local dSplitZOffset = EgtGetInfo( nSashProfileId, WIN_DELTA, 'd')
|
||||
|
||||
-- sposto split in Z
|
||||
EgtMove( nSplitId, Z_AX() * dSplitZOffset)
|
||||
end
|
||||
@@ -2846,13 +2937,13 @@ local function CreateStripFromOutline( nAreaId, nOutlineId)
|
||||
local nStartStripGuideId = EgtLine( nSolidLayerId, ptStripMinStart, ptStripMaxStart)
|
||||
EgtExtendCurveStartByLen( nStartStripGuideId, 10)
|
||||
EgtExtendCurveEndByLen( nStartStripGuideId, 10)
|
||||
EgtMove( nStartStripGuideId, Z_AX())
|
||||
|
||||
-- estrudo Strip start
|
||||
local b3RefStartProfile = GetProfileLocalBox( nStartProfileId)
|
||||
local nStartStripProfileId = EgtLine( nStartProfileId, ptStripMinStart, ptStripMinStart - Z_AX() * b3RefStartProfile:getDimY(), GDB_RT.GLOB)
|
||||
EgtInvertCurve( nStartStripProfileId)
|
||||
local nStartStripExtrusionId = EgtSurfTmSwept( nSolidLayerId, nStartStripProfileId, nStartStripGuideId, false, WIN_SURF_APPROX)
|
||||
|
||||
local nStartStripExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nStartStripGuideId, - Z_AX() * ( b3RefStartProfile:getDimY() + 2), WIN_SURF_APPROX)
|
||||
EgtInvertSurf( nStartStripExtrusionId)
|
||||
|
||||
-- intersezione con main
|
||||
EgtSurfTmIntersect( nMainStripExtrusionId, nStartStripExtrusionId)
|
||||
|
||||
@@ -2867,22 +2958,20 @@ local function CreateStripFromOutline( nAreaId, nOutlineId)
|
||||
local nEndStripGuideId = EgtLine( nSolidLayerId, ptStripMinEnd, ptStripMaxEnd)
|
||||
EgtExtendCurveStartByLen( nEndStripGuideId, 10)
|
||||
EgtExtendCurveEndByLen( nEndStripGuideId, 10)
|
||||
EgtInvertCurve( nEndStripGuideId)
|
||||
EgtMove( nEndStripGuideId, Z_AX())
|
||||
|
||||
-- estrudo Strip end
|
||||
local b3RefEndProfile = GetProfileLocalBox( nEndProfileId)
|
||||
local nEndStripProfileId = EgtLine( nEndProfileId, ptStripMinEnd, ptStripMinEnd - Z_AX() * b3RefEndProfile:getDimY(), GDB_RT.GLOB)
|
||||
EgtInvertCurve( nEndStripProfileId)
|
||||
local nEndStripExtrusionId = EgtSurfTmSwept( nSolidLayerId, nEndStripProfileId, nEndStripGuideId, false, WIN_SURF_APPROX)
|
||||
|
||||
local nEndStripExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nEndStripGuideId, - Z_AX() * ( b3RefEndProfile:getDimY() + 2), WIN_SURF_APPROX)
|
||||
|
||||
-- intersezione con main
|
||||
EgtSurfTmIntersect( nMainStripExtrusionId, nEndStripExtrusionId)
|
||||
|
||||
-- cancello curve e superfici di costruzione
|
||||
EgtErase( nSectionId)
|
||||
EgtErase( { nMainStripMinOffsetId, nMainStripMaxOffsetId})
|
||||
EgtErase( { nStartStripMinOffsetId, nStartStripMaxOffsetId, nStartStripGuideId, nStartStripProfileId, nStartStripExtrusionId})
|
||||
EgtErase( { nEndStripMinOffsetId, nEndStripMaxOffsetId, nEndStripGuideId, nEndStripProfileId, nEndStripExtrusionId})
|
||||
EgtErase( { nStartStripMinOffsetId, nStartStripMaxOffsetId, nStartStripGuideId, nStartStripExtrusionId})
|
||||
EgtErase( { nEndStripMinOffsetId, nEndStripMaxOffsetId, nEndStripGuideId, nEndStripExtrusionId})
|
||||
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user