Primo commit:

- progettazione serramenti rettangolari , ad arco e di forma generica
- gestione vetrifissi, ante, divisioni, montanti, ante battenti e riceventi
- costruzione solidi
- scrittura e lettura file jwd
- inizio creazione test
- inizio gestione spine
This commit is contained in:
Emmanuele Sassi
2023-12-12 16:30:52 +01:00
parent 0b0a419507
commit a550ccc3ed
77 changed files with 8870 additions and 0 deletions
+105
View File
@@ -0,0 +1,105 @@
{
"Lua.diagnostics.globals": [
"EgtProtectGlobal",
"EgtGetFirstNameInGroup",
"EgtGetBBox",
"REF",
"GDB_BB",
"EgtGetName",
"EgtSP",
"EgtEP",
"EgtRectangle2P",
"EgtModifyCurveExtrusion",
"EgtSetName",
"EgtModifyCurveThickness",
"Z_AX",
"Y_AX",
"X_AX",
"EgtCopy",
"EgtMove",
"EgtRotate",
"Point3d",
"EgtSurfTmByExtrusion",
"EgtInvertSurf",
"EgtGetBBoxGlob",
"EgtSurfTmCut",
"EgtErase",
"EgtGroup",
"GDB_ID",
"ORIG",
"EgtInvertCurve",
"EgtSetInfo",
"EgtIf",
"EgtGetInfo",
"Color3d",
"EgtSetColor",
"EgtChangeGroupFrame",
"Frame3d",
"EgtSV",
"SphericalFromVector",
"EgtGetParent",
"EgtLine",
"EgtCurveCompo",
"EgtGetFirstInGroup",
"EgtGetNext",
"EgtSurfFlatRegion",
"EgtTrimCurveWithRegion",
"EgtCurveCompoFromPoints",
"EgtAddCurveCompoLine",
"EgtCurveLength",
"GetAngle",
"GLOB_FRM",
"GDB_RT",
"EgtGetAllInGroup",
"EgtFR",
"EgtTransform",
"EgtOffsetCurve",
"EgtIP",
"EgtCurveParamAtPoint",
"EgtTrimCurveStartAtParam",
"EgtTrimCurveEndAtParam",
"EgtCurveCompoByChain",
"EgtExtendCurveStartByLen",
"EgtExtendCurveEndByLen",
"EgtSurfTmSwept",
"abs",
"EgtEV",
"EgtLinePVL",
"AreSamePointExact",
"EgtGetBBoxRef",
"EgtEmptyGroup",
"EgtRemoveInfo",
"EgtSetAlpha",
"EgtSurfTmByRegionExtrusion",
"EgtRelocateGlob",
"EgtGetPrev",
"EgtGetLastInGroup",
"EgtRemoveName",
"AreSameVectorExact",
"AreSameVectorApprox",
"AreSamePointApprox",
"min",
"max",
"EgtTrimCurveStartEndAtParam",
"EgtGetNextName",
"EgtMP",
"EgtPointCurveDist",
"EgtGetType",
"GDB_TY",
"EgtArc3P",
"EgtInsertFile",
"EgtSetStatus",
"GDB_ST",
"EgtOutBox",
"EgtChangePathExtension",
"EgtPointCurveDistSide",
"EgtMV",
"EgtUV",
"EgtCopyGlob",
"EgtCP",
"Vector3d"
],
"Lua.diagnostics.disable": [
"empty-block"
]
}
+271
View File
@@ -0,0 +1,271 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
---- Imposto direttorio libreria specializzata per Nesting
--local sBaseDir = EgtGetSourceDir()
--EgtOutLog("BaseDir=" .. sBaseDir)
--EgtAddToPackagePath( sBaseDir .. '?.lua')
-- local Config = require( 'Config')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
-- Tipi di giunzioni (joint)
JNT = {
ANGLED = 1,
CP_H = 2,
CP_V = 3,
CP_M = 4
}
-- Tipi di profilo
PRF = {
NULL = 0,
TOP = 1,
BOTTOM = 2,
LEFT = 3,
RIGHT = 4,
VERTICAL = 5,
HORIZONTAL = 6
}
local CUT_SURF_EPS_SMALL = 0.05
local PROFILE = 'Profile'
local FRAME = 'Frame'
local OUTLINE = 'Outline'
local GEO = 'Geo'
local SOLID = 'Solid'
local BOTTOM = 'Bottom'
local RIGHT = 'Right'
local TOP = 'Top'
local LEFT = 'Left'
local SASH_TOP = 'Sash_Top'
local SASH_BOTTOM = 'Sash_Bottom'
local FIXED_TOP = 'Fixed_Top'
local FIXED_BOTTOM = 'Fixed_Bottom'
local REF = 'Ref'
local SECTION = 'Section'
local ALU = 'Alu'
local CTRIN = 'CtrIn'
local OUT = 'Out'
local OUTOFST = 'OutOfst'
local HoleHeight = 1200
local HoleWidth = 1200
local WindowWidth = 1200
local WindowHeight = 1200
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- funzioni
-- funzione che restituisce BBox del Ref del profilo
local function GetRefWithBBoxFromProfile( nProfileFrameId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
local function GetDeltaProfile( nProfileFrameId, sProfileType)
local nProfileId, b3Ref = GetRefWithBBoxFromProfile( nProfileFrameId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameFootPrint( nProfileFrameId, nId, nGeoId)
-- ricavo tipo dal nome
local sName = EgtGetName( nId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
local p3FrameStart = EgtSP( nId)
local p3FrameEnd = EgtEP( nId)
local nNewGeoId
if nProfileType == PRF.TOP then
-- recupero ref e controprofilo del top e calcolo delta
local _, b3TopRef = GetRefWithBBoxFromProfile( nProfileFrameId, SASH_TOP)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd - Y_AX() * b3TopRef:getDimY(), p3FrameStart)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, TOP)
elseif nProfileType == PRF.BOTTOM then
local _, b3BottomRef = GetRefWithBBoxFromProfile( nProfileFrameId, SASH_BOTTOM)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart, p3FrameEnd + Y_AX() * b3BottomRef:getDimY())
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3BottomRef:getDimX())
EgtSetName( nNewGeoId, BOTTOM)
elseif nProfileType == PRF.LEFT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd + Y_AX() * dBottomCPDelta , p3FrameStart + X_AX() * b3TopRef:getDimY() - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, LEFT)
elseif nProfileType == PRF.RIGHT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart - X_AX() * b3TopRef:getDimY() + Y_AX() * dBottomCPDelta , p3FrameEnd - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, RIGHT)
end
end
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtNewFile()
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- creo struttura layer del frame
local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameLayerId, FRAME)
local nOutlineId = EgtGroup( nFrameLayerId)
EgtSetName( nOutlineId, OUTLINE)
local nGeoId = EgtGroup( nFrameLayerId)
EgtSetName( nGeoId, GEO)
local nSolidId = EgtGroup( nFrameLayerId)
EgtSetName( nSolidId, SOLID)
local nFrameProfileId = EgtGroup( nFrameLayerId)
EgtSetName( nFrameProfileId, PROFILE)
-- disegno outline
local nFrameBottomId = EgtLine( nOutlineId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0) )
EgtSetName( nFrameBottomId, BOTTOM)
local nFrameRightId = EgtLine( nOutlineId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0) )
EgtSetName( nFrameRightId, RIGHT)
local nFrameTopId = EgtLine( nOutlineId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0) )
EgtSetName( nFrameTopId, TOP)
local nFrameLeftId = EgtLine( nOutlineId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0) )
EgtSetName( nFrameLeftId, LEFT)
-- scelgo tipo di giunzioni
-- per il momento faccio controprofili verticali
-- scelgo il tipo
-- per il momento faccio controprofili per anta
-- disegno ingombri frame
local nProfileFrameId = EgtGetFirstNameInGroup( nProfileId, FRAME)
local nCurrOutlineId = EgtGetFirstInGroup( nOutlineId)
while nCurrOutlineId do
CalcFrameFootPrint( nProfileFrameId, nCurrOutlineId, nGeoId)
nCurrOutlineId = EgtGetNext( nCurrOutlineId)
end
-- posiziono profili
-- bottom
local nBottomProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_BOTTOM)
-- creo copia
local nBottomFrameProfileId = EgtCopy( nBottomProfileId, nFrameProfileId)
local b3BottomFrameProfile = EgtGetBBox( nBottomFrameProfileId, GDB_BB.STANDARD)
-- recupero posizione e BBox del geo
local nBottomGeoId = EgtGetFirstNameInGroup( nGeoId, BOTTOM)
local b3BottomGeo = EgtGetBBox(nBottomGeoId, GDB_BB.STANDARD)
EgtMove( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ() - Point3d( b3BottomFrameProfile:getMax():getX(), b3BottomFrameProfile:getMin():getY(), b3BottomGeo:getMax():getZ()))
EgtRotate( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ(), Y_AX(), -90)
-- recupero profilo outline e lo estrudo
local nBottomFrameOutlineId = EgtGetFirstNameInGroup( nBottomFrameProfileId, SECTION)
local nBottomExtrusionId = EgtSurfTmByExtrusion( nSolidId, nBottomFrameOutlineId, X_AX() * b3BottomGeo:getDimX())
EgtInvertSurf( nBottomExtrusionId)
-- copio e sposto profilo out left su start bottom per tagliarlo
local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_TOP)
local nBottomOutLeftProfileId = EgtCopy( nLeftProfileId, nFrameProfileId)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
local b3BottomOutLeftProfileId = EgtGetBBoxGlob(nBottomOutLeftProfileId, GDB_BB.STANDARD)
EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
local nOutLeftProfileId = EgtGetFirstNameInGroup( nBottomOutLeftProfileId, OUTOFST)
local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidId, nOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidId)
EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, true, false)
EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nExtrCopyId, true, false)
--EgtErase( nExtrCopyId)
-- copio e sposto profilo out left su end bottom per tagliarlo
local nRightProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_TOP)
local nBottomOutRightProfileId = EgtCopy( nRightProfileId, nFrameProfileId)
EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), -90)
local b3BottomOutRightProfileId = EgtGetBBoxGlob(nBottomOutRightProfileId, GDB_BB.STANDARD)
EgtMove( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMax():getX(),b3BottomGeo:getMin():getY(),b3BottomGeo:getMin():getZ()) - Point3d( b3BottomOutRightProfileId:getMax():getX(), b3BottomOutRightProfileId:getMin():getY(),b3BottomOutRightProfileId:getMin():getZ()))
local nOutRightProfileId = EgtGetFirstNameInGroup( nBottomOutRightProfileId, OUTOFST)
local nBottomOutRightProfileExtrusionId = EgtSurfTmByExtrusion( nSolidId, nOutRightProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
--EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
--local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidId)
EgtSurfTmCut( nBottomExtrusionId, nBottomOutRightProfileExtrusionId, true, false)
EgtSurfTmCut( nBottomOutRightProfileExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
+338
View File
@@ -0,0 +1,338 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
---- Imposto direttorio libreria specializzata per Nesting
--local sBaseDir = EgtGetSourceDir()
--EgtOutLog("BaseDir=" .. sBaseDir)
--EgtAddToPackagePath( sBaseDir .. '?.lua')
-- local Config = require( 'Config')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
-- Tipi di giunzioni (joint)
JNT = {
ANGLED = 1,
CP_H = 2,
CP_V = 3,
CP_M = 4
}
-- Tipi di profilo
PRF = {
NULL = 0,
TOP = 1,
BOTTOM = 2,
LEFT = 3,
RIGHT = 4,
VERTICAL = 5,
HORIZONTAL = 6
}
local CUT_SURF_EPS_SMALL = 0.05
local PROFILE = 'Profile'
local FRAME = 'Frame'
local OUTLINE = 'Outline'
local GEO = 'Geo'
local SOLID = 'Solid'
local BOTTOM = 'Bottom'
local RIGHT = 'Right'
local TOP = 'Top'
local LEFT = 'Left'
local SASH_TOP = 'Sash_Top'
local SASH_BOTTOM = 'Sash_Bottom'
local FIXED_TOP = 'Fixed_Top'
local FIXED_BOTTOM = 'Fixed_Bottom'
local REF = 'Ref'
local SECTION = 'Section'
local ALU = 'Alu'
local CTRIN = 'CtrIn'
local OUT = 'Out'
local OUTOFST = 'OutOfst'
local HoleHeight = 1200
local HoleWidth = 1200
local WindowWidth = 1200
local WindowHeight = 1200
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- funzioni
-- funzione che restituisce BBox del Ref del profilo
local function GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
local function GetDeltaProfile( nProfileFrameLayerId, sProfileType)
local nProfileId, b3Ref = GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameFootPrint( nProfileFrameLayerId, nId, nGeoId)
-- ricavo tipo dal nome
local sName = EgtGetName( nId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
local p3FrameStart = EgtSP( nId)
local p3FrameEnd = EgtEP( nId)
local nNewGeoId
if nProfileType == PRF.TOP then
-- recupero ref e controprofilo del top e calcolo delta
local _, b3TopRef = GetRefWithBBoxFromProfile( nProfileFrameLayerId, SASH_TOP)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd - Y_AX() * b3TopRef:getDimY(), p3FrameStart)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, TOP)
elseif nProfileType == PRF.BOTTOM then
local _, b3BottomRef = GetRefWithBBoxFromProfile( nProfileFrameLayerId, SASH_BOTTOM)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart, p3FrameEnd + Y_AX() * b3BottomRef:getDimY())
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3BottomRef:getDimX())
EgtSetName( nNewGeoId, BOTTOM)
elseif nProfileType == PRF.LEFT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameLayerId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameLayerId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd + Y_AX() * dBottomCPDelta , p3FrameStart + X_AX() * b3TopRef:getDimY() - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, LEFT)
elseif nProfileType == PRF.RIGHT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameLayerId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameLayerId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart - X_AX() * b3TopRef:getDimY() + Y_AX() * dBottomCPDelta , p3FrameEnd - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, RIGHT)
end
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameSolid( nProfileFrameLayerId, nGeoId, nFrameProfileLayerId, nGeoLayerId, nSolidLayerId)
-- ricavo tipo dal nome
local sName = EgtGetName( nGeoId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
if nProfileType == PRF.TOP then
elseif nProfileType == PRF.BOTTOM then
local nBottomProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_BOTTOM)
-- creo copia
local nBottomFrameProfileId = EgtCopy( nBottomProfileId, nFrameProfileLayerId)
local b3BottomFrameProfile = EgtGetBBox( nBottomFrameProfileId, GDB_BB.STANDARD)
-- recupero posizione e BBox del geo
local nBottomGeoId = EgtGetFirstNameInGroup( nGeoLayerId, BOTTOM)
local b3BottomGeo = EgtGetBBox(nBottomGeoId, GDB_BB.STANDARD)
EgtMove( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ() - Point3d( b3BottomFrameProfile:getMax():getX(), b3BottomFrameProfile:getMin():getY(), b3BottomGeo:getMax():getZ()))
EgtRotate( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ(), Y_AX(), -90)
-- recupero profilo outline e lo estrudo
local nBottomFrameOutlineId = EgtGetFirstNameInGroup( nBottomFrameProfileId, SECTION)
local nBottomExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nBottomFrameOutlineId, X_AX() * b3BottomGeo:getDimX())
EgtInvertSurf( nBottomExtrusionId)
-- copio e sposto profilo out left su start bottom per tagliarlo
local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
local nBottomOutLeftProfileId = EgtCopy( nLeftProfileId, nFrameProfileLayerId)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
local b3BottomOutLeftProfileId = EgtGetBBoxGlob(nBottomOutLeftProfileId, GDB_BB.STANDARD)
EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
local nOutLeftProfileId = EgtGetFirstNameInGroup( nBottomOutLeftProfileId, OUTOFST)
local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, true, false)
EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nExtrCopyId, true, false)
--EgtErase( nExtrCopyId)
-- copio e sposto profilo out left su end bottom per tagliarlo
local nRightProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
local nBottomOutRightProfileId = EgtCopy( nRightProfileId, nFrameProfileLayerId)
EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), -90)
local b3BottomOutRightProfileId = EgtGetBBoxGlob(nBottomOutRightProfileId, GDB_BB.STANDARD)
EgtMove( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMax():getX(),b3BottomGeo:getMin():getY(),b3BottomGeo:getMin():getZ()) - Point3d( b3BottomOutRightProfileId:getMax():getX(), b3BottomOutRightProfileId:getMin():getY(),b3BottomOutRightProfileId:getMin():getZ()))
local nOutRightProfileId = EgtGetFirstNameInGroup( nBottomOutRightProfileId, OUTOFST)
local nBottomOutRightProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutRightProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
--EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
--local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
EgtSurfTmCut( nBottomExtrusionId, nBottomOutRightProfileExtrusionId, true, false)
EgtSurfTmCut( nBottomOutRightProfileExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
elseif nProfileType == PRF.LEFT then
elseif nProfileType == PRF.RIGHT then
end
end
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtNewFile()
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- creo struttura layer del frame
local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameLayerId, FRAME)
local nOutlineLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nOutlineLayerId, OUTLINE)
local nGeoLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nGeoLayerId, GEO)
local nSolidLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nSolidLayerId, SOLID)
local nFrameProfileLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nFrameProfileLayerId, PROFILE)
-- disegno outline
local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0) )
EgtSetName( nFrameBottomId, BOTTOM)
local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0) )
EgtSetName( nFrameRightId, RIGHT)
local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0) )
EgtSetName( nFrameTopId, TOP)
local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0) )
EgtSetName( nFrameLeftId, LEFT)
-- scelgo tipo di giunzioni
-- per il momento faccio controprofili verticali
-- scelgo il tipo
-- per il momento faccio controprofili per anta
-- disegno ingombri frame
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileId, FRAME)
local nCurrOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nCurrOutlineId do
CalcFrameFootPrint( nProfileFrameLayerId, nCurrOutlineId, nGeoLayerId)
nCurrOutlineId = EgtGetNext( nCurrOutlineId)
end
-- posiziono profili
local nGeoId = EgtGetFirstInGroup( nGeoLayerId)
CalcFrameSolid(nProfileFrameLayerId, nGeoId, nFrameProfileLayerId, nGeoLayerId, nSolidLayerId)
---- bottom
--local nBottomProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_BOTTOM)
---- creo copia
--local nBottomFrameProfileId = EgtCopy( nBottomProfileId, nFrameProfileLayerId)
--local b3BottomFrameProfile = EgtGetBBox( nBottomFrameProfileId, GDB_BB.STANDARD)
---- recupero posizione e BBox del geo
--local nBottomGeoId = EgtGetFirstNameInGroup( nGeoId, BOTTOM)
--local b3BottomGeo = EgtGetBBox(nBottomGeoId, GDB_BB.STANDARD)
--EgtMove( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ() - Point3d( b3BottomFrameProfile:getMax():getX(), b3BottomFrameProfile:getMin():getY(), b3BottomGeo:getMax():getZ()))
--EgtRotate( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ(), Y_AX(), -90)
---- recupero profilo outline e lo estrudo
--local nBottomFrameOutlineId = EgtGetFirstNameInGroup( nBottomFrameProfileId, SECTION)
--local nBottomExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nBottomFrameOutlineId, X_AX() * b3BottomGeo:getDimX())
--EgtInvertSurf( nBottomExtrusionId)
---- copio e sposto profilo out left su start bottom per tagliarlo
--local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
--local nBottomOutLeftProfileId = EgtCopy( nLeftProfileId, nFrameProfileLayerId)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
--local b3BottomOutLeftProfileId = EgtGetBBoxGlob(nBottomOutLeftProfileId, GDB_BB.STANDARD)
--EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
--local nOutLeftProfileId = EgtGetFirstNameInGroup( nBottomOutLeftProfileId, OUTOFST)
--local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
--EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
--local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
--EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, true, false)
--EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nExtrCopyId, true, false)
----EgtErase( nExtrCopyId)
---- copio e sposto profilo out left su end bottom per tagliarlo
--local nRightProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
--local nBottomOutRightProfileId = EgtCopy( nRightProfileId, nFrameProfileLayerId)
--EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
--EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), -90)
--local b3BottomOutRightProfileId = EgtGetBBoxGlob(nBottomOutRightProfileId, GDB_BB.STANDARD)
--EgtMove( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMax():getX(),b3BottomGeo:getMin():getY(),b3BottomGeo:getMin():getZ()) - Point3d( b3BottomOutRightProfileId:getMax():getX(), b3BottomOutRightProfileId:getMin():getY(),b3BottomOutRightProfileId:getMin():getZ()))
--local nOutRightProfileId = EgtGetFirstNameInGroup( nBottomOutRightProfileId, OUTOFST)
--local nBottomOutRightProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutRightProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
----EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
----local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
--EgtSurfTmCut( nBottomExtrusionId, nBottomOutRightProfileExtrusionId, true, false)
--EgtSurfTmCut( nBottomOutRightProfileExtrusionId, nExtrCopyId, true, false)
--EgtErase( nExtrCopyId)
+266
View File
@@ -0,0 +1,266 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
---- Imposto direttorio libreria specializzata per Nesting
--local sBaseDir = EgtGetSourceDir()
--EgtOutLog("BaseDir=" .. sBaseDir)
--EgtAddToPackagePath( sBaseDir .. '?.lua')
-- local Config = require( 'Config')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
-- Tipi di giunzioni (joint)
JNT = {
ANGLED = 1,
CP_H = 2,
CP_V = 3,
CP_M = 4
}
-- Tipi di profilo
PRF = {
NULL = 0,
TOP = 1,
BOTTOM = 2,
LEFT = 3,
RIGHT = 4,
VERTICAL = 5,
HORIZONTAL = 6
}
local CUT_SURF_EPS_SMALL = 0.05
local PROFILE = 'Profile'
local FRAME = 'Frame'
local OUTLINE = 'Outline'
local GEO = 'Geo'
local SOLID = 'Solid'
local BOTTOM = 'Bottom'
local RIGHT = 'Right'
local TOP = 'Top'
local LEFT = 'Left'
local SASH_TOP = 'Sash_Top'
local SASH_BOTTOM = 'Sash_Bottom'
local FIXED_TOP = 'Fixed_Top'
local FIXED_BOTTOM = 'Fixed_Bottom'
local REF = 'Ref'
local SECTION = 'Section'
local ALU = 'Alu'
local CTRIN = 'CtrIn'
local OUT = 'Out'
local OUTOFST = 'OutOfst'
local HoleHeight = 1200
local HoleWidth = 1200
local WindowWidth = 1200
local WindowHeight = 1200
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- funzioni
-- funzione che restituisce BBox del Ref del profilo
local function GetRefWithBBoxFromProfile( nProfileFrameId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
local function GetDeltaProfile( nProfileFrameId, sProfileType)
local nProfileId, b3Ref = GetRefWithBBoxFromProfile( nProfileFrameId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameFootPrint( nProfileFrameId, nId, nGeoId)
-- ricavo tipo dal nome
local sName = EgtGetName( nId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
local p3FrameStart = EgtSP( nId)
local p3FrameEnd = EgtEP( nId)
local nNewGeoId
if nProfileType == PRF.TOP then
-- recupero ref e controprofilo del top e calcolo delta
local _, b3TopRef = GetRefWithBBoxFromProfile( nProfileFrameId, SASH_TOP)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd - Y_AX() * b3TopRef:getDimY(), p3FrameStart)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, TOP)
elseif nProfileType == PRF.BOTTOM then
local _, b3BottomRef = GetRefWithBBoxFromProfile( nProfileFrameId, SASH_BOTTOM)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart, p3FrameEnd + Y_AX() * b3BottomRef:getDimY())
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3BottomRef:getDimX())
EgtSetName( nNewGeoId, BOTTOM)
elseif nProfileType == PRF.LEFT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd + Y_AX() * dBottomCPDelta , p3FrameStart + X_AX() * b3TopRef:getDimY() - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, LEFT)
elseif nProfileType == PRF.RIGHT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart - X_AX() * b3TopRef:getDimY() + Y_AX() * dBottomCPDelta , p3FrameEnd - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, RIGHT)
end
end
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtNewFile()
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- creo struttura layer del frame
local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameLayerId, FRAME)
local nOutlineId = EgtGroup( nFrameLayerId)
EgtSetName( nOutlineId, OUTLINE)
local nGeoId = EgtGroup( nFrameLayerId)
EgtSetName( nGeoId, GEO)
local nSolidId = EgtGroup( nFrameLayerId)
EgtSetName( nSolidId, SOLID)
local nFrameProfileId = EgtGroup( nFrameLayerId)
EgtSetName( nFrameProfileId, PROFILE)
-- disegno outline
local nFrameBottomId = EgtLine( nOutlineId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0) )
EgtSetName( nFrameBottomId, BOTTOM)
local nFrameRightId = EgtLine( nOutlineId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0) )
EgtSetName( nFrameRightId, RIGHT)
local nFrameTopId = EgtLine( nOutlineId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0) )
EgtSetName( nFrameTopId, TOP)
local nFrameLeftId = EgtLine( nOutlineId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0) )
EgtSetName( nFrameLeftId, LEFT)
-- scelgo tipo di giunzioni
-- per il momento faccio controprofili verticali
-- scelgo il tipo
-- per il momento faccio controprofili per anta
-- disegno ingombri frame
local nProfileFrameId = EgtGetFirstNameInGroup( nProfileId, FRAME)
local nCurrOutlineId = EgtGetFirstInGroup( nOutlineId)
while nCurrOutlineId do
CalcFrameFootPrint( nProfileFrameId, nCurrOutlineId, nGeoId)
nCurrOutlineId = EgtGetNext( nCurrOutlineId)
end
-- posiziono profili
-- bottom
local nBottomProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_BOTTOM)
-- creo copia
local nBottomFrameProfileId = EgtCopy( nBottomProfileId, nFrameProfileId)
local b3BottomFrameProfile = EgtGetBBox( nBottomFrameProfileId, GDB_BB.STANDARD)
-- recupero posizione e BBox del geo
local nBottomGeoId = EgtGetFirstNameInGroup( nGeoId, BOTTOM)
local b3BottomGeo = EgtGetBBox(nBottomGeoId, GDB_BB.STANDARD)
EgtMove( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ() - Point3d( b3BottomFrameProfile:getMax():getX(), b3BottomFrameProfile:getMin():getY(), b3BottomGeo:getMax():getZ()))
EgtRotate( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ(), Y_AX(), -90)
-- recupero profilo outline e lo estrudo
local nBottomFrameOutlineId = EgtGetFirstNameInGroup( nBottomFrameProfileId, SECTION)
local nBottomExtrusionId = EgtSurfTmByExtrusion( nSolidId, nBottomFrameOutlineId, X_AX() * b3BottomGeo:getDimX())
EgtInvertSurf( nBottomExtrusionId)
-- copio e sposto profilo out left su start bottom per tagliarlo
local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_TOP)
local nBottomOutLeftProfileId = EgtCopy( nLeftProfileId, nFrameProfileId)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
local b3BottomOutLeftProfileId = EgtGetBBoxGlob(nBottomOutLeftProfileId, GDB_BB.STANDARD)
EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
local nOutLeftProfileId = EgtGetFirstNameInGroup( nBottomOutLeftProfileId, OUTOFST)
local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidId, nOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidId)
EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, true, false)
EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
--local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameId, SASH_TOP)
--local nOutLeftProfileId = EgtGetFirstNameInGroup( nLeftProfileId, OUTOFST)
--local nBottomOutLeftProfileId = EgtCopy( nOutLeftProfileId, nFrameProfileId)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
--local b3BottomOutLeftProfileId = EgtGetBBox(nBottomOutLeftProfileId, GDB_BB.STANDARD)
--EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
--local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidId, nBottomOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
--EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nBottomExtrusionId, true, false)
--EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, false, false)
+337
View File
@@ -0,0 +1,337 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
---- Imposto direttorio libreria specializzata per Nesting
--local sBaseDir = EgtGetSourceDir()
--EgtOutLog("BaseDir=" .. sBaseDir)
--EgtAddToPackagePath( sBaseDir .. '?.lua')
-- local Config = require( 'Config')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
-- Tipi di giunzioni (joint)
JNT = {
ANGLED = 1,
CP_H = 2,
CP_V = 3,
CP_M = 4
}
-- Tipi di profilo
PRF = {
NULL = 0,
TOP = 1,
BOTTOM = 2,
LEFT = 3,
RIGHT = 4,
VERTICAL = 5,
HORIZONTAL = 6
}
local CUT_SURF_EPS_SMALL = 0.05
local PROFILE = 'Profile'
local FRAME = 'Frame'
local OUTLINE = 'Outline'
local GEO = 'Geo'
local SOLID = 'Solid'
local BOTTOM = 'Bottom'
local RIGHT = 'Right'
local TOP = 'Top'
local LEFT = 'Left'
local SASH_TOP = 'Sash_Top'
local SASH_BOTTOM = 'Sash_Bottom'
local FIXED_TOP = 'Fixed_Top'
local FIXED_BOTTOM = 'Fixed_Bottom'
local REF = 'Ref'
local SECTION = 'Section'
local ALU = 'Alu'
local CTRIN = 'CtrIn'
local OUT = 'Out'
local OUTOFST = 'OutOfst'
local HoleHeight = 1200
local HoleWidth = 1200
local WindowWidth = 1200
local WindowHeight = 1200
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- funzioni
-- funzione che restituisce BBox del Ref del profilo
local function GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
local function GetDeltaProfile( nProfileFrameLayerId, sProfileType)
local nProfileId, b3Ref = GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameFootPrint( nProfileFrameLayerId, nId, nGeoId)
-- ricavo tipo dal nome
local sName = EgtGetName( nId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
local p3FrameStart = EgtSP( nId)
local p3FrameEnd = EgtEP( nId)
local nNewGeoId
if nProfileType == PRF.TOP then
-- recupero ref e controprofilo del top e calcolo delta
local _, b3TopRef = GetRefWithBBoxFromProfile( nProfileFrameLayerId, SASH_TOP)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd - Y_AX() * b3TopRef:getDimY(), p3FrameStart)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, TOP)
elseif nProfileType == PRF.BOTTOM then
local _, b3BottomRef = GetRefWithBBoxFromProfile( nProfileFrameLayerId, SASH_BOTTOM)
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart, p3FrameEnd + Y_AX() * b3BottomRef:getDimY())
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3BottomRef:getDimX())
EgtSetName( nNewGeoId, BOTTOM)
elseif nProfileType == PRF.LEFT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameLayerId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameLayerId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameEnd + Y_AX() * dBottomCPDelta , p3FrameStart + X_AX() * b3TopRef:getDimY() - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, LEFT)
elseif nProfileType == PRF.RIGHT then
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = GetDeltaProfile( nProfileFrameLayerId, SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = GetDeltaProfile( nProfileFrameLayerId, SASH_BOTTOM)
-- creo rettangolo ingombro
nNewGeoId = EgtRectangle2P( nGeoId, p3FrameStart - X_AX() * b3TopRef:getDimY() + Y_AX() * dBottomCPDelta , p3FrameEnd - Y_AX() * dTopCPDelta)
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, RIGHT)
end
end
-- funzione che calcola l'ingombro dei pezzi del telaio
local function CalcFrameSolid( nProfileFrameLayerId, nGeoId, nFrameProfileLayerId, nGeoLayerId, nSolidLayerId)
-- ricavo tipo dal nome
local sName = EgtGetName( nGeoId)
local nProfileType = PRF.NULL
if sName == TOP then
nProfileType = PRF.TOP
elseif sName == BOTTOM then
nProfileType = PRF.BOTTOM
elseif sName == LEFT then
nProfileType = PRF.LEFT
elseif sName == RIGHT then
nProfileType = PRF.RIGHT
end
if nProfileType == PRF.TOP then
elseif nProfileType == PRF.BOTTOM then
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_BOTTOM)
-- creo copia
local nFrameProfileId = EgtCopy( nProfileId, nFrameProfileLayerId)
local b3FrameProfile = EgtGetBBox( nFrameProfileId, GDB_BB.STANDARD)
-- recupero posizione e BBox del geo
local b3Geo = EgtGetBBox(nGeoId, GDB_BB.STANDARD)
EgtMove( nFrameProfileId, b3Geo:getMin() + Z_AX() * b3Geo:getDimZ() - Point3d( b3FrameProfile:getMax():getX(), b3FrameProfile:getMin():getY(), b3Geo:getMax():getZ()))
EgtRotate( nFrameProfileId, b3Geo:getMin() + Z_AX() * b3Geo:getDimZ(), Y_AX(), -90)
-- recupero profilo outline e lo estrudo
local nFrameOutlineId = EgtGetFirstNameInGroup( nFrameProfileId, SECTION)
local nExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nFrameOutlineId, X_AX() * b3Geo:getDimX())
EgtInvertSurf( nExtrusionId)
-- copio e sposto profilo out left su start bottom per tagliarlo
local nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
local nStartProfileId = EgtCopy( nOrigStartProfileId, nFrameProfileLayerId)
EgtRotate( nStartProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nStartProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Z_AX(), 90)
local b3StartProfileId = EgtGetBBoxGlob(nStartProfileId, GDB_BB.STANDARD)
EgtMove( nStartProfileId, b3Geo:getMin() - b3StartProfileId:getMin())
local nOutStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, OUTOFST)
local nStartExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutStartProfileId, Y_AX() * b3FrameProfile:getDimY())
EgtInvertSurf( nStartExtrusionId)
local nExtrCopyId = EgtCopy( nExtrusionId, nSolidLayerId)
EgtSurfTmCut( nExtrusionId, nStartExtrusionId, true, false)
EgtSurfTmCut( nStartExtrusionId, nExtrCopyId, true, false)
--EgtErase( nExtrCopyId)
-- copio e sposto profilo out left su end bottom per tagliarlo
local nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
local nEndProfileId = EgtCopy( nOrigEndProfileId, nFrameProfileLayerId)
EgtRotate( nEndProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Y_AX(), -90)
EgtRotate( nEndProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Z_AX(), -90)
local b3EndProfileId = EgtGetBBoxGlob(nEndProfileId, GDB_BB.STANDARD)
EgtMove( nEndProfileId, Point3d( b3Geo:getMax():getX(),b3Geo:getMin():getY(),b3Geo:getMin():getZ()) - Point3d( b3EndProfileId:getMax():getX(), b3EndProfileId:getMin():getY(),b3EndProfileId:getMin():getZ()))
local nOutEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, OUTOFST)
local nEndExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutEndProfileId, Y_AX() * b3FrameProfile:getDimY())
--EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
--local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
EgtSurfTmCut( nExtrusionId, nEndExtrusionId, true, false)
EgtSurfTmCut( nEndExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
elseif nProfileType == PRF.LEFT then
elseif nProfileType == PRF.RIGHT then
end
end
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtNewFile()
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- creo struttura layer del frame
local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameLayerId, FRAME)
local nOutlineLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nOutlineLayerId, OUTLINE)
local nGeoLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nGeoLayerId, GEO)
local nSolidLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nSolidLayerId, SOLID)
local nFrameProfileLayerId = EgtGroup( nFrameLayerId)
EgtSetName( nFrameProfileLayerId, PROFILE)
-- disegno outline
local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0) )
EgtSetName( nFrameBottomId, BOTTOM)
local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0) )
EgtSetName( nFrameRightId, RIGHT)
local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0) )
EgtSetName( nFrameTopId, TOP)
local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0) )
EgtSetName( nFrameLeftId, LEFT)
-- scelgo tipo di giunzioni
-- per il momento faccio controprofili verticali
-- scelgo il tipo
-- per il momento faccio controprofili per anta
-- disegno ingombri frame
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileId, FRAME)
local nCurrOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nCurrOutlineId do
CalcFrameFootPrint( nProfileFrameLayerId, nCurrOutlineId, nGeoLayerId)
nCurrOutlineId = EgtGetNext( nCurrOutlineId)
end
-- posiziono profili
local nGeoId = EgtGetFirstInGroup( nGeoLayerId)
CalcFrameSolid(nProfileFrameLayerId, nGeoId, nFrameProfileLayerId, nGeoLayerId, nSolidLayerId)
---- bottom
--local nBottomProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_BOTTOM)
---- creo copia
--local nBottomFrameProfileId = EgtCopy( nBottomProfileId, nFrameProfileLayerId)
--local b3BottomFrameProfile = EgtGetBBox( nBottomFrameProfileId, GDB_BB.STANDARD)
---- recupero posizione e BBox del geo
--local nBottomGeoId = EgtGetFirstNameInGroup( nGeoId, BOTTOM)
--local b3BottomGeo = EgtGetBBox(nBottomGeoId, GDB_BB.STANDARD)
--EgtMove( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ() - Point3d( b3BottomFrameProfile:getMax():getX(), b3BottomFrameProfile:getMin():getY(), b3BottomGeo:getMax():getZ()))
--EgtRotate( nBottomFrameProfileId, b3BottomGeo:getMin() + Z_AX() * b3BottomGeo:getDimZ(), Y_AX(), -90)
---- recupero profilo outline e lo estrudo
--local nBottomFrameOutlineId = EgtGetFirstNameInGroup( nBottomFrameProfileId, SECTION)
--local nBottomExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nBottomFrameOutlineId, X_AX() * b3BottomGeo:getDimX())
--EgtInvertSurf( nBottomExtrusionId)
---- copio e sposto profilo out left su start bottom per tagliarlo
--local nLeftProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
--local nBottomOutLeftProfileId = EgtCopy( nLeftProfileId, nFrameProfileLayerId)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
--EgtRotate( nBottomOutLeftProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), 90)
--local b3BottomOutLeftProfileId = EgtGetBBoxGlob(nBottomOutLeftProfileId, GDB_BB.STANDARD)
--EgtMove( nBottomOutLeftProfileId, b3BottomGeo:getMin() - b3BottomOutLeftProfileId:getMin())
--local nOutLeftProfileId = EgtGetFirstNameInGroup( nBottomOutLeftProfileId, OUTOFST)
--local nBottomOutLeftProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutLeftProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
--EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
--local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
--EgtSurfTmCut( nBottomExtrusionId, nBottomOutLeftProfileExtrusionId, true, false)
--EgtSurfTmCut( nBottomOutLeftProfileExtrusionId, nExtrCopyId, true, false)
----EgtErase( nExtrCopyId)
---- copio e sposto profilo out left su end bottom per tagliarlo
--local nRightProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, SASH_TOP)
--local nBottomOutRightProfileId = EgtCopy( nRightProfileId, nFrameProfileLayerId)
--EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Y_AX(), -90)
--EgtRotate( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMin():getX(), b3BottomGeo:getMin():getY(), b3BottomGeo:getMax():getZ()), Z_AX(), -90)
--local b3BottomOutRightProfileId = EgtGetBBoxGlob(nBottomOutRightProfileId, GDB_BB.STANDARD)
--EgtMove( nBottomOutRightProfileId, Point3d( b3BottomGeo:getMax():getX(),b3BottomGeo:getMin():getY(),b3BottomGeo:getMin():getZ()) - Point3d( b3BottomOutRightProfileId:getMax():getX(), b3BottomOutRightProfileId:getMin():getY(),b3BottomOutRightProfileId:getMin():getZ()))
--local nOutRightProfileId = EgtGetFirstNameInGroup( nBottomOutRightProfileId, OUTOFST)
--local nBottomOutRightProfileExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutRightProfileId, Y_AX() * b3BottomFrameProfile:getDimY())
----EgtInvertSurf( nBottomOutLeftProfileExtrusionId)
----local nExtrCopyId = EgtCopy( nBottomExtrusionId, nSolidLayerId)
--EgtSurfTmCut( nBottomExtrusionId, nBottomOutRightProfileExtrusionId, true, false)
--EgtSurfTmCut( nBottomOutRightProfileExtrusionId, nExtrCopyId, true, false)
--EgtErase( nExtrCopyId)
+227
View File
@@ -0,0 +1,227 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
--EgtEnableDebug( false)
-- Imposto direttorio per librerie
local sBaseDir = EgtGetSourceDir()
EgtOutLog("BaseDir=" .. sBaseDir)
EgtAddToPackagePath( sBaseDir .. '?.lua')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinLib = nil
local WinLib = require( 'WinLib')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
local HoleWidth = 1835
local HoleHeight = 1516
local WindowWidth = 1800
local WindowHeight = 1500
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- funzioni
local function CreatePartFromArea( nAreaId)
-- creo pezzi outline
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE)
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
WinLib.CreatePartFromOutline( nAreaId, nOutlineId)
nOutlineId = EgtGetNext( nOutlineId)
end
-- verifico se c'e' uno split
local nSplitLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_SPLIT)
if nSplitLayerId then
local nSplitId = EgtGetFirstInGroup( nSplitLayerId)
if nSplitId then
-- creo pezzo split
WinLib.CreatePartFromOutline( nAreaId, nSplitId)
end
end
-- verifico se ci sono aree
local nArea1Id = EgtGetFirstNameInGroup( nAreaId, WIN_AREA1)
if nArea1Id then
-- lancio costruzione pezzi di quell'area
CreatePartFromArea(nArea1Id)
end
local nArea2Id = EgtGetFirstNameInGroup( nAreaId, WIN_AREA1)
if nArea1Id then
-- lancio costruzione pezzi di quell'area
CreatePartFromArea(nArea1Id)
end
end
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtNewFile()
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, WIN_PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- creo buco
local nHoleLayerId = WinLib.CreateHole( HoleWidth, HoleHeight)
-- creo frame come buco
WinLib.CreateFrameAsHole( nHoleLayerId, WIN_JNT.FULL_H)
local nSashId = WinLib.AddSash( nHoleLayerId)
local nFillId = WinLib.AddFill( nSashId, WIN_FILLTYPES.GLASS)
-- -- creo gruppo frame
-- local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
-- EgtSetName( nFrameLayerId, WIN_FRAME)
-- local nOutlineLayerId = EgtGroup( nFrameLayerId)
-- EgtSetName( nOutlineLayerId, WIN_OUTLINE)
-- -- disegno outline
-- local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0), Vector3d( -1, 0.5, 0))
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- cerchio
-- local nFrameBottomId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0))
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- disegno outline
-- local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth+400, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( -200, WindowHeight-300, 0))
-- --local nFrameTopId = EgtArc2PV( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( -200, WindowHeight-300, 0), Vector3d( -1, 0.5, 0))
-- --local nFirstArcId = EgtArc2PDEx(nOutlineLayerId,{-200,1220,0},{0,1700,0},GDB_PT.STD,-1,90,GDB_RT.GRID) -- Id=369
-- --local nFrameTopId = EgtCurveCompo(nOutlineLayerId,nFirstArcId,true) -- Id=369
-- --local nSecondArcId = EgtArc2PDEx(nOutlineLayerId,{0,1700,0},{1700,1900,0},GDB_PT.STD,-1,44.7603,GDB_RT.GRID) -- Id=370
-- --EgtAddCurveCompoCurve(nFrameTopId,nSecondArcId,true,true) -- Ok=1
-- --local nThirdArcId = EgtArc2PDEx(nOutlineLayerId,{1700,1900,0},{1930,1520,0},GDB_PT.STD,199,328.6594,GDB_RT.GRID) -- Id=370
-- --EgtAddCurveCompoCurve(nFrameTopId,nThirdArcId,true,true) -- Ok=1
-- --EgtInvertCurve( nFrameTopId)
-- --local nFrameTop1Id = EgtLine( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( WindowWidth / 2, WindowHeight+100, 0))
-- --local nFrameTop2Id = EgtLine( nOutlineLayerId, Point3d( WindowWidth / 2, WindowHeight+100, 0), Point3d( -200, WindowHeight-300, 0))
-- --local nFrameTopId = EgtCurveCompo(nOutlineLayerId,nFrameTop1Id,true) -- Id=369
-- --EgtAddCurveCompoCurve(nFrameTopId,nFrameTop2Id,true,true) -- Ok=1
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( -200, WindowHeight-300, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- scelgo tipo di giunzioni
-- local JointType = WIN_JNT.FULL_H
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_BL, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_BR, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_TL, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_TR, JointType)
-- -- funzione che assegna i profili serramento ai vari outline
-- -- per il momento li assegno a mano
-- EgtSetInfo( nFrameBottomId, WIN_PROFILETYPE, WIN_SASH_BOTTOM)
-- EgtSetInfo( nFrameRightId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- EgtSetInfo( nFrameTopId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- EgtSetInfo( nFrameLeftId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- -- definisco prima divisione
-- WinLib.AddSplit( nHoleLayerId, WIN_SPLITTYPE.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- WinLib.AddSplit( nFrameLayerId, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, 2, 3)
--WinLib.AddSplits( nFrameLayerId, WIN_SPLITTYPE.VERTICAL, WIN_MEASURE.ABSOLUT, { WindowWidth / 5, WindowWidth / 3 * 2})
--WinLib.AddSplits( nFrameLayerId, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, { 1.5, 3}, 4.5)
-- local nSplitId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight / 2, 0), Point3d( WindowWidth, WindowHeight / 4, 0))
-- local nArc1Id = EgtArc2PDEx( nOutlineLayerId, { 600, 1500, 0}, { 900, 800, 0}, GDB_PT.STD, -1, 270, GDB_RT.GRID) -- Id=301
-- local nSplitId = EgtCurveCompo( nOutlineLayerId, nArc1Id, true) -- Id=301
-- local nArc2Id = EgtArc2PDEx( nOutlineLayerId, { 900, 800, 0}, { 900, 0, 0}, GDB_PT.STD, -1, 316.3972, GDB_RT.GRID) -- Id=302
-- EgtAddCurveCompoCurve( nSplitId, nArc2Id, true, true) -- Ok=1
-- EgtInvertCurve( nSplitId)
-- WinLib.AddGenSplit( nFrameLayerId, nSplitId)
-- local nArea1Id = EgtGetFirstNameInGroup( nHoleLayerId, WIN_AREA1)
-- WinLib.AddSplit( nArea1Id, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, 2, 3)
-- creo pezzi per outline
-- local nCurrOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
-- while nCurrOutlineId do
-- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId)
-- nCurrOutlineId = EgtGetNext( nCurrOutlineId)
-- end
-- local nCurrOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_SPLIT)
-- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId)
-- creo tutti i pezzi
CreatePartFromArea( nHoleLayerId)
-- assemblo i pezzi
--WinLib.AssembleFrame()
EgtDraw()
+644
View File
@@ -0,0 +1,644 @@
--
-- EEEEEEEEEE GGGGGG WW WW WW
-- EEEEEEEEEE GGGGGGGGGG WW WW WW
-- EEEE GGGG GGGG WW WW WW
-- EEEE GGGG WWW WWWW WWW
-- EEEEEEE GGGG GGGGGGG WW WWWW WW
-- EEEEEEE GGGG GGGGGGG WWW WWWW WWW
-- EEEE GGGG GGGG WWWW WWWW
-- EEEE GGGG GGGG WWWW WWWW
-- EEEEEEEEEE GGGGGGGGGG WWW WWW
-- EEEEEEEEEE GGGGGG WW WW
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
-- EgtEnableDebug( false)
-- Imposto direttorio per librerie
local sBaseDir = EgtGetSourceDir()
EgtOutLog("BaseDir=" .. sBaseDir)
EgtAddToPackagePath( sBaseDir .. '?.lua')
EgtAddToPackagePath( sBaseDir .. 'WinLib\\' .. '?.lua')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinCreate = nil
local WinCreate = require( 'WinCreate')
_G.package.loaded.WinCalculate = nil
local WinCalculate = require( 'WinCalculate')
_G.package.loaded.WinManageProject = nil
local WinManageProject = require( 'WinManageProject')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
local HoleWidth = 1835
local HoleHeight = 1516
local WindowWidth = 1800
local WindowHeight = 1500
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtStartCounter()
EgtNewFile()
-- importo profilo prescelto
WinCreate.ImportProfile( sProfilePath)
-- creo telaio rettangolare
local FrameJointType = WIN_JNT.FULL_H
local nFrameId = WinCreate.CreateFrame( WindowWidth, WindowHeight, FrameJointType, FrameJointType, FrameJointType, FrameJointType)
-- -- creo telaio generico
-- local nDrawFramePartId = EgtGroup( GDB_ID.ROOT)
-- EgtSetName( nDrawFramePartId, 'DrawFrame')
-- local nDrawFrameLayerId = EgtGroup( nDrawFramePartId)
-- local nFrameBottomId = EgtLine( nDrawFrameLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- local nFrameRightId = EgtLine( nDrawFrameLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- local nFrameTopId = EgtArc2PV( nDrawFrameLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0), Vector3d( 0, 1, 0))
-- --local nFrameTopId = EgtLine( nDrawFrameLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0))
-- local nFrameLeftId = EgtLine( nDrawFrameLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- local FrameJointType = WIN_JNT.ANGLED
-- local nFrameId = WinCreate.CreateGenFrame( nFrameBottomId, nFrameRightId, nFrameTopId, nFrameLeftId, FrameJointType, FrameJointType, FrameJointType, FrameJointType)
------------------------ Finestra vetro fisso ------------------------
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- aggiungo vetro
-- local nFillId = WinCreate.AddFill( nFrameId, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione orizzontale ------------------------
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione verticale ------------------------
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione orizzontale e verticale ------------------------
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- definisco divisioni
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- local nFill3Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill4Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
-- ------------------------ Finestra anta singola ------------------------
-- aggiungo anta
local SashJointType = WIN_JNT.FULL_V
local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- aggiungo vetro
local nFillId = WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione orizzontale ------------------------
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione verticale ------------------------
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione orizzontale e verticale ------------------------
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisioni
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- local nFill3Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill4Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione custom ------------------------
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- local nTempSplitLayerId = EgtGroup( nFrameId)
-- EgtSetName( nTempSplitLayerId, WIN_TEMPSPLIT)
-- -- creo decoro
-- local nRectangleId = EgtRectangle2P( nTempSplitLayerId, Point3d( WindowWidth / 3, WindowHeight / 3, 0), Point3d( WindowWidth * 2 / 3, WindowHeight * 2 / 3, 0))
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddGenSplit( nSashId, nRectangleId)
-- EgtErase( nTempSplitLayerId)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta con montante verticale ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta battente ricevente ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta con montante orizzontale ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montanti verticali ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montante verticale e ante battente e ricevente ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montanti orizzontali ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
---------------------- Finestra tripla anta con montante orizzontale e verticale ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra sei ante con montanti verticali e orizzontale ------------------------
-- -- definisco divisione orizzontale
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco divisioni verticali
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea12Id, nArea13Id = WinCreate.AddSplit( nArea12Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea23Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea21Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea11Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea12Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea13Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quarta anta
-- local nSash4Id = WinCreate.AddSash( nArea21Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill4Id = WinCreate.AddFill( nSash4Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quinta anta
-- local nSash5Id = WinCreate.AddSash( nArea22Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill5Id = WinCreate.AddFill( nSash5Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo sesta anta
-- local nSash6Id = WinCreate.AddSash( nArea23Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill6Id = WinCreate.AddFill( nSash6Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra sei ante con montante verticale e orizzontale ed ante battente ricevente ------------------------
-- -- definisco divisione orizzontale
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco divisioni verticali
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea12Id, nArea13Id = WinCreate.AddSplit( nArea12Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- local nArea21Id, nArea23Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea21Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea11Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea12Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea13Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quarta anta
-- local nSash4Id = WinCreate.AddSash( nArea21Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill4Id = WinCreate.AddFill( nSash4Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quinta anta
-- local nSash5Id = WinCreate.AddSash( nArea22Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill5Id = WinCreate.AddFill( nSash5Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo sesta anta
-- local nSash6Id = WinCreate.AddSash( nArea23Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill6Id = WinCreate.AddFill( nSash6Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tre ante con montante verticale, ante battente ricevente e split di tutte le ante ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisione
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nSash1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill11Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill12Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- definisco divisione
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nSash2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill21Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill22Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- definisco divisione
-- local nArea31Id, nArea32Id = WinCreate.AddSplit( nSash3Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill31Id = WinCreate.AddFill( nArea31Id, WIN_FILLTYPES.GLASS)
-- local nFill32Id = WinCreate.AddFill( nArea32Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tre ante con montante orizzontale e verticale, ante battente ricevente e split di tutte le ante ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea0Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo anta sopra
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash0Id = WinCreate.AddSash( nArea0Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetri
-- local nFill0Id = WinCreate.AddFill( nSash0Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisione
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nSash1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill11Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill12Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- definisco divisione
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nSash2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill21Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill22Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- definisco divisione
-- local nArea31Id, nArea32Id = WinCreate.AddSplit( nSash3Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill31Id = WinCreate.AddFill( nArea31Id, WIN_FILLTYPES.GLASS)
-- local nFill32Id = WinCreate.AddFill( nArea32Id, WIN_FILLTYPES.GLASS)
-----------------------------------------------------------------------------------
-- -- creo gruppo frame
-- local nFrameLayerId = EgtGroup( GDB_ID.ROOT)
-- EgtSetName( nFrameLayerId, WIN_FRAME)
-- local nOutlineLayerId = EgtGroup( nFrameLayerId)
-- EgtSetName( nOutlineLayerId, WIN_OUTLINE)
-- -- disegno outline
-- local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0), Vector3d( -1, 0.5, 0))
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- cerchio
-- local nFrameBottomId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0))
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtArcC2P( nOutlineLayerId, Point3d( WindowHeight / 2, WindowHeight / 2, 0), Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- disegno outline
-- local nFrameBottomId = EgtLine( nOutlineLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- EgtSetName( nFrameBottomId, WIN_BOTTOM)
-- local nFrameRightId = EgtLine( nOutlineLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth+400, WindowHeight, 0))
-- EgtSetName( nFrameRightId, WIN_RIGHT)
-- local nFrameTopId = EgtLine( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( -200, WindowHeight-300, 0))
-- --local nFrameTopId = EgtArc2PV( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( -200, WindowHeight-300, 0), Vector3d( -1, 0.5, 0))
-- --local nFirstArcId = EgtArc2PDEx(nOutlineLayerId,{-200,1220,0},{0,1700,0},GDB_PT.STD,-1,90,GDB_RT.GRID) -- Id=369
-- --local nFrameTopId = EgtCurveCompo(nOutlineLayerId,nFirstArcId,true) -- Id=369
-- --local nSecondArcId = EgtArc2PDEx(nOutlineLayerId,{0,1700,0},{1700,1900,0},GDB_PT.STD,-1,44.7603,GDB_RT.GRID) -- Id=370
-- --EgtAddCurveCompoCurve(nFrameTopId,nSecondArcId,true,true) -- Ok=1
-- --local nThirdArcId = EgtArc2PDEx(nOutlineLayerId,{1700,1900,0},{1930,1520,0},GDB_PT.STD,199,328.6594,GDB_RT.GRID) -- Id=370
-- --EgtAddCurveCompoCurve(nFrameTopId,nThirdArcId,true,true) -- Ok=1
-- --EgtInvertCurve( nFrameTopId)
-- --local nFrameTop1Id = EgtLine( nOutlineLayerId, Point3d( WindowWidth+400, WindowHeight, 0), Point3d( WindowWidth / 2, WindowHeight+100, 0))
-- --local nFrameTop2Id = EgtLine( nOutlineLayerId, Point3d( WindowWidth / 2, WindowHeight+100, 0), Point3d( -200, WindowHeight-300, 0))
-- --local nFrameTopId = EgtCurveCompo(nOutlineLayerId,nFrameTop1Id,true) -- Id=369
-- --EgtAddCurveCompoCurve(nFrameTopId,nFrameTop2Id,true,true) -- Ok=1
-- EgtSetName( nFrameTopId, WIN_TOP)
-- local nFrameLeftId = EgtLine( nOutlineLayerId, Point3d( -200, WindowHeight-300, 0), Point3d( 0, 0, 0))
-- EgtSetName( nFrameLeftId, WIN_LEFT)
-- -- scelgo tipo di giunzioni
-- local JointType = WIN_JNT.FULL_H
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_BL, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_BR, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_TL, JointType)
-- EgtSetInfo( nOutlineLayerId, WIN_JOINT_TR, JointType)
-- -- funzione che assegna i profili serramento ai vari outline
-- -- per il momento li assegno a mano
-- EgtSetInfo( nFrameBottomId, WIN_PROFILETYPE, WIN_SASH_BOTTOM)
-- EgtSetInfo( nFrameRightId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- EgtSetInfo( nFrameTopId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- EgtSetInfo( nFrameLeftId, WIN_PROFILETYPE, WIN_SASH_TOP)
-- -- definisco prima divisione
-- WinLib.AddSplit( nHoleLayerId, WIN_SPLITTYPE.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- WinLib.AddSplit( nFrameLayerId, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, 2, 3)
--WinLib.AddSplits( nFrameLayerId, WIN_SPLITTYPE.VERTICAL, WIN_MEASURE.ABSOLUT, { WindowWidth / 5, WindowWidth / 3 * 2})
--WinLib.AddSplits( nFrameLayerId, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, { 1.5, 3}, 4.5)
-- local nSplitId = EgtLine( nOutlineLayerId, Point3d( 0, WindowHeight / 2, 0), Point3d( WindowWidth, WindowHeight / 4, 0))
-- local nArc1Id = EgtArc2PDEx( nOutlineLayerId, { 600, 1500, 0}, { 900, 800, 0}, GDB_PT.STD, -1, 270, GDB_RT.GRID) -- Id=301
-- local nSplitId = EgtCurveCompo( nOutlineLayerId, nArc1Id, true) -- Id=301
-- local nArc2Id = EgtArc2PDEx( nOutlineLayerId, { 900, 800, 0}, { 900, 0, 0}, GDB_PT.STD, -1, 316.3972, GDB_RT.GRID) -- Id=302
-- EgtAddCurveCompoCurve( nSplitId, nArc2Id, true, true) -- Ok=1
-- EgtInvertCurve( nSplitId)
-- WinLib.AddGenSplit( nFrameLayerId, nSplitId)
-- local nArea1Id = EgtGetFirstNameInGroup( nHoleLayerId, WIN_AREA1)
-- WinLib.AddSplit( nArea1Id, WIN_SPLITTYPE.HORIZONTAL, WIN_MEASURE.PROPORTIONAL, 2, 3)
-- creo pezzi per outline
-- local nCurrOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
-- while nCurrOutlineId do
-- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId)
-- nCurrOutlineId = EgtGetNext( nCurrOutlineId)
-- end
-- local nCurrOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_SPLIT)
-- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId)
-- imposto se calcolare i solidi o meno
WinCalculate.SetCalcSolid( true)
-- -- creo i pezzi
WinCalculate.CreatePartFromArea( nFrameId)
-- -- creo tabella per salvataggio
-- local sSaveFilePath = 'c:\\Temp\\WindowTest1.txt'
-- local WinTable = WinManageProject.WriteToFile( nFrameId, sSaveFilePath)
-- assemblo i pezzi
--WinLib.AssembleFrame()
EgtZoom( SCE_ZM.ALL)
-- riporto tempi di esecuzione
local sOut = string.format( ' ExecTime = %.2f ms', EgtStopCounter())
EgtOutLog( sOut)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+211
View File
@@ -0,0 +1,211 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinConst = {}
------------------------------------------- PARAMETERS -------------------------------------------
-- Tipi di giunzioni (joint)
WIN_JNT = {
ANGLED = 1,
FULL_H = 2,
FULL_V = 3,
}
-- tipo di giunzione pezzo
WIN_PART_JNT = {
ANGLED = 1,
FULL = 2,
SHORT = 3,
}
-- Tipi di profilo
WIN_PRF = {
NULL = 0,
TOP = 1,
BOTTOM = 2,
LEFT = 3,
RIGHT = 4,
VERTICAL = 5,
HORIZONTAL = 6,
SPLIT = 7,
BOTTOMRAIL = 8,
}
-- Tipi di split
WIN_SPLITORIENTATION = {
VERTICAL = 1,
HORIZONTAL = 2,
}
-- Tipi di misure
WIN_MEASURE = {
ABSOLUT = 1,
PROPORTIONAL = 2,
}
-- tipo di Area
WIN_AREATYPES = {
NULL = 0,
FRAME = 1,
SASH = 2,
FILL = 3,
SPLIT = 4,
}
-- tipo di split:
-- mullion = montante
-- french = battente / ricevente
WIN_SPLITTYPES = {
NULL = 0,
MULLION = 1,
FRENCH = 2,
}
-- tipi di riempimento interno
WIN_FILLTYPES = {
NULL = 0,
GLASS = 1,
WOOD = 2,
}
-- tipi di sash battente e ricevente
WIN_SASHTYPES = {
NULL = 0,
ACTIVE = 1,
INACTIVE = 2,
}
WIN_SURF_APPROX = 0.05
WIN_PROFILE = 'Profile'
WIN_PROFILEPATH = 'ProfilePath'
WIN_FRAME = 'Frame'
WIN_AREAOUTLINE = 'BaseOutline'
WIN_OUTLINE = 'Outline'
WIN_ORIGOUTLINE = 'OrigOutline'
WIN_GEO = 'Geo'
WIN_SOLID = 'Solid'
WIN_BOTTOM = 'Bottom'
WIN_RIGHT = 'Right'
WIN_TOP = 'Top'
WIN_LEFT = 'Left'
WIN_HORIZONTAL = 'Horizontal'
WIN_VERTICAL = 'Vertical'
WIN_BASESPLIT = 'BaseSplit'
WIN_TEMPSPLIT = 'TempSplit'
WIN_SPLIT = 'Split'
WIN_AREA = 'Area'
WIN_AREAASTERISK = 'Area*'
WIN_AREA1 = 'Area1'
WIN_AREA2 = 'Area2'
WIN_AREATYPE = 'AreaType'
WIN_SASH = 'Sash'
WIN_FILL = 'Fill'
WIN_FILLTYPE = 'FillType'
WIN_SIDE = 'Side'
WIN_SPLITTYPE = 'SplitType'
WIN_STARTJOINT = 'StartJoint'
WIN_ENDJOINT = 'EndJoint'
WIN_SASHTYPE = 'SashType'
WIN_REF_OUTLINE = 'OutlineRef'
WIN_REF_PART = 'PartRef'
WIN_SASH_TOP = 'Sash_Top'
WIN_SASH_BOTTOM = 'Sash_Bottom'
WIN_SASH_VERTICAL = 'Sash_Vertical'
WIN_SASH_HORIZONTAL = 'Sash_Horizontal'
WIN_RAIL_BOTTOM = 'Rail_Bottom'
WIN_FRAME_TOP = 'Frame_Top'
WIN_FRAME_BOTTOM = 'Frame_Bottom'
WIN_FIXED_TOP = 'Fixed_Top'
WIN_FIXED_BOTTOM = 'Fixed_Bottom'
WIN_SASH_ACTIVE = 'Sash_Active'
WIN_SASH_INACTIVE = 'Sash_Inactive'
WIN_SASH_SPLIT = 'Sash_Split'
WIN_FRAME_SPLIT = 'Frame_Split'
WIN_REF = 'Ref'
WIN_SECTION = 'Section'
WIN_STRIP = 'Strip'
WIN_ALU = 'Alu'
WIN_CTRIN = 'CtrIn'
WIN_OUT = 'Out'
WIN_OUTOFST = 'OfstOut'
WIN_CTRINOFST = 'OfstCtrIn'
WIN_OFST = 'Ofst'
WIN_SECTIONFRAME = 'SectionFrame'
WIN_MINIZINKEN = 'MiniZinken'
WIN_STARTCPDELTA = 'StartCPDelta'
WIN_ENDCPDELTA = 'EndCPDelta'
WIN_GEOWIDTH = 'GeoWidth'
WIN_GLASSTHICKNESS = 'GlassThickness'
WIN_GEOOUTLINEBOTTOM = 'GeoOutlineBottom'
WIN_JOINT_BL = 'JointBL'
WIN_JOINT_BR = 'JointBR'
WIN_JOINT_BDIV = 'JointBDiv'
WIN_JOINT_TL = 'JointTL'
WIN_JOINT_TR = 'JointTR'
WIN_JOINT_TDIV = 'JointTDiv'
WIN_GEO_IN = 'In'
WIN_GEO_OUT = 'Out'
WIN_GEO_LEFT = 'Left'
WIN_GEO_RIGHT = 'Right'
WIN_PRF_MAIN = 'Main'
WIN_PRF_START = 'Start'
WIN_PRF_END = 'End'
WIN_PROFILETYPE = 'ProfileType'
WIN_SEPARATIONTYPE = 'SeparationType'
WIN_SPLIT_STARTINTERS = 'SplitStartInters'
WIN_SPLIT_ENDINTERS = 'SplitEndInters'
WIN_SOU = 'SOU'
WIN_CHILD = 'CHILD'
WIN_COPY = 'COPY'
WIN_OVERLAP = 'Overlap'
WIN_DELTA = 'Delta'
WIN_FILLOVERLAP = 'FillOverlap'
WIN_FILLDELTA = 'FillDelta'
WIN_MAINGUIDE = 'MainGuide'
WIN_STARTGUIDE = 'StartGuide'
WIN_ENDGUIDE = 'EndGuide'
WIN_BOTTOMRAIL = 'BottomRail'
WIN_DOWEL = 'Dowel'
WIN_DWL_TOPPERPSTART = 'TopPerpStart'
WIN_DWL_TOPPERPEND = 'TopPerpEnd'
WIN_DWL_TOPPARASTART = 'TopParaStart'
WIN_DWL_TOPPARAEND = 'TopParaEnd'
WIN_DWL_BOTTOMPERPSTART = 'BottomPerpStart'
WIN_DWL_BOTTOMPERPEND = 'BottomPerpEnd'
WIN_DWL_BOTTOMPARASTART = 'BottomParaStart'
WIN_DWL_BOTTOMPARAEND = 'BottomParaEnd'
---------------------------------------------------------------------
return WinConst
+54
View File
@@ -0,0 +1,54 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinJWDConst = {}
------------------------------------------- PARAMETERS -------------------------------------------
-- tipi di sash battente e ricevente
-- WIN_SASHTYPES = {
-- NULL = 0,
-- ACTIVE = 1,
-- INACTIVE = 2,
-- }
JWD_EXT = '.jwd'
JWD_PROFILE_PATH = 'ProfilePath'
JWD_AREA = 'Area'
JWD_AREA_TYPE = 'AreaType'
JWD_JOINT_BL = 'JointBL'
JWD_JOINT_BR = 'JointBR'
JWD_JOINT_TL = 'JointTL'
JWD_JOINT_TR = 'JointTR'
JWD_OUTLINE = 'Outline'
JWD_JOINT = 'Joint'
JWD_SPLIT = 'Split'
JWD_CRV_TYPE = 'CurveType'
JWD_POINT_START = 'ptStart'
JWD_POINT_END = 'ptEnd'
JWD_POINT_MID = 'ptMid'
JWD_BOTTOM_RAIL = 'BottomRail'
JWD_SASH_TYPE = 'SashType'
JWD_FILL_TYPE = 'FillType'
---------------------------------------------------------------------
return WinJWDConst
+625
View File
@@ -0,0 +1,625 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinLib = {}
-- Include
require( 'EgtBase')
_G.package.loaded.WinConst = nil
require( 'WinConst')
-- funzioni
-- funzione che crea un taglio split
function WinLib.AddSplit( nAreaLayerId, SplitType, MeasureType, nPosition, nProportion)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_OUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
-- recupero contorno
local OutlineIds = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
table.insert( OutlineIds, nOutlineId)
nOutlineId = EgtGetNext( nOutlineId)
end
if SplitType == WIN_SPLIT.VERTICAL then
-- creo linea
local nCalcPosition = 0
if MeasureType == WIN_MEASURE.ABSOLUT then
nCalcPosition = nPosition
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
nCalcPosition = b3OutlineLayer:getDimX() / nProportion * nPosition
end
local nTotSplitId = EgtLine( nOutlineLayerId, Point3d( nCalcPosition, 0, 0), Point3d( nCalcPosition, b3OutlineLayer:getDimY(), 0))
EgtSetName( nTotSplitId, WIN_VERTICAL)
-- la taglio con i contorni
local nCompoOutlineId = EgtCurveCompo( nOutlineLayerId, OutlineIds, false)
local nFROutlineId = EgtSurfFlatRegion( nOutlineLayerId, nCompoOutlineId)
local nSplitId, _ = EgtTrimCurveWithRegion( nTotSplitId, nFROutlineId, true, false)
EgtErase( { nCompoOutlineId, nFROutlineId})
elseif SplitType == WIN_SPLIT.HORIZONTAL then
local nFrameSplitId = EgtLine( nOutlineLayerId, Point3d( 0, nPosition, 0), Point3d( 0, nPosition, 0))
EgtSetName( nFrameSplitId, WIN_HORIZONTAL)
end
end
-- funzione che crea le aree da un taglio split
function WinLib.CreateAreaFromSplit( nOutlineLayerId, nFrameSplitId)
end
-- funzione che restituisce BBox del Ref del profilo
function WinLib.GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, WIN_REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
function WinLib.GetDeltaProfile( nProfileFrameLayerId, sProfileType)
local nProfileId, b3Ref = WinLib.GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, WIN_CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref
end
-- funzione che calcola l'ingombro dei pezzi del telaio
function WinLib.CalcFrameGeo( nPartId, nOutlineId)
-- recupero profilo
local nProfileLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_FRAME)
-- creo layer per ingombro
local nGeoLayerId = EgtGroup( nPartId)
EgtSetName( nGeoLayerId, WIN_GEO)
-- ricavo tipo dal nome
local sName = EgtGetName( nOutlineId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
end
local nOutlineLayerId = EgtGetParent( nOutlineId)
local b3OutlineId = EgtGetBBoxGlob( nOutlineId, GDB_BB.STANDARD)
local nNewGeoId
if nProfileType == WIN_PRF.TOP then
-- recupero tipo di giunzioni
local StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
local EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_TOP)
-- recupero outline precedente
local nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
local nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
-- calcolo vettori direzione
local vtNextOutline = EgtSV( nNextOutlineId)
local vtPrevOutline = EgtSV( nPrevOutlineId)
local vtCurrOutline = EgtSV( nOutlineId)
-- calcolo punti con inclinazione
local dSenNext = ( vtCurrOutline ^ vtNextOutline):getZ()
local dSenPrev = ( vtPrevOutline ^ vtCurrOutline):getZ()
local dCosNext = ( vtCurrOutline * vtNextOutline)
local dCosPrev = ( vtCurrOutline * vtPrevOutline)
local ptBL = ORIG()
local ptBR = ptBL + X_AX() * EgtCurveLength( nOutlineId) - X_AX() * dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - X_AX() * dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0)
local ptTR = ptBR + X_AX() * b3TopRef:getDimY() / dSenNext * dCosNext + Y_AX() * b3TopRef:getDimY()
local ptTL = ORIG() - X_AX() * b3TopRef:getDimY() / dSenPrev * dCosPrev + Y_AX() * b3TopRef:getDimY()
-- creo rettangolo ingombro
nNewGeoId = EgtCurveCompoFromPoints( nGeoLayerId, { ptBL, ptBR, ptTR, ptTL,ptBL})
EgtSetInfo( nNewGeoId, WIN_GEOOUTLINEBOTTOM, EgtCurveLength( nOutlineId) - dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0))
--nNewGeoId = EgtRectangle2P( nGeoLayerId, ORIG(), ORIG() + X_AX() * b3OutlineId:getDimX() - X_AX() * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - X_AX() * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) + Y_AX() * b3TopRef:getDimY())
if StartJointType == WIN_JNT.FULL_V then
EgtSetInfo( nNewGeoId, WIN_STARTCPDELTA, dTopCPDelta)
end
if EndJointType == WIN_JNT.FULL_V then
EgtSetInfo( nNewGeoId, WIN_ENDCPDELTA, dTopCPDelta)
end
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, WIN_TOP)
elseif nProfileType == WIN_PRF.BOTTOM then
-- recupero tipo di giunzioni
local StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
local EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_TOP)
-- recupero ref del bottom
local _, b3BottomRef = WinLib.GetRefWithBBoxFromProfile( nProfileFrameLayerId, WIN_SASH_BOTTOM)
-- recupero outline precedente
local nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
local nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
-- calcolo vettori direzione
local vtNextOutline = EgtSV( nNextOutlineId)
local vtPrevOutline = EgtSV( nPrevOutlineId)
local vtCurrOutline = EgtSV( nOutlineId)
-- calcolo punti con inclinazione
local dSenNext = ( vtCurrOutline ^ vtNextOutline):getZ()
local dSenPrev = ( vtPrevOutline ^ vtCurrOutline):getZ()
local dCosNext = ( vtCurrOutline * vtNextOutline)
local dCosPrev = ( vtCurrOutline * vtPrevOutline)
local ptBL = ORIG()
local ptBR = ptBL + X_AX() * EgtCurveLength( nOutlineId) - X_AX() * dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - X_AX() * dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0)
local ptTR = ptBR + X_AX() * b3TopRef:getDimY() / dSenNext * dCosNext + Y_AX() * b3BottomRef:getDimY()
local ptTL = ORIG() - X_AX() * b3TopRef:getDimY() / dSenPrev * dCosPrev + Y_AX() * b3BottomRef:getDimY()
-- creo rettangolo ingombro
nNewGeoId = EgtCurveCompoFromPoints( nGeoLayerId, { ptBL, ptBR, ptTR, ptTL,ptBL})
EgtSetInfo( nNewGeoId, WIN_GEOOUTLINEBOTTOM, EgtCurveLength( nOutlineId) - dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0))
--nNewGeoId = EgtRectangle2P( nGeoLayerId, ORIG(), ORIG() + X_AX() * b3OutlineId:getDimX() - X_AX() * EgtIf(StartJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) - X_AX() * EgtIf(EndJointType == WIN_JNT.FULL_V, dTopCPDelta, 0) + Y_AX() * b3BottomRef:getDimY())
if StartJointType == WIN_JNT.FULL_V then
EgtSetInfo( nNewGeoId, WIN_STARTCPDELTA, dTopCPDelta)
end
if EndJointType == WIN_JNT.FULL_V then
EgtSetInfo( nNewGeoId, WIN_ENDCPDELTA, dTopCPDelta)
end
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3BottomRef:getDimX())
EgtSetName( nNewGeoId, WIN_BOTTOM)
elseif nProfileType == WIN_PRF.LEFT then
-- recupero tipo di giunzioni
local StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
local EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_BOTTOM)
-- recupero outline precedente
local nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
local nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
-- calcolo vettori direzione
local vtNextOutline = EgtSV( nNextOutlineId)
local vtPrevOutline = EgtSV( nPrevOutlineId)
local vtCurrOutline = EgtSV( nOutlineId)
-- calcolo punti con inclinazione
local dSenNext = ( vtCurrOutline ^ vtNextOutline):getZ()
local dSenPrev = ( vtPrevOutline ^ vtCurrOutline):getZ()
local dCosNext = ( vtCurrOutline * vtNextOutline)
local dCosPrev = ( vtCurrOutline * vtPrevOutline)
local ptBL = ORIG()
local ptBR = ptBL + X_AX() * EgtCurveLength( nOutlineId) - X_AX() * dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_H, dTopCPDelta, 0) - X_AX() * dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0)
local ptTR = ptBR + X_AX() * b3TopRef:getDimY() / dSenNext * dCosNext + Y_AX() * b3TopRef:getDimY()
local ptTL = ORIG() - X_AX() * b3TopRef:getDimY() / dSenPrev * dCosPrev + Y_AX() * b3TopRef:getDimY()
-- creo rettangolo ingombro
nNewGeoId = EgtCurveCompoFromPoints( nGeoLayerId, { ptBL, ptBR, ptTR, ptTL,ptBL})
EgtSetInfo( nNewGeoId, WIN_GEOOUTLINEBOTTOM, EgtCurveLength( nOutlineId) - dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_H, dTopCPDelta, 0) - dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0))
--nNewGeoId = EgtRectangle2P( nGeoLayerId, ORIG(), ORIG() + X_AX() * b3OutlineId:getDimY() - X_AX() * EgtIf(StartJointType == WIN_JNT.FULL_H, dTopCPDelta, 0) - X_AX() * EgtIf(EndJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0) + Y_AX() * b3TopRef:getDimY())
if StartJointType == WIN_JNT.FULL_H then
EgtSetInfo( nNewGeoId, WIN_STARTCPDELTA, dTopCPDelta)
end
if EndJointType == WIN_JNT.FULL_H then
EgtSetInfo( nNewGeoId, WIN_ENDCPDELTA, dBottomCPDelta)
end
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, WIN_LEFT)
elseif nProfileType == WIN_PRF.RIGHT then
-- recupero tipo di giunzioni
local StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
local EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
-- recupero ref e controprofilo del top e calcolo delta
local dTopCPDelta, b3TopRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_TOP)
-- recupero ref e controprofilo del bottom e calcolo delta
local dBottomCPDelta, b3BottomRef = WinLib.GetDeltaProfile( nProfileFrameLayerId, WIN_SASH_BOTTOM)
-- recupero outline precedente
local nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
local nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
-- calcolo vettori direzione
local vtNextOutline = EgtSV( nNextOutlineId)
local vtPrevOutline = EgtSV( nPrevOutlineId)
local vtCurrOutline = EgtSV( nOutlineId)
-- calcolo punti con inclinazione
local dSenNext = ( vtCurrOutline ^ vtNextOutline):getZ()
local dSenPrev = ( vtPrevOutline ^ vtCurrOutline):getZ()
local dCosNext = ( vtCurrOutline * vtNextOutline)
local dCosPrev = ( vtCurrOutline * vtPrevOutline)
local ptBL = ORIG()
local ptBR = ptBL + X_AX() * EgtCurveLength( nOutlineId) - X_AX() * dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0) - X_AX() * dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_H, dTopCPDelta, 0)
local ptTR = ptBR + X_AX() * b3TopRef:getDimY() / dSenNext * dCosNext + Y_AX() * b3TopRef:getDimY()
local ptTL = ORIG() - X_AX() * b3TopRef:getDimY() / dSenPrev * dCosPrev + Y_AX() * b3TopRef:getDimY()
-- creo rettangolo ingombro
nNewGeoId = EgtCurveCompoFromPoints( nGeoLayerId, { ptBL, ptBR, ptTR, ptTL,ptBL})
EgtSetInfo( nNewGeoId, WIN_GEOOUTLINEBOTTOM, EgtCurveLength( nOutlineId) - dSenPrev * EgtIf(StartJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0) - dSenNext * EgtIf(EndJointType == WIN_JNT.FULL_H, dTopCPDelta, 0))
--nNewGeoId = EgtRectangle2P( nGeoLayerId, ORIG(), ORIG() + X_AX() * b3OutlineId:getDimY() - X_AX() * EgtIf(StartJointType == WIN_JNT.FULL_H, dBottomCPDelta, 0) - X_AX() * EgtIf(EndJointType == WIN_JNT.FULL_H, dTopCPDelta, 0) + Y_AX() * b3TopRef:getDimY())
if StartJointType == WIN_JNT.FULL_H then
EgtSetInfo( nNewGeoId, WIN_STARTCPDELTA, dBottomCPDelta)
end
if EndJointType == WIN_JNT.FULL_H then
EgtSetInfo( nNewGeoId, WIN_ENDCPDELTA, dTopCPDelta)
end
EgtModifyCurveExtrusion( nNewGeoId, Z_AX())
EgtModifyCurveThickness( nNewGeoId, -b3TopRef:getDimX())
EgtSetName( nNewGeoId, WIN_RIGHT)
end
return nNewGeoId
end
-- funzione che posiziona i profili, li estrude e crea il solido
function WinLib.CalcStartEndProfileType(nProfileType)
local StartJointType
local EndJointType
local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
local sStartProfileType
local sEndProfileType
if nProfileType == WIN_PRF.BOTTOM then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.ANGLED then
--sStartProfileType = WIN_OUTOFST
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.ANGLED then
--sEndProfileType = WIN_OUTOFST
end
elseif nProfileType == WIN_PRF.RIGHT then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.ANGLED then
--sStartProfileType = WIN_OUTOFST
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.ANGLED then
--sEndProfileType = WIN_OUTOFST
end
elseif nProfileType == WIN_PRF.TOP then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.ANGLED then
--sStartProfileType = WIN_OUTOFST
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.ANGLED then
--sEndProfileType = WIN_OUTOFST
end
elseif nProfileType == WIN_PRF.LEFT then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.ANGLED then
--sStartProfileType = WIN_OUTOFST
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.ANGLED then
--sEndProfileType = WIN_OUTOFST
end
end
return sStartProfileType, sEndProfileType, StartJointType, EndJointType
end
-- funzione che posiziona i profili, li estrude e crea il solido
function WinLib.MakeSolidByExtrusion(nGeoId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId)
-- recupero outline
local nPartId = EgtGetParent( nSolidLayerId)
local nAreaId = EgtGetInfo( nPartId, WIN_AREA)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE)
local sOutlineName = ''
local sPrevOutlineName = ''
local sNextOutlineName = ''
if nProfileType == WIN_PRF.BOTTOM then
sOutlineName = WIN_BOTTOM
sPrevOutlineName = WIN_LEFT
sNextOutlineName = WIN_RIGHT
elseif nProfileType == WIN_PRF.RIGHT then
sOutlineName = WIN_RIGHT
sPrevOutlineName = WIN_BOTTOM
sNextOutlineName = WIN_TOP
elseif nProfileType == WIN_PRF.TOP then
sOutlineName = WIN_TOP
sPrevOutlineName = WIN_RIGHT
sNextOutlineName = WIN_LEFT
elseif nProfileType == WIN_PRF.LEFT then
sOutlineName = WIN_LEFT
sPrevOutlineName = WIN_TOP
sNextOutlineName = WIN_BOTTOM
end
local nOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sOutlineName)
local nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sPrevOutlineName)
local nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sNextOutlineName)
-- calcolo vettori direzione degli outline
local vtNextOutline = EgtSV( nNextOutlineId)
local vtCurrOutline = EgtSV( nOutlineId)
local vtPrevOutline = EgtSV( nPrevOutlineId)
-- recupero posizione e BBox del geo
local b3Geo = EgtGetBBox(nGeoId, GDB_BB.STANDARD)
-- recupero BBox del profilo Main
local nRefMainProfileId = EgtGetFirstNameInGroup( nMainProfileId, WIN_REF)
local b3RefMainProfile = EgtGetBBoxGlob( nRefMainProfileId, GDB_BB.STANDARD)
-- recupero frame del profilo
local nMainProfileFrameId = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME)
local frInvertMainProfile = EgtFR( nMainProfileFrameId)
frInvertMainProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nMainProfileId), frInvertMainProfile)
-- assegno come riferimento del profilo il punto start dell'outline
EgtChangeGroupFrame( nMainProfileId, Frame3d( Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), - X_AX()))
-- recupero outline del profilo Main e lo estrudo
local nMainOutlineId = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTION)
if nProfileType == WIN_PRF.BOTTOM then
EgtInvertCurve( nMainOutlineId)
end
local nMainExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nMainOutlineId, X_AX() * b3Geo:getDimX())
-- posiziono il profilo Start
local nRefStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, WIN_REF)
local b3RefStartProfile = EgtGetBBoxGlob(nRefStartProfileId, GDB_BB.STANDARD)
local dDelta = EgtGetInfo( nGeoId, WIN_STARTCPDELTA, 'd') or 0
-- recupero frame del profilo
local nStartProfileFrameId = EgtGetFirstNameInGroup( nStartProfileId, WIN_SECTIONFRAME)
local frInvertStartProfile = EgtFR( nStartProfileFrameId)
frInvertStartProfile:move( - Y_AX() * dDelta)
frInvertStartProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nStartProfileId), frInvertStartProfile)
-- assegno come riferimento del profilo il punto start dell'outline
--do return end
EgtChangeGroupFrame( nStartProfileId, Frame3d( ORIG(), - vtPrevOutline))
local dSenNext = ( vtCurrOutline ^ vtNextOutline):getZ()
local dSenPrev = ( vtPrevOutline ^ vtCurrOutline):getZ()
local dCosNext = ( vtCurrOutline * vtNextOutline)
local dCosPrev = ( vtCurrOutline * vtPrevOutline)
local dDeltaStartAngle = b3RefStartProfile:getDimX() * dCosPrev / dSenPrev
EgtMove( nStartProfileId, vtPrevOutline * dDeltaStartAngle)
-- in base al tipo di incastro e di pezzo, ricavo i controprofili
local sStartProfileType
local sEndProfileType
-- recupero tipo di giunzioni
sStartProfileType, sEndProfileType, StartJointType, EndJointType = WinLib.CalcStartEndProfileType( nProfileType)
-- recupero outline del profilo Start e lo estrudo
local nOutStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, sStartProfileType)
--if (StartJointType == WIN_JNT.FULL_H and ( nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.RIGHT)) or
-- (StartJointType == WIN_JNT.FULL_V and ( nProfileType == WIN_PRF.LEFT)) then
-- EgtInvertCurve( nOutStartProfileId)
--end
if StartJointType == WIN_JNT.FULL_H and nProfileType == WIN_PRF.BOTTOM then
EgtInvertCurve( nOutStartProfileId)
end
local nStartExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutStartProfileId, - vtPrevOutline * ( b3RefMainProfile:getDimY() / dSenPrev + dDeltaStartAngle))
-- taglio estrusi per ottenere solido
local nExtrCopyId = EgtCopy( nMainExtrusionId, nSolidLayerId)
EgtSurfTmCut( nMainExtrusionId, nStartExtrusionId, true, false)
EgtSurfTmCut( nStartExtrusionId, nExtrCopyId, true, false)
-- posiziono il profilo End
--EgtRotate( EgtGetAllInGroup( nEndProfileId), ORIG(), Z_AX(), 90)
--EgtRotate( EgtGetAllInGroup( nEndProfileId), ORIG(), Y_AX(), 180)
local nRefEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, WIN_REF)
local b3RefEndProfile = EgtGetBBoxGlob(nRefEndProfileId, GDB_BB.STANDARD)
local dDelta = EgtGetInfo( nGeoId, WIN_ENDCPDELTA, 'd') or 0
--vtMove = vtMove - X_AX() * dDelta
--EgtMove( nStartProfileId, vtMove)
--EgtMove( EgtGetAllInGroup( nEndProfileId), ORIG() - Point3d( b3RefEndProfile:getMax():getX(), b3RefEndProfile:getMax():getY(), b3RefEndProfile:getMax():getZ()) + X_AX() * dDelta, GDB_RT.GLOB)
-- recupero frame del profilo
local nEndProfileFrameId = EgtGetFirstNameInGroup( nEndProfileId, WIN_SECTIONFRAME)
local frInvertEndProfile = EgtFR( nEndProfileFrameId)
frInvertEndProfile:move( - Y_AX() * dDelta)
EgtMove(nEndProfileFrameId, - Y_AX() * dDelta)
frInvertEndProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nEndProfileId), frInvertEndProfile)
-- assegno come riferimento del profilo il punto start dell'outline
local b3Outline = EgtGetBBox( nOutlineId, GDB_BB.STANDARD)
local dBottomOutline = EgtGetInfo( nGeoId, WIN_GEOOUTLINEBOTTOM, 'd')
EgtChangeGroupFrame( nEndProfileId, Frame3d( ORIG() + X_AX() * dBottomOutline , - vtNextOutline))
--EgtChangeGroupFrame( nEndProfileId, Frame3d( Point3d( b3Outline:getMax():getX(), b3Outline:getMin():getY(), b3Outline:getMax():getZ()), - vtNextOutline))
local dDeltaEndAngle = b3RefEndProfile:getDimX() * dCosNext / dSenNext
EgtMove( nEndProfileId, - vtNextOutline * dDeltaEndAngle)
--EgtRotate( nEndProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Y_AX(), -90)
--local dSecondAngle = EgtIf( nProfileType == WIN_PRF.LEFT, 90, -90)
--EgtRotate( nEndProfileId, Point3d( b3Geo:getMin():getX(), b3Geo:getMin():getY(), b3Geo:getMax():getZ()), Z_AX(), dSecondAngle)
--local nRefEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, WIN_REF)
--local b3RefEndProfile = EgtGetBBoxGlob(nRefEndProfileId, GDB_BB.STANDARD)
--local vtMove = Point3d( b3Geo:getMax():getX(),b3Geo:getMin():getY(),b3Geo:getMin():getZ()) - Point3d( b3RefEndProfile:getMax():getX(), b3RefEndProfile:getMin():getY(), b3RefEndProfile:getMin():getZ())
---- sposto del delta controprofilo se necessario
--local dDelta = EgtGetInfo( nGeoId, WIN_ENDCPDELTA, 'd') or 0
--vtMove = vtMove + X_AX() * dDelta
--EgtMove( nEndProfileId, vtMove)
-- recupero outline del profilo End e lo estrudo
local nOutEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, sEndProfileType)
if (EndJointType == WIN_JNT.FULL_H and nProfileType == WIN_PRF.RIGHT) or
(EndJointType == WIN_JNT.FULL_V and (nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.LEFT)) then
EgtInvertCurve( nOutEndProfileId)
end
local nEndExtrusionId = EgtSurfTmByExtrusion( nSolidLayerId, nOutEndProfileId, vtNextOutline * ( b3RefMainProfile:getDimY() / dSenNext + dDeltaEndAngle))
-- taglio estrusi per ottenere solido
EgtSurfTmCut( nMainExtrusionId, nEndExtrusionId, true, false)
EgtSurfTmCut( nEndExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
end
-- funzione che crea il solido del pezzo del telaio
function WinLib.CalcFrameSolid(nPartId, nGeoId)
-- recupero profilo
local nProfileId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileId, WIN_FRAME)
-- creo layer per solido e per profili di estrusione
local nSolidLayerId = EgtGroup( nPartId)
EgtSetName( nSolidLayerId, WIN_SOLID)
local nFrameProfileLayerId = EgtGroup( nPartId)
EgtSetName( nFrameProfileLayerId, WIN_PROFILE)
-- ricavo tipo dal nome
local sName = EgtGetName( nGeoId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
end
local nOrigMainProfileId = GDB_ID.NULL
local nMainProfileId = GDB_ID.NULL
local nOrigStartProfileId = GDB_ID.NULL
local nStartProfileId = GDB_ID.NULL
local nOrigEndProfileId = GDB_ID.NULL
local nEndProfileId = GDB_ID.NULL
-- recupero profilo e controprofili per tipo
if nProfileType == WIN_PRF.BOTTOM then
nOrigMainProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_BOTTOM)
nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
elseif nProfileType == WIN_PRF.RIGHT then
nOrigMainProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_BOTTOM)
nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
elseif nProfileType == WIN_PRF.TOP then
nOrigMainProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
elseif nProfileType == WIN_PRF.LEFT then
nOrigMainProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_TOP)
nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, WIN_SASH_BOTTOM)
end
-- creo copie di profilo e controprofili
nMainProfileId = EgtCopy( nOrigMainProfileId, nFrameProfileLayerId)
nStartProfileId = EgtCopy( nOrigStartProfileId, nFrameProfileLayerId)
nEndProfileId = EgtCopy( nOrigEndProfileId, nFrameProfileLayerId)
-- creo solido dai profili
WinLib.MakeSolidByExtrusion(nGeoId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId)
end
-- funzione che calcola l'ingombro dei pezzi del telaio
function WinLib.CreatePartFromOutline( nFrameLayerId, nOutlineId)
-- ricavo tipo dal nome
local sName = EgtGetName( nOutlineId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
end
-- creo pezzo
local nPartId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nPartId, sName)
if nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP then
EgtSetColor( nPartId, Color3d( 204, 102, 0))
elseif nProfileType == WIN_PRF.RIGHT or nProfileType == WIN_PRF.LEFT then
EgtSetColor( nPartId, Color3d( 251, 128, 4))
end
-- inserisco riferimento alla sua area
EgtSetInfo( nPartId, WIN_AREA, nFrameLayerId)
-- disegno ingombro
local nGeoId = WinLib.CalcFrameGeo( nPartId, nOutlineId)
-- disegno solido
WinLib.CalcFrameSolid(nPartId, nGeoId)
-- offset per distanziare i pezzi
local dYPosOffset = 300 * ( nProfileType - 1)
EgtChangeGroupFrame( nPartId, Frame3d( Point3d( 0, dYPosOffset, 0)))
end
-- funzione che posiziona un pezzo
function WinLib.PositionPart(nPartId)
-- ricavo tipo dal nome
local sName = EgtGetName( nPartId)
local sDelta = ''
if sName == WIN_BOTTOM then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_RIGHT then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_TOP then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_LEFT then
sDelta = WIN_STARTCPDELTA
end
-- calcolo nuovo riferimento
local nGeoPartLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO)
local nGeoPartId = EgtGetFirstNameInGroup( nGeoPartLayerId, sName)
local dDelta = EgtGetInfo( nGeoPartId, sDelta, 'd') or 0
local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
local nFramePartId = EgtGetFirstNameInGroup( nOutlineLayerId, sName)
local vtStart = EgtSV( nFramePartId)
local ptStart = EgtSP( nFramePartId) + vtStart * dDelta
local _, _, dAngRight = SphericalFromVector(vtStart)
local frStart = Frame3d( ptStart)
frStart:rotate( frStart:getOrigin(), Z_AX(), dAngRight)
EgtChangeGroupFrame( nPartId, frStart)
end
-- funzione che assembla i pezzi
function WinLib.AssembleFrame()
local nBottomPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_BOTTOM)
WinLib.PositionPart(nBottomPartId)
local nRightPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_RIGHT)
WinLib.PositionPart(nRightPartId)
local nTopPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_TOP)
WinLib.PositionPart(nTopPartId)
local nLeftPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_LEFT)
WinLib.PositionPart(nLeftPartId)
-- assemblo i pezzi
--local nRightPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_RIGHT)
--local nGeoRightLayerId = EgtGetFirstNameInGroup( nRightPartId, WIN_GEO)
--local nGeoRightId = EgtGetFirstNameInGroup( nGeoRightLayerId, WIN_RIGHT)
--local dDelta = EgtGetInfo( nGeoRightId, WIN_BOTTOMCPDELTA, 'd')
--local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
--local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
--local nFrameRightId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
--local vtRight = EgtSV( nFrameRightId)
--local ptRight = EgtSP( nFrameRightId) + vtRight * dDelta
--local _, _, dAngRight = SphericalFromVector(vtRight)
--local frRight = Frame3d( ptRight)
--frRight:rotate( frRight:getOrigin(), Z_AX(), dAngRight)
--EgtChangeGroupFrame( nRightPartId, frRight)
end
---------------------------------------------------------------------
return WinLib
+958
View File
@@ -0,0 +1,958 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinLib = {}
-- Include
require( 'EgtBase')
_G.package.loaded.WinConst = nil
require( 'WinConst')
-- funzioni
-- funzione che crea il buco per la finestra
function WinLib.CreateHole( dWidth, dHeight)
-- creo gruppo per buco
local nAreaLayerId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nAreaLayerId, WIN_FRAME)
local nAreaOutlineLayerId = EgtGroup( nAreaLayerId)
EgtSetName( nAreaOutlineLayerId, WIN_AREAOUTLINE)
-- disegno outline
local nHoleBottomId = EgtLine( nAreaOutlineLayerId, Point3d( 0, 0, 0), Point3d( dWidth, 0, 0))
EgtSetName( nHoleBottomId, WIN_BOTTOM)
local nHoleRightId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, 0, 0), Point3d( dWidth, dHeight, 0))
EgtSetName( nHoleRightId, WIN_RIGHT)
local nHoleTopId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, dHeight, 0), Point3d( 0, dHeight, 0))
EgtSetName( nHoleTopId, WIN_TOP)
local nHoleLeftId = EgtLine( nAreaOutlineLayerId, Point3d( 0, dHeight, 0), Point3d( 0, 0, 0))
EgtSetName( nHoleLeftId, WIN_LEFT)
return nAreaLayerId
end
-- funzione che crea il telaio a partire dal buco
function WinLib.CreateFrameOnHole( nHoleLayerId, dWidth, dHeight)
local nAreaOutlineLayerId = EgtGroup( nHoleLayerId)
EgtSetName( nAreaOutlineLayerId, WIN_OUTLINE)
-- disegno outline
local nHoleBottomId = EgtLine( nAreaOutlineLayerId, Point3d( 0, 0, 0), Point3d( dWidth, 0, 0))
EgtSetName( nHoleBottomId, WIN_BOTTOM)
local nHoleRightId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, 0, 0), Point3d( dWidth, dHeight, 0))
EgtSetName( nHoleRightId, WIN_RIGHT)
local nHoleTopId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, dHeight, 0), Point3d( 0, dHeight, 0))
EgtSetName( nHoleTopId, WIN_TOP)
local nHoleLeftId = EgtLine( nAreaOutlineLayerId, Point3d( 0, dHeight, 0), Point3d( 0, 0, 0))
EgtSetName( nHoleLeftId, WIN_LEFT)
end
-- funzione che crea il telaio a partire dal buco
function WinLib.CreateFrameAsHole( nAreaLayerId, JointType)
-- creo layer outline del frame
local nOutlineLayerId = EgtGroup( nAreaLayerId)
EgtSetName( nOutlineLayerId, WIN_OUTLINE)
-- recupero outline del buco
local nAreaOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
-- lo copio
local nHoleOutlineId = EgtGetFirstInGroup( nAreaOutlineLayerId)
while nHoleOutlineId do
local nOutlineId = EgtCopy( nHoleOutlineId, nOutlineLayerId)
-- da modificare!!!
-- funzione che assegna i profili serramento ai vari outline
local sName = EgtGetName( nHoleOutlineId)
if sName == WIN_BOTTOM then
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_BOTTOM)
elseif sName == WIN_RIGHT then
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_TOP)
elseif sName == WIN_TOP then
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_TOP)
elseif sName == WIN_LEFT then
EgtSetInfo( nOutlineId, WIN_PROFILETYPE, WIN_SASH_TOP)
end
nHoleOutlineId = EgtGetNext( nHoleOutlineId)
end
EgtSetInfo( nOutlineLayerId, WIN_JOINT_BL, JointType)
EgtSetInfo( nOutlineLayerId, WIN_JOINT_BR, JointType)
EgtSetInfo( nOutlineLayerId, WIN_JOINT_TL, JointType)
EgtSetInfo( nOutlineLayerId, WIN_JOINT_TR, JointType)
end
-- funzione che aggiunge una anta
function WinLib.AddSash( nAreaId)
-- creo nuova area
local nSashAreaId = EgtGroup( nAreaId)
EgtSetName( nSashAreaId, WIN_SASH)
EgtSetInfo( nSashAreaId, WIN_AREATYPE, WIN_AREATYPES.SASH)
-- recupero outline area precedente
local nPrevAreaOutlineId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
-- lo copio per outline area dell'anta
local nAreaOutlineId = EgtCopy( nPrevAreaOutlineId, nSashAreaId)
return nSashAreaId
end
-- funzione che aggiunge un riempimento
function WinLib.AddFill( nAreaId, FillType)
-- creo nuova area
local nFillAreaId = EgtGroup( nAreaId)
EgtSetName( nFillAreaId, WIN_FILL)
EgtSetInfo( nFillAreaId, WIN_AREATYPE, WIN_AREATYPES.FILL)
-- recupero outline area precedente
local nPrevAreaOutlineId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
-- lo copio per outline area dell'anta
local nAreaOutlineId = EgtCopy( nPrevAreaOutlineId, nFillAreaId)
-- imposto tipo di fill
EgtSetInfo( nFillAreaId, WIN_FILLTYPE, FillType)
return nFillAreaId
end
-- funzione che restituisce un outline dato un pezzo
function WinLib.GetOutlineFromPart( nPartId)
local nAreaId = EgtGetInfo( nPartId, WIN_AREA)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE)
local sName = EgtGetName( nPartId)
return EgtGetFirstNameInGroup( nOutlineLayerId, sName)
end
-- funzione che crea un taglio split
function WinLib.AddSplit( nAreaLayerId, SplitType, MeasureType, nPosition, nProportion)
-- creo layer per split
local nSplitLayerId = EgtGroup( nAreaLayerId)
EgtSetName( nSplitLayerId, WIN_SPLIT)
-- recupero contorno area precedente
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
local OutlineIds = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
local sName = EgtGetName( nOutlineId)
table.insert( OutlineIds, nOutlineId)
nOutlineId = EgtGetNext( nOutlineId)
end
local nSplitId
if SplitType == WIN_SPLITTYPE.VERTICAL then
-- creo linea
local nCalcPosition = 0
if MeasureType == WIN_MEASURE.ABSOLUT then
nCalcPosition = nPosition
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
nCalcPosition = b3OutlineLayer:getDimX() / nProportion * nPosition
end
local nTotSplitId = EgtLine( nSplitLayerId, Point3d( nCalcPosition, 0, 0), Point3d( nCalcPosition, b3OutlineLayer:getDimY(), 0))
-- la taglio con i contorni
local nCompoOutlineId = EgtCurveCompo( nSplitLayerId, OutlineIds, false)
local nFROutlineId = EgtSurfFlatRegion( nSplitLayerId, nCompoOutlineId)
nSplitId = EgtTrimCurveWithRegion( nTotSplitId, nFROutlineId, true, false)
EgtSetName( nSplitId, WIN_VERTICAL)
EgtErase( { nCompoOutlineId, nFROutlineId})
EgtSetInfo( nSplitId, WIN_PROFILETYPE, WIN_SASH_VERTICAL)
elseif SplitType == WIN_SPLITTYPE.HORIZONTAL then
-- creo linea
local nCalcPosition = 0
if MeasureType == WIN_MEASURE.ABSOLUT then
nCalcPosition = nPosition
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
nCalcPosition = b3OutlineLayer:getDimY() / nProportion * nPosition
end
local nTotSplitId = EgtLine( nSplitLayerId, Point3d( 0, nCalcPosition, 0), Point3d( b3OutlineLayer:getDimX(), nCalcPosition, 0))
-- la taglio con i contorni
local nCompoOutlineId = EgtCurveCompo( nSplitLayerId, OutlineIds, false)
local nFROutlineId = EgtSurfFlatRegion( nSplitLayerId, nCompoOutlineId)
nSplitId = EgtTrimCurveWithRegion( nTotSplitId, nFROutlineId, true, false)
EgtSetName( nSplitId, WIN_HORIZONTAL)
EgtErase( { nCompoOutlineId, nFROutlineId})
EgtSetInfo( nSplitId, WIN_PROFILETYPE, WIN_SASH_HORIZONTAL)
end
-- creo aree
WinLib.CreateAreaFromSplit( nAreaLayerId, nSplitId)
end
-- funzione che crea tagli split multipli
function WinLib.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList, nProportion)
if MeasureType == WIN_MEASURE.ABSOLUT then
for nIndex = 1, #PositionList do
WinLib.AddSplit( nAreaLayerId, SplitType, MeasureType, PositionList[nIndex], nProportion)
end
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
for nIndex = 1, #PositionList do
WinLib.AddSplit( nAreaLayerId, SplitType, MeasureType, PositionList[nIndex], nProportion)
end
end
end
-- funzione che crea un taglio split da una curva generica
function WinLib.AddGenSplit( nAreaLayerId, nSplitId)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_OUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
-- allungo curva split per cercare intersezioni
EgtExtendCurveStartByLen( nSplitId, 10)
EgtExtendCurveEndByLen( nSplitId, 10)
-- recupero lista intersezioni
local OutlineInters = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
local sName = EgtGetName( nOutlineId)
-- verifico se ci siano intersezioni con questo outline
local ptInters = EgtIP( nSplitId, nOutlineId, EgtSP( nSplitId))
if ptInters then
table.insert( OutlineInters, { Id = nOutlineId, IntersPoint = ptInters})
end
nOutlineId = EgtGetNext( nOutlineId)
end
local ptStartSplit = EgtSP( nSplitId)
local ptEndSplit = EgtEP( nSplitId)
local StartInters
local EndInters
for nIndex = 1, #OutlineInters do
local CurrOutInters = OutlineInters[nIndex]
CurrOutInters.StartDistance = (CurrOutInters.IntersPoint - ptStartSplit):sqlen()
CurrOutInters.EndDistance = (CurrOutInters.IntersPoint - ptEndSplit):sqlen()
if not StartInters or CurrOutInters.StartDistance < StartInters.StartDistance then
StartInters = CurrOutInters
end
if not EndInters or CurrOutInters.EndDistance < EndInters.EndDistance then
EndInters = CurrOutInters
end
end
-- accorcio la curva split su intersezione outline
local dStartSplitInters = EgtCurveParamAtPoint( nSplitId, StartInters.IntersPoint)
EgtTrimCurveStartAtParam( nSplitId, dStartSplitInters)
local dEndSplitInters = EgtCurveParamAtPoint( nSplitId, EndInters.IntersPoint)
EgtTrimCurveEndAtParam( nSplitId, dEndSplitInters)
EgtSetInfo( nSplitId, WIN_SPLIT_STARTINTERS, StartInters.Id)
EgtSetInfo( nSplitId, WIN_SPLIT_ENDINTERS, EndInters.Id)
-- assegno nome e tipo profilo
EgtSetName( nSplitId, WIN_SPLIT)
EgtSetInfo( nSplitId, WIN_PROFILETYPE, WIN_SASH_HORIZONTAL)
-- creo aree
WinLib.CreateAreaFromSplit( nAreaLayerId, nSplitId)
end
-- funzione che crea tagli split da curve generiche
function WinLib.AddGenSplits( nAreaLayerId, SplitList)
for nIndex = 1, #SplitList do
WinLib.AddSplit( nAreaLayerId, SplitList[nIndex])
end
end
-- funzione che crea le aree da un taglio split
function WinLib.CreateAreaFromSplit( nAreaLayerId, nSplitId)
-- creo layer per le due aree
local nArea1Id = EgtGroup( nAreaLayerId)
local nArea2Id = EgtGroup( nAreaLayerId)
EgtSetInfo( nArea1Id, 'SOU', nSplitId)
EgtSetName( nArea1Id , 'Area' .. 1)
local nArea1OutlineLayerId = EgtGroup( nArea1Id)
EgtSetName( nArea1OutlineLayerId , WIN_AREAOUTLINE)
EgtSetInfo( nArea2Id, 'SOU', nSplitId)
EgtSetName( nArea2Id , 'Area' .. 2)
local nArea2OutlineLayerId = EgtGroup( nArea2Id)
EgtSetName( nArea2OutlineLayerId , WIN_AREAOUTLINE)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_OUTLINE)
--local Outlines = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
local nInters = 0
while nOutlineId and nInters ~= 3 do
local sName = EgtGetName( nOutlineId)
-- calcolo intersezioni con questo outline
local ptInters = EgtIP( nSplitId, nOutlineId, EgtSP( nSplitId))
if ptInters then
if nInters == 0 then
-- trovato primo punto di intersezione - inizio area 2
nInters = 1
local nCopyId = EgtCopy( nOutlineId, nArea2OutlineLayerId)
local dStartIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveStartAtParam( nCopyId, dStartIntersParam)
elseif nInters == 1 then
-- trovato secondo punto di intersezione - fine area 2
nInters = 2
local nCopyId = EgtCopy( nOutlineId, nArea2OutlineLayerId)
local dEndIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveEndAtParam( nCopyId, dEndIntersParam)
-- copio anche split
local nSplitCopyId = EgtCopy( nSplitId, nArea2OutlineLayerId)
if not AreSamePointExact( EgtEP( nCopyId), EgtSP( nSplitCopyId)) then
EgtInvertCurve( nSplitCopyId)
end
-- inizio area 1
local nCopyId = EgtCopy( nOutlineId, nArea1OutlineLayerId)
local dStartIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveStartAtParam( nCopyId, dStartIntersParam)
elseif nInters == 2 then
-- trovato secondo punto di intersezione - fine area 1
nInters = 3
local nCopyId = EgtCopy( nOutlineId, nArea1OutlineLayerId)
local dEndIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveEndAtParam( nCopyId, dEndIntersParam)
-- copio anche split
local nSplitCopyId = EgtCopy( nSplitId, nArea1OutlineLayerId)
if not AreSamePointExact( EgtEP( nCopyId), EgtSP( nSplitCopyId)) then
EgtInvertCurve( nSplitCopyId)
end
end
elseif nInters == 1 then
-- copio nel profilo 2
EgtCopy( nOutlineId, nArea2OutlineLayerId)
elseif nInters == 2 then
-- copio nel profilo 1
EgtCopy( nOutlineId, nArea1OutlineLayerId)
end
-- aggiorno indice
nOutlineId = EgtGetNext( nOutlineId)
-- se arrivato alla fine riparto
if not nOutlineId then
nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
end
end
end
-- funzione che restituisce BBox del Ref del profilo
function WinLib.GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sProfileType)
local nProfileRefId = EgtGetFirstNameInGroup( nProfileId, WIN_REF)
local b3Ref = EgtGetBBox( nProfileRefId, GDB_BB.STANDARD)
return nProfileId, b3Ref, nProfileRefId
end
-- funzione che restituisce ref e calcola delta controprofilo dal profilo passatogli
function WinLib.GetDeltaProfile( nProfileFrameLayerId, sProfileType)
local nProfileId, b3Ref, nProfileRefId = WinLib.GetRefWithBBoxFromProfile( nProfileFrameLayerId, sProfileType)
local nCPId = EgtGetFirstNameInGroup( nProfileId, WIN_CTRIN)
local b3CP = EgtGetBBox( nCPId, GDB_BB.STANDARD)
local dCPDelta = b3Ref:getDimY() - b3CP:getDimY()
return dCPDelta, b3Ref, nProfileId, nProfileRefId
end
-- funzione che crea le curve del geo
function WinLib.CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, StartJointType, EndJointType, nProfileType, nGeoLayerId, nProfileFrameLayerId)
local nCurrCurveId
local nCurrOffsetId
local nPrevCurveId
local nNextCurveId
local dGeoWidth
-- recupero ref e controprofilo e calcolo delta del top, prev e next
local sCurrProfileType = EgtGetInfo( nOutlineId, WIN_PROFILETYPE)
local _, b3CurrRef, nCurrProfileId, nCurrProfileRefId = WinLib.GetDeltaProfile( nProfileFrameLayerId, sCurrProfileType)
local sPrevProfileType = EgtGetInfo( nPrevOutlineId, WIN_PROFILETYPE)
local dPrevCPDelta, _ = WinLib.GetDeltaProfile( nProfileFrameLayerId, sPrevProfileType)
local sNextProfileType = EgtGetInfo( nNextOutlineId, WIN_PROFILETYPE)
local dNextCPDelta, _ = WinLib.GetDeltaProfile( nProfileFrameLayerId, sNextProfileType)
-- calcolo spostamento della curva iniziale dovuto a posizione riferimento
local nProfileFrameId = EgtGetFirstNameInGroup( nCurrProfileId, WIN_SECTIONFRAME)
local frProfile = EgtFR( nProfileFrameId)
local b3CurrProfileFrame = EgtGetBBoxRef( nCurrProfileRefId, GDB_BB.STANDARD, frProfile)
local dCurrOffset = b3CurrProfileFrame:getMax():getX()
-- creo copie degli outline e li offsetto opportunamente
nCurrCurveId = EgtCopy( nOutlineId, nGeoLayerId)
EgtOffsetCurve( nCurrCurveId, dCurrOffset)
nCurrOffsetId = EgtCopy( nOutlineId, nGeoLayerId)
EgtOffsetCurve( nCurrOffsetId, dCurrOffset - b3CurrProfileFrame:getDimX())
EgtInvertCurve( nCurrOffsetId)
if StartJointType == WIN_JNT.ANGLED then
-- calcolo la bisettrice
local vtMedia = ( ( EgtSV( nOutlineId) - EgtEV( nPrevOutlineId)) / 2)
if not vtMedia:normalize() then
vtMedia = EgtSV( nOutlineId)
vtMedia:rotate(Z_AX(), 90)
end
nPrevCurveId = EgtLinePVL( nGeoLayerId, EgtSP( nOutlineId), vtMedia, 3 * b3CurrProfileFrame:getDimX())
EgtInvertCurve( nPrevCurveId)
else
nPrevCurveId = EgtCopy( nPrevOutlineId, nGeoLayerId)
end
if ( StartJointType == WIN_JNT.FULL_V and ( nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.HORIZONTAL)) or
( StartJointType == WIN_JNT.FULL_H and ( nProfileType == WIN_PRF.RIGHT or nProfileType == WIN_PRF.LEFT or nProfileType == WIN_PRF.VERTICAL)) or
nProfileType == WIN_PRF.SPLIT then
EgtOffsetCurve( nPrevCurveId, - dPrevCPDelta)
EgtSetInfo( nGeoLayerId, WIN_STARTCPDELTA, dPrevCPDelta)
end
if EndJointType == WIN_JNT.ANGLED then
-- calcolo la bisettrice
local vtMedia = ( ( EgtSV( nNextOutlineId) - EgtEV( nOutlineId)) / 2)
if not vtMedia:normalize() then
vtMedia = EgtEV( nOutlineId)
vtMedia:rotate(Z_AX(), 90)
end
nNextCurveId = EgtLinePVL( nGeoLayerId, EgtEP( nOutlineId), vtMedia, 3 * b3CurrProfileFrame:getDimX())
EgtInvertCurve( nNextCurveId)
else
nNextCurveId = EgtCopy( nNextOutlineId, nGeoLayerId)
end
if ( StartJointType == WIN_JNT.FULL_V and ( nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.HORIZONTAL)) or
( StartJointType == WIN_JNT.FULL_H and ( nProfileType == WIN_PRF.RIGHT or nProfileType == WIN_PRF.LEFT or nProfileType == WIN_PRF.VERTICAL)) or
nProfileType == WIN_PRF.SPLIT then
EgtOffsetCurve( nNextCurveId, - dNextCPDelta)
EgtSetInfo( nGeoLayerId, WIN_ENDCPDELTA, dNextCPDelta)
end
dGeoWidth = b3CurrProfileFrame:getDimX()
-- salvo delta controprofilo
if StartJointType == WIN_JNT.FULL_V then
end
if EndJointType == WIN_JNT.FULL_V then
end
return nCurrCurveId, nCurrOffsetId, nPrevCurveId, nNextCurveId, dGeoWidth
end
-- funzione che calcola l'ingombro dei pezzi del telaio
function WinLib.CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId)
-- recupero profilo
local nProfileLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_FRAME)
-- creo layer per ingombro
local nGeoLayerId = EgtGroup( nPartId)
EgtSetName( nGeoLayerId, WIN_GEO)
-- ricavo tipo dal nome
local sName = EgtGetName( nOutlineId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
elseif sName == WIN_VERTICAL then
nProfileType = WIN_PRF.VERTICAL
elseif sName == WIN_HORIZONTAL then
nProfileType = WIN_PRF.HORIZONTAL
elseif sName == WIN_SPLIT then
nProfileType = WIN_PRF.SPLIT
end
local StartJointType
local EndJointType
local nNextOutlineId
local nPrevOutlineId
local nCurrCurveId
local nCurrOffsetId
local nPrevCurveId
local nNextCurveId
local dGeoWidth
if nProfileType == WIN_PRF.TOP then
-- recupero tipo di giunzioni
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
-- recupero outline precedente e successivo
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
elseif nProfileType == WIN_PRF.BOTTOM then
-- recupero tipo di giunzioni
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
elseif nProfileType == WIN_PRF.LEFT then
-- recupero tipo di giunzioni
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
elseif nProfileType == WIN_PRF.RIGHT then
-- recupero tipo di giunzioni
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
elseif nProfileType == WIN_PRF.VERTICAL then
-- recupero tipo di giunzioni
StartJointType = WIN_JNT.FULL_H
EndJointType = WIN_JNT.FULL_H
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
elseif nProfileType == WIN_PRF.HORIZONTAL then
-- recupero tipo di giunzioni
StartJointType = WIN_JNT.FULL_V
EndJointType = WIN_JNT.FULL_V
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
elseif nProfileType == WIN_PRF.SPLIT then
local nStartId = EgtGetInfo( nOutlineId, WIN_SPLIT_STARTINTERS, 'i')
local nEndId = EgtGetInfo( nOutlineId, WIN_SPLIT_ENDINTERS, 'i')
local sStartName = EgtGetName( nStartId)
local sEndName = EgtGetName( nEndId)
-- recupero tipo di giunzioni
if sStartName == WIN_BOTTOM or sStartName == WIN_TOP then
StartJointType = WIN_JNT.FULL_H
else
StartJointType = WIN_JNT.FULL_V
end
if sEndName == WIN_BOTTOM or sEndName == WIN_TOP then
EndJointType = WIN_JNT.FULL_H
else
EndJointType = WIN_JNT.FULL_V
end
-- recupero outline precedente
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sStartName)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sEndName)
end
-- creo lati dell'outline
nCurrCurveId, nCurrOffsetId, nPrevCurveId, nNextCurveId, dGeoWidth = WinLib.CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, StartJointType, EndJointType, nProfileType, nGeoLayerId, nProfileFrameLayerId)
-- calcolo punti di intersezione
local ptIntersCurrPrev = EgtIP( nCurrCurveId, nPrevCurveId, EgtSP( nCurrCurveId))
if not ptIntersCurrPrev then
-- allungo per intersecare
EgtExtendCurveStartByLen( nCurrCurveId, 200)
EgtExtendCurveEndByLen( nPrevCurveId, 200)
ptIntersCurrPrev = EgtIP( nCurrCurveId, nPrevCurveId, EgtSP( nCurrCurveId))
end
local ptIntersCurrNext = EgtIP( nCurrCurveId, nNextCurveId, EgtEP( nCurrCurveId))
if not ptIntersCurrNext then
-- allungo per intersecare
EgtExtendCurveEndByLen( nCurrCurveId, 200)
EgtExtendCurveStartByLen( nNextCurveId, 200)
ptIntersCurrNext = EgtIP( nCurrCurveId, nNextCurveId, EgtEP( nCurrCurveId))
end
local ptIntersCurrOffsetPrev = EgtIP( nCurrOffsetId, nPrevCurveId, EgtEP( nCurrOffsetId))
if not ptIntersCurrOffsetPrev then
-- allungo per intersecare
EgtExtendCurveEndByLen( nCurrOffsetId, 1000)
EgtExtendCurveStartByLen( nPrevCurveId, 200)
ptIntersCurrOffsetPrev = EgtIP( nCurrOffsetId, nPrevCurveId, EgtEP( nCurrOffsetId))
end
local ptIntersCurrOffsetNext = EgtIP( nCurrOffsetId, nNextCurveId, EgtSP( nCurrOffsetId))
if not ptIntersCurrOffsetNext then
-- allungo per intersecare
EgtExtendCurveStartByLen( nCurrOffsetId, 1000)
EgtExtendCurveStartByLen( nNextCurveId, 200)
ptIntersCurrOffsetNext = EgtIP( nCurrOffsetId, nNextCurveId, EgtSP( nCurrOffsetId))
end
-- calcolo accorciamenti dei lati copiati alle intersezioni
local dIntersCurrPrevParam = EgtCurveParamAtPoint( nCurrCurveId, ptIntersCurrPrev)
EgtTrimCurveStartAtParam( nCurrCurveId, dIntersCurrPrevParam)
local dIntersCurrNextParam = EgtCurveParamAtPoint( nCurrCurveId, ptIntersCurrNext)
EgtTrimCurveEndAtParam( nCurrCurveId, dIntersCurrNextParam)
local dIntersCurrOffsetNextParam = EgtCurveParamAtPoint( nCurrOffsetId, ptIntersCurrOffsetNext)
EgtTrimCurveStartAtParam( nCurrOffsetId, dIntersCurrOffsetNextParam)
local dIntersCurrOffsetPrevParam = EgtCurveParamAtPoint( nCurrOffsetId, ptIntersCurrOffsetPrev)
EgtTrimCurveEndAtParam( nCurrOffsetId, dIntersCurrOffsetPrevParam)
local dIntersPrevOffsetParam = EgtCurveParamAtPoint( nPrevCurveId, ptIntersCurrOffsetPrev)
EgtTrimCurveStartAtParam( nPrevCurveId, dIntersPrevOffsetParam)
local dIntersPrevCurrParam = EgtCurveParamAtPoint( nPrevCurveId, ptIntersCurrPrev)
EgtTrimCurveEndAtParam( nPrevCurveId, dIntersPrevCurrParam)
local dIntersNextCurrParam = EgtCurveParamAtPoint( nNextCurveId, ptIntersCurrNext)
EgtTrimCurveStartAtParam( nNextCurveId, dIntersNextCurrParam)
local dIntersNextOffsetParam = EgtCurveParamAtPoint( nNextCurveId, ptIntersCurrOffsetNext)
EgtTrimCurveEndAtParam( nNextCurveId, dIntersNextOffsetParam)
-- creo composita dai lati
EgtSetName( nCurrCurveId, WIN_GEO_OUT)
EgtSetName( nCurrOffsetId, WIN_GEO_IN)
EgtSetName( nNextCurveId, WIN_GEO_RIGHT)
EgtSetName( nPrevCurveId, WIN_GEO_LEFT)
-- salvo spessore serramento in geo
EgtSetInfo( nCurrCurveId, WIN_GEOWIDTH, dGeoWidth)
return nCurrCurveId
end
-- funzione che posiziona i profili, li estrude e crea il solido
function WinLib.CalcStartEndProfileType(nProfileType, nOutlineId)
local StartJointType
local EndJointType
local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
local sStartProfileType
local sEndProfileType
if nProfileType == WIN_PRF.BOTTOM then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.ANGLED then
sStartProfileType = WIN_MINIZINKEN
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.ANGLED then
sEndProfileType = WIN_MINIZINKEN
end
elseif nProfileType == WIN_PRF.RIGHT then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.ANGLED then
sStartProfileType = WIN_MINIZINKEN
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.ANGLED then
sEndProfileType = WIN_MINIZINKEN
end
elseif nProfileType == WIN_PRF.TOP then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TR, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.ANGLED then
sStartProfileType = WIN_MINIZINKEN
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.ANGLED then
sEndProfileType = WIN_MINIZINKEN
end
elseif nProfileType == WIN_PRF.LEFT then
StartJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_TL, 'i')
EndJointType = EgtGetInfo( nOutlineLayerId, WIN_JOINT_BL, 'i')
if StartJointType == WIN_JNT.FULL_H then
sStartProfileType = WIN_CTRINOFST
elseif StartJointType == WIN_JNT.FULL_V then
sStartProfileType = WIN_OUTOFST
elseif StartJointType == WIN_JNT.ANGLED then
sStartProfileType = WIN_MINIZINKEN
end
if EndJointType == WIN_JNT.FULL_H then
sEndProfileType = WIN_CTRINOFST
elseif EndJointType == WIN_JNT.FULL_V then
sEndProfileType = WIN_OUTOFST
elseif EndJointType == WIN_JNT.ANGLED then
sEndProfileType = WIN_MINIZINKEN
end
elseif nProfileType == WIN_PRF.VERTICAL then
StartJointType = WIN_JNT.FULL_H
EndJointType = WIN_JNT.FULL_H
sStartProfileType = WIN_CTRINOFST
sEndProfileType = WIN_CTRINOFST
elseif nProfileType == WIN_PRF.HORIZONTAL then
StartJointType = WIN_JNT.FULL_V
EndJointType = WIN_JNT.FULL_V
sStartProfileType = WIN_CTRINOFST
sEndProfileType = WIN_CTRINOFST
elseif nProfileType == WIN_PRF.SPLIT then
local nStartId = EgtGetInfo( nOutlineId, WIN_SPLIT_STARTINTERS, 'i')
local nEndId = EgtGetInfo( nOutlineId, WIN_SPLIT_ENDINTERS, 'i')
local sStartName = EgtGetName( nStartId)
local sEndName = EgtGetName( nEndId)
-- recupero tipo di giunzioni
if sStartName == WIN_BOTTOM or sStartName == WIN_TOP then
StartJointType = WIN_JNT.FULL_H
else
StartJointType = WIN_JNT.FULL_V
end
if sEndName == WIN_BOTTOM or sEndName == WIN_TOP then
EndJointType = WIN_JNT.FULL_H
else
EndJointType = WIN_JNT.FULL_V
end
sStartProfileType = WIN_CTRINOFST
sEndProfileType = WIN_CTRINOFST
end
return sStartProfileType, sEndProfileType, StartJointType, EndJointType
end
-- funzione che posiziona i profili, li estrude e crea il solido
function WinLib.MakeSolidByExtrusion(nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId)
-- recupero outline
local nPartId = EgtGetParent( nSolidLayerId)
local nAreaId = EgtGetInfo( nPartId, WIN_AREA)
local nGeoLayerId = EgtGetParent( nGeoId)
-- recupero geo
local nPrevGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_LEFT)
local nNextGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_RIGHT)
-- recupero BBox e larghezza del geo
local dGeoWidth = EgtGetInfo( nGeoId, WIN_GEOWIDTH, 'd')
-- creo guida Main
local nGuideId = EgtCopy( nOutlineId, nSolidLayerId)
EgtExtendCurveStartByLen( nGuideId, 2 * dGeoWidth)
EgtExtendCurveEndByLen( nGuideId, 2 * dGeoWidth)
-- recupero frame del profilo
local nMainProfileFrameId = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME)
local frInvertMainProfile = EgtFR( nMainProfileFrameId)
frInvertMainProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nMainProfileId), frInvertMainProfile)
-- assegno come riferimento del profilo il punto start dell'outline
EgtChangeGroupFrame( nMainProfileId, Frame3d( EgtSP( nGuideId), - EgtSV( nGuideId)))
-- recupero outline del profilo Main e lo estrudo
local nMainOutlineId = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTION)
local nMainExtrusionId = EgtSurfTmSwept( nSolidLayerId, nMainOutlineId, nGuideId, false)
-- posiziono il profilo Start
local nRefStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, WIN_REF)
local b3RefStartProfile = EgtGetBBoxGlob(nRefStartProfileId, GDB_BB.STANDARD)
local dStartDelta = EgtGetInfo( nGeoLayerId, WIN_STARTCPDELTA, 'd') or 0
-- creo guida per estrusione
local nStartGuideId = EgtCopy( nPrevGeoId, nSolidLayerId)
EgtExtendCurveStartByLen( nStartGuideId, 2 * dGeoWidth)
EgtExtendCurveEndByLen( nStartGuideId, 2 * dGeoWidth)
-- recupero frame del profilo
local nStartProfileFrameId = EgtGetFirstNameInGroup( nStartProfileId, WIN_SECTIONFRAME)
local frStartProfile = EgtFR( nStartProfileFrameId)
-- lo sposto se controprofilo
frStartProfile:move( - frStartProfile:getVersX() * dStartDelta)
frStartProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nStartProfileId), frStartProfile)
-- assegno come riferimento del profilo il punto start dell'outline
EgtChangeGroupFrame( nStartProfileId, Frame3d( EgtSP( nStartGuideId), - EgtSV( nStartGuideId)))
-- in base al tipo di incastro e di pezzo, ricavo i controprofili
local sStartProfileType
local sEndProfileType
-- recupero tipo di giunzioni
sStartProfileType, sEndProfileType, StartJointType, EndJointType = WinLib.CalcStartEndProfileType( nProfileType, nOutlineId)
-- recupero outline del profilo Start e lo estrudo
local nOutStartProfileId
if sStartProfileType == WIN_MINIZINKEN then
nOutStartProfileId = EgtLine( nStartProfileId, EgtSP( nPrevGeoId), EgtSP( nPrevGeoId) - Z_AX() * b3RefStartProfile:getDimY(), GDB_RT.GLOB)
EgtInvertCurve( nOutStartProfileId)
else
nOutStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, sStartProfileType)
end
local nStartExtrusionId = EgtSurfTmSwept( nSolidLayerId, nOutStartProfileId, nStartGuideId, false)
-- taglio estrusi per ottenere solido
local nExtrCopyId = EgtCopy( nMainExtrusionId, nSolidLayerId)
EgtSurfTmCut( nMainExtrusionId, nStartExtrusionId, true, false)
EgtSurfTmCut( nStartExtrusionId, nExtrCopyId, true, false)
-- posiziono il profilo End
local nRefEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, WIN_REF)
local b3RefEndProfile = EgtGetBBoxGlob(nRefEndProfileId, GDB_BB.STANDARD)
local dEndDelta = EgtGetInfo( nGeoLayerId, WIN_ENDCPDELTA, 'd') or 0
-- creo guida per estrusione
local nEndGuideId = EgtCopy( nNextGeoId, nSolidLayerId)
EgtExtendCurveStartByLen( nEndGuideId, 2 * dGeoWidth)
EgtExtendCurveEndByLen( nEndGuideId, 2 * dGeoWidth)
-- recupero frame del profilo
local nEndProfileFrameId = EgtGetFirstNameInGroup( nEndProfileId, WIN_SECTIONFRAME)
local frEndProfile = EgtFR( nEndProfileFrameId)
frEndProfile:move( - frEndProfile:getVersX() * dEndDelta)
frEndProfile:invert()
-- lo applico a tutte le geometrie del profilo
EgtTransform( EgtGetAllInGroup( nEndProfileId), frEndProfile)
-- assegno come riferimento del profilo il punto start dell'outline
EgtChangeGroupFrame( nEndProfileId, Frame3d( EgtSP( nEndGuideId), - EgtSV( nEndGuideId)))
-- recupero outline del profilo End e lo estrudo
local nOutEndProfileId
if sEndProfileType == WIN_MINIZINKEN then
nOutEndProfileId = EgtLine( nEndProfileId, EgtSP( nNextGeoId), EgtSP( nNextGeoId) - Z_AX() * b3RefEndProfile:getDimY(), GDB_RT.GLOB)
else
nOutEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, sEndProfileType)
end
-- if (EndJointType == WIN_JNT.FULL_H and ( nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.LEFT)) or
-- (EndJointType == WIN_JNT.FULL_V and ( nProfileType == WIN_PRF.RIGHT)) then
-- EgtInvertCurve( nOutEndProfileId)
-- end
local nEndExtrusionId = EgtSurfTmSwept( nSolidLayerId, nOutEndProfileId, nEndGuideId, false)
-- taglio estrusi per ottenere solido
EgtSurfTmCut( nMainExtrusionId, nEndExtrusionId, true, false)
EgtSurfTmCut( nEndExtrusionId, nExtrCopyId, true, false)
EgtErase( nExtrCopyId)
end
-- funzione che crea il solido del pezzo del telaio
function WinLib.CalcFrameSolid(nPartId, nOutlineId, nGeoId, nOutlineLayerId)
-- recupero profilo
local nProfileId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nProfileFrameLayerId = EgtGetFirstNameInGroup( nProfileId, WIN_FRAME)
-- creo layer per solido e per profili di estrusione
local nSolidLayerId = EgtGroup( nPartId)
EgtSetName( nSolidLayerId, WIN_SOLID)
local nFrameProfileLayerId = EgtGroup( nPartId)
EgtSetName( nFrameProfileLayerId, WIN_PROFILE)
-- ricavo tipo dal nome
local sName = EgtGetName( nPartId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
elseif sName == WIN_VERTICAL then
nProfileType = WIN_PRF.VERTICAL
elseif sName == WIN_HORIZONTAL then
nProfileType = WIN_PRF.HORIZONTAL
elseif sName == WIN_SPLIT then
nProfileType = WIN_PRF.SPLIT
end
local nPrevOutlineId
local nNextOutlineId
local nOrigMainProfileId = GDB_ID.NULL
local nMainProfileId = GDB_ID.NULL
local nOrigStartProfileId = GDB_ID.NULL
local nStartProfileId = GDB_ID.NULL
local nOrigEndProfileId = GDB_ID.NULL
local nEndProfileId = GDB_ID.NULL
-- recupero outline precedente e successivo
if nProfileType == WIN_PRF.BOTTOM then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
elseif nProfileType == WIN_PRF.RIGHT then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
elseif nProfileType == WIN_PRF.TOP then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
elseif nProfileType == WIN_PRF.LEFT then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
elseif nProfileType == WIN_PRF.VERTICAL then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_BOTTOM)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_TOP)
elseif nProfileType == WIN_PRF.HORIZONTAL then
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_LEFT)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
elseif nProfileType == WIN_PRF.SPLIT then
local nStartId = EgtGetInfo( nOutlineId, WIN_SPLIT_STARTINTERS, 'i')
local nEndId = EgtGetInfo( nOutlineId, WIN_SPLIT_ENDINTERS, 'i')
local sStartName = EgtGetName( nStartId)
local sEndName = EgtGetName( nEndId)
nPrevOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sStartName)
nNextOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, sEndName)
end
-- recupero profilo e controprofili
local sCurrProfileType = EgtGetInfo( nOutlineId, WIN_PROFILETYPE)
local sPrevProfileType = EgtGetInfo( nPrevOutlineId, WIN_PROFILETYPE)
local sNextProfileType = EgtGetInfo( nNextOutlineId, WIN_PROFILETYPE)
nOrigMainProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sCurrProfileType)
nOrigStartProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sPrevProfileType)
nOrigEndProfileId = EgtGetFirstNameInGroup( nProfileFrameLayerId, sNextProfileType)
-- creo copie di profilo e controprofili
nMainProfileId = EgtCopy( nOrigMainProfileId, nFrameProfileLayerId)
EgtSetName( nMainProfileId, WIN_PRF_MAIN)
nStartProfileId = EgtCopy( nOrigStartProfileId, nFrameProfileLayerId)
EgtSetName( nStartProfileId, WIN_PRF_START)
nEndProfileId = EgtCopy( nOrigEndProfileId, nFrameProfileLayerId)
EgtSetName( nEndProfileId, WIN_PRF_END)
-- creo solido dai profili
WinLib.MakeSolidByExtrusion(nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId)
end
-- funzione che calcola l'ingombro dei pezzi del telaio
function WinLib.CreatePartFromOutline( nAreaLayerId, nOutlineId)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_OUTLINE)
-- se area senza outline, cerco quella superiore
if not nOutlineLayerId then
local nParentAreaLayerId = EgtGetParent( nAreaLayerId)
if nParentAreaLayerId then
nOutlineLayerId = EgtGetFirstNameInGroup( nParentAreaLayerId, WIN_OUTLINE)
end
end
-- ricavo tipo dal nome
local sName = EgtGetName( nOutlineId)
local nProfileType = WIN_PRF.NULL
if sName == WIN_TOP then
nProfileType = WIN_PRF.TOP
elseif sName == WIN_BOTTOM then
nProfileType = WIN_PRF.BOTTOM
elseif sName == WIN_LEFT then
nProfileType = WIN_PRF.LEFT
elseif sName == WIN_RIGHT then
nProfileType = WIN_PRF.RIGHT
elseif sName == WIN_VERTICAL then
nProfileType = WIN_PRF.VERTICAL
elseif sName == WIN_HORIZONTAL then
nProfileType = WIN_PRF.HORIZONTAL
elseif sName == WIN_SPLIT then
nProfileType = WIN_PRF.SPLIT
end
-- creo pezzo
local nPartId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nPartId, sName)
if nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP or nProfileType == WIN_PRF.HORIZONTAL then
EgtSetColor( nPartId, Color3d( 204, 102, 0))
elseif nProfileType == WIN_PRF.RIGHT or nProfileType == WIN_PRF.LEFT or nProfileType == WIN_PRF.VERTICAL then
EgtSetColor( nPartId, Color3d( 251, 128, 4))
else
EgtSetColor( nPartId, Color3d( 255, 159, 57))
end
-- inserisco riferimento alla sua area
EgtSetInfo( nPartId, WIN_AREA, nAreaLayerId)
-- disegno ingombro
local nGeoId = WinLib.CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId)
-- disegno solido
WinLib.CalcFrameSolid(nPartId, nOutlineId, nGeoId, nOutlineLayerId)
-- offset per distanziare i pezzi
--local dYPosOffset = 300 * ( nProfileType - 1)
--EgtChangeGroupFrame( nPartId, Frame3d( Point3d( 0, dYPosOffset, 0)))
end
-- funzione che posiziona un pezzo
function WinLib.PositionPart(nPartId)
-- ricavo tipo dal nome
local sName = EgtGetName( nPartId)
local sDelta = ''
if sName == WIN_BOTTOM then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_RIGHT then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_TOP then
sDelta = WIN_STARTCPDELTA
elseif sName == WIN_LEFT then
sDelta = WIN_STARTCPDELTA
end
-- calcolo nuovo riferimento
local nGeoPartLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO)
local nGeoPartId = EgtGetFirstNameInGroup( nGeoPartLayerId, sName)
local dDelta = EgtGetInfo( nGeoPartId, sDelta, 'd') or 0
local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
local nFramePartId = EgtGetFirstNameInGroup( nOutlineLayerId, sName)
local vtStart = EgtSV( nFramePartId)
local ptStart = EgtSP( nFramePartId) + vtStart * dDelta
local _, _, dAngRight = SphericalFromVector(vtStart)
local frStart = Frame3d( ptStart)
frStart:rotate( frStart:getOrigin(), Z_AX(), dAngRight)
EgtChangeGroupFrame( nPartId, frStart)
end
-- funzione che assembla i pezzi
function WinLib.AssembleFrame()
local nBottomPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_BOTTOM)
WinLib.PositionPart(nBottomPartId)
local nRightPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_RIGHT)
WinLib.PositionPart(nRightPartId)
local nTopPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_TOP)
WinLib.PositionPart(nTopPartId)
local nLeftPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_LEFT)
WinLib.PositionPart(nLeftPartId)
-- assemblo i pezzi
--local nRightPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_RIGHT)
--local nGeoRightLayerId = EgtGetFirstNameInGroup( nRightPartId, WIN_GEO)
--local nGeoRightId = EgtGetFirstNameInGroup( nGeoRightLayerId, WIN_RIGHT)
--local dDelta = EgtGetInfo( nGeoRightId, WIN_BOTTOMCPDELTA, 'd')
--local nFrameLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_FRAME)
--local nOutlineLayerId = EgtGetFirstNameInGroup( nFrameLayerId, WIN_OUTLINE)
--local nFrameRightId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_RIGHT)
--local vtRight = EgtSV( nFrameRightId)
--local ptRight = EgtSP( nFrameRightId) + vtRight * dDelta
--local _, _, dAngRight = SphericalFromVector(vtRight)
--local frRight = Frame3d( ptRight)
--frRight:rotate( frRight:getOrigin(), Z_AX(), dAngRight)
--EgtChangeGroupFrame( nRightPartId, frRight)
end
---------------------------------------------------------------------
return WinLib
File diff suppressed because it is too large Load Diff
+430
View File
@@ -0,0 +1,430 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinCreate = {}
-- Include
require( 'EgtBase')
require( 'WinConst')
-- funzioni
-- funzione che importa il profilo
function WinCreate.ImportProfile( sProfilePath)
-- creo gruppo per il profilo
local nProfileId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nProfileId, WIN_PROFILE)
-- importo profilo prescelto
local bOk = EgtInsertFile( sProfilePath)
-- recupero gruppi importati e li sposto nel gruppo profilo
local nGroupId = EgtGetFirstInGroup( GDB_ID.ROOT)
while nGroupId do
if nGroupId ~= nProfileId then
local nCurrId = nGroupId
nGroupId = EgtGetNext( nGroupId)
EgtRelocateGlob( nCurrId, nProfileId)
EgtSetStatus( nCurrId, GDB_ST.OFF)
else
nGroupId = EgtGetNext( nGroupId)
end
end
-- riporto path nel Part del profilo
EgtSetInfo( nProfileId, WIN_PROFILEPATH, sProfilePath)
end
-- funzione che crea il buco rettangolare per la finestra
function WinCreate.CreateFrame( dWidth, dHeight, nJointBL, nJointBR, nJointTR, nJointTL)
-- creo gruppo per telaio
local nFrameAreaId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameAreaId, WIN_AREA .. '(' .. WIN_FRAME .. ')')
-- imposto il tipo
EgtSetInfo( nFrameAreaId, WIN_AREATYPE, WIN_AREATYPES.FRAME)
local nAreaOutlineLayerId = EgtGroup( nFrameAreaId)
EgtSetName( nAreaOutlineLayerId, WIN_AREAOUTLINE)
-- disegno outline
local nFrameBottomId = EgtLine( nAreaOutlineLayerId, Point3d( 0, 0, 0), Point3d( dWidth, 0, 0))
EgtSetName( nFrameBottomId, WIN_BOTTOM)
local nFrameRightId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, 0, 0), Point3d( dWidth, dHeight, 0))
EgtSetName( nFrameRightId, WIN_RIGHT)
local nFrameTopId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, dHeight, 0), Point3d( 0, dHeight, 0))
EgtSetName( nFrameTopId, WIN_TOP)
local nFrameLeftId = EgtLine( nAreaOutlineLayerId, Point3d( 0, dHeight, 0), Point3d( 0, 0, 0))
EgtSetName( nFrameLeftId, WIN_LEFT)
-- imposto tipo giunzioni
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BL, nJointBL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BR, nJointBR)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TL, nJointTL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TR, nJointTR)
return nFrameAreaId
end
-- funzione che crea il buco per la finestra
function WinCreate.CreateGenFrame( nFrameBottomId, nFrameRightId, nFrameTopId, nFrameLeftId, nJointBL, nJointBR, nJointTR, nJointTL)
-- creo gruppo per telaio
local nFrameAreaId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nFrameAreaId, WIN_AREA .. '(' .. WIN_FRAME .. ')')
-- imposto il tipo
EgtSetInfo( nFrameAreaId, WIN_AREATYPE, WIN_AREATYPES.FRAME)
local nAreaOutlineLayerId = EgtGroup( nFrameAreaId)
EgtSetName( nAreaOutlineLayerId, WIN_AREAOUTLINE)
-- disegno outline
EgtRelocateGlob( nFrameBottomId, nAreaOutlineLayerId)
EgtSetName( nFrameBottomId, WIN_BOTTOM)
EgtRelocateGlob( nFrameRightId, nAreaOutlineLayerId)
EgtSetName( nFrameRightId, WIN_RIGHT)
EgtRelocateGlob( nFrameTopId, nAreaOutlineLayerId)
EgtSetName( nFrameTopId, WIN_TOP)
EgtRelocateGlob( nFrameLeftId, nAreaOutlineLayerId)
EgtSetName( nFrameLeftId, WIN_LEFT)
-- imposto tipo giunzioni
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BL, nJointBL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BR, nJointBR)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TL, nJointTL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TR, nJointTR)
return nFrameAreaId
end
-- -- funzione che crea il telaio a partire dal buco
-- function WinCreate.CreateFrameOnHole( nHoleLayerId, dWidth, dHeight)
-- local nAreaOutlineLayerId = EgtGroup( nHoleLayerId)
-- EgtSetName( nAreaOutlineLayerId, WIN_OUTLINE)
-- -- disegno outline
-- local nHoleBottomId = EgtLine( nAreaOutlineLayerId, Point3d( 0, 0, 0), Point3d( dWidth, 0, 0))
-- EgtSetName( nHoleBottomId, WIN_BOTTOM)
-- local nHoleRightId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, 0, 0), Point3d( dWidth, dHeight, 0))
-- EgtSetName( nHoleRightId, WIN_RIGHT)
-- local nHoleTopId = EgtLine( nAreaOutlineLayerId, Point3d( dWidth, dHeight, 0), Point3d( 0, dHeight, 0))
-- EgtSetName( nHoleTopId, WIN_TOP)
-- local nHoleLeftId = EgtLine( nAreaOutlineLayerId, Point3d( 0, dHeight, 0), Point3d( 0, 0, 0))
-- EgtSetName( nHoleLeftId, WIN_LEFT)
-- end
-- funzione che aggiunge una anta
function WinCreate.AddSash( nAreaId, nJointBL, nJointBR, nJointTR, nJointTL, nSashType)
-- creo nuova area
local nSashAreaId = EgtGroup( nAreaId)
EgtSetName( nSashAreaId, WIN_AREA .. '(' .. WIN_SASH .. ')')
-- imposto il tipo
EgtSetInfo( nSashAreaId, WIN_AREATYPE, WIN_AREATYPES.SASH)
-- recupero outline area precedente
local nPrevAreaOutlineId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
-- lo copio per outline area dell'anta
local nAreaOutlineLayerId = EgtGroup( nSashAreaId)
EgtSetName( nAreaOutlineLayerId, WIN_AREAOUTLINE)
local nAreaOutlineId = EgtGetFirstInGroup( nPrevAreaOutlineId)
while nAreaOutlineId do
local nOutlineId = EgtCopy( nAreaOutlineId, nAreaOutlineLayerId)
EgtSetInfo( nOutlineId, WIN_SOU, nAreaOutlineId)
EgtSetInfo( nAreaOutlineId, WIN_CHILD, nOutlineId)
nAreaOutlineId = EgtGetNext( nAreaOutlineId)
end
-- imposto tipo giunzioni
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BL, nJointBL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_BR, nJointBR)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TL, nJointTL)
EgtSetInfo( nAreaOutlineLayerId, WIN_JOINT_TR, nJointTR)
-- imposto tipo di anta se presente
if nSashType then
EgtSetInfo( nSashAreaId, WIN_SASHTYPE, nSashType)
end
return nSashAreaId
end
-- funzione che aggiunge un riempimento
function WinCreate.AddFill( nAreaId, FillType)
-- creo nuova area
local nFillAreaId = EgtGroup( nAreaId)
EgtSetName( nFillAreaId, WIN_AREA .. '(' .. WIN_FILL .. ')')
-- imposto il tipo
EgtSetInfo( nFillAreaId, WIN_AREATYPE, WIN_AREATYPES.FILL)
-- recupero outline area precedente
local nPrevAreaOutlineId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
-- lo copio per outline area del riempimento
local nAreaOutlineLayerId = EgtGroup( nFillAreaId)
EgtSetName( nAreaOutlineLayerId, WIN_AREAOUTLINE)
local nAreaOutlineId = EgtGetFirstInGroup( nPrevAreaOutlineId)
while nAreaOutlineId do
local nOutlineId = EgtCopy( nAreaOutlineId, nAreaOutlineLayerId)
EgtSetInfo( nOutlineId, WIN_SOU, nAreaOutlineId)
EgtSetInfo( nAreaOutlineId, WIN_CHILD, nOutlineId)
EgtRemoveInfo( nAreaOutlineLayerId, WIN_JOINT_BL)
EgtRemoveInfo( nAreaOutlineLayerId, WIN_JOINT_BR)
EgtRemoveInfo( nAreaOutlineLayerId, WIN_JOINT_TL)
EgtRemoveInfo( nAreaOutlineLayerId, WIN_JOINT_TR)
nAreaOutlineId = EgtGetNext( nAreaOutlineId)
end
-- imposto tipo di fill
EgtSetInfo( nFillAreaId, WIN_FILLTYPE, FillType)
return nFillAreaId
end
-- funzione che crea un taglio split
function WinCreate.AddSplit( nAreaLayerId, SplitType, MeasureType, nPosition, nProportion, nSplitType)
-- creo layer temporaneo per split
local nTempSplitLayerId = EgtGroup( nAreaLayerId)
EgtSetName( nTempSplitLayerId, WIN_TEMPSPLIT)
-- recupero contorno area precedente
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
local OutlineIds = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
local sName = EgtGetName( nOutlineId)
table.insert( OutlineIds, nOutlineId)
nOutlineId = EgtGetNext( nOutlineId)
end
local nTotSplitId
if SplitType == WIN_SPLITORIENTATION.VERTICAL then
-- creo linea
local nCalcPosition = 0
if MeasureType == WIN_MEASURE.ABSOLUT then
nCalcPosition = nPosition
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
nCalcPosition = b3OutlineLayer:getDimX() / nProportion * nPosition
end
nTotSplitId = EgtLine( nTempSplitLayerId, b3OutlineLayer:getMin() + X_AX() * nCalcPosition, b3OutlineLayer:getMin() + X_AX() * nCalcPosition + Y_AX() * b3OutlineLayer:getDimY())
elseif SplitType == WIN_SPLITORIENTATION.HORIZONTAL then
-- creo linea
local nCalcPosition = 0
if MeasureType == WIN_MEASURE.ABSOLUT then
nCalcPosition = nPosition
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
nCalcPosition = b3OutlineLayer:getDimY() / nProportion * nPosition
end
nTotSplitId = EgtLine( nTempSplitLayerId, b3OutlineLayer:getMin() + Y_AX() * nCalcPosition, b3OutlineLayer:getMin() + Y_AX() * nCalcPosition + X_AX() * b3OutlineLayer:getDimX())
end
-- calcolo split
local nArea1Id, nArea2Id = WinCreate.AddGenSplit( nAreaLayerId, nTotSplitId, nSplitType)
EgtErase( nTempSplitLayerId)
return nArea1Id, nArea2Id
end
-- funzione che crea tagli split multipli
function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList, nProportion)
if MeasureType == WIN_MEASURE.ABSOLUT then
for nIndex = 1, #PositionList do
WinCreate.AddSplit( nAreaLayerId, SplitType, MeasureType, PositionList[nIndex], nProportion)
end
elseif MeasureType == WIN_MEASURE.PROPORTIONAL then
for nIndex = 1, #PositionList do
WinCreate.AddSplit( nAreaLayerId, SplitType, MeasureType, PositionList[nIndex], nProportion)
end
end
end
-- funzione che crea un taglio split da una curva generica
function WinCreate.AddGenSplit( nAreaLayerId, nSplitId, nSplitType)
-- se area nulla diventa di tipo split
local nAreaType = EgtGetInfo( nAreaLayerId, WIN_AREATYPE, 'i')
if nAreaType == WIN_AREATYPES.NULL then
EgtSetInfo( nAreaLayerId, WIN_AREATYPE, WIN_AREATYPES.SPLIT)
end
-- creo layer per split
local nSplitLayerId = EgtGroup( nAreaLayerId)
EgtSetName( nSplitLayerId, WIN_BASESPLIT)
-- sposto curva split nel layer
EgtRelocateGlob( nSplitId, nSplitLayerId)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
local b3OutlineLayer = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD)
-- allungo curva split per cercare intersezioni
EgtExtendCurveStartByLen( nSplitId, 10)
EgtExtendCurveEndByLen( nSplitId, 10)
-- recupero lista intersezioni
local OutlineInters = {}
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
while nOutlineId do
local sName = EgtGetName( nOutlineId)
-- verifico se ci siano intersezioni con questo outline
local ptInters = EgtIP( nSplitId, nOutlineId, EgtSP( nSplitId))
if ptInters then
table.insert( OutlineInters, { Id = nOutlineId, IntersPoint = ptInters})
end
nOutlineId = EgtGetNext( nOutlineId)
end
local ptStartSplit = EgtSP( nSplitId)
local ptEndSplit = EgtEP( nSplitId)
local StartInters
local EndInters
for nIndex = 1, #OutlineInters do
local CurrOutInters = OutlineInters[nIndex]
CurrOutInters.StartDistance = (CurrOutInters.IntersPoint - ptStartSplit):sqlen()
CurrOutInters.EndDistance = (CurrOutInters.IntersPoint - ptEndSplit):sqlen()
if not StartInters or CurrOutInters.StartDistance < StartInters.StartDistance then
StartInters = CurrOutInters
end
if not EndInters or CurrOutInters.EndDistance < EndInters.EndDistance then
EndInters = CurrOutInters
end
end
-- accorcio la curva split su intersezione outline
local dStartSplitInters = EgtCurveParamAtPoint( nSplitId, StartInters.IntersPoint)
EgtTrimCurveStartAtParam( nSplitId, dStartSplitInters)
local dEndSplitInters = EgtCurveParamAtPoint( nSplitId, EndInters.IntersPoint)
EgtTrimCurveEndAtParam( nSplitId, dEndSplitInters)
EgtSetInfo( nSplitId, WIN_SPLIT_STARTINTERS, StartInters.Id)
EgtSetInfo( nSplitId, WIN_SPLIT_ENDINTERS, EndInters.Id)
-- assegno nome profilo
EgtSetName( nSplitId, WIN_SPLIT)
-- creo aree
local nArea1Id, nArea2Id = WinCreate.CreateAreaFromSplit( nAreaLayerId, nSplitId)
-- verifico se discende da Frame
local nParentAreaId = nAreaLayerId
local nParentAreaType = nAreaType
-- recupero parent fino a trovare frame o sash
while nParentAreaType ~= WIN_AREATYPES.FRAME and nParentAreaType ~= WIN_AREATYPES.SASH do
nParentAreaId = EgtGetParent( nParentAreaId)
nParentAreaType = EgtGetInfo( nParentAreaId, WIN_AREATYPE, 'i')
end
if nParentAreaType == WIN_AREATYPES.FRAME and nSplitType then
-- imposto tipo di split
EgtSetInfo( nSplitLayerId, WIN_SPLITTYPE, nSplitType)
-- EgtSetInfo( nSplitLayerId, WIN_SPLITTYPE, EgtIf( not nSplitType, WIN_SPLITTYPES.MULLION, nSplitType))
end
return nArea1Id, nArea2Id
end
-- funzione che crea tagli split da curve generiche
function WinCreate.AddGenSplits( nAreaLayerId, SplitList)
for nIndex = 1, #SplitList do
WinCreate.AddSplit( nAreaLayerId, SplitList[nIndex])
end
end
-- funzione che crea le aree da un taglio split
function WinCreate.CreateAreaFromSplit( nAreaLayerId, nSplitId)
-- creo layer per le due aree
local nArea1Id = EgtGroup( nAreaLayerId)
EgtSetName( nArea1Id , WIN_AREA1)
EgtSetInfo( nArea1Id, WIN_AREATYPE, WIN_AREATYPES.NULL)
local nArea1OutlineLayerId = EgtGroup( nArea1Id)
EgtSetName( nArea1OutlineLayerId , WIN_AREAOUTLINE)
local nArea2Id = EgtGroup( nAreaLayerId)
EgtSetName( nArea2Id , WIN_AREA2)
EgtSetInfo( nArea2Id, WIN_AREATYPE, WIN_AREATYPES.NULL)
local nArea2OutlineLayerId = EgtGroup( nArea2Id)
EgtSetName( nArea2OutlineLayerId , WIN_AREAOUTLINE)
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREAOUTLINE)
local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
local nInters = 0
while nOutlineId and nInters ~= 3 do
local sName = EgtGetName( nOutlineId)
-- calcolo intersezioni con questo outline
local ptInters = EgtIP( nSplitId, nOutlineId, EgtSP( nSplitId))
if ptInters then
if nInters == 0 then
-- trovato primo punto di intersezione - inizio area 2
nInters = 1
local nCopyId = EgtCopy( nOutlineId, nArea2OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
local dStartIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveStartAtParam( nCopyId, dStartIntersParam)
elseif nInters == 1 then
-- trovato secondo punto di intersezione - fine area 2
nInters = 2
local nCopyId = EgtCopy( nOutlineId, nArea2OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
local dEndIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveEndAtParam( nCopyId, dEndIntersParam)
-- copio anche split
local nSplitCopyId = EgtCopy( nSplitId, nArea2OutlineLayerId)
EgtSetInfo( nSplitCopyId, WIN_SOU, nSplitId)
EgtSetInfo( nSplitId, WIN_CHILD, nSplitCopyId)
EgtRemoveInfo( nSplitCopyId, WIN_SPLIT_STARTINTERS)
EgtRemoveInfo( nSplitCopyId, WIN_SPLIT_ENDINTERS)
if not AreSamePointExact( EgtEP( nCopyId), EgtSP( nSplitCopyId)) then
EgtInvertCurve( nSplitCopyId)
end
-- verifico direzione per dare nome
local vtMedia = ( ( EgtEV( nSplitCopyId) - EgtSV( nSplitCopyId)) / 2)
if not vtMedia:normalize() then
vtMedia = EgtSV( nSplitCopyId)
end
if abs( vtMedia:getX()) > abs( vtMedia:getY()) then
EgtSetName( nSplitCopyId, WIN_BOTTOM)
else
EgtSetName( nSplitCopyId, WIN_LEFT)
end
-- inizio area 1
nCopyId = EgtCopy( nOutlineId, nArea1OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
local dStartIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveStartAtParam( nCopyId, dStartIntersParam)
elseif nInters == 2 then
-- trovato secondo punto di intersezione - fine area 1
nInters = 3
local nCopyId = EgtCopy( nOutlineId, nArea1OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
local dEndIntersParam = EgtCurveParamAtPoint( nCopyId, ptInters)
EgtTrimCurveEndAtParam( nCopyId, dEndIntersParam)
-- copio anche split
local nSplitCopyId = EgtCopy( nSplitId, nArea1OutlineLayerId)
EgtRemoveName( nSplitCopyId)
EgtSetInfo( nSplitCopyId, WIN_SOU, nSplitId)
EgtSetInfo( nSplitId, WIN_CHILD, nSplitCopyId)
EgtRemoveInfo( nSplitCopyId, WIN_SPLIT_STARTINTERS)
EgtRemoveInfo( nSplitCopyId, WIN_SPLIT_ENDINTERS)
if not AreSamePointExact( EgtEP( nCopyId), EgtSP( nSplitCopyId)) then
EgtInvertCurve( nSplitCopyId)
end
-- verifico direzione per dare nome
local vtMedia = ( ( EgtEV( nSplitCopyId) - EgtSV( nSplitCopyId)) / 2)
if not vtMedia:normalize() then
vtMedia = EgtSV( nSplitCopyId)
end
if abs( vtMedia:getX()) > abs( vtMedia:getY()) then
EgtSetName( nSplitCopyId, WIN_TOP)
else
EgtSetName( nSplitCopyId, WIN_RIGHT)
end
end
elseif nInters == 1 then
-- copio nel profilo 2
local nCopyId = EgtCopy( nOutlineId, nArea2OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
elseif nInters == 2 then
-- copio nel profilo 1
local nCopyId = EgtCopy( nOutlineId, nArea1OutlineLayerId)
EgtSetInfo( nCopyId, WIN_SOU, nOutlineId)
EgtSetInfo( nOutlineId, WIN_CHILD, nCopyId)
end
-- aggiorno indice
nOutlineId = EgtGetNext( nOutlineId)
-- se arrivato alla fine riparto
if not nOutlineId then
nOutlineId = EgtGetFirstInGroup( nOutlineLayerId)
end
end
-- error('qqq')
return nArea1Id, nArea2Id
end
-- funzione che aggiunge uno zoccolo
function WinCreate.AddBottomRail( nAreaId)
local nAreaType = EgtGetInfo( nAreaId, WIN_AREATYPE, 'i')
if nAreaType == WIN_AREATYPES.FRAME then
-- recupero l'outline bottom
local nBaseOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
-- local nBottomOutlineId = EgtGetFirstNameInGroup( nBaseOutlineLayerId, WIN_BOTTOM)
EgtSetInfo( nBaseOutlineLayerId, WIN_BOTTOMRAIL, 1)
end
end
---------------------------------------------------------------------
return WinCreate
+34
View File
@@ -0,0 +1,34 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinDesign = {}
-- Include
require( 'EgtBase')
require( 'WinConst')
-- funzioni
function WinDesign.DesignFrame( dWidth, dHeight, nJointBL, nJointBR, nJointTR, nJointTL)
end
function WinDesign.DesignSash( sFilePath)
end
---------------------------------------------------------------------
return WinDesign
+253
View File
@@ -0,0 +1,253 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
-- Tabella per definizione modulo
local WinManageProject = {}
-- Include
require( 'EgtBase')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinJWDConst = nil
require( 'WinJWDConst')
_G.package.loaded.WinCreate = nil
local WinCreate = require( 'WinCreate')
_G.package.loaded.JSON = nil
local JSON = require( 'JSON')
-- funzioni
local function ConvertCurveToTableEntity( nCurveId)
-- verifico il tipo di entita'
local nBaseOutlineType = EgtGetType( nCurveId)
if nBaseOutlineType == GDB_TY.CRV_LINE then
local ptStart = EgtSP( nCurveId)
local ptEnd = EgtEP( nCurveId)
return { [JWD_CRV_TYPE] = nBaseOutlineType, [JWD_POINT_START] = ptStart, [JWD_POINT_END] = ptEnd}
elseif nBaseOutlineType == GDB_TY.CRV_ARC then
local ptStart = EgtSP( nCurveId)
local ptEnd = EgtEP( nCurveId)
local ptMid = EgtMP( nCurveId)
return { [JWD_CRV_TYPE] = nBaseOutlineType, [JWD_POINT_START] = ptStart, [JWD_POINT_END] = ptEnd, [JWD_POINT_MID] = ptMid}
elseif nBaseOutlineType == GDB_TY.CRV_COMPO then
-- local ptStart = EgtSP( nCurveId)
-- local ptEnd = EgtEP( nCurveId)
-- local ptMid = EgtMP( nCurveId)
-- return { Type = nBaseOutlineType, ptStart = ptStart, ptEnd = ptEnd, ptMid = ptMid}
end
end
-- funzione ricorsiva che legge le aree e ne riporta i dati in tabella
local function ConvertAreaToTable( nAreaId)
local AreaTable = {}
local nAreaType = EgtGetInfo( nAreaId, WIN_AREATYPE, 'i')
AreaTable[JWD_AREA_TYPE] = nAreaType
if nAreaType == WIN_AREATYPES.NULL then
-- non faccio nulla
elseif nAreaType == WIN_AREATYPES.FRAME then
-- recupero outline del frame
local nBaseOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE, 'i')
local JointTable = {}
-- recupero tipo giunzioni
local nJointBL = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_BL, 'i')
local nJointBR = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_BR, 'i')
local nJointTL = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_TL, 'i')
local nJointTR = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_TR, 'i')
JointTable[JWD_JOINT_BL] = nJointBL
JointTable[JWD_JOINT_BR] = nJointBR
JointTable[JWD_JOINT_TL] = nJointTL
JointTable[JWD_JOINT_TR] = nJointTR
local OutlineTable = {}
-- recupero contorno
local nBaseOutlineId = EgtGetFirstInGroup( nBaseOutlineLayerId)
local nBaseOutlineIndex = 1
while nBaseOutlineId do
local Entity = ConvertCurveToTableEntity( nBaseOutlineId)
table.insert( OutlineTable, Entity)
nBaseOutlineIndex = nBaseOutlineIndex + 1
nBaseOutlineId = EgtGetNext( nBaseOutlineId)
end
AreaTable[JWD_JOINT] = JointTable
AreaTable[JWD_OUTLINE] = OutlineTable
-- verifico se c'e' BottomRail
local nBottomRailId = EgtGetInfo( nBaseOutlineLayerId, WIN_BOTTOMRAIL, 'i')
if nBottomRailId then
AreaTable[JWD_BOTTOM_RAIL] = 1
end
elseif nAreaType == WIN_AREATYPES.SASH then
local nBaseOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAOUTLINE)
local JointTable = {}
-- recupero tipo giunzioni
local nJointBL = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_BL, 'i')
local nJointBR = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_BR, 'i')
local nJointTL = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_TL, 'i')
local nJointTR = EgtGetInfo( nBaseOutlineLayerId, WIN_JOINT_TR, 'i')
JointTable[JWD_JOINT_BL] = nJointBL
JointTable[JWD_JOINT_BR] = nJointBR
JointTable[JWD_JOINT_TL] = nJointTL
JointTable[JWD_JOINT_TR] = nJointTR
AreaTable[JWD_JOINT] = JointTable
local nSashType = EgtGetInfo( nAreaId, WIN_SASHTYPE, 'i')
if nSashType then
AreaTable[JWD_SASH_TYPE] = nSashType
end
elseif nAreaType == WIN_AREATYPES.FILL then
local nFillType = EgtGetInfo( nAreaId, WIN_FILLTYPE, 'i')
AreaTable[JWD_FILL_TYPE] = nFillType
elseif nAreaType == WIN_AREATYPES.SPLIT then
end
-- verifico se c'e' Split
local nSplitLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_BASESPLIT)
if nSplitLayerId then
local SplitTable = {}
local nSplitId = EgtGetFirstInGroup( nSplitLayerId)
local Entity = ConvertCurveToTableEntity( nSplitId)
table.insert( SplitTable, Entity)
AreaTable[JWD_SPLIT] = SplitTable
end
-- ciclo sulle aree contenute
local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREAASTERISK)
local nChildIndex = 1
while nChildAreaId do
local ChildTable = ConvertAreaToTable( nChildAreaId)
local AreaName = JWD_AREA .. nChildIndex
AreaTable[AreaName] = ChildTable
nChildIndex = nChildIndex + 1
nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREAASTERISK)
end
return AreaTable
end
-- funzione che converte una curva descritta in tabella in una geometria
local function ConvertCurveTableToEntity( nDrawFrameLayerId, CurrCurve)
if CurrCurve[JWD_CRV_TYPE] == GDB_TY.CRV_LINE then
EgtLine( nDrawFrameLayerId, Point3d(CurrCurve[JWD_POINT_START]), Point3d(CurrCurve[JWD_POINT_END]))
elseif CurrCurve[JWD_CRV_TYPE] == GDB_TY.CRV_ARC then
EgtArc3P( nDrawFrameLayerId, Point3d(CurrCurve[JWD_POINT_START]), Point3d(CurrCurve[JWD_POINT_MID]), Point3d(CurrCurve[JWD_POINT_END]))
elseif CurrCurve[JWD_CRV_TYPE] == GDB_TY.CRV_COMPO then
-- local ptStart = EgtSP( nBaseOutlineId)
-- local ptEnd = EgtEP( nBaseOutlineId)
-- local ptMid = EgtMP( nBaseOutlineId)
-- local Entity = { Type = nBaseOutlineType, ptStart = ptStart, ptEnd = ptEnd, ptMid = ptMid}
end
end
-- funzione ricorsiva che legge le aree in tabella e crea le geometrie
local function ConvertTableToGeometry( AreaTable, nAreaId)
if AreaTable[JWD_AREA_TYPE] == WIN_AREATYPES.NULL then
elseif AreaTable[JWD_AREA_TYPE] == WIN_AREATYPES.FRAME then
-- creo gruppo e layer per contorno
local nDrawFramePartId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nDrawFramePartId, 'DrawFrame')
local nDrawFrameLayerId = EgtGroup( nDrawFramePartId)
for nIndex = 1, #AreaTable[JWD_OUTLINE] do
local CurrCurve = AreaTable[JWD_OUTLINE][nIndex]
ConvertCurveTableToEntity( nDrawFrameLayerId, CurrCurve)
end
local nFrameBottomId = EgtGetFirstInGroup(nDrawFrameLayerId)
local nFrameRightId = EgtGetNext(nFrameBottomId)
local nFrameTopId = EgtGetNext(nFrameRightId)
local nFrameLeftId = EgtGetNext(nFrameTopId)
-- creo frame
nAreaId = WinCreate.CreateGenFrame( nFrameBottomId, nFrameRightId, nFrameTopId, nFrameLeftId, AreaTable[JWD_JOINT][JWD_JOINT_BL], AreaTable[JWD_JOINT][JWD_JOINT_BR], AreaTable[JWD_JOINT][JWD_JOINT_TR], AreaTable[JWD_JOINT][JWD_JOINT_TL])
-- elimino contorno frame
EgtErase( nDrawFramePartId)
-- se BottomRail
if AreaTable[JWD_BOTTOM_RAIL] and AreaTable[JWD_BOTTOM_RAIL] == 1 then
WinCreate.AddBottomRail( nAreaId)
end
elseif AreaTable[JWD_AREA_TYPE] == WIN_AREATYPES.SASH then
nAreaId = WinCreate.AddSash( nAreaId, AreaTable[JWD_JOINT][JWD_JOINT_BL], AreaTable[JWD_JOINT][JWD_JOINT_BR], AreaTable[JWD_JOINT][JWD_JOINT_TR], AreaTable[JWD_JOINT][JWD_JOINT_TL], AreaTable[JWD_SASH_TYPE])
elseif AreaTable[JWD_AREA_TYPE] == WIN_AREATYPES.FILL then
WinCreate.AddFill( nAreaId, AreaTable[JWD_FILL_TYPE])
elseif AreaTable[JWD_AREA_TYPE] == WIN_AREATYPES.SPLIT then
end
-- verifico se c'e' Split
if AreaTable[JWD_SPLIT] then
-- creo gruppo e layer per Split
local nDrawFramePartId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nDrawFramePartId, 'DrawFrame')
local nDrawFrameLayerId = EgtGroup( nDrawFramePartId)
ConvertCurveTableToEntity( nDrawFrameLayerId, AreaTable[JWD_SPLIT][1])
local nArea1Id, nArea2Id = WinCreate.AddGenSplit( nAreaId, EgtGetFirstInGroup(nDrawFrameLayerId)) --, nSplitType)
EgtErase(nDrawFramePartId)
ConvertTableToGeometry( AreaTable[JWD_AREA .. 1], nArea1Id)
ConvertTableToGeometry( AreaTable[JWD_AREA .. 2], nArea2Id)
else
-- ciclo sulle sotto aree
local nChildIndex = 1
while AreaTable[JWD_AREA ..nChildIndex] do
ConvertTableToGeometry( AreaTable[JWD_AREA ..nChildIndex], nAreaId)
nChildIndex = nChildIndex + 1
end
end
end
-- funzione che crea le tabelle gerarchiche dalla struttura geometrica
function WinManageProject.CreateTableFromGeom( nFrameId)
-- creo la tabella
local WinTable = {}
-- riporto la path del profilo
local nProfileId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local sProfilePath = EgtGetInfo( nProfileId, WIN_PROFILEPATH)
WinTable[JWD_PROFILE_PATH] = sProfilePath
-- leggo aree
local FrameTable = ConvertAreaToTable( nFrameId)
local AreaName = JWD_AREA .. 1
WinTable[AreaName] = FrameTable
return WinTable
end
-- funzione che crea la struttura geometrica dalle tabelle gerarchiche
function WinManageProject.CreateGeomFromTable( WinTable)
-- importo profilo
WinCreate.ImportProfile( WinTable[JWD_PROFILE_PATH])
-- creo aree
ConvertTableToGeometry( WinTable[JWD_AREA .. 1], GDB_ID.ROOT)
end
-- funzione che dato un progetto gerarchico lo scrive in json su un file
function WinManageProject.WriteToFile( nFrameId, sFilePath)
local sFilePath = EgtChangePathExtension( sFilePath, JWD_EXT)
local WinTable = WinManageProject.CreateTableFromGeom( nFrameId)
local sData = JSON:encode_pretty(WinTable)
local DestFh = io.open( sFilePath, 'w+')
if not DestFh then
EgtOutBox( 'Error opening ' .. sFilePath, 'WriteToFile', 'ERROR')
return
end
DestFh:write( sData)
DestFh:close()
end
-- funzione che dato un file in json ne crea il progetto gerarchico
function WinManageProject.ReadFromFile( sFilePath)
local SouFh = io.open( sFilePath, "rb")
if not SouFh then
EgtOutBox( 'Error opening ' .. sFilePath, 'ReadFromFile', 'ERROR')
return
end
local content = SouFh:read( "*all")
SouFh:close()
local tData = JSON:decode( content)
WinManageProject.CreateGeomFromTable( tData)
end
---------------------------------------------------------------------
return WinManageProject
+61
View File
@@ -0,0 +1,61 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
-- EgtEnableDebug( false)
-- Imposto direttorio per librerie
local sBaseDir = EgtGetSourceDir()
EgtOutLog("BaseDir=" .. sBaseDir)
EgtAddToPackagePath( sBaseDir .. '?.lua')
EgtAddToPackagePath( sBaseDir .. 'WinLib\\' .. '?.lua')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinCreate = nil
local WinCreate = require( 'WinCreate')
_G.package.loaded.WinCalculate = nil
local WinCalculate = require( 'WinCalculate')
_G.package.loaded.WinManageProject = nil
local WinManageProject = require( 'WinManageProject')
-- ciclo principale
EgtStartCounter()
EgtNewFile()
local sOpeneDirPath = 'c:\\EgtData\\Window\\Projects'
local sFileName = 'RoundArc_TripleVerticalSash.jwd'
local sOpenFilePath = sOpeneDirPath .. '\\' .. sFileName
if WINDOW and WINDOW.FILE then
sOpenFilePath = WINDOW.FILE
end
WinManageProject.ReadFromFile( sOpenFilePath)
-- imposto se calcolare i solidi o meno
WinCalculate.SetCalcSolid( true)
-- creo i pezzi
local nFrameId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AREAASTERISK)
WinCalculate.CreatePartFromArea( nFrameId)
EgtZoom( SCE_ZM.ALL)
-- riporto tempi di esecuzione
local sOut = string.format( ' ExecTime = %.2f ms', EgtStopCounter())
EgtOutLog( sOut)
+542
View File
@@ -0,0 +1,542 @@
--
-- EEEEEEEEEE GGGGGG TTTTTTTTTTTTTT
-- EEEEEEEEEE GGGGGGGGGG TTTTTTTTTTTTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEEEEE GGGG GGGGGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEE GGGG GGGG TTTT
-- EEEEEEEEEE GGGGGGGGGG TTTT
-- EEEEEEEEEE GGGGGG TTTT
--
-- by Egalware s.r.l.
-- Window project software by Egalware s.r.l. 2023/05/02
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( true)
-- EgtEnableDebug( false)
-- Imposto direttorio per librerie
local sBaseDir = EgtGetSourceDir()
EgtOutLog("BaseDir=" .. sBaseDir)
EgtAddToPackagePath( sBaseDir .. '?.lua')
EgtAddToPackagePath( sBaseDir .. 'WinLib\\' .. '?.lua')
_G.package.loaded.WinConst = nil
require( 'WinConst')
_G.package.loaded.WinCreate = nil
local WinCreate = require( 'WinCreate')
_G.package.loaded.WinCalculate = nil
local WinCalculate = require( 'WinCalculate')
_G.package.loaded.WinManageProject = nil
local WinManageProject = require( 'WinManageProject')
------------------------------------------- PARAMETERS -------------------------------------------
local DebugCode = false
local HoleWidth = 1835
local HoleHeight = 1516
local WindowWidth = 1800
local WindowHeight = 1500
local WindowTree
local sProfilePath = 'c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge'
------------------------------------------- ************** -------------------------------------------
-- ciclo principale
EgtStartCounter()
EgtNewFile()
-- importo profilo prescelto
WinCreate.ImportProfile( sProfilePath)
local sFileName = ''
-- creo telaio rettangolare
sFileName = 'Rect_'
local FrameJointType = WIN_JNT.FULL_H
local nFrameId = WinCreate.CreateFrame( WindowWidth, WindowHeight, FrameJointType, FrameJointType, FrameJointType, FrameJointType)
-- -- creo telaio generico
-- sFileName = 'RoundArc_'
-- local nDrawFramePartId = EgtGroup( GDB_ID.ROOT)
-- EgtSetName( nDrawFramePartId, 'DrawFrame')
-- local nDrawFrameLayerId = EgtGroup( nDrawFramePartId)
-- local nFrameBottomId = EgtLine( nDrawFrameLayerId, Point3d( 0, 0, 0), Point3d( WindowWidth, 0, 0))
-- local nFrameRightId = EgtLine( nDrawFrameLayerId, Point3d( WindowWidth, 0, 0), Point3d( WindowWidth, WindowHeight, 0))
-- local nFrameTopId = EgtArc2PV( nDrawFrameLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0), Vector3d( 0, 1, 0))
-- --local nFrameTopId = EgtLine( nDrawFrameLayerId, Point3d( WindowWidth, WindowHeight, 0), Point3d( 0, WindowHeight, 0))
-- local nFrameLeftId = EgtLine( nDrawFrameLayerId, Point3d( 0, WindowHeight, 0), Point3d( 0, 0, 0))
-- local FrameJointType = WIN_JNT.FULL_H
-- local nFrameId = WinCreate.CreateGenFrame( nFrameBottomId, nFrameRightId, nFrameTopId, nFrameLeftId, FrameJointType, FrameJointType, FrameJointType, FrameJointType)
------------------------ Finestra vetro fisso ------------------------
-- sFileName = sFileName .. 'FixedGlass'
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- aggiungo vetro
-- local nFillId = WinCreate.AddFill( nFrameId, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione orizzontale ------------------------
-- sFileName = sFileName .. 'FixedGlass_HorizontalSplit'
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione verticale ------------------------
-- sFileName = sFileName .. 'FixedGlass_VerticalSplit'
-- -- aggiungo zoccolo
-- WinCreate.AddBottomRail( nFrameId)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra vetro fisso con divisione orizzontale e verticale ------------------------
sFileName = sFileName .. 'FixedGlass_Vertical&HorizontalSplit'
-- aggiungo zoccolo
WinCreate.AddBottomRail( nFrameId)
-- definisco divisioni
local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- aggiungo vetri
local nFill1Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
local nFill2Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
local nFill3Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
local nFill4Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola ------------------------
-- sFileName = sFileName .. 'Sash'
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFillId = WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione orizzontale ------------------------
-- sFileName = sFileName .. 'Sash_HorizontalSplit'
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione verticale ------------------------
-- sFileName = sFileName .. 'Sash_VerticalSplit'
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea1Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra anta singola con divisione orizzontale e verticale ------------------------
-- sFileName = sFileName .. 'Sash_Vertical&HorizontalSplit'
-- -- aggiungo anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSashId = WinCreate.AddSash( nFrameId, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisioni
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nSashId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo vetri
-- local nFill1Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill2Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- local nFill3Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill4Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta con montante verticale ------------------------
-- sFileName = sFileName .. 'DoubleVerticalSash_Mullion'
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta battente ricevente ------------------------
-- sFileName = sFileName .. 'DoubleVerticalSash_French'
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra doppia anta con montante orizzontale ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montanti verticali ------------------------
-- sFileName = sFileName .. 'TripleVerticalSash_Mullion'
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montante verticale e ante battente e ricevente ------------------------
-- sFileName = sFileName .. 'TripleVerticalSash_Mullion&French'
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montanti orizzontali ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tripla anta con montante orizzontale e verticale ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 2)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra sei ante con montanti verticali e orizzontale ------------------------
-- sFileName = sFileName .. 'SixSash_Vertical&HorizontalMullion'
-- -- definisco divisione orizzontale
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco divisioni verticali
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea12Id, nArea13Id = WinCreate.AddSplit( nArea12Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea23Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea21Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea11Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea12Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea13Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quarta anta
-- local nSash4Id = WinCreate.AddSash( nArea21Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill4Id = WinCreate.AddFill( nSash4Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quinta anta
-- local nSash5Id = WinCreate.AddSash( nArea22Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill5Id = WinCreate.AddFill( nSash5Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo sesta anta
-- local nSash6Id = WinCreate.AddSash( nArea23Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill6Id = WinCreate.AddFill( nSash6Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra sei ante con montante verticale e orizzontale ed ante battente ricevente ------------------------
-- -- definisco divisione orizzontale
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight / 2)
-- -- definisco divisioni verticali
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea12Id, nArea13Id = WinCreate.AddSplit( nArea12Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- local nArea21Id, nArea23Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nArea21Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea11Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea12Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea13Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quarta anta
-- local nSash4Id = WinCreate.AddSash( nArea21Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- aggiungo vetro
-- local nFill4Id = WinCreate.AddFill( nSash4Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo quinta anta
-- local nSash5Id = WinCreate.AddSash( nArea22Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- aggiungo vetro
-- local nFill5Id = WinCreate.AddFill( nSash5Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo sesta anta
-- local nSash6Id = WinCreate.AddSash( nArea23Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetro
-- local nFill6Id = WinCreate.AddFill( nSash6Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tre ante con montante verticale, ante battente ricevente e split di tutte le ante ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisione
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nSash1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill11Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill12Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- definisco divisione
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nSash2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill21Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill22Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- definisco divisione
-- local nArea31Id, nArea32Id = WinCreate.AddSplit( nSash3Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill31Id = WinCreate.AddFill( nArea31Id, WIN_FILLTYPES.GLASS)
-- local nFill32Id = WinCreate.AddFill( nArea32Id, WIN_FILLTYPES.GLASS)
------------------------ Finestra tre ante con montante orizzontale e verticale, ante battente ricevente e split di tutte le ante ------------------------
-- -- definisco prima divisione
-- local nArea1Id, nArea0Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight)
-- -- definisco prima divisione
-- local nArea1Id, nArea2Id = WinCreate.AddSplit( nArea1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3)
-- -- definisco seconda divisione
-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea2Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH)
-- -- aggiungo anta sopra
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash0Id = WinCreate.AddSash( nArea0Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- aggiungo vetri
-- local nFill0Id = WinCreate.AddFill( nSash0Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo prima anta
-- local SashJointType = WIN_JNT.FULL_V
-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType)
-- -- definisco divisione
-- local nArea11Id, nArea12Id = WinCreate.AddSplit( nSash1Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill11Id = WinCreate.AddFill( nArea11Id, WIN_FILLTYPES.GLASS)
-- local nFill12Id = WinCreate.AddFill( nArea12Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo seconda anta
-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE)
-- -- definisco divisione
-- local nArea21Id, nArea22Id = WinCreate.AddSplit( nSash2Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill21Id = WinCreate.AddFill( nArea21Id, WIN_FILLTYPES.GLASS)
-- local nFill22Id = WinCreate.AddFill( nArea22Id, WIN_FILLTYPES.GLASS)
-- -- aggiungo terza anta
-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE)
-- -- definisco divisione
-- local nArea31Id, nArea32Id = WinCreate.AddSplit( nSash3Id, WIN_SPLITORIENTATION.HORIZONTAL, WIN_MEASURE.ABSOLUT, WindowHeight * 2 / 5)
-- -- aggiungo vetri
-- local nFill31Id = WinCreate.AddFill( nArea31Id, WIN_FILLTYPES.GLASS)
-- local nFill32Id = WinCreate.AddFill( nArea32Id, WIN_FILLTYPES.GLASS)
-----------------------------------------------------------------------------------
-- imposto se calcolare i solidi o meno
WinCalculate.SetCalcSolid( true)
-- creo i pezzi
local nFrameId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AREAASTERISK)
WinCalculate.CreatePartFromArea( nFrameId)
-- salvo progetto su file
local sSaveDirPath = 'c:\\EgtData\\Window\\Projects'
local sSaveFilePath = sSaveDirPath .. '\\' .. sFileName
WinManageProject.WriteToFile( nFrameId, sSaveFilePath)
EgtZoom( SCE_ZM.ALL)
-- riporto tempi di esecuzione
local sOut = string.format( ' ExecTime = %.2f ms', EgtStopCounter())
EgtOutLog( sOut)
@@ -0,0 +1,68 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 2
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 1
},
"AreaType": 0
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 1500.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,66 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 1500.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+34
View File
@@ -0,0 +1,34 @@
{
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 1,
"BottomRail": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,79 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 750.0, 0.0 ],
"ptStart": [ 0.0, 750.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 750.0, 0.0 ],
"ptStart": [ 900.0, 750.0, 0.0 ]
} ]
},
"AreaType": 1,
"BottomRail": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 1500.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+42
View File
@@ -0,0 +1,42 @@
{
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,87 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 750.0, 0.0 ],
"ptStart": [ 0.0, 750.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 750.0, 0.0 ],
"ptStart": [ 900.0, 750.0, 0.0 ]
} ]
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 1500.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,162 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1200.0, 750.0, 0.0 ],
"ptStart": [ 1200.0, 0.0, 0.0 ]
} ]
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 600.0, 750.0, 0.0 ],
"ptStart": [ 600.0, 0.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1200.0, 1500.0, 0.0 ],
"ptStart": [ 1200.0, 750.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 600.0, 1500.0, 0.0 ],
"ptStart": [ 600.0, 750.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 750.0, 0.0 ],
"ptStart": [ 0.0, 750.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,92 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 2
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1200.0, 1500.0, 0.0 ],
"ptStart": [ 1200.0, 0.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 600.0, 1500.0, 0.0 ],
"ptStart": [ 600.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,90 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1200.0, 1500.0, 0.0 ],
"ptStart": [ 1200.0, 0.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 600.0, 1500.0, 0.0 ],
"ptStart": [ 600.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+67
View File
@@ -0,0 +1,67 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,80 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 750.0, 0.0 ],
"ptStart": [ 0.0, 750.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 750.0, 0.0 ],
"ptStart": [ 900.0, 750.0, 0.0 ]
} ]
},
"AreaType": 1,
"BottomRail": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+69
View File
@@ -0,0 +1,69 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 2
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"SashType": 1
},
"AreaType": 0
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+43
View File
@@ -0,0 +1,43 @@
{
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
@@ -0,0 +1,88 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 750.0, 0.0 ],
"ptStart": [ 0.0, 750.0, 0.0 ]
} ]
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"Area2": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 750.0, 0.0 ],
"ptStart": [ 900.0, 750.0, 0.0 ]
} ]
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
},
"Split": [ {
"CurveType": 256,
"ptEnd": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 900.0, 0.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+91
View File
@@ -0,0 +1,91 @@
{
"Area1": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"Area2": {
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 2,
"Joint": {
"JointBL": 3,
"JointBR": 3,
"JointTL": 3,
"JointTR": 3
}
},
"AreaType": 0
},
"AreaType": 4,
"Split": [ {
"CurveType": 256,
"ptEnd": [ 1200.0, 2348.5281374239, 0.0 ],
"ptStart": [ 1200.0, 0.0, 0.0 ]
} ]
},
"AreaType": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 257,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptMid": [ 900.0, 2400.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ],
"Split": [ {
"CurveType": 256,
"ptEnd": [ 600.0, 2348.5281374239, 0.0 ],
"ptStart": [ 600.0, 0.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
+34
View File
@@ -0,0 +1,34 @@
{
"Area1": {
"Area1": {
"AreaType": 3,
"FillType": 1
},
"AreaType": 1,
"BottomRail": 1,
"Joint": {
"JointBL": 2,
"JointBR": 2,
"JointTL": 2,
"JointTR": 2
},
"Outline": [ {
"CurveType": 256,
"ptEnd": [ 1800.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 1800.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 0.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 1500.0, 0.0 ],
"ptStart": [ 1800.0, 1500.0, 0.0 ]
}, {
"CurveType": 256,
"ptEnd": [ 0.0, 0.0, 0.0 ],
"ptStart": [ 0.0, 1500.0, 0.0 ]
} ]
},
"ProfilePath": "c:\\EgtData\\Window\\Profiles\\Profilo78 - Offset.nge"
}
Binary file not shown.