From 52853e953cedb51ba6ae475f984022e2a1830e78 Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 7 Apr 2026 09:53:11 +0200 Subject: [PATCH] DataWindow - inglesine. --- Designing/Main.lua | 76 +++- Designing/WinConst.lua | 24 +- Designing/WinJWDConst.lua | 1 + Designing/WinLib/WinCalculate.lua | 492 +++++++++++++++----------- Designing/WinLib/WinCreate.lua | 6 +- Designing/WinLib/WinManageProject.lua | 27 +- Designing/WinProject.lua | 50 ++- 7 files changed, 440 insertions(+), 236 deletions(-) diff --git a/Designing/Main.lua b/Designing/Main.lua index a8907b2..7670f00 100644 --- a/Designing/Main.lua +++ b/Designing/Main.lua @@ -68,7 +68,7 @@ WinCreate.ImportProfile( sProfilePath) -- creo telaio -local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, WindowHeight}, vFrameJoints, vFrameDims) +-- local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, WindowHeight}, vFrameJoints, vFrameDims) -- local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.CHAMFER_SIDE, { WindowWidth, WindowHeight, WindowHeight + 800}, vFrameJoints, vFrameDims) -- local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.CHAMFER_SIDE, { WindowWidth, WindowHeight + 500, WindowHeight}, vFrameJoints, vFrameDims) -- local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.ROUND_ARC, { WindowWidth, WindowHeight}, vFrameJoints, vFrameDims) @@ -83,7 +83,7 @@ local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, Win ------------------------ Aggiunta split a griglia ------------------------ -- WinCreate.AddGridSplits( nFrameId, { WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE}, { 150, 300, 150, 900}, --- { WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE}, { 500, 600, 850}, false) +-- { WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE, WIN_MEASURE.ABSOLUTE}, { 500, 600, 850}, false) -- WinCreate.AddGridSplits( nFrameId, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 25, 75}, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 30, 20}, false) -- WinCreate.AddGridSplits( nFrameId, { WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL}, { 1, 4, 1, 2, 1}, -- { WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL, WIN_MEASURE.PROPORTIONAL}, { 1, 2, 1, 2, 1}, false) @@ -203,8 +203,10 @@ local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, Win -- anta mobile a sx -- local vSash = WinCreate.AddSashGroup( nFrameId, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, bDaylight, { vSashJoints, vSashJoints}, { vSashDims, vSashDims}, -- { WIN_SASHTYPES.SLIDE_MOVABLE, WIN_SASHTYPES.SLIDE_FIXED}, { WIN_OPENING_TYPES.COPLANARSLIDE_RIGHT, WIN_OPENING_TYPES.FIXED}) --- WinCreate.AddFill( vSash[1], WIN_FILLTYPES.GLASS) --- WinCreate.AddFill( vSash[2], WIN_FILLTYPES.GLASS) +-- local nFill1 = WinCreate.AddFill( vSash[1], WIN_FILLTYPES.GLASS) +-- local nFill2 = WinCreate.AddFill( vSash[2], WIN_FILLTYPES.GLASS) +-- -- WinCreate.AddSplits( nFill1, WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, nil, false, false, WIN_MUNTINFILL_SIDES.BOTH) +-- -- WinCreate.AddSplits( nFill2, WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, nil, false, false, WIN_MUNTINFILL_SIDES.BOTH) -- local nSashGrpId = EgtGetParent( vSash[1]) -- WinCreate.AddHardware( nSashGrpId, '000592', 'Sx') @@ -253,10 +255,18 @@ local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, Win -- { vSashJoints, vSashJoints, vSashJoints, vSashJoints}, { vSashDims, vSashDims, vSashDims, vSashDims}, -- { WIN_SASHTYPES.SLIDE_MOVABLE_BACK, WIN_SASHTYPES.SLIDE_MOVABLE, WIN_SASHTYPES.SLIDE_MOVABLE, WIN_SASHTYPES.SLIDE_MOVABLE_BACK}, -- { WIN_OPENING_TYPES.COPLANARSLIDE_RIGHT, WIN_OPENING_TYPES.COPLANARSLIDE_LEFT, WIN_OPENING_TYPES.COPLANARSLIDE_RIGHT, WIN_OPENING_TYPES.COPLANARSLIDE_LEFT}) --- WinCreate.AddFill( vSash[1], WIN_FILLTYPES.GLASS) --- WinCreate.AddFill( vSash[2], WIN_FILLTYPES.GLASS) --- WinCreate.AddFill( vSash[3], WIN_FILLTYPES.GLASS) --- WinCreate.AddFill( vSash[4], WIN_FILLTYPES.GLASS) +-- local nFill1 = WinCreate.AddFill( vSash[1], WIN_FILLTYPES.GLASS) +-- local nFill2 = WinCreate.AddFill( vSash[2], WIN_FILLTYPES.GLASS) +-- local nFill3 = WinCreate.AddFill( vSash[3], WIN_FILLTYPES.GLASS) +-- local nFill4 = WinCreate.AddFill( vSash[4], WIN_FILLTYPES.GLASS) +-- -- WinCreate.AddGridSplits( nFill1, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- -- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.333, 33.333, 33.333}, true, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) +-- -- WinCreate.AddGridSplits( nFill2, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- -- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.333, 33.333, 33.333}, true, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) +-- -- WinCreate.AddGridSplits( nFill3, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- -- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.333, 33.333, 33.333}, true, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) +-- -- WinCreate.AddGridSplits( nFill4, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- -- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.333, 33.333, 33.333}, true, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) -- local nSashGrpId = EgtGetParent( vSash[1]) -- WinCreate.AddHardware( nSashGrpId, '000595', 'Dx') @@ -506,6 +516,54 @@ local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, Win +------------------------ Inglesine ------------------------ + +-- vetro fisso con inglesina interna +-- WinCreate.AddBottomRail( nFrameId, 2, { 90, 78}) +-- local nFill = WinCreate.AddFill( nFrameId, WIN_FILLTYPES.GLASS) +-- WinCreate.AddSplits( nFill, WIN_SPLITORIENTATION.VERTICAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.3333, 33.3333, 33.33333}, +-- nil, false, false, WIN_MUNTINFILL_SIDES.IN) + +-- vetro fisso con inglesine a griglia (1) +-- WinCreate.AddBottomRail( nFrameId, 2) +-- local nFill = WinCreate.AddFill( nFrameId, WIN_FILLTYPES.GLASS) +-- WinCreate.AddGridSplits( nFill, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.333, 33.333, 33.333}, true, { 50}, { 30, 30}, WIN_MUNTINFILL_SIDES.BOTH) + +-- vetro fisso con inglesine a griglia (2) +-- WinCreate.AddBottomRail( nFrameId, 2) +-- local nFill = WinCreate.AddFill( nFrameId, WIN_FILLTYPES.GLASS) +-- local vAreas = WinCreate.AddSplits( nFill, WIN_SPLITORIENTATION.VERTICAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, nil, false, false, 3) +-- WinCreate.AddSplits( vAreas[1], WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.3333, 33.3333, 33.3333}, +-- nil, false, false, WIN_MUNTINFILL_SIDES.BOTH) +-- WinCreate.AddSplits( vAreas[2], WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.3333, 33.3333, 33.3333}, +-- nil, false, false, WIN_MUNTINFILL_SIDES.BOTH) + +-- 4 vetri fissi con inglesine +-- local vAreas = WinCreate.AddGridSplits( nFrameId, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, true) +-- local nFill1 = WinCreate.AddFill( vAreas[1], WIN_FILLTYPES.GLASS) +-- WinCreate.AddGridSplits( nFill1, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, false, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) +-- local nFill2 = WinCreate.AddFill( vAreas[2], WIN_FILLTYPES.GLASS) +-- WinCreate.AddSplits( nFill2, WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.3333, 33.3333, 33.33333}, +-- { 40, 50}, false, false, WIN_MUNTINFILL_SIDES.IN) +-- local nFill3 = WinCreate.AddFill( vAreas[3], WIN_FILLTYPES.GLASS) +-- WinCreate.AddGridSplits( nFill3, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 50, 50}, +-- true, nil, nil, WIN_MUNTINFILL_SIDES.BOTH) +-- local nFill4 = WinCreate.AddFill( vAreas[4], WIN_FILLTYPES.GLASS) +-- WinCreate.AddSplits( nFill4, WIN_SPLITORIENTATION.VERTICAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, { 33.3333, 33.3333, 33.33333}, +-- nil, false, false, WIN_MUNTINFILL_SIDES.OUT) + +-- anta con inglesine +-- local nSash = WinCreate.AddSash( nFrameId, vSashJoints, vSashDims) +-- local nFill = WinCreate.AddFill( nSash, WIN_FILLTYPES.GLASS) +-- WinCreate.AddSplits( nFill, WIN_SPLITORIENTATION.HORIZONTAL, { WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE, WIN_MEASURE.PERCENTAGE}, +-- { 33.3333, 33.3333, 33.33333}, nil, false, false, WIN_MUNTINFILL_SIDES.BOTH) + + + ------------------------ Ferramenta ------------------------ -- local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { 1500, 2100}, vFrameJoints, vFrameDims) @@ -653,6 +711,8 @@ local nFrameId = WinCreate.CreateFrame( WIN_FRAME_TYPES.RECT, { WindowWidth, Win -- WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS) -- WinCreate.AddHardware( nSashId, '000573', 'Sx') + + ----------------------------------------------------------------------------------- -- imposto se calcolare solidi/preview o meno diff --git a/Designing/WinConst.lua b/Designing/WinConst.lua index 755c314..fc1d5e8 100644 --- a/Designing/WinConst.lua +++ b/Designing/WinConst.lua @@ -100,13 +100,23 @@ WIN_AREATYPES = { WIN_SPLITTYPE = 'SplitType' WIN_SPLITTYPES = { NULL = 0, - MULLION = 1, -- montante nel telaio che separa due ante - FRENCH = 2, -- per ante battente / ricevente - MIXED = 3, -- cambio profilo - INSASH = 4, -- divisione nell'anta - INFRAME = 5, -- divisione nel telaio che separa due vetri fissi + MULLION = 1, -- montante nel telaio che separa due ante + FRENCH = 2, -- per ante battente / ricevente + MIXED = 3, -- cambio profilo + MUNTIN_SASH = 4, -- divisione nell'anta che separa due vetri + MUNTIN_FRAME = 5, -- divisione nel telaio che separa due vetri fissi + MUNTIN_FILL = 6 -- inglesina incollata sul vetro } +WIN_MUNTINFILL_SIDE = 'MuntinFillSide' +WIN_MUNTINFILL_SIDES = { + NULL = 0, + IN = 1, -- inglesina solo interna + OUT = 2, -- inglesina solo esterna + BOTH = 3, -- inglesina interna ed esterna +} + + -- tipi di riempimento interno WIN_FILLTYPE = 'FillType' WIN_FILLTYPES = { @@ -183,6 +193,7 @@ WIN_CHILD = 'CHILD' WIN_COPY = 'COPY' WIN_SOU_OUTLINE = 'SouOutline' WIN_REF_OUTLINE = 'OutlineRef' +WIN_REF_MUNTIN = 'MuntinRef' WIN_REF_PART = 'PartRef' WIN_REF_BOTTOMRAIL_PART = 'BottomRailPartRef' WIN_PREV_OUTLINES = 'PrevOutlines' @@ -238,6 +249,9 @@ WIN_FRENCH_IN = 'French_In' WIN_FRENCH_OUT = 'French_Out' WIN_SASH_SPLIT = 'Sash_Split' +WIN_FILL_SPLIT_OUT = 'Fill_Split_Out' +WIN_FILL_SPLIT_IN = 'Fill_Split_In' + WIN_SLIDE = 'Slide' WIN_MOVABLE = 'Movable' WIN_SLIDE_MOVABLEBACK = 'Slide_MovableBack' diff --git a/Designing/WinJWDConst.lua b/Designing/WinJWDConst.lua index e83c4ec..33af70f 100644 --- a/Designing/WinJWDConst.lua +++ b/Designing/WinJWDConst.lua @@ -52,6 +52,7 @@ JWD_SPLIT_HORIZ_POS = 'SplitHorizList' JWD_SPLIT_AREA = 'Area' JWD_ELEMENT_VERT_DIMENSION = 'ElementDimVertList' JWD_ELEMENT_HORIZ_DIMENSION = 'ElementDimHorizList' +JWD_MUNTIN_SIDE = 'MuntinSide' JWD_FILL_TYPE = 'FillType' diff --git a/Designing/WinLib/WinCalculate.lua b/Designing/WinLib/WinCalculate.lua index 67f5a4d..34f563c 100644 --- a/Designing/WinLib/WinCalculate.lua +++ b/Designing/WinLib/WinCalculate.lua @@ -607,30 +607,36 @@ end -- funzione che restituisce il tipo di controprofilo dell'outline adiacente local function GetProfileCtrIn( nPrevOutlineId, nOutlineId, nPrevProfileId) local sPrevCtrIn = WIN_CTRIN - -- gestione particolare del caso di split o cambio profilo - if not EgtGetFirstNameInGroup( nPrevProfileId, sPrevCtrIn) then - - -- 1) split - if EgtGetName( nPrevOutlineId) == WIN_SPLIT then - -- verifico da quale lato dello split originale si trova l'outline per decidere quale controprofilo considerare - -- TODO si potrebbe considerare il segno di nPrevOutlineId ? - local _, _, nSide = EgtPointCurveDistSide( EgtMP( nOutlineId), nPrevOutlineId, Z_AX()) - if nSide == 1 then - sPrevCtrIn = WIN_CTRIN .. '1' -- dx - else - sPrevCtrIn = WIN_CTRIN .. '2' -- sx + + -- 1) se è inglesina interna deve finire contro il fermavetro ( dal lato corretto nel caso di split) oppure contro il bordo interno se finisce contro altra inglesina + if EgtGetName( nOutlineId) == WIN_SPLIT and EgtGetInfo( nOutlineId, WIN_MUNTINFILL_SIDE, 'i') == WIN_MUNTINFILL_SIDES.IN then + if EgtGetName( abs( nPrevOutlineId)) == WIN_SPLIT then + if EgtGetInfo( abs( nPrevOutlineId), WIN_SPLITTYPE, 'i') ~= WIN_SPLITTYPES.MUNTIN_FILL then + sPrevCtrIn = WIN_CTRIN .. WIN_STRIP end - - -- 2) pezzo del telaio con cambio profilo + -- recupero il lato da cui si trova + sPrevCtrIn = sPrevCtrIn .. EgtIf( nPrevOutlineId < 0, '1', '2') else - -- il profilo da usare dipende dal pezzo corrente: se ha figli di tipo fill allora è legato alla parte fill del cambio profilo, se ha figli di tipo sash è legato alla parte sash, - -- se ha entrambe le tipologie di figli allora è mixed split e va considerata la parte sash ( perchè è quella utilizzata per tagliare il pezzo) - local vSashChildren = EgtGetInfo( nOutlineId, WIN_SASH_CHILDREN, 'vi') - if vSashChildren then - sPrevCtrIn = WIN_SASH .. WIN_CTRIN - else - sPrevCtrIn = WIN_FILL .. WIN_CTRIN - end + sPrevCtrIn = WIN_CTRIN .. WIN_STRIP + end + + -- 2) se finisce contro split devo individuare da quale lato dello split originale si trova l'outline per decidere quale controprofilo considerare + elseif EgtGetName( abs( nPrevOutlineId)) == WIN_SPLIT then + if nPrevOutlineId < 0 then + sPrevCtrIn = sPrevCtrIn .. '1' -- dx + else + sPrevCtrIn = sPrevCtrIn .. '2' -- sx + end + + -- 3) se finisce contro pezzo con cambio profilo + elseif not EgtGetFirstNameInGroup( nPrevProfileId, sPrevCtrIn) then + -- il profilo da usare dipende dal pezzo corrente: se ha figli di tipo fill allora è legato alla parte fill del cambio profilo, se ha figli di tipo sash è legato alla parte sash, + -- se ha entrambe le tipologie di figli allora è mixed split e va considerata la parte sash ( perchè è quella utilizzata per tagliare il pezzo) + local vSashChildren = EgtGetInfo( nOutlineId, WIN_SASH_CHILDREN, 'vi') + if vSashChildren then + sPrevCtrIn = WIN_SASH .. WIN_CTRIN + else + sPrevCtrIn = WIN_FILL .. WIN_CTRIN end end @@ -789,24 +795,27 @@ local function GetSplitType( nSplitId, nAreaId) local nSplitType = EgtGetInfo( nAreaId, WIN_SPLITTYPE, 'i') -- la tipologia è salvata nell'area solo se si tratta di un french split, negli altri casi va calcolata if not nSplitType then - -- controllo se è dentro anta o telaio + -- controllo se è dentro telaio, anta o vetro local nParentAreaId = nAreaId local nParentAreaType = EgtGetInfo( nParentAreaId, WIN_AREATYPE, 'i') or WIN_AREATYPES.NULL - while nParentAreaId and nParentAreaType ~= WIN_AREATYPES.SASH and nParentAreaType ~= WIN_AREATYPES.FRAME do + while nParentAreaId and ( nParentAreaType == WIN_AREATYPES.NULL or nParentAreaType == WIN_AREATYPES.SPLIT) do nParentAreaId = EgtGetParent( nParentAreaId) nParentAreaType = EgtGetInfo( nParentAreaId or GDB_ID.NULL, WIN_AREATYPE, 'i') or WIN_AREATYPES.NULL end + -- se dentro anta if nParentAreaType == WIN_AREATYPES.SASH then - -- se dentro anta - nSplitType = WIN_SPLITTYPES.INSASH - else - -- se dentro telaio verifico la tipologia dei figli + nSplitType = WIN_SPLITTYPES.MUNTIN_SASH + -- se dentro vetro è inglesina incollata + elseif nParentAreaType == WIN_AREATYPES.FILL then + nSplitType = WIN_SPLITTYPES.MUNTIN_FILL + -- se dentro telaio verifico la tipologia dei figli + elseif nParentAreaType == WIN_AREATYPES.FRAME then local nChildrenType = GetChildrenType( nSplitId) if nChildrenType == WIN_CHILDREN_TYPES.MIXED then nSplitType = WIN_SPLITTYPES.MIXED elseif nChildrenType == WIN_CHILDREN_TYPES.FILL then - nSplitType = WIN_SPLITTYPES.INFRAME + nSplitType = WIN_SPLITTYPES.MUNTIN_FRAME else -- sash o non definiti nSplitType = WIN_SPLITTYPES.MULLION end @@ -1087,11 +1096,25 @@ local function CalcProfileType( nAreaId) EgtSetInfo( vSplitIds[i], WIN_PROFILETYPE, WIN_SASH_VERTICAL) end - elseif nSplitType == WIN_SPLITTYPES.INSASH then + elseif nSplitType == WIN_SPLITTYPES.MUNTIN_SASH then EgtSetInfo( vSplitIds[i], WIN_PROFILETYPE, WIN_SASH_SPLIT) - - elseif nSplitType == WIN_SPLITTYPES.INFRAME then + + elseif nSplitType == WIN_SPLITTYPES.MUNTIN_FRAME then EgtSetInfo( vSplitIds[i], WIN_PROFILETYPE, WIN_FRAME_SPLIT) + + elseif nSplitType == WIN_SPLITTYPES.MUNTIN_FILL then + -- se solo interne o entrambe assegno il profilo in ( l'out verrà aggiunto successivamente durante il calcolo del suo outline), se solo out assegno direttamente + -- il profilo corretto + local sProfile = WIN_FILL_SPLIT_IN + local nType = EgtGetInfo( nAreaId, WIN_MUNTINFILL_SIDE, 'i') + if nType == WIN_MUNTINFILL_SIDES.OUT then + sProfile = WIN_FILL_SPLIT_OUT + end + local bSlide = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AREA .. '*'), WIN_SLIDE_WINDOW, 'b') or false + if bSlide then + sProfile = WIN_SLIDE .. '_' .. sProfile + end + EgtSetInfo( vSplitIds[i], WIN_PROFILETYPE, sProfile) elseif nSplitType == WIN_SPLITTYPES.MIXED then EgtSetInfo( vSplitIds[i], WIN_PROFILETYPE, WIN_MIXED_SPLIT) @@ -1179,19 +1202,21 @@ local function AdjustProfileDimension( nOutlineId, nProfileId, dDimOld, dDim) local vtMove = - frSection:getVersX() -- traslo le curve "interne" - local vCurves = { WIN_IN, WIN_CTRIN, WIN_OFST .. WIN_CTRIN, WIN_STRIP, WIN_SIMPLIFIED .. WIN_IN, WIN_SIMPLIFIED .. WIN_OFST .. WIN_CTRIN, WIN_SIMPLIFIED .. WIN_STRIP} + local vCurves = { WIN_IN, WIN_CTRIN, WIN_OFST .. WIN_CTRIN, WIN_STRIP, WIN_CTRIN .. WIN_STRIP, WIN_OFST .. WIN_CTRIN .. WIN_STRIP} if bSplit then - vCurves = { WIN_IN .. '2', WIN_CTRIN .. '2', WIN_OFST .. WIN_CTRIN .. '2', WIN_STRIP .. '2', - WIN_SIMPLIFIED .. WIN_IN .. '2', WIN_SIMPLIFIED .. WIN_OFST .. WIN_CTRIN .. '2', WIN_SIMPLIFIED .. WIN_STRIP .. '2'} + for i = 1, #vCurves do + vCurves[i] = vCurves[i] .. '2' + end elseif bMixed then - vCurves = { WIN_SASH .. WIN_IN, WIN_FILL .. WIN_IN, WIN_SASH .. WIN_CTRIN, WIN_FILL .. WIN_CTRIN, WIN_OFST .. WIN_SASH .. WIN_CTRIN, WIN_OFST .. WIN_FILL .. WIN_CTRIN, WIN_STRIP, - WIN_SIMPLIFIED .. WIN_SASH .. WIN_IN, WIN_SIMPLIFIED .. WIN_FILL .. WIN_IN, WIN_SIMPLIFIED .. WIN_OFST .. WIN_SASH .. WIN_CTRIN, - WIN_SIMPLIFIED .. WIN_OFST .. WIN_FILL .. WIN_CTRIN, WIN_SIMPLIFIED .. WIN_STRIP, WIN_MIXED_COMMON .. WIN_IN} + vCurves = { WIN_SASH .. WIN_IN, WIN_FILL .. WIN_IN, WIN_SASH .. WIN_CTRIN, WIN_FILL .. WIN_CTRIN, WIN_OFST .. WIN_SASH .. WIN_CTRIN, WIN_OFST .. WIN_FILL .. WIN_CTRIN, + WIN_MIXED_COMMON .. WIN_IN, WIN_STRIP, WIN_CTRIN .. WIN_STRIP, WIN_OFST .. WIN_CTRIN .. WIN_STRIP} end for i = 1, #vCurves do local nCrvId = EgtGetFirstNameInGroup( nProfileId, vCurves[i]) or GDB_ID.NULL EgtMove( nCrvId, dDeltaDim * vtMove, GDB_RT.GLOB) + local nSimplifiedCrvId = EgtGetFirstNameInGroup( nProfileId, WIN_SIMPLIFIED .. vCurves[i]) or GDB_ID.NULL + EgtMove( nSimplifiedCrvId, dDeltaDim * vtMove, GDB_RT.GLOB) end -- traslo i dowels @@ -1264,6 +1289,8 @@ local function CreatePartProfile( nPartId, nOutlineId, dDim, nBottomRail) nLayerId = EgtGetFirstNameInGroup( nProfilesGrpId, WIN_FRAME) elseif nAreaType == WIN_AREATYPES.SASH then nLayerId = EgtGetFirstNameInGroup( nProfilesGrpId, WIN_SASH) + elseif nAreaType == WIN_AREATYPES.FILL then + nLayerId = EgtGetFirstNameInGroup( nProfilesGrpId, WIN_FILL) end -- recupero il nome del profilo @@ -1465,11 +1492,16 @@ local function CalcPartName( nAreaId, nAreaType) -- per split o riempimento devo ricavare il nome del parent che lo contiene local nParentId = EgtGetParent( nAreaId) local nParentType = EgtGetInfo( nParentId, WIN_AREATYPE, 'i') - while nParentType ~= WIN_AREATYPES.FRAME and nParentType ~= WIN_AREATYPES.SASH do + while nParentType == WIN_AREATYPES.SPLIT or nParentType == WIN_AREATYPES.NULL do nParentId = EgtGetParent( nParentId) nParentType = EgtGetInfo( nParentId, WIN_AREATYPE, 'i') end - sName = EgtGetInfo( nParentId, WIN_AREA_NAME, sName) + sName = EgtGetInfo( nParentId, WIN_AREA_NAME) + + if nAreaType == WIN_AREATYPES.FILL then + sName = sName .. '_' .. WIN_FILL + EgtSetInfo( nAreaId, WIN_AREA_NAME, sName) + end end return sName @@ -1556,7 +1588,7 @@ local function CreateFillPartFromArea( nAreaId, sName) EgtSetInfo( nPartId, WIN_AREA, nAreaId) -- imposto nome del pezzo - EgtSetName( nPartId, sName .. '_' .. WIN_FILL) + EgtSetName( nPartId, sName) EgtSetInfo( nPartId, WIN_PART_TYPE, WIN_PART_TYPES.FILL) -- imposto colore e tipologia @@ -1816,7 +1848,7 @@ local function TestSplitTrimOutlines( nOutlineId, nTrimOutline, tabOutlines, nMa local vsCtrIn = {} for i = 1, #vTestOutlines do vProfiles[i] = GetOutlineProfileId( abs( vTestOutlines[i]), true) - vsCtrIn[i] = GetProfileCtrIn( abs( vTestOutlines[i]), nOutlineId, vProfiles[i]) + vsCtrIn[i] = GetProfileCtrIn( vTestOutlines[i], nOutlineId, vProfiles[i]) end -- testo le curve @@ -3033,10 +3065,9 @@ local function CalculateFillOutline( nAreaId, nOutlineLayerId) local nParentProfileId = GetOutlineProfileId( abs( vSplitIds[i]), true) local b3FrameProfile = GetProfileLocalBox( nParentProfileId) local dOverlap = EgtGetInfo( nParentProfileId, WIN_FILLOVERLAP, 'd') - local bMixedSplit = EgtGetInfo( abs( vSplitIds[i]), WIN_PRF_CHANGE, 'b') or false - local dDimRef = EgtIf( bMixedSplit, b3FrameProfile:getMax():getX(), b3FrameProfile:getMin():getX()) - local dFillPerpOffset = abs( dDimRef) - dOverlap - EgtOffsetCurve( nOutlineId, - dFillPerpOffset) + local dDimRef = EgtIf( vSplitIds[i] < 0, b3FrameProfile:getMax():getX(), b3FrameProfile:getMin():getX()) + local dOffs = abs( dDimRef) - dOverlap + EgtOffsetCurve( nOutlineId, - dOffs) -- movimento in z local dFillZOffset = EgtGetInfo( nParentProfileId, WIN_FILLDELTA, 'd') EgtMove( nOutlineId, Z_AX() * dFillZOffset) @@ -3080,7 +3111,7 @@ local function CalculateOutlineFromAreaOutline( nAreaId) local nOutlineLayerId = EgtGroup( nAreaId) EgtSetName( nOutlineLayerId, WIN_OUTLINE) EgtSetStatus( nOutlineLayerId, GDB_ST.OFF) - + -- FRAME if nAreaType == WIN_AREATYPES.FRAME then @@ -3102,6 +3133,10 @@ local function CalculateOutlineFromAreaOutline( nAreaId) -- l'outline è copia del parent outline local nParentId = EgtGetParent( nAreaId) + if EgtGetInfo( nParentId, WIN_AREATYPE, 'i') == WIN_AREATYPES.FILL then + -- se inglesina il parent è un vetro. Il pezzo però non va tagliato con il vetro ma con l'elemento che contiene il vetro, quindi considero come outline quello del parent del vetro + nParentId = EgtGetParent( nParentId) + end local nParentOutlineId = EgtGetFirstNameInGroup( nParentId, WIN_OUTLINE) local vParentOutlines = EgtGetAllInGroup( nParentOutlineId) for i = 1, #vParentOutlines do @@ -3122,24 +3157,9 @@ local function CalculateOutlineFromAreaOutline( nAreaId) EgtSetInfo( vBaseSplitIds[i], WIN_COPY, vSplitIds[i]) end - -- se split interni ad anta ricavo quota in z dal suo profilo - local nSplitType = EgtGetInfo( vSplitIds[1], WIN_SPLITTYPE, 'i') - if nSplitType == WIN_SPLITTYPES.INSASH then - -- recupero area sash che lo contiene - local nSashAreaId = nAreaId - local nAreaType = EgtGetInfo( nSashAreaId, WIN_AREATYPE, 'i') - while nAreaType ~= WIN_AREATYPES.SASH do - nSashAreaId = EgtGetParent( nSashAreaId) - nAreaType = EgtGetInfo( nSashAreaId, WIN_AREATYPE, 'i') - end - -- recupero il profilo dell'anta da una curva dell'outline - local nSashOutlineLayerId = EgtGetFirstNameInGroup( nSashAreaId, WIN_OUTLINE) - local nSashOutlineId = EgtGetFirstInGroup( nSashOutlineLayerId) - local nSashProfileId = GetOutlineProfileId( nSashOutlineId) - -- calcolo movimento in z - local dZMove = EgtGetInfo( nSashProfileId, WIN_DELTA, 'd') - EgtMove( vSplitIds, dZMove * Z_AX()) - end + -- aggiusto la quota degli split per allinearli all'outline + local dZMove = ( EgtSP( vParentOutlines[1]) - EgtSP( vSplitIds[1])) * Z_AX() + EgtMove( vSplitIds, dZMove * Z_AX()) -- aggiusto gli outlines e calcolo l'outline delle sottoaree null generate local bGrid = EgtGetInfo( nAreaId, WIN_GRID_SPLIT, 'b') or false @@ -3149,10 +3169,52 @@ local function CalculateOutlineFromAreaOutline( nAreaId) CalculateSplitOutline( nAreaId, vSplitIds, sName) end + local nSplitType = EgtGetInfo( vSplitIds[1], WIN_SPLITTYPE, 'i') + if nSplitType == WIN_SPLITTYPES.FRENCH then IdentifySashShape( nAreaId, nOutlineLayerId) end + -- se inglesina su entrambi i lati creo copia degli outline per le inglesine esterne + if nSplitType == WIN_SPLITTYPES.MUNTIN_FILL then + local nMuntinType = EgtGetInfo( nAreaId, WIN_MUNTINFILL_SIDE, 'i') + if nMuntinType == WIN_MUNTINFILL_SIDES.BOTH then + local bSlide = EgtGetInfo( EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AREA .. '*'), WIN_SLIDE_WINDOW, 'b') or false + for i = 1, #vSplitIds do + local nId = EgtCopyGlob( vSplitIds[i], nSplitLayerId) + EgtSetInfo( vSplitIds[i], WIN_REF_MUNTIN, nId) + EgtSetInfo( nId, WIN_PROFILETYPE, EgtIf( bSlide, WIN_SLIDE .. '_', '') .. WIN_FILL_SPLIT_OUT) + local dDim = EgtGetInfo( nId, WIN_PART_DIM, 'd') + CreateOutlinePart( nId, sName, dDim) + + EgtSetInfo( vSplitIds[i], WIN_MUNTINFILL_SIDE, WIN_MUNTINFILL_SIDES.IN) + EgtSetInfo( nId, WIN_MUNTINFILL_SIDE, WIN_MUNTINFILL_SIDES.OUT) + + -- verifico se devo aggiornare i prev/next ( caso di inglesina contro inglesina) + local vPrevOutlines = EgtGetInfo( nId, WIN_PREV_OUTLINES, 'vi') + for j = 1, #vPrevOutlines do + local nRef = EgtGetInfo( abs( vPrevOutlines[j]), WIN_REF_MUNTIN, 'i') + if nRef then + vPrevOutlines[j] = EgtIf( vPrevOutlines[j] > 0, nRef, - nRef) + end + end + EgtSetInfo( nId, WIN_PREV_OUTLINES, vPrevOutlines) + local vNextOutlines = EgtGetInfo( nId, WIN_NEXT_OUTLINES, 'vi') + for j = 1, #vNextOutlines do + local nRef = EgtGetInfo( abs( vNextOutlines[j]), WIN_REF_MUNTIN, 'i') + if nRef then + vNextOutlines[j] = EgtIf( vNextOutlines[j] > 0, nRef, - nRef) + end + end + EgtSetInfo( nId, WIN_NEXT_OUTLINES, vNextOutlines) + end + else + for i = 1, #vSplitIds do + EgtSetInfo( vSplitIds[i], WIN_MUNTINFILL_SIDE, nMuntinType) + end + end + end + -- SASH elseif nAreaType == WIN_AREATYPES.SASH then @@ -3210,14 +3272,21 @@ local function SetAreaProfiles( nAreaId) elseif nAreaType == WIN_AREATYPES.SPLIT then local nSplitType = EgtGetInfo( nAreaId, WIN_SPLITTYPE, 'i') if nSplitType ~= WIN_SPLITTYPES.FRENCH then - -- recupero area parent per capire se dentro telaio o anta + -- recupero area parent per capire se dentro telaio, anta o vetro local nParentAreaId = EgtGetParent( nAreaId) local nParentAreaType = EgtGetInfo( nParentAreaId, WIN_AREATYPE, 'i') - while nParentAreaType ~= WIN_AREATYPES.FRAME and nParentAreaType ~= WIN_AREATYPES.SASH do + while nParentAreaType == WIN_AREATYPES.SPLIT or nParentAreaType == WIN_AREATYPES.NULL do nParentAreaId = EgtGetParent( nParentAreaId) nParentAreaType = EgtGetInfo( nParentAreaId, WIN_AREATYPE, 'i') end - local sAreaName = EgtIf( nParentAreaType == WIN_AREATYPES.FRAME, WIN_FRAME, WIN_SASH) + local sAreaName + if nParentAreaType == WIN_AREATYPES.FRAME then + sAreaName = WIN_FRAME + elseif nParentAreaType == WIN_AREATYPES.SASH then + sAreaName = WIN_SASH + else + sAreaName = WIN_FILL + end local nSplitLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_SPLIT) local vSplitIds = EgtGetAllInGroup( nSplitLayerId) @@ -3226,12 +3295,14 @@ local function SetAreaProfiles( nAreaId) -- recupero i profili distinguendoli per ordine di split local tabProfiles = {} for i = 1, #vSplitIds do - local nOrder = EgtGetInfo( vSplitIds[i], WIN_GRIDSPLIT_ORDER, 'i') - local sProfile = sAreaName .. '_' .. EgtGetInfo( vSplitIds[i], WIN_PROFILETYPE) - if tabProfiles[nOrder+1] then - table.insert( tabProfiles[nOrder+1], sProfile) - else - tabProfiles[nOrder+1] = { sProfile} + if not EgtExistsInfo( vSplitIds[i], WIN_REF_MUNTIN) then + local nOrder = EgtGetInfo( vSplitIds[i], WIN_GRIDSPLIT_ORDER, 'i') + local sProfile = sAreaName .. '_' .. EgtGetInfo( vSplitIds[i], WIN_PROFILETYPE) + if tabProfiles[nOrder+1] then + table.insert( tabProfiles[nOrder+1], sProfile) + else + tabProfiles[nOrder+1] = { sProfile} + end end end -- salvo in info separate @@ -3240,9 +3311,13 @@ local function SetAreaProfiles( nAreaId) end else -- recupero tutti i profili degli split + -- se ha info WIN_REF_MUNTIN significa che split è inglesina sia interna che esterna, non ha senso considerarla due volte anche se sono due outlines distinti perchè + -- lo split che la definisce è uno solo local vProfiles = {} for i = 1, #vSplitIds do - vProfiles[i] = sAreaName .. '_' .. EgtGetInfo( vSplitIds[i], WIN_PROFILETYPE) + if not EgtExistsInfo( vSplitIds[i], WIN_REF_MUNTIN) then + table.insert( vProfiles, sAreaName .. '_' .. EgtGetInfo( vSplitIds[i], WIN_PROFILETYPE)) + end end EgtSetInfo( nAreaId, WIN_AREA_PROFILES, vProfiles) end @@ -3475,14 +3550,15 @@ local function CalcGeoRegion( vCrvs, nGrp) end --------------------------------------------------------------------- -local function GetDeltaProfile( nProfileId, sCtrIn) +local function GetDeltaProfile( nProfileId, sCtrIn, nOutlineId) local dCPDelta = 0 local nSectionFrId = EgtGetFirstNameInGroup( nProfileId, WIN_SECTIONFRAME) local frSectionFrame = EgtFR( nSectionFrId, GDB_ID.ROOT) local nCPId = EgtGetFirstNameInGroup( nProfileId, sCtrIn) local b3CP = EgtGetBBoxRef( nCPId, GDB_BB.STANDARD, frSectionFrame) - if sCtrIn == WIN_CTRIN .. 1 then + if nOutlineId < 0 then + -- se a destra della curva sto considerando i semiprofili 1 dCPDelta = abs( b3CP:getMin():getX()) else dCPDelta = abs( b3CP:getMax():getX()) @@ -3698,8 +3774,8 @@ local function CreateGeoCurves( nOutlineId, vPrevOutlineId, vNextOutlineId, vSta local dOffs, nPrevSemiProfile if vStartJoints[i] == WIN_PART_JNT.SHORT then -- la curva del geo corrisponde al bordo del controprofilo in del pezzo vicino - local sCtrIn = GetProfileCtrIn( abs( vPrevOutlineId[i]), nOutlineId, vPrevProfileId[i]) - local dCPDelta = GetDeltaProfile( vPrevProfileId[i], sCtrIn) + local sCtrIn = GetProfileCtrIn( vPrevOutlineId[i], nOutlineId, vPrevProfileId[i]) + local dCPDelta = GetDeltaProfile( vPrevProfileId[i], sCtrIn, vPrevOutlineId[i]) dOffs = - dCPDelta nPrevSemiProfile = EgtGetFirstNameInGroup( vPrevProfileId[i], sCtrIn) else @@ -3769,8 +3845,8 @@ local function CreateGeoCurves( nOutlineId, vPrevOutlineId, vNextOutlineId, vSta end local dOffs, nNextSemiProfile if vEndJoints[i] == WIN_PART_JNT.SHORT then - local sCtrIn = GetProfileCtrIn( abs( vNextOutlineId[i]), nOutlineId, vNextProfileId[i]) - local dCPDelta = GetDeltaProfile( vNextProfileId[i], sCtrIn) + local sCtrIn = GetProfileCtrIn( vNextOutlineId[i], nOutlineId, vNextProfileId[i]) + local dCPDelta = GetDeltaProfile( vNextProfileId[i], sCtrIn, vNextOutlineId[i]) dOffs = - dCPDelta nNextSemiProfile = EgtGetFirstNameInGroup( vNextProfileId[i], sCtrIn) else @@ -5513,131 +5589,135 @@ local function CalcSplitDowels( nSplitId, bStartOrEnd) for i = 1, #vGeoCrvs do - local nOrigOutline = abs( EgtGetInfo( vGeoCrvs[i], WIN_REF_OUTLINE, 'i')) - -- verifico se soglia ( in quel caso non ci sono dowels quindi va ignorato) - local bThreshold = EgtGetInfo( nOrigOutline, WIN_THRESHOLD, 'b') or false + -- se la curva non ha lavorazione associata allora il pezzo non influisce direttamente sullo split e può essere ignorato + local nPrcRef = EgtGetInfo( vGeoCrvs[i], WIN_REF_PRC, 'i') + if nPrcRef then + local nOrigOutline = abs( EgtGetInfo( vGeoCrvs[i], WIN_REF_OUTLINE, 'i')) + -- verifico se soglia ( in quel caso non ci sono dowels quindi va ignorato) + local bThreshold = EgtGetInfo( nOrigOutline, WIN_THRESHOLD, 'b') or false + + if not bThreshold then - if not bThreshold then - - -- recupero il pezzo associato e il suo outline di riferimento - local nPartId = FindAssociatedPart( nOrigOutline, true) - local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i') - - local nGeoLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO) - local nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) - local sDowelSide = WIN_PRC_SIDETYPE.IN - -- se split verifico se interferisce con lato in o out del geo - if EgtGetName( nOutlineId) == WIN_SPLIT then - local _, _, nSide = EgtPointCurveDistSide( EgtMP( nSplitId), nOutlineId, Z_AX()) - if nSide == 1 then - nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_OUT) - sDowelSide = WIN_PRC_SIDETYPE.OUT - end - end - - -- calcolo il frame di destinazione - local ptOrig = EgtIf( bStartOrEnd, EgtSP( nSplitId), EgtEP( nSplitId)) - local frDest = Frame3d( ptOrig, - EgtSV( nSplitId)) + -- recupero il pezzo associato e il suo outline di riferimento + local nPartId = FindAssociatedPart( nOrigOutline, true) + local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i') - -- recupero il layer con le lavorazioni - local nLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) - - -- nel layer dei profili del pezzo aggiungo il profilo dello split posizionato correttamente - local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) - local nSplitProfileCopyId = EgtCopy( nSplitProfile, nProfileLayerId) - CopyInfo( nSplitProfileCopyId, nSplitProfile, WIN_PROFILETYPE) - EgtSetName( nSplitProfileCopyId, WIN_PRF_SPLIT) - -- posiziono il profilo sulla curva di split - EgtTransform( EgtGetAllInGroup( nSplitProfileCopyId), frOrig, GDB_RT.GLOB) - EgtChangeGroupFrame( nSplitProfileCopyId, frDest, GDB_RT.GLOB) - - -- recupero eventuale solido - local nSolidId - if s_bCalcSolid then - local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) - nSolidId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) - end - - -- recupero le chiavi delle lunghezze ( dipendono dal profilo del pezzo su cui poggia lo split) - local sSplitLenKey = WIN_DWL_TOP_PARA_LEN - local sLenKey = WIN_DWL_TOP_PERP_LEN - if EgtGetName( nOutlineId) == WIN_BOTTOM then - -- verifico se ha bottomrails - local nBottomRails = EgtGetInfo( nOutlineId, WIN_BOTTOMRAIL, 'i') or 0 - if nBottomRails == 0 then - sSplitLenKey = WIN_DWL_BOTTOM_PARA_LEN - sLenKey = WIN_DWL_BOTTOM_PERP_LEN - else - sSplitLenKey = WIN_DWL_RAILBOTTOM_PARA_LEN - sLenKey = WIN_DWL_RAILBOTTOM_PERP_LEN - end - elseif EgtGetName( nOutlineId) == WIN_SPLIT then - sSplitLenKey = WIN_DWL_SPLIT_PARA_LEN - sLenKey = WIN_DWL_SPLIT_PERP_LEN - end - - -- creo la superficie di test per il posizionamento dei dowels - local nProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) - local nTestSurf - if not s_bCalcSolid or s_bSimplSolid then - local bChangeProfile = EgtGetInfo( nSplitId, WIN_PRF_CHANGE, 'b') or false - if bChangeProfile then - local vOutlines - if bStartOrEnd then - vOutlines = EgtGetInfo( nSplitId, WIN_PREV_OUTLINES, 'vi') - else - vOutlines = EgtGetInfo( nSplitId, WIN_NEXT_OUTLINES, 'vi') + local nGeoLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO) + local nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) + local sDowelSide = WIN_PRC_SIDETYPE.IN + -- se split verifico se interferisce con lato in o out del geo + if EgtGetName( nOutlineId) == WIN_SPLIT then + local _, _, nSide = EgtPointCurveDistSide( EgtMP( nSplitId), nOutlineId, Z_AX()) + if nSide == 1 then + nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_OUT) + sDowelSide = WIN_PRC_SIDETYPE.OUT + end + end + + -- calcolo il frame di destinazione + local ptOrig = EgtIf( bStartOrEnd, EgtSP( nSplitId), EgtEP( nSplitId)) + local frDest = Frame3d( ptOrig, - EgtSV( nSplitId)) + + -- recupero il layer con le lavorazioni + local nLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) + + -- nel layer dei profili del pezzo aggiungo il profilo dello split posizionato correttamente + local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nSplitProfileCopyId = EgtCopy( nSplitProfile, nProfileLayerId) + CopyInfo( nSplitProfileCopyId, nSplitProfile, WIN_PROFILETYPE) + EgtSetName( nSplitProfileCopyId, WIN_PRF_SPLIT) + -- posiziono il profilo sulla curva di split + EgtTransform( EgtGetAllInGroup( nSplitProfileCopyId), frOrig, GDB_RT.GLOB) + EgtChangeGroupFrame( nSplitProfileCopyId, frDest, GDB_RT.GLOB) + + -- recupero eventuale solido + local nSolidId + if s_bCalcSolid then + local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) + nSolidId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) + end + + -- recupero le chiavi delle lunghezze ( dipendono dal profilo del pezzo su cui poggia lo split) + local sSplitLenKey = WIN_DWL_TOP_PARA_LEN + local sLenKey = WIN_DWL_TOP_PERP_LEN + if EgtGetName( nOutlineId) == WIN_BOTTOM then + -- verifico se ha bottomrails + local nBottomRails = EgtGetInfo( nOutlineId, WIN_BOTTOMRAIL, 'i') or 0 + if nBottomRails == 0 then + sSplitLenKey = WIN_DWL_BOTTOM_PARA_LEN + sLenKey = WIN_DWL_BOTTOM_PERP_LEN + else + sSplitLenKey = WIN_DWL_RAILBOTTOM_PARA_LEN + sLenKey = WIN_DWL_RAILBOTTOM_PERP_LEN + end + elseif EgtGetName( nOutlineId) == WIN_SPLIT then + sSplitLenKey = WIN_DWL_SPLIT_PARA_LEN + sLenKey = WIN_DWL_SPLIT_PERP_LEN + end + + -- creo la superficie di test per il posizionamento dei dowels + local nProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local nTestSurf + if not s_bCalcSolid or s_bSimplSolid then + local bChangeProfile = EgtGetInfo( nSplitId, WIN_PRF_CHANGE, 'b') or false + if bChangeProfile then + local vOutlines + if bStartOrEnd then + vOutlines = EgtGetInfo( nSplitId, WIN_PREV_OUTLINES, 'vi') + else + vOutlines = EgtGetInfo( nSplitId, WIN_NEXT_OUTLINES, 'vi') + end + nTestSurf = CreateMixedSplitTrimSurf( nSplitId, vOutlines, nProfileId, 100, bStartOrEnd, not bStartOrEnd, nLayerId) + else + local sCtr = WIN_OFST .. GetProfileCtrIn( nOutlineId, nSplitId, nProfileId) + nTestSurf = CreateProfileSurf( nOutlineId, nProfileId, sCtr, 100, nLayerId) end - nTestSurf = CreateMixedSplitTrimSurf( nSplitId, vOutlines, nProfileId, 100, bStartOrEnd, not bStartOrEnd, nLayerId) else - local sCtr = WIN_OFST .. GetProfileCtrIn( nOutlineId, nSplitId, nProfileId) - nTestSurf = CreateProfileSurf( nOutlineId, nProfileId, sCtr, 100, nLayerId) + -- è la stessa superficie utilizzata per il trim del solido + local nTrimSurf = EgtGetInfo( vGeoCrvs[i], WIN_REF_SURF, 'i') + nTestSurf = EgtCopyGlob( nTrimSurf, nSplitLayerId) end - else - -- è la stessa superficie utilizzata per il trim del solido - local nTrimSurf = EgtGetInfo( vGeoCrvs[i], WIN_REF_SURF, 'i') - nTestSurf = EgtCopyGlob( nTrimSurf, nSplitLayerId) - end - local nTestSurfInverted = EgtCopyGlob( nTestSurf, nSplitLayerId) - EgtInvertSurf( nTestSurfInverted) - - -- calcolo le direzioni entranti nei pezzi - local vtSplitDir = EgtIf( bStartOrEnd, - frDest:getVersZ(), frDest:getVersZ()) - local vtDir = EgtIf( bStartOrEnd, - EgtSV( nSplitId), EgtSV( nSplitId)) - - -- recupero la superficie del pezzo per verificare se dowel interno - local nGeo = EgtGetFirstNameInGroup( nPartId, WIN_GEO) - local nSurf = EgtGetFirstNameInGroup( nGeo, WIN_GEO_SURF) - - -- aggiungo i dowels - local vDowels = EgtGetNameInGroup( nSplitProfile, WIN_DOWEL .. '*') or {} - for i = 1, #vDowels do - -- split - local dLen1 = CalcDowelLen( vDowels[i], sSplitLenKey, false) - local nDowel1 = CreateDowel( vDowels[i], nSplitLayerId, frOrig, frDest, vtSplitDir, nTestSurf, dLen1, sSplitDowelSide, nSplitSolidId) - -- verifico se dowel è interno al pezzo ( TO DO : da migliorare!) - local ptTest = EgtCP( nDowel1) - vtSplitDir * EgtCurveThickness( nDowel1) - local nTestPoint = EgtPoint( nSplitLayerId, ptTest) - if EgtSurfFrTestExternal( nSplitSurf, nTestPoint) then - EgtErase( nDowel1) - end - EgtErase( nTestPoint) + local nTestSurfInverted = EgtCopyGlob( nTestSurf, nSplitLayerId) + EgtInvertSurf( nTestSurfInverted) - -- pezzo - local dLen2 = CalcDowelLen( vDowels[i], sLenKey, true) - local nDowel2 = CreateDowel( vDowels[i], nLayerId, frOrig, frDest, vtDir, nTestSurfInverted, dLen2, sDowelSide, nSolidId) - ptTest = EgtCP( nDowel2) - vtDir * EgtCurveThickness( nDowel2) - nTestPoint = EgtPoint( nLayerId, ptTest) - if EgtSurfFrTestExternal( nSurf, nTestPoint) then - EgtErase( nDowel2) + -- calcolo le direzioni entranti nei pezzi + local vtSplitDir = EgtIf( bStartOrEnd, - frDest:getVersZ(), frDest:getVersZ()) + local vtDir = EgtIf( bStartOrEnd, - EgtSV( nSplitId), EgtSV( nSplitId)) + + -- recupero la superficie del pezzo per verificare se dowel interno + local nGeo = EgtGetFirstNameInGroup( nPartId, WIN_GEO) + local nSurf = EgtGetFirstNameInGroup( nGeo, WIN_GEO_SURF) + + -- aggiungo i dowels + local vDowels = EgtGetNameInGroup( nSplitProfile, WIN_DOWEL .. '*') or {} + for i = 1, #vDowels do + -- split + local dLen1 = CalcDowelLen( vDowels[i], sSplitLenKey, false) + local nDowel1 = CreateDowel( vDowels[i], nSplitLayerId, frOrig, frDest, vtSplitDir, nTestSurf, dLen1, sSplitDowelSide, nSplitSolidId) + -- verifico se dowel è interno al pezzo ( TO DO : da migliorare!) + local ptTest = EgtCP( nDowel1) - vtSplitDir * EgtCurveThickness( nDowel1) + local nTestPoint = EgtPoint( nSplitLayerId, ptTest) + if EgtSurfFrTestExternal( nSplitSurf, nTestPoint) then + EgtErase( nDowel1) + end + EgtErase( nTestPoint) + + -- pezzo + local dLen2 = CalcDowelLen( vDowels[i], sLenKey, true) + local nDowel2 = CreateDowel( vDowels[i], nLayerId, frOrig, frDest, vtDir, nTestSurfInverted, dLen2, sDowelSide, nSolidId) + ptTest = EgtCP( nDowel2) - vtDir * EgtCurveThickness( nDowel2) + nTestPoint = EgtPoint( nLayerId, ptTest) + if EgtSurfFrTestExternal( nSurf, nTestPoint) then + EgtErase( nDowel2) + end + EgtErase( nTestPoint) + end - EgtErase( nTestPoint) + + EgtErase( nTestSurf) + EgtErase( nTestSurfInverted) end - - EgtErase( nTestSurf) - EgtErase( nTestSurfInverted) - end end end @@ -7830,8 +7910,8 @@ local function CalcWaterdrip( nPartId, nOutlineId, nAreaId, bDraw) end end - -- se non è anta o vetro ( che interrompono la cascata di pezzi relativi al telaio) salvo le sottaree per analizzarle - if nAreaType ~= WIN_AREATYPES.SASH and nAreaType ~= WIN_AREATYPES.FILL then + -- se non è anta ( che interrompe la cascata di pezzi relativi al telaio) salvo le sottaree per analizzarle + if nAreaType ~= WIN_AREATYPES.SASH then local vChildren = EgtGetNameInGroup( vStack[i], WIN_AREA .. '*') or {} vStack = EgtJoinTables( vStack, vChildren) end @@ -7840,8 +7920,15 @@ local function CalcWaterdrip( nPartId, nOutlineId, nAreaId, bDraw) end end - -- riordino i parametri ( non dovrebbero mai capitare parametri coincidenti) + -- riordino i parametri ed elimino quelli coincidenti table.sort( vParams) + local vNewParams = { vParams[1]} + for j = 2, #vParams do + if abs( vParams[j] - vNewParams[#vNewParams]) > GEO.EPS_ZERO then + table.insert( vNewParams, vParams[j]) + end + end + vParams = vNewParams for j = 1, #vParams, 2 do -- ricavo la guida per il tratto di gocciolatoio @@ -8335,6 +8422,11 @@ local function CalcPartPreview( nPartId, nPreviewGrp) elseif nSashType == WIN_SASHTYPES.INACTIVE_OUT then EgtMove( nAreaId, Vector3d( 0, 0, - 0.2)) end + elseif nAreaType == WIN_AREATYPES.SPLIT then + -- se inglesina esterna la abbasso per averla sotto il vetro + if EgtGetInfo( nOutlineId, WIN_MUNTINFILL_SIDE, 'i') == WIN_MUNTINFILL_SIDES.OUT then + EgtMove( nAreaId, Vector3d( 0, 0, - 1000)) + end end local color = EgtGetColor( nPartId) EgtSetColor( nAreaId, color) diff --git a/Designing/WinLib/WinCreate.lua b/Designing/WinLib/WinCreate.lua index 96a8ee0..e5e7221 100644 --- a/Designing/WinLib/WinCreate.lua +++ b/Designing/WinLib/WinCreate.lua @@ -550,7 +550,7 @@ end ---------------------------------------------------------------------------------- -- funzione che crea tagli split multipli -function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues, vPartsDim, bFrench, bDaylight, nAreaNbr) +function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues, vPartsDim, bFrench, bDaylight, nMuntinFillSide, nAreaNbr) -- se area ha già sottoarea errore if EgtGetFirstNameInGroup( nParentAreaId, WIN_AREA .. '*') then @@ -570,6 +570,7 @@ function WinCreate.AddSplits( nParentAreaId, nSplitType, vMeasureTypes, vValues, EgtSetInfo( nAreaId, WIN_MEASURE_TYPE, vMeasureTypes) EgtSetInfo( nAreaId, WIN_MEASURE_VALUE, vValues) EgtSetInfo( nAreaId, WIN_PART_DIM, vPartsDim) + EgtSetInfo( nAreaId, WIN_MUNTINFILL_SIDE, nMuntinFillSide) if bFrench then EgtSetInfo( nAreaId, WIN_SPLITTYPE, WIN_SPLITTYPES.FRENCH) EgtSetInfo( nAreaId, WIN_DAYLIGHT_MEASURE, bDaylight) @@ -597,7 +598,7 @@ end ---------------------------------------------------------------------------------- -- funzione che crea tagli split grid -function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues, vHorizMeasureTypes, vHorizValues, bStartVertical, vVertDim, vHorizDim, nAreaNbr) +function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues, vHorizMeasureTypes, vHorizValues, bStartVertical, vVertDim, vHorizDim, nMuntinFillSide, nAreaNbr) local AreaResult = {} @@ -611,6 +612,7 @@ function WinCreate.AddGridSplits( nParentAreaId, vVertMeasureTypes, vVertValues, EgtSetName( nAreaId, WIN_AREA .. '(' .. WIN_SPLIT .. ')') -- setto info EgtSetInfo( nAreaId, WIN_AREATYPE, WIN_AREATYPES.SPLIT) + EgtSetInfo( nAreaId, WIN_MUNTINFILL_SIDE, nMuntinFillSide) EgtSetInfo( nAreaId, WIN_AREA_NBR, nAreaNbr) EgtSetInfo( nAreaId, WIN_GRID_SPLIT, true) diff --git a/Designing/WinLib/WinManageProject.lua b/Designing/WinLib/WinManageProject.lua index a294afd..df0a5fd 100644 --- a/Designing/WinLib/WinManageProject.lua +++ b/Designing/WinLib/WinManageProject.lua @@ -117,6 +117,18 @@ local function GetMeasureType( sMeasureType) return WIN_MEASURE.PERCENTAGE end +--------------------------------------------------------------------- +local function GetMuntinSide( sSide) + if sType == 'INTERNAL' then + return WIN_MUNTINFILL_SIDES.IN + elseif sType == 'EXTERNAL' then + return WIN_MUNTINFILL_SIDES.OUT + elseif sType == 'BOTHSIDES' then + return WIN_MUNTINFILL_SIDES.BOTH + end + return +end + --------------------------------------------------------------------- -- funzione che ricava la tipologia dell'anta in base al tipo di apertura e alla struttura local function GetSashTypes( tSashes, vOpeningTypes) @@ -307,8 +319,11 @@ local function ConvertTableToGeometry( AreaTable, nParentId) -- FILL elseif AreaTable[JWD_AREA_TYPE] == 'FILL' then local nFillType = EgtIf( AreaTable[JWD_FILL_TYPE] == 'GLASS', WIN_FILLTYPES.GLASS, WIN_FILLTYPES.WOOD) - WinCreate.AddFill( nParentId, nFillType, nAreaNbr) - + local nAreaId = WinCreate.AddFill( nParentId, nFillType, nAreaNbr) + if AreaTable[JWD_AREA_LIST] then + -- inglesine + ConvertTableToGeometry( AreaTable[JWD_AREA_LIST][1], nAreaId) + end -- SPLIT elseif AreaTable[JWD_AREA_TYPE] == 'SPLIT' then @@ -328,14 +343,16 @@ local function ConvertTableToGeometry( AreaTable, nParentId) vHorizMeasureType[i] = GetMeasureType( vSplitHorizDimensions[i][JWD_MEASURE_TYPE]) vHorizDimensions[i] = vSplitHorizDimensions[i][JWD_DIMENSION] end + local nMuntinFillSide = GetMuntinSide( AreaTable[JWD_MUNTIN_SIDE]) -- lato inglesine + local vSplitAreas if AreaTable[JWD_SPLIT_TYPE] == 'GRID' then vSplitAreas = WinCreate.AddGridSplits( nParentId, vVertMeasureType, vVertDimensions, vHorizMeasureType, vHorizDimensions, AreaTable[JWD_SPLIT_START_VERT], - vVertElementDimension, vHorizElementDimension, nAreaNbr) + vVertElementDimension, vHorizElementDimension, nMuntinFillSide, nAreaNbr) elseif AreaTable[JWD_SPLIT_TYPE] == 'VERTICAL' then - vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.VERTICAL, vVertMeasureType, vVertDimensions, vVertElementDimension, false, true, nAreaNbr) + vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.VERTICAL, vVertMeasureType, vVertDimensions, vVertElementDimension, false, true, nMuntinFillSide, nAreaNbr) else - vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.HORIZONTAL, vHorizMeasureType, vHorizDimensions, vHorizElementDimension, false, true, nAreaNbr) + vSplitAreas = WinCreate.AddSplits( nParentId, WIN_SPLITORIENTATION.HORIZONTAL, vHorizMeasureType, vHorizDimensions, vHorizElementDimension, false, true, nMuntinFillSide, nAreaNbr) end for i = 1, #vSplitAreas do ConvertTableToGeometry( AreaTable[JWD_AREA_LIST][i], vSplitAreas[i]) diff --git a/Designing/WinProject.lua b/Designing/WinProject.lua index 1847331..1de7460 100644 --- a/Designing/WinProject.lua +++ b/Designing/WinProject.lua @@ -163,14 +163,14 @@ end _G.GetProfileThresholdsList = GetProfileThresholdsList ---------------------------------------------------------------------------------- -local function GetProfileData( nFrameGrp, nSashGrp) +local function GetProfileData( vGrps) local tData = {} -- a) dimensioni - for i = 1, 2 do + for i = 1, #vGrps do -- scorro tutti i profili e salvo le dimensioni - local sName = EgtIf( i == 1, WIN_FRAME, WIN_SASH) - local vProfiles = EgtGetAllInGroup( EgtIf( i ==1, nFrameGrp, nSashGrp)) + local sName = EgtGetName( vGrps[i]) + local vProfiles = EgtGetAllInGroup( vGrps[i]) for j = 1, #vProfiles do local sCurrName = sName .. '_' .. EgtGetName( vProfiles[j]) tData[sCurrName .. '_' .. WIN_DIM_STD] = EgtGetInfo( vProfiles[j], WIN_DIM_STD, 'd') @@ -181,7 +181,7 @@ local function GetProfileData( nFrameGrp, nSashGrp) -- b) overlap -- tra ante e telaio - local vProfiles = EgtGetAllInGroup( nFrameGrp) + local vProfiles = EgtGetAllInGroup( vGrps[1]) for i = 1, #vProfiles do local dTopOverlap = EgtGetInfo( vProfiles[i], WIN_SASH_TOP_OVERLAP, 'd') local dBottomOverlap = EgtGetInfo( vProfiles[i], WIN_SASH_BOTTOM_OVERLAP, 'd') @@ -194,27 +194,27 @@ local function GetProfileData( nFrameGrp, nSashGrp) end -- tra ante battenti/riceventi - local nSashActive = EgtGetFirstNameInGroup( nSashGrp, WIN_SASH_ACTIVE) + local nSashActive = EgtGetFirstNameInGroup( vGrps[2], WIN_SASH_ACTIVE) if nSashActive then tData[WIN_SASH_ACTIVE .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSashActive, WIN_OVERLAP, 'd') tData[WIN_SASH_INACTIVE .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSashActive, WIN_OVERLAP, 'd') end - local nSashFrench = EgtGetFirstNameInGroup( nSashGrp, WIN_FRENCH_IN) + local nSashFrench = EgtGetFirstNameInGroup( vGrps[2], WIN_FRENCH_IN) if nSashFrench then tData[WIN_FRENCH_IN .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSashFrench, WIN_OVERLAP, 'd') tData[WIN_FRENCH_OUT .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSashFrench, WIN_OVERLAP, 'd') end - local nSlideActive = EgtGetFirstNameInGroup( nSashGrp, WIN_SLIDE_ACTIVE) + local nSlideActive = EgtGetFirstNameInGroup( vGrps[2], WIN_SLIDE_ACTIVE) if nSlideActive then tData[WIN_SLIDE_ACTIVE .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSlideActive, WIN_OVERLAP, 'd') end -- tra bottomrail - local nFrameBottomRail = EgtGetFirstNameInGroup( nFrameGrp, WIN_RAIL_BOTTOM) + local nFrameBottomRail = EgtGetFirstNameInGroup( vGrps[1], WIN_RAIL_BOTTOM) if nFrameBottomRail then tData[WIN_FRAME .. '_'.. WIN_BOTTOMRAIL .. '_' .. WIN_OVERLAP] = EgtGetInfo( nFrameBottomRail, WIN_OVERLAP, 'd') end - local nSashBottomRail = EgtGetFirstNameInGroup( nSashGrp, WIN_RAIL_BOTTOM) + local nSashBottomRail = EgtGetFirstNameInGroup( vGrps[2], WIN_RAIL_BOTTOM) if nSashBottomRail then tData[WIN_SASH .. '_'.. WIN_BOTTOMRAIL .. '_' .. WIN_OVERLAP] = EgtGetInfo( nSashBottomRail, WIN_OVERLAP, 'd') end @@ -224,14 +224,15 @@ end ---------------------------------------------------------------------------------- local function WinGetProfileData() - + local tData if _G.sProfile == WDG.PROFILE then -- se profilo corrente local nProfileGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE) local nFrameGrp = EgtGetFirstNameInGroup( nProfileGrp, WIN_FRAME) local nSashGrp = EgtGetFirstNameInGroup( nProfileGrp, WIN_SASH) - tData = GetProfileData( nFrameGrp, nSashGrp) + local nFillGrp = EgtGetFirstNameInGroup( nProfileGrp, WIN_FILL) + tData = GetProfileData( { nFrameGrp, nSashGrp, nFillGrp}) else -- importo temporaneamente il profilo local nLastId = EgtGetLastInGroup( GDB_ID.ROOT) @@ -242,7 +243,7 @@ local function WinGetProfileData() table.insert( vGrps, nCurrId) nCurrId = EgtGetNext( nCurrId) end - tData = GetProfileData( vGrps[1], vGrps[2]) + tData = GetProfileData( vGrps) EgtErase( vGrps) end WDG.PROFILEDATA = tData @@ -269,15 +270,17 @@ _G.WinCreate_AddSash = WinCreate_AddSash ---------------------------------------------------------------------------------- local function WinCreate_AddSashGroup() + local MeasureTypeList = GetVariableList( 'MEASURETYPE') local DimensionList = GetVariableList( 'DIMENSION') local JointList = GetVariableList( 'JOINT') local SashTypeList = GetVariableList( 'SASHTYPE') local OpeningTypeList = GetVariableList( 'OPENINGTYPE') local SashNbrList = GetVariableList( 'SASHNBR') - local AreaList = WinCreate.AddSashGroup( WDG.AREAID, WDG.MEASURETYPE, DimensionList, JointList, SashTypeList, OpeningTypeList, WDG.AREANBR, SashNbrList) + local AreaList = WinCreate.AddSashGroup( WDG.AREAID, MeasureTypeList, DimensionList, WDG.DAYLIGHT, JointList, nil, SashTypeList, OpeningTypeList, WDG.AREANBR, SashNbrList) FillVariableList( 'AREAID', AreaList) + CleanVariableList( 'MEASURETYPE') CleanVariableList( 'DIMENSION') CleanVariableList( 'JOINT') CleanVariableList( 'SASHTYPE') @@ -312,23 +315,38 @@ _G.WinCreate_AddThreshold = WinCreate_AddThreshold ---------------------------------------------------------------------------------- local function WinCreate_AddSplits() + local MeasureTypeList = GetVariableList( 'MEASURETYPE') local PositionList = GetVariableList( 'POSITION') - local AreaList = WinCreate.AddSplits( WDG.AREAID, WDG.SPLITORIENTATION, WDG.MEASURETYPE, PositionList, false, WDG.AREANBR) + local ElemDimList = GetVariableList( 'ELEMENTDIM') + + local AreaList = WinCreate.AddSplits( WDG.AREAID, WDG.SPLITORIENTATION, MeasureTypeList, PositionList, ElemDimList, false, true, WDG_MUNTINSIDE, WDG.AREANBR) FillVariableList( 'AREAID', AreaList) + + CleanVariableList( 'MEASURETYPE') CleanVariableList( 'POSITION') + CleanVariableList( 'ELEMENTDIM') end _G.WinCreate_AddSplits = WinCreate_AddSplits ---------------------------------------------------------------------------------- local function WinCreate_AddGridSplits() + local MeasureTypeListVert = GetVariableList( 'MEASURETYPE_VERT') + local MeasureTypeListHoriz = GetVariableList( 'MEASURETYPE_HORIZ') local PositionListVert = GetVariableList( 'POSITION_VERT') local PositionListHoriz = GetVariableList( 'POSITION_HORIZ') + local ElemDimListVert = GetVariableList( 'ELEMENTDIM_VERT') + local ElemDimListHoriz = GetVariableList( 'ELEMENTDIM_HORIZ') - local AreaList = WinCreate.AddGridSplits( WDG.AREAID, WDG.MEASURETYPE, PositionListVert, PositionListHoriz, WDG.STARTVERTICAL, WDG.AREANBR) + local AreaList = WinCreate.AddGridSplits( WDG.AREAID, MeasureTypeListVert, PositionListVert, MeasureTypeListHoriz, PositionListHoriz, WDG.STARTVERTICAL, + ElemDimListVert, ElemDimListHoriz, WDG.MUNTINSIDE, WDG.AREANBR) FillVariableList( 'AREAID', AreaList) + CleanVariableList( 'MEASURETYPE_VERT') + CleanVariableList( 'MEASURETYPE_HORIZ') CleanVariableList( 'POSITION_VERT') CleanVariableList( 'POSITION_HORIZ') + CleanVariableList( 'ELEMENTDIM_VERT') + CleanVariableList( 'ELEMENTDIM_HORIZ') end _G.WinCreate_AddGridSplits = WinCreate_AddGridSplits