b472c6b88e
- aggiunta gestione ProbeId anche per Probe su Pivot del lato cerniere (intermediatepivot).
12940 lines
551 KiB
Lua
12940 lines
551 KiB
Lua
-- Main.lua by EgalWare s.r.l. 2026.01.07
|
|
-- Main creazione porte da descrizione DDF
|
|
-- 2016.09.07 V1.001 FM Modificata gestione flush bolt
|
|
-- 2016.09.14 V1.002 FM Aggiunta gestione log file
|
|
-- 2017.06.27 V1.013 FM Manage frame jamb ( hinges jamb and lock jamb)
|
|
-- 2017.07.24 V1.014 FM Manage frame jamb ( top frame) and assembly ( more pieces into one ddf file)
|
|
-- 2017.12.13 V1.014 FM Manage parameter side on groove and face on flushpull models
|
|
-- 2018.01.12 V1.015 FM Fix errors on calculate frame point
|
|
-- 2018.01.22 V1.016 FM Manage Arc on top door side
|
|
-- 2018.02.14 V1.017 FM Add sizing
|
|
-- 2018.02.16 V1.018 FM Sizing top arc
|
|
-- 2018.02.16 V1.018 FM Fix missing assignement of DGD.SIDE with Stop & Closer and OverHead hardware model
|
|
-- 2018.03.23 V1.019 FM Add notes on side paths
|
|
-- 2018.04.09 V1.01a FM Manage KeepBackSet notes on flush pull geometries (into MoveFlushPull) and
|
|
-- on Lock sides (keyway and secure) rectangles and lines geometries (into MoveSubGeomLock)
|
|
-- 2018.04.17 V1.01b FM Manage new ddf parameters for viewers, louver and vision cutouts (to manage different application points)
|
|
-- 2018.05.09 V1.01c FM Assign name to all face surfaces ( before only on top and bottom surfaces)
|
|
-- 2018.05.17 V1.01d FM Manage position of Groove on narrow face and its surface
|
|
-- 2018.05.23 V1.01e FM Manage grove for all 4 sides
|
|
-- 2018.06.01 V1.01f FM Manage Z probe geometry near hardware templates
|
|
-- 2018.06.15 V1.020 FM Manage Rebuid Door and hardware application by probe point
|
|
-- 2018.06.22 V1.021 FM Fix bug on calculate rebuildel door
|
|
-- 2018.06.25 V1.022 FM Read different probe distance from dat file and extend line by these values
|
|
-- 2018.06.27 V1.023 FM Modify dat table, add manage error messages if dat file is missing and if enable side trim with probe mode
|
|
-- 2018.07.18 V1.024 FM Manage new groove parameters into ddf
|
|
-- 2018.07.19 V1.025 FM Manage properties field into DDF
|
|
-- 2018.07.20 V1.026 FM Fix bug on Strike Half disposition ( modify also EdgePullFlat component)
|
|
-- 2018.07.23 V1.027 FM Manage Alias Swing (actually for Haley Bros)
|
|
-- 2018.08.24 V1.028 FM Manage data.dat file instead of <ddfname>.dat into LoadDataProbeFile function
|
|
-- 2018.10.01 V1.029 FM Manage read zero value parameter (means disable probe in Z) into LoadDataProbeFile function
|
|
-- 2018.10.17 V1.02a FM Manage by parameter DGC.Edp ( into CurrDoorsCustomData.lua) differents profiles on Top Arc between top and sdes
|
|
-- 2018.10.17 V1.02a FM Fix error on create top arc beveled machining path
|
|
-- 2018.10.18 V1.02b FM Manage better recognizing opposite bevel profile (between sides) on Inactive doors
|
|
-- 2018.10.19 V1.02c FM Manage better recognize bad swing code from ddf
|
|
-- 2018.10.19 V1.02c FM Fix pivot disposition with new offset pivot dispositions
|
|
-- 2018.10.22 V1.02d FM Manage reference position (backset or door side) for secure and keyway geometries, for: lock
|
|
-- 2018.10.23 V1.02e FM DDF can manage more LouverCutOut items
|
|
-- 2018.10.26 V1.02f FM Manage disposition of flush bolt extra geometries
|
|
-- 2018.10.31 V1.030 FM Fix error on check backset (when backset is not defined into ddf)
|
|
-- 2018.11.09 V1.031 FM Move hinges geometries by new function MoveSubGeomHinge to manage which geometries have to rotate on profile or not
|
|
-- 2018.11.16 V1.032 FM Manage OH Stop and Closer aggregate of lua templates
|
|
-- 2018.11.26 V1.033 FM Manage Lock hardware disposition also on top and bottom door side by ddf parameter 'side:'
|
|
-- 'lock', 'bottom', 'top'. If ddf parameter is missing the default application side is 'lock'
|
|
-- 2018.11.30 V1.034 FM Manage RollerLatch hardware disposition also on lock door side
|
|
-- 2018.12.06 V1.035 FM Fix error on move keyway geometries into MoveSubGeomFlushBolt function
|
|
-- 2018.12.10 V1.036 FM Manage better solid geometry/shape with deepr striker horizontal faces:
|
|
-- (Roller latch strike, Edge pull flat, Mortise hinge, Over head Arm, Stop and Closer Arm)
|
|
-- 2018.12.11 V1.037 FM Manage reading DDF radius parameter on VisionCutOut with rectangle shape
|
|
-- 2018.12.17 V1.038 FM Fix bug on contour machining paths when profiles between head (top, bottom) and side (lock, hinge) are differents
|
|
-- 2018.12.18 V1.039 FM Make anti-splint machining path on top bottom side ( for horizontal tool)
|
|
-- 2018.12.20 V1.03a FM Extend previous feature V1.033 to different disposition side/reference assigned to ddf parameter 'side:'
|
|
-- 'lock_top', 'lock_bottom', 'bottom', 'top'. If ddf parameter is missing the default application side is 'lock_top'
|
|
-- 2019.01.15 V1.03b FM Fix error when load old ddf that not have lock reference with 'lock_top', 'lock_bottom' but only 'lock'
|
|
-- 2019.03.22 V1.03c FM Make better top arc paths with precise end point
|
|
-- 2019.03.29 V1.03d FM Manage Edge break (EB) and Bevel Edge break (BVEB) profiles
|
|
-- 2019.04.11 V1.03e FM Fix bug on calculate top arc points with new mode to set side profile (now top and side profiles can be set indipendent)
|
|
-- 2019.04.19 V1.03e FM Fix import hinges as nge file
|
|
-- 2019.04.29 V1.03f FM Manage new disposition for Flush_pull hardware, now dispose geometries one by one
|
|
-- 2019.05.06 V1.040 FM Fix semantic error on assign value = 0 to a not specified variable: tHinge.thickness into GetOneHinge function
|
|
-- 2019.05.15 V1.041 FM Manage new hardware type: Decoration
|
|
-- 2019.05.21 V1.042 FM Draw short sides on Draw mode only
|
|
-- 2019.05.30 V1.043 FM Fix error on calculate negative value for sqrt into CalcSideRectTringle function
|
|
-- 2019.07.01 V1.044 FM Manage new probe modes by variable DGC.Pms: 0 old complete probe (8 probe points) and door rebuild;
|
|
-- 1: recalculate dimension only on door width (4 probe points); 2: recalculate dimension on door width and length (5 probe points)
|
|
-- 2019.08.16 V1.045 FM Fix error on Move strike geometry managed as EdgePull, now it manage also 'upper' geometry in case side face is deep than 1/6 of door thickness
|
|
-- 2019.08.16 V1.046 FM Fix error on Move strike geometry managed as EdgePull, now not consider the backset value (that's used for locks and not for EdgePull)
|
|
-- 2019.08.27 V1.046 FM Modify the disposition of Pivot, now it move one by one geometry instead of move layer
|
|
-- 2019.08.30 V1.047 FM Manage 8 bullnose radius (according to default.ini Compo configuration amd CurrDoorsCustomdata.lua)
|
|
-- 2019.09.16 V1.048 FM Identify door properties by DGC settings variables
|
|
-- 2019.09.19 V1.049 FM Add manage new ddf side distance parameters for Decoration
|
|
-- 2019.10.03 V1.048 FM Remove: identify door properties by DGC settings variables
|
|
-- 2019.10.04 V1.049 FM Manage new ddf section: material. Now, by material value, lua components change geometries
|
|
-- 2019.10.18 V2.000 FM Manage use Materials
|
|
-- 2019.11.11 V2.001 FM Manage Top Chamfer Shape
|
|
-- 2019.11.22 V2.002 FM Manage let any profiles (SQ,BV,EB,BVEB,1B,2B,3B,4B,5B,6B,7B,8B,CV) to any sides (Top, Top Arc, Top Angle, Bottom, Hinge, Lock)
|
|
-- 2019.12.19 V2.003 FM Fix error on double use of SetInvertEdgeTrimming when bevel lock side is set to opposite bevel
|
|
-- 2020.05.06 V2.004 FM Enable roller latch, pivot, flush bolt also on frame bottom
|
|
-- 2020.05.18 V2.005 FM Manage frame disposition (on wide side or narrow side) by CurrDoorCustomData parameter DGC.Dxjs (x depend to material)
|
|
-- 2020.05.20 V2.006 FM Manage frame disposition narrow face limit by CurrDoorCustomData parameter DGC.Mjn
|
|
-- if narros side is smaller than this parameter then frame is dispossed on wide side (wide side on pods)
|
|
-- 2020.05.20 V2.007 FM Enable roller latch also on lock jamb, enable lock also on top and bottom frames
|
|
-- 2020.10.28 V2.008 FM Fix lock/strike disposition on top and bottom frames
|
|
-- 2020.11.12 V2.009 FM Fix flush_bolt disposition on top and bottom frames with or without lock/hinge rabbets
|
|
-- 2020.11.13 V2.00a FM Fix type error on definition of name variable sLocalHingeProf was sLocalHingeProfm
|
|
-- 2021.02.10 V3.000 FM Manage apply rabbet on opposite face (than standard)
|
|
-- 2021.04.23 V3.001 FM set DGD variable if a cut out has not hatching
|
|
-- 2021.05.27 V3.002 FM Manage special region (added to main region) from hatching paths to remove pods under hatching paths
|
|
-- 2021.06.01 V3.003 FM If not run by dProd, Show a message to update the ddf if ddf parameter 'piece:' not exists
|
|
-- 2021.08.05 V3.004 FM Fix error on disposition of geometry used to calculate regions of EdgePull flat hardware
|
|
-- 2021.10.11 V3.005 FM I not agree to this modification: manage DGC.Bwd parameter to refer the backset on wide side dimension, but this modification is not
|
|
-- for general purpose but apply this reference change only to some geometries that are on keyway/secure faces
|
|
-- 2021.10.26 V3.006 FM Manage FD Wedge Cup (FDWC) profile
|
|
-- 2021.11.23 V3.007 FM Manage option side probing. Expand function number of CurrDoorCustomData DGC.Pms: 3 side probe on all hardware (for NE machines) ;
|
|
-- 4: side probe on all hardware except hardware on hinge side (for machines with shuttles)
|
|
-- 2022.01.17 V3.008 FM Manage Split door cut by new Vision CutOut type
|
|
-- 2022.03.11 V3.009 FM Fix error (into MoveFlushBolt function) on calculate probe path with corner flush bolt and into InsertProbeGeom when side probe path has not to does
|
|
-- 2022.04.12 V3.00a FM Manage better the Sideprobe info into function InsertProbeGeom
|
|
-- 2022.04.28 V3.00a FM Manage Split door on door width direction
|
|
-- 2022.07.07 V3.00b FM Manage Lock aggregate of lua templates
|
|
-- 2022.07.27 V3.00c FM Modification to use compiled code
|
|
-- 2022.08.31 V3.00d FM Manage groove applied on top angle
|
|
-- 2022.11.15 V3.00e FM Manage side grove region as throu region and not as blind region
|
|
-- 2023.04.26 V3.00f FM Manage new DDF format by new ddf version number parameter
|
|
-- 2023.04.27 Max num error message DGD.ERR = 28
|
|
-- 2023.05.11 V3.010 FM Read new ddf group 'options:' (actually not used) at the end of ddf file
|
|
-- 2023.09.07 V3.011 FM try to delete the .tok file (it's a copy of .txt file) that dProd uses
|
|
-- 2023.12.01 V3.012 FM Manage new CurrDoorCustomData parameter DGC.CVP to define a small line on both corner of Convex profile
|
|
-- 2023.12.04 V3.013 FM Fix errors on build solid with bevel profile on top arc
|
|
-- 2024.02.01 V3.014 FM Manage new CurrCamInfo parameter 'SideDoorDefined' to manage door disposition with lock side machined by shuttle/s
|
|
-- 2024.07.01 V3.015 FM Fix error (that it appens only with frames) on DGD variable assignemente into InsertGeom function
|
|
-- 2024.10.15 V3.016 FM Manage new DGC.NPM parameter to indicate new DGD.PROBE meaning
|
|
-- 2024.10.31 V3.017 FM Manage probe id number and note 'ProbeId' on geometries that have hinge or lock probe geometry
|
|
-- 202x.xx.xx V3.xxx FM Manage new CurrCamInfo parameter 'WideDoorWidth' to manage large wide doors stored into new DGD.Part parameter
|
|
-- 2025.05.06 v2.7e1 DS Correzione funzione SubAndDeleteTempSurf.
|
|
-- 2025.10.29 v2.7j3 DS Correzione a SubAndDeleteTempSurf (aggiunto controllo esistenza regioni).
|
|
-- 2025.12.16 v2.7l1 DS Aggiunta gestione TrimLTHB per distanze dai bordi del trim decorazioni.
|
|
-- 2026.01.07 v3.1a1 DS Gestione indice probe anche per Pivot su Hinge (intermediatepivot).
|
|
|
|
-- Intestazioni
|
|
require( 'EgtBase')
|
|
_ENV = EgtProtectGlobal()
|
|
EgtEnableDebug( false)
|
|
|
|
if not _G.DGD then
|
|
_G.DGD = {}
|
|
end
|
|
|
|
local sBaseDir = DGD.BASEDIR
|
|
EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua')
|
|
EgtAddToPackagePath( sBaseDir .. 'MTables\\?.mtl')
|
|
EgtAddToPackagePath( sBaseDir .. '?.lua')
|
|
require( 'EgtDoorsBase')
|
|
require( 'EgtDoorsData')
|
|
require( 'CurrDoorsCustomData')
|
|
local EgtDoorsMsg = require( 'EgtDoorsMsg')
|
|
|
|
-- variabili gestione macchine
|
|
local tMachineData
|
|
local sMTable
|
|
local sMTablePath
|
|
local sMTableOri
|
|
|
|
-- info della porta
|
|
local tGenInfo={}
|
|
local tProbeDoor={}
|
|
local nNumHingePivot = 0
|
|
local nCountPieces = 0
|
|
local nTypePiece = 0
|
|
local sFirstDoor
|
|
local sSecondDoor
|
|
local sFrameSx
|
|
local sFrameDx
|
|
local sFrameTop
|
|
local sFrameBot
|
|
|
|
-- variabili dei file
|
|
local sFileDir, sFileName, sFileExt
|
|
local sErrFileM
|
|
local sErrFile
|
|
local sTxtOkFile
|
|
local sCncFile
|
|
local sLogFile
|
|
local sNgeFile
|
|
local sPrbFile
|
|
local sOriPrbFile
|
|
|
|
-- variabili percorsi creati da probe 2
|
|
local nDoorLeft
|
|
local nDoorRight
|
|
local nDoorTop
|
|
local nDoorBot
|
|
local nDoorLeftTop
|
|
local nDoorRightTop
|
|
local nDoorTopTop
|
|
local nDoorBotTop
|
|
local nDoorLeftMid
|
|
local nDoorRightMid
|
|
local nDoorTopMid
|
|
local nDoorBotMid
|
|
local bRemake = false
|
|
|
|
----------------------------------------------------------------
|
|
-- *** Error write file functions ***
|
|
-----------------------------------------------------------------
|
|
local function WriteErrFile( sFileErr, sDispMsg)
|
|
local nIdFile = io.open( sFileErr, 'w')
|
|
if nIdFile then
|
|
if DGD.ERM and string.len(DGD.ERM) > 0 then
|
|
nIdFile:write( 'Err=' .. tostring( DGD.ERR) .. '\n' .. DGD.ERM)
|
|
if DGD.EGR == 0 then
|
|
DGD.EGR = DGD.ERR
|
|
end
|
|
if DGD.EGM then
|
|
DGD.EGM = DGD.EGM .. '\n' .. DGD.ERM
|
|
end
|
|
else
|
|
nIdFile:write( 'Err=' .. tostring( DGD.ERR))
|
|
end
|
|
if sDispMsg and string.len(sDispMsg) > 0 then
|
|
nIdFile:write('\n' .. sDispMsg)
|
|
DoorOutLog( sDispMsg, 0)
|
|
if DGD.EGM then
|
|
DGD.EGM = DGD.EGM .. '\n' .. sDispMsg
|
|
end
|
|
end
|
|
nIdFile:close()
|
|
end
|
|
end
|
|
|
|
local function WriteErrFileAsmbl( sFileErr, sDispMsg)
|
|
local nIdFile = io.open( sFileErr, 'w')
|
|
if nIdFile then
|
|
if DGD.EGR ~= 0 then
|
|
nIdFile:write( 'Err=' .. tostring( DGD.EGR) .. DGD.EGM)
|
|
else
|
|
nIdFile:write( 'Err=' .. tostring( DGD.EGR))
|
|
end
|
|
if sDispMsg and string.len(sDispMsg) > 0 then
|
|
nIdFile:write('\n' .. sDispMsg)
|
|
DoorOutLog( sDispMsg, 0)
|
|
end
|
|
nIdFile:close()
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometry Calc ***
|
|
-----------------------------------------------------------------
|
|
local function CalcSideRectTringle( dCat1, dCat2, dIpo)
|
|
|
|
local dSide = 0
|
|
-- se manca ipotenusa
|
|
if not dIpo then
|
|
dSide = sqrt( ( dCat1 * dCat1) + ( dCat2 * dCat2))
|
|
-- se manca cateto 1
|
|
elseif not dCat1 then
|
|
dSide = sqrt( max( ( dIpo * dIpo) - ( dCat2 * dCat2), 0))
|
|
-- se manca cateto 2
|
|
elseif not dCat2 then
|
|
dSide = sqrt( max( ( dIpo * dIpo) - ( dCat1 * dCat1), 0))
|
|
end
|
|
return dSide
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** DDF file parsing ***
|
|
-----------------------------------------------------------------
|
|
local function KeyFromLine( sKey)
|
|
local sLine = GetLine()
|
|
if not sLine then
|
|
return false
|
|
end
|
|
if not sLine:find( sKey, 1, true) then
|
|
UngetLine( sLine)
|
|
return false
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function CheckKeyFromLine( sKey)
|
|
local sLine = GetLine()
|
|
if not sLine then
|
|
return false
|
|
end
|
|
if not sLine:find( sKey, 1, true) then
|
|
UngetLine( sLine)
|
|
return false
|
|
else
|
|
UngetLine( sLine)
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function EndOfFile( )
|
|
local sLine = GetLine()
|
|
if not sLine then
|
|
return true
|
|
else
|
|
UngetLine( sLine)
|
|
return nil
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function StringFromLine( sKey)
|
|
local sLine = GetLine()
|
|
if not sLine then
|
|
return nil
|
|
end
|
|
if not sLine:find( sKey, 1, true) then
|
|
UngetLine( sLine)
|
|
return nil
|
|
end
|
|
local sVal = sLine:gsub( sKey, '')
|
|
return EgtTrim( sVal)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function LenFromLine( sKey, bNotConv)
|
|
local sVal = StringFromLine( sKey)
|
|
if not sVal then return nil end
|
|
local dVal = tonumber( sVal)
|
|
if not dVal then return nil end
|
|
if not bNotConv and not DGD.bMM then dVal = dVal * GEO.ONE_INCH end
|
|
return dVal
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetVersion()
|
|
-- leggo il parametro di produzione del pezzo
|
|
local nPr = LenFromLine( 'version:', true)
|
|
if not nPr then
|
|
DGD.nVersion = 1
|
|
else
|
|
DGD.nVersion = nPr
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'DDF version', DGD.nVersion})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetProoduce()
|
|
-- leggo il parametro di produzione del pezzo
|
|
local sPr = StringFromLine( 'produce:')
|
|
if not sPr then
|
|
DGD.bProoduce = true
|
|
else
|
|
-- la interpreto
|
|
DGD.bProoduce = sPr == 'true'
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Produce',DGD.bProoduce})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetMeasures()
|
|
-- leggo l'unità di misura
|
|
local sUM = StringFromLine( 'measures:')
|
|
if not sUM then return false end
|
|
-- la interpreto
|
|
DGD.bMM = not ( sUM == 'inches')
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'MM',DGD.bMM})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetCode()
|
|
-- leggo il codice
|
|
DGD.sCode = StringFromLine( 'code:')
|
|
if not ( DGD.sCode and DGD.sCode:len() > 0) then
|
|
return false
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Code',DGD.sCode})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOrder()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'order:') then
|
|
return false
|
|
end
|
|
-- leggo tutte le voci dell'ordine
|
|
line = GetLine()
|
|
|
|
while line do
|
|
-- se trovo la data ho finito
|
|
if line:find( 'date:', 1, true) then
|
|
UngetLine( line)
|
|
break
|
|
end
|
|
-- leggo la voce
|
|
line = EgtTrim( line)
|
|
table.insert( DGD.tOrder, line)
|
|
-- leggo la prossima linea utile
|
|
line = GetLine()
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Order', table.concat( DGD.tOrder, ',')})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetDate()
|
|
-- leggo la data
|
|
DGD.sDate = StringFromLine( 'date:')
|
|
if not ( DGD.sDate and DGD.sDate:len() > 0) then
|
|
return false
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Date',DGD.sDate})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetPiece()
|
|
-- leggo se è un pezzo porta o telaio
|
|
local sPiece = StringFromLine( 'piece:')
|
|
-- se non trovato Piece assegno codice come porta singola e visualizzo un avviso
|
|
if not ( sPiece and sPiece:len() > 0) then
|
|
nTypePiece = 1
|
|
DGD.nTypePz = nTypePiece
|
|
DoorOutLog( string.format( EgtDoorsMsg[691], DGD.FILE), 0)
|
|
if not DGD.NCGEN then
|
|
EgtOutBox( string.format(EgtDoorsMsg[691], DGD.FILE), EgtDoorsMsg[501], EgtDoorsMsg[502])
|
|
end
|
|
return false
|
|
end
|
|
|
|
if string.find( sPiece, 'DO_1') then
|
|
nTypePiece = 1
|
|
DGD.sFrame = nil
|
|
elseif string.find( sPiece, 'DO_2') then
|
|
nTypePiece = 2
|
|
DGD.sFrame = nil
|
|
elseif string.find( sPiece, 'FL_') then
|
|
nTypePiece = 3
|
|
DGD.sFrame = string.gsub( sPiece, 'FL_', '')
|
|
elseif string.find( sPiece, 'FR_') then
|
|
nTypePiece = 4
|
|
DGD.sFrame = string.gsub( sPiece, 'FR_', '')
|
|
elseif string.find( sPiece, 'FT_') then
|
|
nTypePiece = 5
|
|
DGD.sFrame = string.gsub( sPiece, 'FT_', '')
|
|
elseif string.find( sPiece, 'FB_') then
|
|
nTypePiece = 6
|
|
DGD.sFrame = string.gsub( sPiece, 'FB_', '')
|
|
else
|
|
nTypePiece = 1
|
|
DGD.sFrame = nil
|
|
end
|
|
DGD.nTypePz = nTypePiece
|
|
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Frame',DGD.sFrame})
|
|
table.insert( tGenInfo, {'Piece Type',nTypePiece})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetPosition()
|
|
if not KeyFromLine( 'position:') then
|
|
return false
|
|
end
|
|
-- leggo la posizione in X
|
|
table.insert( DGD.tPosition, LenFromLine( 'x:'))
|
|
-- leggo la posizione in Y
|
|
table.insert( DGD.tPosition, LenFromLine( 'y:'))
|
|
-- leggo la posizione in Z
|
|
table.insert( DGD.tPosition, LenFromLine( 'z:'))
|
|
|
|
if not ( DGD.tPosition[1] and DGD.tPosition[2] and DGD.tPosition[3]) then
|
|
return false
|
|
end
|
|
|
|
table.insert( tGenInfo, {'PosFromDoor', DGD.tPosition})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetSize()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'size:') then
|
|
return false
|
|
end
|
|
-- leggo la larghezza
|
|
DGD.dW = LenFromLine( 'width:')
|
|
-- leggo l'altezza
|
|
DGD.dH = LenFromLine( 'height:')
|
|
-- leggo lo spessore
|
|
DGD.dT = LenFromLine( 'thickness:')
|
|
|
|
-- leggo la pressione
|
|
local sPressure = StringFromLine( 'pressure:') or '0'
|
|
DGD.Pressure = tonumber(sPressure)
|
|
if DGD.Pressure < 0 then
|
|
DGD.Pressure = 0
|
|
elseif DGD.Pressure > 20 then
|
|
DGD.Pressure = 20
|
|
end
|
|
|
|
-- verifico le letture
|
|
if not ( DGD.dW and DGD.dH and DGD.dT) then
|
|
return false
|
|
end
|
|
-- salvo in tabella
|
|
if DGD.sFrame then
|
|
if DGD.nTypePz == 5 or DGD.nTypePz == 6 then
|
|
table.insert( tGenInfo, {'W',DGD.dT})
|
|
table.insert( tGenInfo, {'H',DGD.dW})
|
|
table.insert( tGenInfo, {'T',DGD.dH})
|
|
else
|
|
table.insert( tGenInfo, {'W',DGD.dT})
|
|
table.insert( tGenInfo, {'H',DGD.dH})
|
|
table.insert( tGenInfo, {'T',DGD.dW})
|
|
end
|
|
else
|
|
table.insert( tGenInfo, {'W',DGD.dW})
|
|
table.insert( tGenInfo, {'H',DGD.dH})
|
|
table.insert( tGenInfo, {'T',DGD.dT})
|
|
end
|
|
table.insert( tGenInfo, {'P',DGD.Pressure})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetDoorHeight()
|
|
|
|
-- leggo l'altezza originale porta
|
|
DGD.dOH = LenFromLine( 'origdoorheight:')
|
|
if not DGD.dOH then
|
|
return false
|
|
end
|
|
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'OH', DGD.dOH})
|
|
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetSwing()
|
|
|
|
-- leggo il brandeggio
|
|
DGD.sAliasSwng = StringFromLine( 'swing:')
|
|
if not ( DGD.sAliasSwng and #DGD.sAliasSwng > 0) then
|
|
return false, ''
|
|
end
|
|
|
|
DGD.sAliasSwng = string.upper(DGD.sAliasSwng)
|
|
|
|
-----------------------------------------------------
|
|
-- interpretazione swing e gestione alias per Haley
|
|
-----------------------------------------------------
|
|
if DGD.sAliasSwng == 'LW' or DGD.sAliasSwng == 'RM' or DGD.sAliasSwng == 'BLANK' then -- alias per RH
|
|
DGD.sSwing = 'RH'
|
|
elseif DGD.sAliasSwng == 'RW' or DGD.sAliasSwng == 'LM' then -- alias per LH
|
|
DGD.sSwing = 'LH'
|
|
else -- per tutti gli altri casi
|
|
if DGD.sAliasSwng == 'RH' or DGD.sAliasSwng == 'RHA' or DGD.sAliasSwng == 'RHI' or
|
|
DGD.sAliasSwng == 'RHR' or DGD.sAliasSwng == 'RHRA' or DGD.sAliasSwng == 'RHRI' or
|
|
DGD.sAliasSwng == 'LH' or DGD.sAliasSwng == 'LHA' or DGD.sAliasSwng == 'LHI' or
|
|
DGD.sAliasSwng == 'LHR' or DGD.sAliasSwng == 'LHRA' or DGD.sAliasSwng == 'LHRI' then
|
|
|
|
DGD.sSwing = DGD.sAliasSwng
|
|
else
|
|
return false, DGD.sAliasSwng
|
|
end
|
|
end
|
|
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'AliasSwing', DGD.sAliasSwng})
|
|
table.insert( tGenInfo, {'Swing', DGD.sSwing})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetSecurSide()
|
|
-- leggo la disposzione del lato secure
|
|
DGD.sSecSide = StringFromLine( 'secure:')
|
|
if not ( DGD.sSecSide and #DGD.sSecSide > 0) then
|
|
return false
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Secure', DGD.sSecSide})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetDoorMaterial()
|
|
-- leggo il materiale porta
|
|
DGD.Material = StringFromLine( 'material:')
|
|
if not DGD.Material then
|
|
return false
|
|
end
|
|
-- se nome materiale esiste tolgo eventuali spazi vuoti
|
|
if #DGD.Material > 0 then
|
|
DGD.Material = string.gsub( DGD.Material, ' ', '')
|
|
else
|
|
return false
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Material', DGD.Material})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetDoorProperties()
|
|
-- leggo i parametri di proprietà
|
|
local sProperties = StringFromLine( 'properties:')
|
|
if not ( sProperties and sProperties:len() > 0) then
|
|
return false
|
|
end
|
|
-- converto in tabella
|
|
DGD.Properties = EgtSplitString( sProperties)
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Properties', sProperties})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneProfile( sName, nFindTopCurve)
|
|
local tProf = {}
|
|
-- tProf.trimming = EgtIf( DGD.sFrame, 'SQ', StringFromLine( sName..':'))
|
|
tProf.trimming = StringFromLine( sName..':')
|
|
if DGD.nVersion >= 2 then
|
|
tProf.trimming = StringFromLine( 'type:')
|
|
end
|
|
if not ( #tProf.trimming > 0) then
|
|
if DGD.nVersion >= 2 then
|
|
return 11
|
|
else
|
|
return 5
|
|
end
|
|
end
|
|
if StringFromLine( 'machining:') == 'ON' then
|
|
tProf.machining = true
|
|
else
|
|
tProf.machining = false
|
|
end
|
|
tProf.offset = LenFromLine( 'overmaterial:')
|
|
if not tProf.offset then
|
|
return 1
|
|
end
|
|
if nFindTopCurve == 1 and not DGD.sFrame then
|
|
|
|
tProf.radius = LenFromLine( 'radius:')
|
|
tProf.xdeltapos = LenFromLine( 'posx:')
|
|
tProf.angle = LenFromLine( 'angle:', true)
|
|
|
|
-- se c'è il parametro del raggio e dell'angolo do errore
|
|
if tProf.angle and tProf.radius then
|
|
return 6
|
|
-- se c'è l'angolo ma non il parametro della posizione x do errore
|
|
elseif tProf.angle and not tProf.xdeltapos then
|
|
return 7
|
|
elseif tProf.angle and abs(tProf.angle) < GEO.EPS_SMALL then
|
|
tProf.angle = nil
|
|
tProf.xdeltapos = 0
|
|
-- se c'è l'angolo e il parametro della posizione centro/inizio angolo in x è negativo, cambio di segno senza dare errore
|
|
elseif tProf.angle and tProf.xdeltapos < 0 then
|
|
tProf.xdeltapos = abs(tProf.xdeltapos)
|
|
-- se c'è l'angolo e il parametro posizione supera o eguaglia la larghezza porta azzero l'angolo e non do errore
|
|
elseif tProf.angle and tProf.xdeltapos > DGD.dW then
|
|
tProf.xdeltapos = 0
|
|
tProf.angle = 0
|
|
-- se c'è l'angolo e il suo valore supera i 45° do errore
|
|
elseif tProf.angle and abs(tProf.angle) > 45 then
|
|
return 9
|
|
-- se c'è l'angolo e la risultante della parte inclinata in Y supera l'altezza porta do errore
|
|
elseif tProf.angle and abs((( DGD.dW - tProf.xdeltapos)*tan(abs(tProf.angle))) - DGD.dH) < GEO.EPS_SMALL*1000 then
|
|
return 10
|
|
-- se c'è il parametro del centro in x ma non c'è il raggio o l'angolo do errore
|
|
elseif tProf.xdeltapos and not tProf.radius and not tProf.angle then
|
|
return 2
|
|
-- se il raggio è inferiore alla metà larghezza porta do errore
|
|
elseif tProf.radius and tProf.radius < (DGD.dW/2) then
|
|
return 3
|
|
-- Se la posizione X del centro sommata alla metà larghezza porta è maggiore del raggio
|
|
-- do errore perché non crea un arco che va tangente o secante al lato della porta opposto alla
|
|
-- posizione X del centro
|
|
elseif tProf.radius and tProf.xdeltapos and
|
|
abs(tProf.xdeltapos) + (DGD.dW/2) > tProf.radius then
|
|
return 3
|
|
-- se profilo ad arco controllo i settaggi dei profili consentiti
|
|
elseif tProf.radius then
|
|
if DGC.Edp then -- se sono consentiti i profili differenti tra top e sides
|
|
-- in questo caso almeno i due lati devono essere uguali, se non lo sono do errore
|
|
-- if DGD.tProfs.lockedge.trimming ~= DGD.tProfs.hingeedge.trimming then
|
|
-- return 4
|
|
-- end
|
|
-- altrimenti se non sono consentiti differenti profili tra top e sides e non lo sono do errore
|
|
elseif DGD.tProfs.lockedge.trimming ~= tProf.trimming or DGD.tProfs.hingeedge.trimming ~= tProf.trimming then
|
|
return 4
|
|
end
|
|
end
|
|
end
|
|
|
|
DGD.tProfs[sName] = tProf
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, { sName..'_trimming',tProf.trimming})
|
|
table.insert( tGenInfo, { sName..'_machining',tProf.machining})
|
|
table.insert( tGenInfo, { sName..'_offset',tProf.offset})
|
|
|
|
if nFindTopCurve == 1 then
|
|
if tProf.radius then
|
|
table.insert( tGenInfo, { sName..'_radius',tProf.radius})
|
|
end
|
|
if tProf.xdeltapos then
|
|
table.insert( tGenInfo, { sName..'_xdeltapos',tProf.xdeltapos})
|
|
end
|
|
if tProf.angle then
|
|
table.insert( tGenInfo, { sName..'_angle',tProf.angle})
|
|
end
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetProfiles()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'profiles:') then
|
|
return 1
|
|
end
|
|
-- leggo le diverse parti
|
|
local nCodeErr = GetOneProfile( 'lockedge', 0)
|
|
if nCodeErr > 0 then
|
|
return nCodeErr
|
|
end
|
|
nCodeErr = GetOneProfile( 'hingeedge', 0)
|
|
if nCodeErr > 0 then
|
|
return nCodeErr
|
|
end
|
|
nCodeErr = GetOneProfile( 'top', 1)
|
|
if nCodeErr > 0 then
|
|
return nCodeErr
|
|
end
|
|
nCodeErr = GetOneProfile( 'bottom', 0)
|
|
if nCodeErr > 0 then
|
|
return nCodeErr
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneVisionCutOut()
|
|
local tVision = {}
|
|
tVision.shape = StringFromLine( '- shape:')
|
|
if not tVision.shape then
|
|
return false
|
|
end
|
|
local sSplit = StringFromLine( 'split:')
|
|
tVision.length = LenFromLine( 'length:')
|
|
tVision.width = LenFromLine( 'width:')
|
|
tVision.dir = StringFromLine( 'direction:')
|
|
tVision.top_rail = LenFromLine( 'top_rail:')
|
|
tVision.lock_stile = LenFromLine( 'lock_stile:')
|
|
tVision.radius = LenFromLine( 'radius:')
|
|
tVision.center_from_top = LenFromLine( 'center_from_top:')
|
|
tVision.center_from_lock = LenFromLine( 'center_from_lock:')
|
|
tVision.door_center = StringFromLine( 'door_center:') or 'lock' -- se nulla assegno vecchio valore default
|
|
tVision.split = sSplit == '1'
|
|
|
|
if ( tVision.split and not tVision.width) or
|
|
( sSplit == nil and
|
|
not ( tVision.length and tVision.width and tVision.top_rail and tVision.lock_stile) and
|
|
not ( tVision.radius and tVision.center_from_top and tVision.center_from_lock)) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[513]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[513])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
-- se ho split abilitato ( == '1')
|
|
if tVision.split then
|
|
tVision.lock_stile = 0
|
|
if not tVision.dir or tVision.dir == '0' then
|
|
tVision.door_center = 'center'
|
|
tVision.top_rail = 0
|
|
else
|
|
if not tVision.top_rail then
|
|
tVision.top_rail = 0
|
|
end
|
|
end
|
|
-- altrimenti se ho split assente
|
|
elseif sSplit == nil then
|
|
tVision.split = sSplit
|
|
end
|
|
table.insert( DGD.tVisions, tVision)
|
|
-- salvo in tabella
|
|
local sName = 'vision_cut_out'..tostring(#DGD.tVisions)
|
|
table.insert( tGenInfo, {sName ..'_shape',tVision.shape})
|
|
table.insert( tGenInfo, {sName ..'_split',tVision.split})
|
|
table.insert( tGenInfo, {sName ..'_length',tVision.length})
|
|
table.insert( tGenInfo, {sName ..'_width',tVision.width})
|
|
table.insert( tGenInfo, {sName ..'_direction',tVision.dir})
|
|
table.insert( tGenInfo, {sName ..'_top_rail',tVision.top_rail})
|
|
table.insert( tGenInfo, {sName ..'_lock_stile',tVision.lock_stile})
|
|
table.insert( tGenInfo, {sName ..'_radius',tVision.radius})
|
|
table.insert( tGenInfo, {sName ..'_center_from_top',tVision.center_from_top})
|
|
table.insert( tGenInfo, {sName ..'_center_from_lock',tVision.center_from_lock})
|
|
table.insert( tGenInfo, {sName ..'_door_center',tVision.door_center})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetVisionCutOuts()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'vision_cut_outs:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse sfinestrature
|
|
while GetOneVisionCutOut() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneLouverCutOut()
|
|
local tLouver = {}
|
|
tLouver.shape = StringFromLine( '- shape:')
|
|
if not tLouver.shape then
|
|
return false
|
|
end
|
|
tLouver.length = LenFromLine( 'length:')
|
|
tLouver.width = LenFromLine( 'width:')
|
|
tLouver.bottom_rail = LenFromLine( 'bottom_rail:')
|
|
tLouver.lock_stile = LenFromLine( 'lock_stile:')
|
|
tLouver.door_center = StringFromLine( 'door_center:') or 'lock' -- se nulla assegno vecchio valore default
|
|
|
|
if not ( tLouver.length and tLouver.width and tLouver.bottom_rail and tLouver.lock_stile) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[514]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[514])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tLouvers, tLouver)
|
|
-- salvo in tabella
|
|
local sName = 'louver_cut_out'..tostring(#DGD.tLouvers)
|
|
table.insert( tGenInfo, {sName ..'_shape',tLouver.shape})
|
|
table.insert( tGenInfo, {sName ..'_length',tLouver.length})
|
|
table.insert( tGenInfo, {sName ..'_width',tLouver.width})
|
|
table.insert( tGenInfo, {sName ..'_bottom_rail',tLouver.bottom_rail})
|
|
table.insert( tGenInfo, {sName ..'_lock_stile',tLouver.lock_stile})
|
|
table.insert( tGenInfo, {sName ..'_door_center',tLouver.door_center})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetLouverCutOut()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'louver_cut_outs:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse sfinestrature
|
|
while GetOneLouverCutOut() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneMailSlot( ) -- i parametri acquisiti in questa funzione e i loro nomi, possono non essere quelli passati
|
|
local tMailSlot = {}
|
|
tMailSlot.template = StringFromLine( '- template:') -- template o shape ?
|
|
if not tMailSlot.template then
|
|
return false
|
|
end
|
|
tMailSlot.length = LenFromLine( 'height:') -- cambiato nome parametro da length a height
|
|
tMailSlot.bottom_rail = LenFromLine( 'bottom_rail:')
|
|
tMailSlot.delta_center = LenFromLine( 'delta_center:') -- nome inventato
|
|
|
|
if not ( tMailSlot.length and tMailSlot.bottom_rail and tMailSlot.delta_center) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[515]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[515])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tMailSlots, tMailSlot)
|
|
-- salvo in tabella
|
|
local sName = 'mail_slot'..tostring(#DGD.tMailSlots)
|
|
table.insert( tGenInfo, {sName ..'_template',tMailSlot.template})
|
|
table.insert( tGenInfo, {sName ..'_height',tMailSlot.length})
|
|
table.insert( tGenInfo, {sName ..'_bottom_rail',tMailSlot.bottom_rail})
|
|
table.insert( tGenInfo, {sName ..'_delta_center',tMailSlot.delta_center})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetMailSlots()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'mail_slots:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse sfinestrature
|
|
while GetOneMailSlot() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneViewer( ) -- i parametri acquisiti in questa funzione e i loro nomi, possono non essere quelli passati
|
|
local tViewer = {}
|
|
tViewer.template = StringFromLine( '- template:') -- template
|
|
if not tViewer.template then
|
|
return false
|
|
end
|
|
tViewer.bottom_rail = LenFromLine( 'bottom_rail:')
|
|
tViewer.delta_center = LenFromLine( 'delta_center:') -- nome inventato
|
|
tViewer.side = StringFromLine( 'side:')
|
|
|
|
if not ( tViewer.bottom_rail and tViewer.delta_center) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[516]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[516])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tViewers, tViewer)
|
|
-- salvo in tabella
|
|
local sName = 'viewer'..tostring(#DGD.tViewers)
|
|
table.insert( tGenInfo, {sName ..'_template',tViewer.template})
|
|
table.insert( tGenInfo, {sName ..'_bottom_rail',tViewer.bottom_rail})
|
|
table.insert( tGenInfo, {sName ..'_delta_center',tViewer.delta_center})
|
|
table.insert( tGenInfo, {sName ..'_side',tViewer.side})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetViewers()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'viewers:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse sfinestrature
|
|
while GetOneViewer() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneFlushPull()
|
|
local tFlushPull = {}
|
|
tFlushPull.template = StringFromLine( '- template:') -- template o shape ?
|
|
if not tFlushPull.template then
|
|
return false
|
|
end
|
|
tFlushPull.position = LenFromLine( 'position:')
|
|
tFlushPull.back_set = LenFromLine( 'back_set:')
|
|
tFlushPull.depth = LenFromLine( 'depth:')
|
|
tFlushPull.face = StringFromLine( 'face:')
|
|
|
|
if not ( tFlushPull.position and tFlushPull.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[517]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[517])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tFlushPulls, tFlushPull)
|
|
-- salvo in tabella
|
|
local sName = 'flush_pull'..tostring(#DGD.tFlushPulls)
|
|
table.insert( tGenInfo, {sName ..'_template',tFlushPull.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tFlushPull.position})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tFlushPull.back_set})
|
|
table.insert( tGenInfo, {sName ..'_depth',tFlushPull.depth})
|
|
table.insert( tGenInfo, {sName ..'_face',tFlushPull.face})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetFlushPulls()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'flush_pulls:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse sfinestrature
|
|
while GetOneFlushPull() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneHinge( )
|
|
local tHinge = {}
|
|
tHinge.template = StringFromLine( '- template:')
|
|
if not tHinge.template then
|
|
return false
|
|
end
|
|
tHinge.position = LenFromLine( 'ToptoTop:')
|
|
if not tHinge.position then
|
|
tHinge.position = LenFromLine( 'ToptoCL:')
|
|
end
|
|
tHinge.back_set = LenFromLine( 'back_set:')
|
|
tHinge.thickness = LenFromLine( 'thickness:')
|
|
|
|
-- if not tHinge.thickness then tHinge.thickness = 0 end
|
|
if not ( tHinge.position and tHinge.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[518]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[518])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tHinges, tHinge)
|
|
-- salvo in tabella
|
|
local sName = 'hinge'..tostring(#DGD.tHinges)
|
|
table.insert( tGenInfo, {sName ..'_template',tHinge.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tHinge.position})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tHinge.back_set})
|
|
table.insert( tGenInfo, {sName ..'_thickness',tHinge.thickness})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetHinges()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'hinges:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneHinge() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneEPT( )
|
|
local tEPT = {}
|
|
tEPT.template = StringFromLine( '- template:')
|
|
if not tEPT.template then
|
|
return false
|
|
end
|
|
tEPT.position = LenFromLine( 'ToptoCL:')
|
|
tEPT.back_set = LenFromLine( 'FacetoCL:')
|
|
|
|
if not ( tEPT.position and tEPT.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[588]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[588])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tEPTs, tEPT)
|
|
-- salvo in tabella
|
|
local sName = 'ept'..tostring(#DGD.tEPTs)
|
|
table.insert( tGenInfo, {sName ..'_template',tEPT.template})
|
|
table.insert( tGenInfo, {sName ..'_toptocl',tEPT.position})
|
|
table.insert( tGenInfo, {sName ..'_facetocl',tEPT.back_set})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetEPT()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'ept:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneEPT() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneLock( )
|
|
local tLock = {}
|
|
tLock.template = StringFromLine( '- template:')
|
|
if not tLock.template then
|
|
return false
|
|
end
|
|
tLock.position = LenFromLine( 'position:')
|
|
tLock.back_set = LenFromLine( 'back_set:')
|
|
tLock.offset = LenFromLine( 'offset_WS:')
|
|
tLock.side = StringFromLine( 'side:')
|
|
tLock.other_door = StringFromLine( 'other_door:')
|
|
|
|
-- per compatibilità con vecchie versioni, se parametro .side == 'lock' lo rinomino in 'lock_top'
|
|
if tLock.side and tLock.side == 'lock' then
|
|
tLock.side = 'lock_top'
|
|
end
|
|
|
|
if not ( tLock.position and tLock.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[519]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[519])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tLocks, tLock)
|
|
-- salvo in tabella
|
|
local sName = 'lock'..tostring(#DGD.tLocks)
|
|
table.insert( tGenInfo, {sName ..'_template',tLock.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tLock.position})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tLock.back_set})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tLock.offset})
|
|
table.insert( tGenInfo, {sName ..'_side',tLock.side})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tLock.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetLocks()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'locks:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneLock() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneFlushBolt( )
|
|
local tFlushBolt = {}
|
|
tFlushBolt.template = StringFromLine( '- template:')
|
|
if not tFlushBolt.template then
|
|
return false
|
|
end
|
|
tFlushBolt.type = StringFromLine( 'type:')
|
|
tFlushBolt.side = StringFromLine( 'side:')
|
|
tFlushBolt.position = LenFromLine( 'position:')
|
|
tFlushBolt.offset = LenFromLine( 'offset_WS:')
|
|
tFlushBolt.back_set = LenFromLine( 'back_set:')
|
|
tFlushBolt.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tFlushBolt.type and tFlushBolt.side and tFlushBolt.position) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[520]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[520])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tFlushBolts, tFlushBolt)
|
|
-- salvo in tabella
|
|
local sName = 'flush bolt'..tostring(#DGD.tFlushBolts)
|
|
table.insert( tGenInfo, {sName ..'_template',tFlushBolt.template})
|
|
table.insert( tGenInfo, {sName ..'_type',tFlushBolt.type})
|
|
table.insert( tGenInfo, {sName ..'_side',tFlushBolt.side})
|
|
table.insert( tGenInfo, {sName ..'_position',tFlushBolt.position})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tFlushBolt.offset})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tFlushBolt.back_set})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tFlushBolt.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetFlushBolts()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'flush_bolts:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneFlushBolt() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneEdgePull()
|
|
local tEdgePull = {}
|
|
tEdgePull.template = StringFromLine( '- template:')
|
|
if not tEdgePull.template then
|
|
return false
|
|
end
|
|
tEdgePull.position = LenFromLine( 'position:')
|
|
tEdgePull.offset = LenFromLine( 'offset_WS:')
|
|
|
|
if not ( tEdgePull.position) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[521]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[521])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tEdgePulls, tEdgePull)
|
|
-- salvo in tabella
|
|
local sName = 'edge_pull'..tostring(#DGD.tEdgePulls)
|
|
table.insert( tGenInfo, {sName ..'_template',tEdgePull.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tEdgePull.position})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tEdgePull.offset})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetEdgePulls()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'edge_pulls:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneEdgePull() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneRollerLatch()
|
|
local tRollerLatch = {}
|
|
tRollerLatch.template = StringFromLine( '- template:')
|
|
if not tRollerLatch.template then
|
|
return false
|
|
end
|
|
tRollerLatch.side = StringFromLine( 'side:')
|
|
tRollerLatch.position = LenFromLine( 'position:')
|
|
tRollerLatch.offset = LenFromLine( 'offset_WS:')
|
|
tRollerLatch.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tRollerLatch.side and tRollerLatch.position) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[522]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[522])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tRollerLatchs, tRollerLatch)
|
|
-- salvo in tabella
|
|
local sName = 'roller_latch'..tostring(#DGD.tRollerLatchs)
|
|
table.insert( tGenInfo, {sName ..'_template',tRollerLatch.template})
|
|
table.insert( tGenInfo, {sName ..'_side',tRollerLatch.side})
|
|
table.insert( tGenInfo, {sName ..'_position',tRollerLatch.position})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tRollerLatch.offset})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tRollerLatch.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetRollerLatchs()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'roller_latchs:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneRollerLatch() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOnePivot()
|
|
local tPivot = {}
|
|
tPivot.template = StringFromLine( '- template:')
|
|
if not tPivot.template then
|
|
return false
|
|
end
|
|
tPivot.type = StringFromLine( 'type:')
|
|
tPivot.side = StringFromLine( 'side:')
|
|
tPivot.radius = LenFromLine( 'radius:')
|
|
tPivot.position = LenFromLine( 'position:')
|
|
tPivot.back_set = LenFromLine( 'back_set:')
|
|
tPivot.depth_f = LenFromLine( 'depth:')
|
|
tPivot.offset = LenFromLine( 'offset_WS:')
|
|
tPivot.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tPivot.type and tPivot.side and tPivot.position and tPivot.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[523]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[523])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tPivots, tPivot)
|
|
-- salvo in tabella
|
|
local sName = 'pivot'..tostring(#DGD.tPivots)
|
|
table.insert( tGenInfo, {sName ..'_template',tPivot.template})
|
|
table.insert( tGenInfo, {sName ..'_type',tPivot.type})
|
|
table.insert( tGenInfo, {sName ..'_side',tPivot.side})
|
|
table.insert( tGenInfo, {sName ..'_radius',tPivot.radius})
|
|
table.insert( tGenInfo, {sName ..'_position',tPivot.position})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tPivot.back_set})
|
|
table.insert( tGenInfo, {sName ..'_depth',tPivot.depth_f})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tPivot.offset})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tPivot.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetPivots()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'pivot:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOnePivot() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneStopAndCloser( )
|
|
local tStopAndCloser = {}
|
|
tStopAndCloser.template = StringFromLine( '- template:')
|
|
if not tStopAndCloser.template then
|
|
return false
|
|
end
|
|
tStopAndCloser.position = LenFromLine( 'position:')
|
|
tStopAndCloser.pocket_offset = LenFromLine( 'pocket_offset_WS:')
|
|
tStopAndCloser.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tStopAndCloser.position) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[524]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[524])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tStopsAndClosers, tStopAndCloser)
|
|
-- salvo in tabella
|
|
local sName = 'StopAndCloser'..tostring(#DGD.tStopsAndClosers)
|
|
table.insert( tGenInfo, {sName ..'_template',tStopAndCloser.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tStopAndCloser.position})
|
|
table.insert( tGenInfo, {sName ..'_pocket_offset',tStopAndCloser.pocket_offset})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tStopAndCloser.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetStopsAndClosers()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'stops_and_closers:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneStopAndCloser() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneOHead( )
|
|
local tOHead = {}
|
|
tOHead.template = StringFromLine( '- template:')
|
|
if not tOHead.template then
|
|
return false
|
|
end
|
|
tOHead.pockpos = LenFromLine( 'point_to_pocket:')
|
|
tOHead.pocklength = LenFromLine( 'pocket_length:')
|
|
tOHead.pocket_offset = LenFromLine( 'pocket_offset_WS:')
|
|
tOHead.armpos = LenFromLine( 'point_to_arm:')
|
|
tOHead.armlength = LenFromLine( 'arm_length:')
|
|
tOHead.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tOHead.pockpos and tOHead.pocklength and
|
|
tOHead.armpos and tOHead.armlength) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[525]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[525])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tOHeads, tOHead)
|
|
-- salvo in tabella
|
|
local sName = 'OverHead'..tostring(#DGD.tOHeads)
|
|
table.insert( tGenInfo, {sName ..'_template',tOHead.template})
|
|
table.insert( tGenInfo, {sName ..'_point_to_pocket',tOHead.pockpos})
|
|
table.insert( tGenInfo, {sName ..'_pocket_length',tOHead.pocklength})
|
|
table.insert( tGenInfo, {sName ..'_pocket_offset_WS',tOHead.pocket_offset})
|
|
table.insert( tGenInfo, {sName ..'_point_to_arm',tOHead.armpos})
|
|
table.insert( tGenInfo, {sName ..'_arm_length',tOHead.armlength})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tOHead.other_door})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOverHeads()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'oh_stop_closer:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneOHead() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneStrike( )
|
|
local tStrike = {}
|
|
tStrike.template = StringFromLine( '- template:')
|
|
if not tStrike.template then
|
|
return false
|
|
end
|
|
tStrike.position = LenFromLine( 'position:')
|
|
tStrike.back_set = LenFromLine( 'back_set:')
|
|
tStrike.offset = LenFromLine( 'offset_WS:')
|
|
tStrike.other_door = StringFromLine( 'other_door:')
|
|
|
|
if not ( tStrike.position and tStrike.back_set) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[538]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[538])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
if not DGD.sFrame or DGD.sFrame == 'L' or DGD.sFrame == 'LE' then
|
|
table.insert( DGD.tStrikes, tStrike)
|
|
-- salvo in tabella
|
|
local sName = 'strike'..tostring(#DGD.tStrikes)
|
|
table.insert( tGenInfo, {sName ..'_template',tStrike.template})
|
|
table.insert( tGenInfo, {sName ..'_position',tStrike.position})
|
|
table.insert( tGenInfo, {sName ..'_back_set',tStrike.back_set})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tStrike.offset})
|
|
table.insert( tGenInfo, {sName ..'_other_door',tStrike.other_door})
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetStrikes()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'strikes:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneStrike() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneGroove( )
|
|
local tGroove = {}
|
|
tGroove.template = StringFromLine( '- template:')
|
|
if not tGroove.template then
|
|
return false
|
|
end
|
|
tGroove.type = StringFromLine( 'type:')
|
|
tGroove.width = LenFromLine( 'width:')
|
|
tGroove.depth = LenFromLine( 'depth:')
|
|
tGroove.fst = LenFromLine( 'face skin thick:')
|
|
tGroove.hst = LenFromLine( 'hinge style thick:')
|
|
tGroove.lst = LenFromLine( 'lock style thick:')
|
|
tGroove.groove_offset = LenFromLine( 'offset_WS:')
|
|
tGroove.side = StringFromLine( 'side:')
|
|
|
|
if not ( tGroove.type and tGroove.width and tGroove.depth) and
|
|
not ( tGroove.type and tGroove.fst and tGroove.hst and tGroove.lst and tGroove.depth) then
|
|
-- messaggio errore dati incongruenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[539]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[539])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
|
|
table.insert( DGD.tGrooves, tGroove)
|
|
-- salvo in tabella
|
|
local sName = 'Groove'..tostring(#DGD.tGrooves)
|
|
table.insert( tGenInfo, {sName ..'_template',tGroove.template})
|
|
table.insert( tGenInfo, {sName ..'_type',tGroove.type})
|
|
table.insert( tGenInfo, {sName ..'_width',tGroove.width})
|
|
table.insert( tGenInfo, {sName ..'_depth',tGroove.depth})
|
|
table.insert( tGenInfo, {sName ..'_face_skin_thick',tGroove.fst})
|
|
table.insert( tGenInfo, {sName ..'_hinge_skin_thick',tGroove.hst})
|
|
table.insert( tGenInfo, {sName ..'_lock_skin_thick',tGroove.lst})
|
|
table.insert( tGenInfo, {sName ..'_offset_WS',tGroove.groove_offset})
|
|
table.insert( tGenInfo, {sName ..'_side',tGroove.side})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetGrooves()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'groove:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneGroove() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneRabbet( )
|
|
local tRabbet = {}
|
|
tRabbet.template = StringFromLine( '- template:')
|
|
if not tRabbet.template then
|
|
return false
|
|
end
|
|
tRabbet.side = StringFromLine( 'side:')
|
|
tRabbet.width = LenFromLine( 'width:')
|
|
tRabbet.depth = LenFromLine( 'depth:')
|
|
tRabbet.angle = LenFromLine( 'angle:', true)
|
|
tRabbet.oppo = LenFromLine( 'opposite:', true)
|
|
|
|
if not ( tRabbet.side and tRabbet.width and tRabbet.depth) then
|
|
-- messaggio errore dati inconguenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[550]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[550])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tRabbets, tRabbet)
|
|
-- salvo in tabella
|
|
local sName = 'Rabbet'..tostring(#DGD.tRabbets)
|
|
table.insert( tGenInfo, {sName ..'_template',tRabbet.template})
|
|
table.insert( tGenInfo, {sName ..'_side',tRabbet.side})
|
|
table.insert( tGenInfo, {sName ..'_width',tRabbet.width})
|
|
table.insert( tGenInfo, {sName ..'_depth',tRabbet.depth})
|
|
table.insert( tGenInfo, {sName ..'_angle',tRabbet.angle})
|
|
table.insert( tGenInfo, {sName ..'_opposite',tRabbet.oppo})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetRabbets()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'rabbet:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneRabbet() do
|
|
-- se è un frame lato lock o hinge, Exterior
|
|
if DGD.sFrame and
|
|
( DGD.sFrame == 'LE' or DGD.sFrame == 'HE' or DGD.sFrame == 'TE' or DGD.sFrame == 'BE') then
|
|
-- prendo il parametro di affondamento del rabbet sul lato
|
|
local sRabbetType = DGD.tRabbets[#DGD.tRabbets].side
|
|
if sRabbetType == 'hinge' or sRabbetType == 'lock' then
|
|
|
|
if DGD.dZedExtFrame == 0 then
|
|
DGD.dZedExtFrame = DGD.tRabbets[#DGD.tRabbets].depth
|
|
end
|
|
if DGD.dSideExtFrame == 0 and ( DGD.sFrame == 'LE' or DGD.sFrame == 'HE') then
|
|
DGD.dSideExtFrame = DGD.tRabbets[#DGD.tRabbets].depth
|
|
end
|
|
|
|
-- prendo la larghezza del rabbet per il sill( frame bottom) con angolo
|
|
if DGD.sFrame == 'LE' or DGD.sFrame == 'HE' then
|
|
if DGD.dWidthRabbet == 0 then
|
|
DGD.dWidthRabbet = DGD.tRabbets[#DGD.tRabbets].width
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOneDecoration( )
|
|
local tDecoration = {}
|
|
tDecoration.template = StringFromLine( '- template:')
|
|
if not tDecoration.template then
|
|
return false
|
|
end
|
|
tDecoration.type = StringFromLine( 'type:')
|
|
tDecoration.depth = LenFromLine( 'depth:')
|
|
tDecoration.dft = LenFromLine( 'topdistance:')
|
|
tDecoration.dfb = LenFromLine( 'bottomdistance:')
|
|
tDecoration.dfl = LenFromLine( 'lockstiledistance:')
|
|
tDecoration.dfh = LenFromLine( 'hingestiledistance:')
|
|
tDecoration.face = StringFromLine( 'face:')
|
|
|
|
if not ( tDecoration.face and tDecoration.type) then
|
|
-- messaggio errore dati incongruenti
|
|
DoorOutLog( string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[646]), 0)
|
|
DGD.ERM = DGD.ERM .. string.format(EgtDoorsMsg[512], GetLineNumber(), EgtDoorsMsg[646])
|
|
DGD.ERR = -9
|
|
return false
|
|
end
|
|
table.insert( DGD.tDecorations, tDecoration)
|
|
-- salvo in tabella
|
|
local sName = 'Face Decoration'..tostring(#DGD.tDecorations)
|
|
table.insert( tGenInfo, {sName ..'_template',tDecoration.template})
|
|
table.insert( tGenInfo, {sName ..'_type',tDecoration.type})
|
|
table.insert( tGenInfo, {sName ..'_depth',tDecoration.depth})
|
|
table.insert( tGenInfo, {sName ..'_distance_from_top',tDecoration.dft})
|
|
table.insert( tGenInfo, {sName ..'_distance_from_bottom',tDecoration.dfb})
|
|
table.insert( tGenInfo, {sName ..'_distance_from_lock',tDecoration.dfl})
|
|
table.insert( tGenInfo, {sName ..'_distance_from_hinge',tDecoration.dfh})
|
|
table.insert( tGenInfo, {sName ..'_face',tDecoration.face})
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetDecorations()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'face_decoration:') then
|
|
return false
|
|
end
|
|
-- leggo le diverse parti
|
|
while GetOneDecoration() do
|
|
end
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetOptions()
|
|
-- leggo la chiave
|
|
if not KeyFromLine( 'options:') then
|
|
return false
|
|
end
|
|
-- mentre non è finito il file
|
|
while not( CheckKeyFromLine( '---') or CheckKeyFromLine( '...') or EndOfFile()) do
|
|
-- leggo tutte le voci dell'ordine
|
|
line = GetLine()
|
|
-- leggo la voce
|
|
line = EgtTrim( line)
|
|
table.insert( DGD.tOptions, line)
|
|
end
|
|
-- salvo in tabella
|
|
table.insert( tGenInfo, {'Options', table.concat( DGD.tOptions, ',')})
|
|
return true
|
|
end
|
|
|
|
-------------------------------------------------------------------------
|
|
-- *** Insert probe point into door piece ***
|
|
-------------------------------------------------------------------------
|
|
local function InsertProbeGeom( nIdGeom, ptPosGeom, ptFromExt, nTypeHw, nNumSide)
|
|
|
|
if not DGD.sFrame and DGD.MachEn > 0 then
|
|
|
|
-- cerco se ho delle geometrie di tastatura con gli shuttle su lato hinge o lato lock
|
|
local bFoundShuttleProbe
|
|
local nIdEnt = EgtGetFirstInGroup( nIdGeom) -- ottengo prima entità
|
|
while nIdEnt do
|
|
local sNameEnt = EgtGetName( nIdEnt) or ''
|
|
if sNameEnt and string.find( sNameEnt, 'Hinge_Probe') or string.find( sNameEnt, 'Shuttle_Probe') or
|
|
( string.find( sNameEnt, 'Pivot_Probe') and nNumSide == 1) then
|
|
bFoundShuttleProbe = true
|
|
break
|
|
end
|
|
nIdEnt = EgtGetNext(nIdEnt)
|
|
end
|
|
-- ottengo le note kbs o pbs dal layer
|
|
local bExistsKbs = EgtGetInfo( nIdGeom, 'kbs', 'i') or 0
|
|
local bExistspbs = EgtGetInfo( nIdGeom, 'pbs', 'i') or 0
|
|
local bProbeParGeom = ptPosGeom and ( bExistsKbs > 0 or bExistspbs > 0)
|
|
-- foro lato secure e parametri probe esistenti oppure presente shuttle probe
|
|
if bFoundShuttleProbe or bProbeParGeom then
|
|
DGD.CPR = DGD.CPR + 1
|
|
-- assegnazione nota a tutte le geometrie del layer
|
|
nIdEnt = EgtGetFirstInGroup( nIdGeom) -- ottengo prima entità
|
|
while nIdEnt do
|
|
EgtSetInfo( nIdEnt, 'ProbeId', DGD.CPR)
|
|
nIdEnt = EgtGetNext(nIdEnt)
|
|
end
|
|
end
|
|
if bProbeParGeom then
|
|
-- se prod comanda tastature (completa o solo ricalcolo dimensioni) ed è presente il flag
|
|
if DGD.PROBE == 1 and bExistsKbs > 0 then
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.BOTTOM))
|
|
local pCenter = Point3d( ptPosGeom:getX(),-ptPosGeom:getY(),0)
|
|
local nCircle = EgtArc( nIdGeom, pCenter, 0.25, 0, 360, 0, GDB_RT.GRID)
|
|
if nCircle then
|
|
EgtModifyCurveThickness( nCircle, -5)
|
|
EgtSetName( nCircle,'ProbePoint_secure')
|
|
EgtSetInfo( nCircle, 'ProbeId', DGD.CPR)
|
|
end
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
end
|
|
-- creazione geometria di tastatura laterale
|
|
if DGD.PROBE == 0 and bExistspbs > 0 and DGC.Pms and ( DGC.Pms == 3 or ( DGC.Pms == 4 and nTypeHw and nTypeHw ~= 5 and nTypeHw ~= 17)) and ptFromExt then
|
|
local nLine = EgtLine( nIdGeom, Point3d( ptFromExt:getX(), ptFromExt:getY(), 0), Point3d( ptPosGeom:getX(), ptPosGeom:getY(), 0), GDB_RT.GLOB)
|
|
if nLine then
|
|
-- se linea più lunga di un millimetro la accorcio o viceversa se è più corta
|
|
local dDist = dist( Point3d( ptFromExt:getX(), ptFromExt:getY(), 0), Point3d( ptPosGeom:getX(), ptPosGeom:getY(), 0))
|
|
if dDist < 0.9 or dDist > 1.1 then
|
|
EgtTrimExtendCurveByLen( nLine, 1-dDist, Point3d( ptPosGeom:getX(), ptPosGeom:getY(), 0), GDB_RT.GLOB)
|
|
end
|
|
EgtModifyCurveThickness( nLine, 0)
|
|
EgtSetName( nLine,'ProbeSidePoint_secure')
|
|
EgtSetInfo( nLine, 'ProbeId', DGD.CPR)
|
|
EgtSetInfo( nLine, 'SideApplied', nNumSide)
|
|
end
|
|
end
|
|
end
|
|
-- se prod comanda tastature (completa o solo ricalcolo dimensioni) ed è presente il flag inserisco foro lato keyway
|
|
-- foro lato keyway
|
|
if DGD.PROBE == 1 and bExistsKbs > 0 and ptPosGeom then
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
local pCenter = Point3d( ptPosGeom:getX(),ptPosGeom:getY(),DGD.dT)
|
|
local nCircle = EgtArc( nIdGeom, pCenter, 0.25, 0, 360, 0, GDB_RT.GRID)
|
|
if nCircle then
|
|
EgtModifyCurveThickness( nCircle, -5)
|
|
EgtSetName( nCircle,'ProbePoint_keyway')
|
|
EgtSetInfo( nCircle, 'ProbeId', DGD.CPR)
|
|
end
|
|
end
|
|
-- creazione geometria di tastatura laterale
|
|
if ptPosGeom and DGD.PROBE == 0 and bExistspbs > 0 and DGC.Pms and ( DGC.Pms == 3 or ( DGC.Pms == 4 and nTypeHw and nTypeHw ~= 5 and nTypeHw ~= 17)) and ptFromExt then
|
|
local nLine = EgtLine( nIdGeom, Point3d( ptFromExt:getX(), ptFromExt:getY(), DGD.dT), Point3d( ptPosGeom:getX(), ptPosGeom:getY(), DGD.dT), GDB_RT.GLOB)
|
|
if nLine then
|
|
-- se linea più lunga di un millimetro la accorcio o viceversa se è più corta
|
|
local dDist = dist( Point3d( ptFromExt:getX(), ptFromExt:getY(), DGD.dT), Point3d( ptPosGeom:getX(), ptPosGeom:getY(), DGD.dT))
|
|
if dDist < 0.9 or dDist > 1.1 then
|
|
EgtTrimExtendCurveByLen( nLine, 1-dDist, Point3d( ptPosGeom:getX(), ptPosGeom:getY(), 0), GDB_RT.GLOB)
|
|
end
|
|
EgtModifyCurveThickness( nLine, 0)
|
|
EgtSetName( nLine,'ProbeSidePoint_keyway')
|
|
EgtSetInfo( nLine, 'ProbeId', DGD.CPR)
|
|
EgtSetInfo( nLine, 'SideApplied', nNumSide)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------
|
|
-- *** Geometric processing : VISION, LOUVER, MAIL ***
|
|
-------------------------------------------------------------------------
|
|
local function MoveCutOuts( tCutOut, sSideLk, bPushDr, bImport, nTypeCout)
|
|
|
|
if not tCutOut then return end
|
|
if not tCutOut.geom then return end
|
|
if not DGD.SPLIT and DGD.SPLIT ~= nil then return end
|
|
|
|
local ptPos
|
|
local ptRef
|
|
local dZedPos = 0
|
|
local dExtraPosX = 0
|
|
local dExtraPosY = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
-- setto presenza cutout
|
|
DGD.ExistCutOut = true
|
|
-- rilevo e setto presenza hatching sfridi
|
|
if not EgtGetInfo( tCutOut.geom, 'hatch', 'b') then
|
|
DGD.NotExistHatch = true
|
|
end
|
|
|
|
if bImport then dZedPos = DGD.dT end
|
|
|
|
-- se vision cut out
|
|
if nTypeCout == 1 then
|
|
if tCutOut.lock_stile and tCutOut.top_rail then
|
|
if tCutOut.split and tCutOut.dir and tCutOut.dir == '1' then
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dExtraPosX = 0
|
|
else
|
|
dExtraPosX = DGD.dW - tCutOut.width
|
|
end
|
|
if abs(tCutOut.top_rail) > 0 then
|
|
dExtraPosY = 0
|
|
else
|
|
dExtraPosY = (DGD.dH - tCutOut.width) / 2
|
|
end
|
|
else
|
|
dExtraPosX = EgtIf( tCutOut.door_center == 'center', (( DGD.dW - tCutOut.width)/2), 0)
|
|
end
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
nAngleBase = atan((tCutOut.lock_stile + dExtraPosX),tCutOut.top_rail)
|
|
nRadBase = sqrt(((tCutOut.lock_stile + dExtraPosX)*(tCutOut.lock_stile + dExtraPosX))+(tCutOut.top_rail*tCutOut.top_rail))
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( tCutOut.lock_stile + dExtraPosX), ( DGD.dH - tCutOut.top_rail - dExtraPosY), dZedPos)
|
|
end
|
|
else
|
|
-- if tCutOut.width < 0 then tCutOut.width = DGD.dW end -- vecchia modalita per creare porta ad arco
|
|
if bRemake then
|
|
nAngleBase = atan((tCutOut.lock_stile + tCutOut.width + dExtraPosX),tCutOut.top_rail)
|
|
nRadBase = sqrt(((tCutOut.lock_stile + tCutOut.width + dExtraPosX)*(tCutOut.lock_stile + tCutOut.width + dExtraPosX))+(tCutOut.top_rail*tCutOut.top_rail))
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - tCutOut.lock_stile - tCutOut.width - dExtraPosX), ( DGD.dH - tCutOut.top_rail - dExtraPosY), dZedPos)
|
|
end
|
|
end
|
|
else
|
|
dExtraPosX = EgtIf( tCutOut.door_center == 'center', (DGD.dW/2), 0)
|
|
if bRemake then
|
|
nAngleBase = atan((tCutOut.center_from_lock + dExtraPosX),tCutOut.center_from_top)
|
|
nRadBase = sqrt(((tCutOut.center_from_lock + dExtraPosX)*(tCutOut.center_from_lock + dExtraPosX))+(tCutOut.center_from_top*tCutOut.center_from_top))
|
|
end
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( tCutOut.center_from_lock + dExtraPosX), DGD.dH - tCutOut.center_from_top, dZedPos)
|
|
end
|
|
else
|
|
if bRemake then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - tCutOut.center_from_lock - dExtraPosX), DGD.dH - tCutOut.center_from_top, dZedPos)
|
|
end
|
|
end
|
|
end
|
|
-- per non scaricare sfrido quando corto e cade
|
|
if DGD.LENGTH and DGD.LENGTH < 400 then
|
|
DGD.NotExistHatch = false
|
|
end
|
|
|
|
-- se louver cut out
|
|
elseif nTypeCout == 2 then
|
|
|
|
dExtraPosX = EgtIf( tCutOut.door_center == 'center', (( DGD.dW - tCutOut.width)/2), 0)
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
nAngleBase = atan((tCutOut.lock_stile + dExtraPosX),tCutOut.bottom_rail)
|
|
nRadBase = sqrt(((tCutOut.lock_stile + dExtraPosX)*(tCutOut.lock_stile + dExtraPosX))+(tCutOut.bottom_rail*tCutOut.bottom_rail))
|
|
ptRef = DGD.PminBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A3-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A3-nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( tCutOut.lock_stile + dExtraPosX), tCutOut.bottom_rail, dZedPos)
|
|
end
|
|
else
|
|
if bRemake then
|
|
nAngleBase = atan((tCutOut.lock_stile + tCutOut.width + dExtraPosX),tCutOut.bottom_rail)
|
|
nRadBase = sqrt(((tCutOut.lock_stile + tCutOut.width + dExtraPosX)*(tCutOut.lock_stile + tCutOut.width + dExtraPosX))+(tCutOut.bottom_rail*tCutOut.bottom_rail))
|
|
ptRef = DGD.PmaxBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A8+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A8+nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - tCutOut.lock_stile - tCutOut.width - dExtraPosX), tCutOut.bottom_rail, dZedPos)
|
|
end
|
|
end
|
|
-- per non scaricare sfrido quando corto e cade
|
|
if DGD.LENGTH and DGD.LENGTH < 400 then
|
|
DGD.NotExistHatch = false
|
|
end
|
|
|
|
-- se mail slot
|
|
elseif nTypeCout == 6 then
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
nAngleBase = atan((( DGD.dW / 2) + tCutOut.delta_center),tCutOut.bottom_rail)
|
|
nRadBase = sqrt(((( DGD.dW / 2) + tCutOut.delta_center)*(( DGD.dW / 2) + tCutOut.delta_center))+(tCutOut.bottom_rail*tCutOut.bottom_rail))
|
|
ptRef = DGD.PminBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A3-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A3-nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( ( DGD.dW / 2) + tCutOut.delta_center), tCutOut.bottom_rail, dZedPos)
|
|
end
|
|
else
|
|
if bRemake then
|
|
nAngleBase = atan((( DGD.dW / 2) - tCutOut.delta_center),tCutOut.bottom_rail)
|
|
nRadBase = sqrt(((( DGD.dW / 2) - tCutOut.delta_center)*(( DGD.dW / 2) - tCutOut.delta_center))+(tCutOut.bottom_rail*tCutOut.bottom_rail))
|
|
ptRef = DGD.PmaxBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A8+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A8+nAngleBase)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( ( ( DGD.dW / 2) - tCutOut.delta_center), tCutOut.bottom_rail, dZedPos)
|
|
end
|
|
end
|
|
-- per non scaricare sfrido (in questo caso piccolo e cade)
|
|
DGD.NotExistHatch = false
|
|
end
|
|
|
|
EgtMove( tCutOut.geom, ptPos - ORIG())
|
|
if bRemake then
|
|
if abs(dExtraPosX) > 0 or tCutOut.delta_center then
|
|
local dAngleLoc
|
|
dAngleLoc = (DGD.A3 + DGD.A8) / 2
|
|
EgtRotate( tCutOut.geom, ptPos, Z_AX(), ( dAngleLoc-90))
|
|
else
|
|
EgtRotate( tCutOut.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
end
|
|
|
|
if bImport then
|
|
-- modifica dello spessore di tutte le curve del gruppo
|
|
local EntId = EgtGetFirstInGroup( tCutOut.geom)
|
|
while EntId do
|
|
if EgtGetInfo( EntId, 'ConeCleanCorner', 'b') then
|
|
EgtMove( EntId, Vector3d( 0, 0, -DGD.dT))
|
|
else
|
|
EgtModifyCurveThickness( EntId, -DGD.dT)
|
|
end
|
|
EntId = EgtGetNext( EntId)
|
|
end
|
|
-- se non ci sono tagli di hatching
|
|
if DGD.NotExistHatch then
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( tCutOut.geom, tCutOut.geom, false)
|
|
else
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( tCutOut.geom, tCutOut.geom, false, 1)
|
|
end
|
|
end
|
|
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( tCutOut.geom, tCutOut.geom)
|
|
end
|
|
|
|
-------------------------------------------------------------------------
|
|
-- *** Geometric processing : FLUSH_PULL ***
|
|
-------------------------------------------------------------------------
|
|
local function MoveFlushPull( tFlushPull, sSideLk, bPushDr, bImport)
|
|
|
|
if not tFlushPull then return end
|
|
if not tFlushPull.geom then return end
|
|
|
|
local ptPos
|
|
local ptPosBox
|
|
local ptRef
|
|
local dZedPos = 0
|
|
local nNewEnt
|
|
local sTypeInfo
|
|
local sKeepBSNote
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nRadBaseBox
|
|
|
|
-- sul lato keyway o secure
|
|
if bImport then
|
|
nNewEnt = EgtGetFirstInGroup( tFlushPull.geom) -- ottengo nuova entità
|
|
while nNewEnt do
|
|
sTypeInfo = EgtGetInfo( nNewEnt, 'SideDoor')
|
|
if sTypeInfo then
|
|
EgtSetInfo( nNewEnt, 'SideDoor', '')
|
|
end
|
|
nNewEnt = EgtGetNext(nNewEnt)
|
|
end
|
|
end
|
|
|
|
-- setto la faccia dove portare la geometrie
|
|
if not DGD.FACE then -- se non ho definito il face la setto come era prima
|
|
if bPushDr then -- se porta a spingere la geometria va dietro
|
|
DGD.FACE = 'secure'
|
|
else -- altrimenti
|
|
DGD.FACE = 'keyway'
|
|
end
|
|
end
|
|
|
|
if string.lower(DGD.FACE) == 'secure' then -- se specificato face su lato interno (dietro)
|
|
-- faccio il mirror di tutte le geometrie su asse Z
|
|
nNewEnt = EgtGetFirstInGroup( tFlushPull.geom) -- ottengo nuova entità
|
|
while nNewEnt do
|
|
EgtMirror( nNewEnt, ORIG(), Z_AX()) -- faccio il mirror su asse Z
|
|
nNewEnt = EgtGetNext(nNewEnt)
|
|
end
|
|
if not bImport then
|
|
dZedPos = DGD.dT
|
|
InvertSurfName( tFlushPull.geom)
|
|
end
|
|
else -- altrimenti va su lato esterno (davanti)
|
|
if bImport then
|
|
dZedPos = DGD.dT
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(tFlushPull.back_set,tFlushPull.position)
|
|
nRadBase = sqrt((tFlushPull.back_set*tFlushPull.back_set)+(tFlushPull.position*tFlushPull.position))
|
|
nRadBaseBox = tFlushPull.position
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A4)), ptRef:getY()+(nRadBaseBox*sin(DGD.A4)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( tFlushPull.back_set, DGD.dH - tFlushPull.position, dZedPos)
|
|
ptPosBox = Point3d( 0, DGD.dH - tFlushPull.position, dZedPos)
|
|
end
|
|
else
|
|
if bRemake then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A7)), ptRef:getY()+(nRadBaseBox*sin(DGD.A7)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( DGD.dW - tFlushPull.back_set, DGD.dH - tFlushPull.position, dZedPos)
|
|
ptPosBox = Point3d( DGD.dW, DGD.dH - tFlushPull.position, dZedPos)
|
|
end
|
|
|
|
-- faccio il mirror di tutte le geometrie in X
|
|
nNewEnt = EgtGetFirstInGroup( tFlushPull.geom) -- ottengo nuova entità
|
|
while nNewEnt do
|
|
EgtMirror( nNewEnt, ORIG(), X_AX()) -- faccio il mirror in X
|
|
nNewEnt = EgtGetNext(nNewEnt)
|
|
end
|
|
end
|
|
|
|
-- ciclo spostamento e rotazione di tutte le geometrie del flush_pull
|
|
nNewEnt = EgtGetFirstInGroup( tFlushPull.geom) -- ottengo la prima geometria
|
|
|
|
while nNewEnt do
|
|
|
|
local bReference = EgtGetInfo( nNewEnt, 'ReferHw', 'b') or false
|
|
local ptPosLoc = ptPos
|
|
if bReference then
|
|
ptPosLoc = Point3d( ptPosBox:getX(), ptPosLoc:getY() , ptPosLoc:getZ())
|
|
end
|
|
|
|
EgtMove( nNewEnt, ptPosLoc - ORIG())
|
|
-- EgtSaveFile( sNgeFile)
|
|
if bRemake then
|
|
EgtRotate( nNewEnt, ptPosLoc, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
-- EgtSaveFile( sNgeFile)
|
|
end
|
|
AddSurfTmByExtrusion( EgtGetParent(nNewEnt), nNewEnt, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( tFlushPull.geom, tFlushPull.geom)
|
|
nNewEnt = EgtGetNext(nNewEnt)
|
|
end
|
|
--[[
|
|
-- spostamento e rotazione del layer del flush_pull
|
|
EgtMove( tFlushPull.geom, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( tFlushPull.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
|
|
if bImport then
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( tFlushPull.geom, tFlushPull.geom, false)
|
|
end
|
|
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( tFlushPull.geom, tFlushPull.geom)
|
|
]]--
|
|
|
|
-- setto le note per il probe in Z in base a dove si sono piazzate
|
|
-- devo ottenere tutte le geometrie
|
|
nNewEnt = EgtGetFirstInGroup( tFlushPull.geom) -- ottengo la prima geometria
|
|
|
|
while nNewEnt do
|
|
sKeepBSNote = EgtGetInfo( nNewEnt, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
-- se geometria su lato wide, risetto la nota opportuna
|
|
if ( string.lower(DGD.FACE) == 'secure' and bPushDr) or
|
|
( string.lower(DGD.FACE) == 'keyway' and not bPushDr) then
|
|
EgtSetInfo( nNewEnt, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
else -- altrimenti è sul lato narrow
|
|
EgtSetInfo( nNewEnt, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narrow
|
|
end
|
|
end
|
|
nNewEnt = EgtGetNext(nNewEnt)
|
|
end
|
|
InsertProbeGeom( tFlushPull.geom, ptPos)
|
|
end
|
|
|
|
-----------------------------------------------
|
|
-- *** Geometric subgeom processing : HINGE ***
|
|
-----------------------------------------------
|
|
local function MoveSubGeomHinge( nSubHingeId, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoor and sSideDoor == 'upper' then
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
if bPushDr then
|
|
EgtSetInfo( nSubHingeId, 'SideDoor', 'secure')
|
|
sSideDoor = 'secure'
|
|
else
|
|
EgtSetInfo( nSubHingeId, 'SideDoor', 'keyway')
|
|
sSideDoor = 'keyway'
|
|
end
|
|
else
|
|
EgtSetInfo( nSubHingeId, 'SideDoor', 'keyway')
|
|
sSideDoor = 'keyway'
|
|
end
|
|
nUpperToDelete = nSubHingeId
|
|
end
|
|
|
|
-- se non ha nota o ha la nota hinge
|
|
if not sSideDoor or string.lower( sSideDoor) == 'hinge' then
|
|
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubHingeId, ptPos - ORIG())
|
|
elseif sSideDoor == 'locklh' or sSideDoor == 'sidelh' then -- se posizionamento serratura tipo cerniera
|
|
|
|
if sSideDoor == 'locklh' then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubHingeId, ptPos - ORIG())
|
|
elseif sSideDoor == 'keyway' or sSideDoor == 'secure' then
|
|
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
if sSideDoor == 'keyway' then
|
|
EgtMove( nSubHingeId, ptPosUpGeom - ORIG())
|
|
elseif sSideDoor == 'secure' then
|
|
EgtMove( nSubHingeId, ptPosDwGeom - ORIG())
|
|
end
|
|
else
|
|
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), 90 ) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubHingeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubHingeId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubHingeId, ptPos - ORIG())
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubHingeId), nSubHingeId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubHingeId), EgtGetParent(nSubHingeId))
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
---------------------------------------------
|
|
-- *** Geometric subgeom processing : EPT ***
|
|
---------------------------------------------
|
|
local function MoveSubGeomEpt( nSubEptId, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle)
|
|
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoor and sSideDoor == 'upper' then
|
|
if DGD.Dws then -- se disposizione frame su lato wide
|
|
EgtSetInfo( nSubEptId, 'SideDoor', 'keyway')
|
|
sSideDoor = 'keyway'
|
|
end
|
|
nUpperToDelete = nSubEptId
|
|
end
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' then
|
|
|
|
-- if bPushDr then
|
|
-- nExtraAngle = - nExtraAngle
|
|
-- end
|
|
|
|
if sSideDoor == 'lock' then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubEptId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
EgtRotate( nSubEptId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubEptId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubEptId, ptPos - ORIG())
|
|
|
|
elseif sSideDoor == 'locklh' or sSideDoor == 'sidelh' then -- se posizionamento serratura tipo cerniera
|
|
|
|
-- cambio di segno ancora un'altra volta
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
if sSideDoor == 'locklh' then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubEptId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubEptId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubEptId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubEptId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubEptId, ptPos - ORIG())
|
|
elseif sSideDoor == 'keyway' or sSideDoor == 'secure' then
|
|
|
|
if DGD.Dws then -- se disposizione frame su lato wide
|
|
|
|
EgtRotate( nSubEptId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubEptId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubEptId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubEptId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubEptId, ptPos - ORIG())
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubEptId), nSubEptId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubEptId), EgtGetParent(nSubEptId))
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
-----------------------------------------------------------------------
|
|
-- *** Geometric processing : common functions for hinge and Ept ***
|
|
-----------------------------------------------------------------------
|
|
local function MoveGeometryHng( sTypeGeom, nGeomId, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
if not nGeomId then return end
|
|
|
|
-- se profilo lato cerniere è bevel setto il supplemento di rotazione
|
|
local nIdGeomType
|
|
local sSideDoorToMove
|
|
local sMessageErr = ''
|
|
|
|
if nExtraAngle > 0 and sTypeGeom == 'ept' then
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
end
|
|
|
|
-- ottengo la prima geometria
|
|
nIdGeomType = EgtGetFirstInGroup( nGeomId)
|
|
local nErr = 0
|
|
|
|
while nIdGeomType do
|
|
|
|
sSideDoorToMove = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
local nUpperToDelete
|
|
|
|
if sSideDoorToMove and sTypeGeom == 'ept' then
|
|
|
|
-- Controllo se la nota è corretta
|
|
local sSideDoor = string.lower(sSideDoorToMove)
|
|
|
|
-- lock: senza rotazione angolo profilo; side: con rotazione angolo profilo; keyway e Secure: no rotazione angolo profilo;
|
|
-- SideLH: con rotazione angolo profilo e disposizione come cerniera ( suffisso LH: like hinge), cioè senza effettuare mirror;
|
|
-- LockLH: senza rotazione agolo profilo e disposizione come cerniera ( suffisso LH: like hinge), cioè senza effettuare mirror
|
|
-- attenzione! la geometria con nota SideLH DEVE ESSERE SIMMETRICA sulla X e Y locale
|
|
-- attenzione! la geometria con nota LockLH DEVE ESSERE SIMMETRICA sulla X e Y locale
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' or sSideDoor == 'sidelh' or sSideDoor == 'locklh' or sSideDoor == 'upper' then
|
|
nUpperToDelete = MoveSubGeomEpt( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[413],nIdGeomType,'Ept',nGeomId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1019
|
|
end
|
|
else
|
|
-- messaggio di errore in base al tipo di pezzo
|
|
if sTypeGeom == 'ept' then
|
|
sMessageErr = string.format( EgtDoorsMsg[414],nIdGeomType,'Ept',nEdgePId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1020
|
|
else -- altrimenti è hinge
|
|
|
|
local sSideDoor
|
|
-- Acquisisco la nota
|
|
if sSideDoorToMove then
|
|
sSideDoor = string.lower(sSideDoorToMove)
|
|
end
|
|
|
|
-- SideLH: con rotazione angolo profilo e disposizione come cerniera ( suffisso LH: like hinge), cioè senza effettuare mirror;
|
|
-- LockLH: senza rotazione agolo profilo e disposizione come cerniera ( suffisso LH: like hinge), cioè senza effettuare mirror
|
|
nUpperToDelete = MoveSubGeomHinge( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
end
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric processing : HINGES ***
|
|
-----------------------------------------------------------------
|
|
local function MoveHinge( tHinge, sSideLk, bPushDr)
|
|
|
|
if not tHinge then return end
|
|
if not tHinge.geom then return end
|
|
|
|
local dDeltaPos = 0
|
|
local sDeltaPos = EgtGetInfo( tHinge.geom, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
local ptPos
|
|
local ptRef
|
|
local ptProbe
|
|
local ptFromExt
|
|
local dZedPos = EgtIf( bPushDr, 0, DGD.dT)
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if DGD.sFrame then
|
|
ptPos = Point3d( DGD.dW - DGD.dZedExtFrame, ( DGD.dH - tHinge.position - dDeltaPos), dZedPos)
|
|
ptProbe = Point3d( DGD.dW - DGD.DPR, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
else
|
|
if bRemake then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+((tHinge.position + dDeltaPos)*cos(DGD.A7)), ptRef:getY()+((tHinge.position + dDeltaPos)*sin(DGD.A7)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( DGD.dW, ( DGD.dH - tHinge.position - dDeltaPos), dZedPos)
|
|
ptProbe = Point3d( DGD.dW - DGD.DPR, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
ptFromExt = Point3d( DGD.dW, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
end
|
|
end
|
|
else -- serratura a destra
|
|
if DGD.sFrame then
|
|
ptPos = Point3d( DGD.dZedExtFrame, ( DGD.dH - tHinge.position - dDeltaPos), dZedPos)
|
|
ptProbe = Point3d( DGD.DPR, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
ptFromExt = Point3d( 0, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
else
|
|
if bRemake then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+((tHinge.position + dDeltaPos)*cos(DGD.A4)), ptRef:getY()+((tHinge.position + dDeltaPos)*sin(DGD.A4)) , dZedPos)
|
|
else
|
|
ptPos = Point3d( 0, ( DGD.dH - tHinge.position - dDeltaPos), dZedPos)
|
|
ptProbe = Point3d( DGD.DPR, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
ptFromExt = Point3d( 0, ( DGD.dH - tHinge.position - dDeltaPos), 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- setto i punti sulle facce per le geometrie di ingombro
|
|
ptPosUpGeom = Point3d( ptPos:getX(), ptPos:getY() , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPos:getX(), ptPos:getY() , 0)
|
|
|
|
-- se profilo lato cerniera è bevel setto il supplemento di rotazione
|
|
local nExtraAngle = 0
|
|
if DGD.tProfs.hingeedge.trimming == 'BD' or DGD.tProfs.hingeedge.trimming == 'BU' or
|
|
DGD.tProfs.hingeedge.trimming == 'BDEB' or DGD.tProfs.hingeedge.trimming == 'BUEB' then
|
|
nExtraAngle = 3
|
|
end
|
|
|
|
MoveGeometryHng( 'hinge', tHinge.geom, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
if bRemake then
|
|
EgtRotate( tHinge.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A8, DGD.A3)-90))
|
|
end
|
|
InsertProbeGeom( tHinge.geom, ptProbe, ptFromExt, 5, 1)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : LOCKS ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomLock( nSubLockId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nExtraAngle, ptPosBox)
|
|
|
|
local sKeepBSNote
|
|
local nUpperToDelete
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' then
|
|
|
|
if sSideDoor == 'lock' or ( DGD.SIDE and DGD.SIDE ~= 'lock_top' and DGD.SIDE ~= 'lock_bottom') then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubLockId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif DGD.SIDE == 'top' then
|
|
|
|
if not DGD.sFrame then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), EgtIf( sSideLk == 'L', DGD.A5, ( DGD.A6-180)))
|
|
end
|
|
else -- frame inferiore (ha il side opposto)
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
if DGD.OTHERD then
|
|
EgtMirror( nSubLockId, ORIG(), X_AX())
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
|
|
if not DGD.sFrame then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), EgtIf( sSideLk == 'L', DGD.A2, ( DGD.A1-180)))
|
|
end
|
|
else -- frame superiore ( ha il side opposto)
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
if DGD.OTHERD then
|
|
EgtMirror( nSubLockId, ORIG(), X_AX())
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,-DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'sidelh') then -- se posizionamento serratura tipo cerniera
|
|
|
|
-- si presume che sia su bordo SQ ( non BV)
|
|
EgtRotate( nSubLockId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale senza angolo
|
|
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubLockId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif DGD.SIDE == 'top' then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubLockId, ORIG(), Y_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), EgtIf( sSideLk == 'L', DGD.A5, ( DGD.A6-180)))
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubLockId, ORIG(), Y_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPos, Z_AX(), EgtIf( sSideLk == 'L', DGD.A2, ( DGD.A1-180)))
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'keyway') then
|
|
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosUpGeom = Point3d( ptPosBox:getX(), ptPosUpGeom:getY() , ptPosUpGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosUpGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif DGD.SIDE == 'top' then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosUpGeom = Point3d( ptPosBox:getX(), ptPosUpGeom:getY() , ptPosUpGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosUpGeom, Z_AX(), EgtIf( sSideLk == 'L', DGD.A5, ( DGD.A6-180)))
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosUpGeom = Point3d( ptPosBox:getX(), ptPosUpGeom:getY() , ptPosUpGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosUpGeom, Z_AX(), EgtIf( sSideLk == 'L', DGD.A2, ( DGD.A1-180)))
|
|
end
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubLockId), nSubLockId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubLockId), EgtGetParent(nSubLockId))
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubLockId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato narrow
|
|
EgtSetInfo( nSubLockId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
else -- atrimenti è sul lato wide
|
|
EgtSetInfo( nSubLockId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'secure') then
|
|
|
|
EgtRotate( nSubLockId, ORIG(), X_AX(), 180 ) -- ruoto su faccia inferiore
|
|
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosDwGeom:getY() , ptPosDwGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosDwGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosDwGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif DGD.SIDE == 'top' then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosDwGeom:getY() , ptPosDwGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosDwGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosDwGeom, Z_AX(), EgtIf( sSideLk == 'L', DGD.A5, ( DGD.A6-180)))
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubLockId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosDwGeom:getY() , ptPosDwGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubLockId, ptPosDwGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubLockId, ptPosDwGeom, Z_AX(), EgtIf( sSideLk == 'L', DGD.A2, ( DGD.A1-180)))
|
|
end
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubLockId), nSubLockId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubLockId), EgtGetParent(nSubLockId))
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubLockId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato wide
|
|
EgtSetInfo( nSubLockId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
else -- atrimenti è sul lato narrow
|
|
EgtSetInfo( nSubLockId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'upper') then
|
|
|
|
EgtRotate( nSubLockId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
elseif DGD.SIDE == 'top' then
|
|
|
|
if not DGD.sFrame then
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,-DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
else -- frame inferiore (ha il side opposto)
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
if DGD.OTHERD then
|
|
EgtMirror( nSubLockId, ORIG(), X_AX())
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
|
|
if not DGD.sFrame then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
else -- frame superiore ( ha il side opposto)
|
|
EgtRotate( nSubLockId, ORIG(), Z_AX(), 180 ) -- ruoto su faccia superiore (già pronta per serratura lato destro)
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtMirror( nSubLockId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
if DGD.OTHERD then
|
|
EgtMirror( nSubLockId, ORIG(), X_AX())
|
|
end
|
|
EgtMirror( nSubLockId, Point3d( 0,-DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
EgtMove( nSubLockId, ptPos - ORIG())
|
|
end
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubLockId), nSubLockId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubLockId), EgtGetParent(nSubLockId))
|
|
nUpperToDelete = nSubLockId
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : FLUSHBOLTS ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomFlushBolt( nSubFlushBId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosHead, ptPosHeadExt, nExtraAngle, dPosXHead, ptPosBox, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
local nUpperToDelete
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' then
|
|
|
|
if sSideDoor == 'lock' then
|
|
nExtraAngle = 0
|
|
else
|
|
-- se geometria sotto inverto il lato di rotazione
|
|
if DGD.SIDE == 'bottom' then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
end
|
|
|
|
-- se sono in remake sposto le geometrie della testa prima nel loro zero originale
|
|
if bRemake then
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' and string.lower(DGD.TYPE) == 'extension' then
|
|
EgtMove( nSubFlushBId, Point3d(DGD.POSITION,0,dPosXHead) - ORIG())
|
|
end
|
|
end
|
|
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if DGD.sFrame then
|
|
|
|
if ( string.lower(DGD.SIDE) == 'bottom') then
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), 180 ) -- ribalto in Y
|
|
end
|
|
|
|
if ( string.lower(DGD.SIDE) == 'top') then
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubFlushBId, ORIG(), Y_AX()) -- faccio il mirror su asse Y
|
|
else
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubFlushBId, Point3d( 0,DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
else
|
|
|
|
if ( string.lower(DGD.SIDE) == 'bottom') then
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), 180 ) -- ribalto in Y
|
|
end
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' then
|
|
if string.lower(DGD.TYPE) == 'extension' then
|
|
EgtMove( nSubFlushBId, ptPosHeadExt - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPosHeadExt, Z_AX(), EgtIf( DGD.SIDE == 'top', DGD.A5, DGD.A2))
|
|
else
|
|
EgtMove( nSubFlushBId, ptPosHead - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPosHead, Z_AX(), EgtIf( DGD.SIDE == 'top', DGD.A5, DGD.A2))
|
|
end
|
|
else
|
|
EgtMove( nSubFlushBId, ptPos - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
else
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' and DGC.Bwd and DGC.Bwd >= 1 then
|
|
EgtMove( nSubFlushBId, Point3d( ptPosBox:getX(), ptPos:getY(), ptPos:getZ()) - ORIG())
|
|
else
|
|
EgtMove( nSubFlushBId, ptPos - ORIG())
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'sidelh') then -- se posizionamento serratura tipo cerniera
|
|
|
|
-- cambio di segno ancora un'altra volta
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
-- se sono in remake sposto le geometrie della testa prima nel loro zero originale
|
|
if bRemake then
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' and string.lower(DGD.TYPE) == 'extension' then
|
|
EgtMove( nSubFlushBId, Point3d(DGD.POSITION,0,dPosXHead) - ORIG())
|
|
end
|
|
end
|
|
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
if bRemake then
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' then
|
|
if string.lower(DGD.TYPE) == 'extension' then
|
|
EgtMove( nSubFlushBId, ptPosHeadExt - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPosHeadExt, Z_AX(), EgtIf( DGD.SIDE == 'top', DGD.A5, DGD.A2))
|
|
else
|
|
EgtMove( nSubFlushBId, ptPosHead - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPosHead, Z_AX(), EgtIf( DGD.SIDE == 'top', DGD.A5, DGD.A2))
|
|
end
|
|
else
|
|
EgtMove( nSubFlushBId, ptPos - ORIG())
|
|
EgtRotate( nSubFlushBId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
else
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' and DGC.Bwd and DGC.Bwd >= 1 then
|
|
EgtMove( nSubFlushBId, Point3d( ptPosBox:getX(), ptPos:getY(), ptPos:getZ()) - ORIG())
|
|
else
|
|
EgtMove( nSubFlushBId, ptPos - ORIG())
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'keyway') then
|
|
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubFlushBId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosUpGeom = Point3d( ptPosBox:getX(), ptPosUpGeom:getY() , ptPosUpGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubFlushBId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubFlushBId, ptPosUpGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubFlushBId), nSubFlushBId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubFlushBId), EgtGetParent(nSubFlushBId))
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubFlushBId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato narrow
|
|
EgtSetInfo( nSubFlushBId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
else -- atrimenti è sul lato wide
|
|
EgtSetInfo( nSubFlushBId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'secure') then
|
|
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), 180 ) -- ruoto su faccia inferiore
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubFlushBId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosDwGeom:getY() , ptPosDwGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubFlushBId, ptPosDwGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubFlushBId, ptPosDwGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubFlushBId), nSubFlushBId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubFlushBId), EgtGetParent(nSubFlushBId))
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubFlushBId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato wide
|
|
EgtSetInfo( nSubFlushBId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
else -- atrimenti è sul lato narrow
|
|
EgtSetInfo( nSubFlushBId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'upper') then
|
|
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale
|
|
EgtRotate( nSubFlushBId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if ( string.lower(DGD.SIDE) == 'bottom') then
|
|
EgtRotate( nSubFlushBId, ORIG(), X_AX(), 180 ) -- ribalto in Y
|
|
end
|
|
|
|
if ( string.lower(DGD.SIDE) == 'top') then
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubFlushBId, ORIG(), Y_AX()) -- faccio il mirror su asse Y
|
|
else
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubFlushBId, ORIG(), X_AX()) -- faccio il mirror su asse X
|
|
end
|
|
EgtMirror( nSubFlushBId, Point3d( 0,DGD.dH/2,0), Y_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
sSideDoorHead = EgtGetInfo( nSubFlushBId, 'HeadSide')
|
|
if sSideDoorHead == 'head' and DGC.Bwd and DGC.Bwd >= 1 then
|
|
EgtMove( nSubFlushBId, Point3d( ptPosBox:getX(), ptPos:getY(), ptPos:getZ()) - ORIG())
|
|
else
|
|
EgtMove( nSubFlushBId, ptPos - ORIG())
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubFlushBId), nSubFlushBId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubFlushBId), EgtGetParent(nSubFlushBId))
|
|
nUpperToDelete = nSubFlushBId
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : EDGEPULLS ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomEdgePull( nSubEdgePId, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoor == 'upper' then
|
|
if not DGD.Dws then
|
|
if bPushDr then
|
|
EgtSetInfo( nSubEdgePId, 'SideDoor', 'secure')
|
|
sSideDoor = 'secure'
|
|
else
|
|
EgtSetInfo( nSubEdgePId, 'SideDoor', 'keyway')
|
|
sSideDoor = 'keyway'
|
|
end
|
|
else
|
|
EgtSetInfo( nSubEdgePId, 'SideDoor', 'keyway')
|
|
sSideDoor = 'keyway'
|
|
end
|
|
nUpperToDelete = nSubEdgePId
|
|
end
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' then
|
|
|
|
if sSideDoor == 'lock' then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubEdgePId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubEdgePId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubEdgePId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif sSideDoor == 'sidelh' then -- se posizionamento serratura tipo cerniera
|
|
|
|
-- cambio di segno ancora un'altra volta
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
|
|
EgtMove( nSubEdgePId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubEdgePId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif sSideDoor == 'keyway' then
|
|
|
|
if DGD.Dws == nil and nUpperToDelete then -- se disposizione frame su porta
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
EgtMove( nSubEdgePId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubEdgePId, ptPosUpGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif not DGD.Dws then -- se disposizione frame su lato narrow
|
|
|
|
if nUpperToDelete then -- se non è una geometria di ingombro/box
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
else
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubEdgePId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubEdgePId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubEdgePId, ptPosUpGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
else
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubEdgePId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubEdgePId, ptPos - ORIG())
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubEdgePId), nSubEdgePId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubEdgePId), EgtGetParent(nSubEdgePId))
|
|
|
|
if not nUpperToDelete then -- se non è una geometria di ingombro/box
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubEdgePId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato narrow
|
|
EgtSetInfo( nSubEdgePId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
else -- atrimenti è sul lato wide
|
|
EgtSetInfo( nSubEdgePId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
end
|
|
end
|
|
end
|
|
elseif sSideDoor == 'secure' then
|
|
|
|
if DGD.Dws == nil and nUpperToDelete then -- se disposizione frame su porta
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
EgtMove( nSubEdgePId, ptPos - ORIG())
|
|
else
|
|
|
|
EgtRotate( nSubEdgePId, ORIG(), X_AX(), 180 ) -- ruoto su faccia inferiore
|
|
EgtRotate( nSubEdgePId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubEdgePId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
EgtMove( nSubEdgePId, ptPosDwGeom - ORIG())
|
|
end
|
|
|
|
if bRemake then
|
|
EgtRotate( nSubEdgePId, ptPosDwGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubEdgePId), nSubEdgePId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubEdgePId), EgtGetParent(nSubEdgePId))
|
|
|
|
if not nUpperToDelete then -- se non è una geometria di ingombro/box
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubEdgePId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato wide
|
|
EgtSetInfo( nSubEdgePId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
else -- atrimenti è sul lato narrow
|
|
EgtSetInfo( nSubEdgePId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : STRIKES ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomStrike( nSubStrikeId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nExtraAngle, ptPosBox)
|
|
|
|
local sKeepBSNote
|
|
-- Controllo se la nota è corretta
|
|
local sLikeStrike = EgtGetInfo( nSubStrikeId, 'LikeStrike')
|
|
local nUpperToDelete
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' then
|
|
|
|
-- cambio di segno ancora un'altra volta
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
if sSideDoor == 'lock' then
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra RHR(I) e LHR(I)
|
|
|
|
if bPushDr and not sLikeStrike then -- se apertura a spingere RH(I) LH(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), Z_AX())
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra LH(I) LHR(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubStrikeId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif ( sSideDoor == 'sidelh') then -- se posizionamento serratura tipo cerniera
|
|
|
|
if not sLikeStrike then
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra RHR(I) e LHR(I)
|
|
|
|
if bPushDr then -- se apertura a spingere RH(I) LH(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), Z_AX())
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra LH(I) LHR(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
else
|
|
|
|
-- cambio di segno ancora un'altra volta
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), ( 90 + nExtraAngle)) -- ruoto su faccia frontale con angolo
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), 180 ) -- ruoto attorno a X per capovolgere la cerniera
|
|
end
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPos - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubStrikeId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
elseif ( sSideDoor == 'keyway') then
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubStrikeId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosUpGeom = Point3d( ptPosBox:getX(), ptPosUpGeom:getY() , ptPosUpGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPosUpGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubStrikeId, ptPosUpGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubStrikeId), nSubStrikeId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubStrikeId), EgtGetParent(nSubStrikeId))
|
|
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubStrikeId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato narrow
|
|
EgtSetInfo( nSubStrikeId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
else -- atrimenti è sul lato wide
|
|
EgtSetInfo( nSubStrikeId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'secure') then
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), 180 ) -- ruoto su faccia inferiore
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
local bReference = EgtGetInfo( nSubStrikeId, 'ReferHw', 'b') or false
|
|
if bReference then
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosDwGeom:getY() , ptPosDwGeom:getZ())
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPosDwGeom - ORIG())
|
|
if bRemake then
|
|
EgtRotate( nSubStrikeId, ptPosDwGeom, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubStrikeId), nSubStrikeId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubStrikeId), EgtGetParent(nSubStrikeId))
|
|
|
|
-- se c'è la nota per mantenere la posizione con il probe
|
|
sKeepBSNote = EgtGetInfo( nSubStrikeId, 'KeepBackSet')
|
|
if sKeepBSNote == 'x' then -- se ha la nota la modifico in funzione a dove è stata piazzata
|
|
if bPushDr then -- se porta a spingere allora la geometrie è sul lato wide
|
|
EgtSetInfo( nSubStrikeId, 'KeepBackSet', 'w') -- setto 'w' perché la profondità non passante è applicata sul lato wide
|
|
else -- atrimenti è sul lato narrow
|
|
EgtSetInfo( nSubStrikeId, 'KeepBackSet', 'n') -- setto 'n' perché la profondità non passante è applicata sul lato narroe
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'upper') then
|
|
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra RHR(I) e LHR(I)
|
|
|
|
if bPushDr and not sLikeStrike then -- se apertura a spingere RH(I) LH(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), Z_AX())
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPos - ORIG())
|
|
|
|
else
|
|
|
|
EgtRotate( nSubStrikeId, ORIG(), X_AX(), 90) -- ruoto su faccia frontale
|
|
EgtRotate( nSubStrikeId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra RHR(I) e LHR(I)
|
|
|
|
if bPushDr and not sLikeStrike then -- se apertura a spingere RH(I) LH(I)
|
|
EgtMirror( nSubStrikeId, ORIG(), Z_AX())
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubStrikeId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
EgtMove( nSubStrikeId, ptPos - ORIG())
|
|
end
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubStrikeId), nSubStrikeId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubStrikeId), EgtGetParent(nSubStrikeId))
|
|
-- nUpperToDelete = nSubStrikeId
|
|
end
|
|
|
|
return nUpperToDelete
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : common functions for locks, flushbolts, edgepulls, strikes ***
|
|
-----------------------------------------------------------------------------------------------
|
|
local function MoveGeometryLck( sTypeGeom, nGeomId, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, dPosXHead, ptPosBox, ptPosUpGeomFB, ptPosDwGeomFB)
|
|
|
|
if not nGeomId then return end
|
|
|
|
-- se profilo lato serratura è bevel setto il supplemento di rotazione
|
|
local nExtraAngle
|
|
local nIdGeomType
|
|
local sSideDoorToMove
|
|
local sMessageErr = ''
|
|
|
|
-- stabilisco l'angolo extra di inclinazione in base al profilo e alla direzione di apertura porta ( Push o Pull)
|
|
if DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then
|
|
|
|
nExtraAngle = 3
|
|
|
|
if bPushDr then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
|
|
-- se è un lato senza maniglia e abilitazione inversione profilo, re-inverto l'angolo
|
|
if ( DGD.sSwing == 'LHI' or DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRI' or DGD.sSwing == 'LHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
nExtraAngle = - nExtraAngle
|
|
end
|
|
else
|
|
nExtraAngle = 0
|
|
end
|
|
|
|
-- devo ottenere tutte le geometrie della serratura
|
|
nIdGeomType = EgtGetFirstInGroup( nGeomId) -- ottengo la prima geometria
|
|
local nErr = 0
|
|
local nUpperToDelete
|
|
|
|
while nIdGeomType do
|
|
|
|
sSideDoorToMove = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
|
|
if sSideDoorToMove then
|
|
|
|
-- Controllo se la nota è corretta
|
|
local sSideDoor = string.lower(sSideDoorToMove)
|
|
|
|
-- lock: senza rotazione angolo profilo; side: con rotazione angolo profilo; keyway e Secure: no rotazione angolo profilo;
|
|
-- SideLH: senza rotazione angolo profilo e disposizione come cerniera ( suffisso LH: like hinge), cioè senza effettuare mirror
|
|
-- attenzione! la geometria con nota SideLH DEVE ESSERE SIMMETRICA sulla X e Y locale
|
|
if sTypeGeom == 'lock' then
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' or sSideDoor == 'sidelh' or
|
|
sSideDoor == 'keyway' or sSideDoor == 'secure' or sSideDoor == 'upper' then
|
|
if DGD.sFrame and DGD.nTypePz == 5 then
|
|
DGD.SIDE = 'bottom'
|
|
elseif DGD.sFrame and DGD.nTypePz == 6 then
|
|
DGD.SIDE = 'top'
|
|
end
|
|
nUpperToDelete = MoveSubGeomLock( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nExtraAngle, ptPosBox)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[413],nIdGeomType,'Lock',nGeomId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1001
|
|
end
|
|
elseif sTypeGeom == 'flushbolt' then
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' or sSideDoor == 'sidelh' or
|
|
sSideDoor == 'keyway' or sSideDoor == 'secure' or sSideDoor == 'upper' then
|
|
nUpperToDelete = MoveSubGeomFlushBolt( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nExtraAngle, dPosXHead, ptPosBox, ptPosUpGeomFB, ptPosDwGeomFB)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[413],nIdGeomType,'Flush Bolt',nGeomId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1003
|
|
end
|
|
elseif sTypeGeom == 'edgepull' then
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' or sSideDoor == 'sidelh' or
|
|
sSideDoor == 'keyway' or sSideDoor == 'secure' or sSideDoor == 'upper' then
|
|
nUpperToDelete = MoveSubGeomEdgePull( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, nExtraAngle, ptPosUpGeom, ptPosDwGeom)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[413],nIdGeomType,'Edge Pull',nGeomId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1005
|
|
end
|
|
elseif sTypeGeom == 'strike' then
|
|
if sSideDoor == 'lock' or sSideDoor == 'side' or sSideDoor == 'sidelh' or
|
|
sSideDoor == 'keyway' or sSideDoor == 'secure' or sSideDoor == 'upper' then
|
|
nUpperToDelete = MoveSubGeomStrike( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nExtraAngle, ptPosBox)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[413],nIdGeomType,'Strike',nGeomId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1017
|
|
end
|
|
end
|
|
else
|
|
-- messaggio di errore in base al tipo di pezzo
|
|
if sTypeGeom == 'lock' then
|
|
sMessageErr = string.format( EgtDoorsMsg[414],nIdGeomType,'Lock',nGeomId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1002
|
|
elseif sTypeGeom == 'flushbolt' then
|
|
sMessageErr = string.format( EgtDoorsMsg[414],nIdGeomType,'Flush Bolt',nGeomId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1004
|
|
elseif sTypeGeom == 'edgepull' then
|
|
sMessageErr = string.format( EgtDoorsMsg[414],nIdGeomType,'Edge Pull',nEdgePId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1006
|
|
elseif sTypeGeom == 'strike' then
|
|
sMessageErr = string.format( EgtDoorsMsg[414],nIdGeomType,'Strike',nEdgePId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1018
|
|
end
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
nUpperToDelete = nil
|
|
end
|
|
end
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- *** Geometric main processing : LOCKS, FLUSHBOLTS, EDGEPULLS, STRIKES ***
|
|
-------------------------------------------------------------------------------
|
|
local function MoveLock( tLock, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosBox
|
|
local ptRef
|
|
local ptFromExt
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local dPosX
|
|
local dPosXUpDw
|
|
local dPosZ
|
|
local dDeltaX
|
|
local dZedPos = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nRadBaseBox
|
|
local nAngleBaseUpDw
|
|
local nRadBaseUpDw
|
|
local nSideApplied = 3
|
|
|
|
if tLock.offset and tLock.offset > 0 then
|
|
dDeltaX = tLock.offset * TAN3
|
|
dPosZ = tLock.offset
|
|
else
|
|
dDeltaX = (DGD.dT/2) * TAN3
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
if ( DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BD' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB') and
|
|
( not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom') then -- se profilo bevel su lato lock
|
|
dPosX = dDeltaX
|
|
dPosXUpDw = dDeltaX
|
|
else
|
|
dPosX = 0
|
|
dPosXUpDw = 0
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the dPosXUpDw and dPosX parameters
|
|
if DGC.Bwd and DGC.Bwd >= 1 then
|
|
dPosXUpDw = 0
|
|
if DGC.Bwd == 2 then
|
|
dPosX = 0
|
|
end
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if ( DGD.nTypePz == 3 or DGD.nTypePz == 4) then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
if DGD.nTypePz == 5 then
|
|
tLock.side = 'bottom'
|
|
elseif DGD.nTypePz == 6 then
|
|
tLock.side = 'top'
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(dPosX/tLock.position)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tLock.position*tLock.position))
|
|
nRadBaseBox = tLock.position
|
|
nAngleBaseUpDw = atan((dPosXUpDw+tLock.back_set)/tLock.position)
|
|
nRadBaseUpDw = sqrt(((dPosXUpDw+tLock.back_set)*(dPosXUpDw+tLock.back_set))+(tLock.position*tLock.position))
|
|
end
|
|
|
|
if bPushDr then
|
|
dZedPos = dPosZ
|
|
else
|
|
dZedPos = (DGD.dT - dPosZ)
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A4)), ptRef:getY()+(nRadBaseBox*sin(DGD.A4)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A4+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A4+nAngleBaseUpDw)) , DGD.dT)
|
|
elseif DGD.SIDE == 'lock_bottom' then
|
|
ptRef = DGD.PminBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A3-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A3-nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A3)), ptRef:getY()+(nRadBaseBox*sin(DGD.A3)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A3-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A3-nAngleBaseUpDw)) , DGD.dT)
|
|
elseif DGD.SIDE == 'top' then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A5+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A5+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A5)), ptRef:getY()+(nRadBaseBox*sin(DGD.A5)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A5-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A5-nAngleBaseUpDw)) , DGD.dT)
|
|
nSideApplied = 2
|
|
elseif DGD.SIDE == 'bottom' then
|
|
ptRef = DGD.PminBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A2+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A2+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A2)), ptRef:getY()+(nRadBaseBox*sin(DGD.A2)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A2+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A2+nAngleBaseUpDw)) , DGD.dT)
|
|
nSideApplied = 4
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' then
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tLock.position) , dZedPos)
|
|
ptPosBox = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tLock.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( ( dPosXUpDw + tLock.back_set + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tLock.position) , DGD.dT)
|
|
ptFromExt = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tLock.position) , DGD.dT)
|
|
elseif DGD.SIDE == 'lock_bottom' then
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), tLock.position , dZedPos)
|
|
ptPosBox = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), tLock.position , dZedPos)
|
|
ptPosUpGeom = Point3d( ( dPosXUpDw + tLock.back_set + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), tLock.position , DGD.dT)
|
|
ptFromExt = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), tLock.position , DGD.dT)
|
|
elseif DGD.SIDE == 'top' then
|
|
ptPos = Point3d( tLock.position, DGD.dH, dZedPos)
|
|
ptPosBox = Point3d( tLock.position, DGD.dH, dZedPos)
|
|
ptPosUpGeom = Point3d( tLock.position, ( DGD.dH - tLock.back_set) , DGD.dT)
|
|
ptFromExt = Point3d( tLock.position, DGD.dH , DGD.dT)
|
|
nSideApplied = 2
|
|
elseif DGD.SIDE == 'bottom' then
|
|
ptPos = Point3d( tLock.position, 0, dZedPos)
|
|
ptPosBox = Point3d( tLock.position, 0, dZedPos)
|
|
ptPosUpGeom = Point3d( tLock.position, tLock.back_set , DGD.dT)
|
|
ptFromExt = Point3d( tLock.position, 0 , DGD.dT)
|
|
nSideApplied = 4
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A7)), ptRef:getY()+(nRadBaseBox*sin(DGD.A7)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A7-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A7-nAngleBaseUpDw)) , DGD.dT)
|
|
elseif DGD.SIDE == 'lock_bottom' then
|
|
ptRef = DGD.PmaxBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A8+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A8+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A8)), ptRef:getY()+(nRadBaseBox*sin(DGD.A8)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A8+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A8+nAngleBaseUpDw)) , DGD.dT)
|
|
elseif DGD.SIDE == 'top' then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A6-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A6-nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A6)), ptRef:getY()+(nRadBaseBox*sin(DGD.A6)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A6+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A6+nAngleBaseUpDw)) , DGD.dT)
|
|
nSideApplied = 2
|
|
elseif DGD.SIDE == 'bottom' then
|
|
ptRef = DGD.PmaxBot
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A1+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A1+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A1)), ptRef:getY()+(nRadBaseBox*sin(DGD.A1)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A1-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A1-nAngleBaseUpDw)) , DGD.dT)
|
|
nSideApplied = 4
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' then
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tLock.position) , dZedPos)
|
|
ptPosBox = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tLock.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - dPosXUpDw - tLock.back_set - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tLock.position) , DGD.dT)
|
|
ptFromExt = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tLock.position) , DGD.dT)
|
|
elseif DGD.SIDE == 'lock_bottom' then
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), tLock.position , dZedPos)
|
|
ptPosBox = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), tLock.position , dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - dPosXUpDw - tLock.back_set - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), tLock.position , DGD.dT)
|
|
ptFromExt = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), tLock.position , DGD.dT)
|
|
elseif DGD.SIDE == 'top' then
|
|
ptPos = Point3d( ( DGD.dW - tLock.position), DGD.dH, dZedPos)
|
|
ptPosBox = Point3d( ( DGD.dW - tLock.position), DGD.dH, dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - tLock.position), ( DGD.dH - tLock.back_set) , DGD.dT)
|
|
ptFromExt = Point3d( ( DGD.dW - tLock.position), DGD.dH , DGD.dT)
|
|
nSideApplied = 2
|
|
elseif DGD.SIDE == 'bottom' then
|
|
ptPos = Point3d( ( DGD.dW - tLock.position), 0, dZedPos)
|
|
ptPosBox = Point3d( ( DGD.dW - tLock.position), 0, dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - tLock.position), tLock.back_set , DGD.dT)
|
|
ptFromExt = Point3d( ( DGD.dW - tLock.position), 0 , DGD.dT)
|
|
nSideApplied = 4
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
end
|
|
|
|
MoveGeometryLck( 'lock', tLock.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nil, ptPosBox)
|
|
InsertProbeGeom( tLock.geom, ptPosUpGeom, ptFromExt, 3, nSideApplied)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveFlushBolt( tFlushB, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosBox
|
|
local ptRef
|
|
local ptPosHead
|
|
local ptPosHeadExt
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local ptDummy = Point3d{0,0,0}
|
|
local dPosY
|
|
local dPosYBox
|
|
local dPosYUpDw
|
|
local dPosYHead
|
|
local dPosYHeadExt
|
|
local dPosYProbe
|
|
local dPosX
|
|
local dPosXUpDw
|
|
local dPosXHead
|
|
local dPosXProbe
|
|
local dPosZ
|
|
local dXFromExt
|
|
local dYFromExt
|
|
local dDeltaX
|
|
local dZedPos = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nRadBaseBox
|
|
local nAngleBaseUpDw
|
|
local nRadBaseUpDw
|
|
|
|
if DGD.OFFSET and DGD.OFFSET > 0 then
|
|
dDeltaX = DGD.OFFSET * TAN3
|
|
dPosZ = DGD.OFFSET
|
|
else
|
|
dDeltaX = (DGD.dT/2) * TAN3
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BD' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- se profilo bevel
|
|
dPosX = dDeltaX
|
|
dPosXUpDw = dDeltaX
|
|
else
|
|
dPosX = 0
|
|
dPosXUpDw = 0
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the dPosXUpDw and dPosX parameters
|
|
if DGC.Bwd and DGC.Bwd >= 1 then
|
|
dPosXUpDw = 0
|
|
if DGC.Bwd == 2 then
|
|
dPosX = 0
|
|
end
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
if not tFlushB.position then
|
|
tFlushB.position = 100
|
|
end
|
|
if not tFlushB.back_set then
|
|
tFlushB.back_set = 0
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(dPosX,tFlushB.position)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tFlushB.position*tFlushB.position))
|
|
nRadBaseBox = tFlushB.position
|
|
if tFlushB.back_set then
|
|
nAngleBaseUpDw = atan((dPosXUpDw+tFlushB.back_set)/tFlushB.position)
|
|
nRadBaseUpDw = sqrt(((dPosXUpDw+tFlushB.back_set)*(dPosXUpDw+tFlushB.back_set))+(tFlushB.position*tFlushB.position))
|
|
end
|
|
end
|
|
|
|
-- se è extension
|
|
if string.lower(tFlushB.type) == 'extension' then
|
|
|
|
if DGD.sFrame and ( DGD.nTypePz == 5 or DGD.nTypePz == 6) then
|
|
dPosY = 0 + DGD.dZedExtFrame
|
|
dPosYUpDw = dPosY
|
|
bPushDr = not bPushDr
|
|
else
|
|
if bRemake then
|
|
-- ricavo nota spostamento cava di testa
|
|
dPosXHead = EgtGetInfo( tFlushB.geom, 'DB_X', 'd') or 0
|
|
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
ptRef = EgtIf( sSideLk == 'L', DGD.PminTop, DGD.PmaxTop)
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dPosY = ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase))
|
|
dPosYBox = ptRef:getY()+(nRadBaseBox*sin(DGD.A4))
|
|
dPosYUpDw = ptRef:getY()+(nRadBaseUpDw*sin(DGD.A4+nAngleBaseUpDw))
|
|
dPosYHeadExt = ptRef:getY()+(dPosXHead*sin(DGD.A5))
|
|
else
|
|
dPosY = ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase))
|
|
dPosYBox = ptRef:getY()+(nRadBaseBox*sin(DGD.A7))
|
|
dPosYUpDw = ptRef:getY()+(nRadBaseUpDw*sin(DGD.A7-nAngleBaseUpDw))
|
|
dPosYHeadExt = ptRef:getY()+(dPosXHead*sin(DGD.A6))
|
|
end
|
|
else
|
|
ptRef = EgtIf( sSideLk == 'L', DGD.PminBot, DGD.PmaxBot)
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dPosY = ptRef:getY()+(nRadBase*sin(DGD.A3-nAngleBase))
|
|
dPosYBox = ptRef:getY()+(nRadBaseBox*sin(DGD.A3))
|
|
dPosYUpDw = ptRef:getY()+(nRadBaseUpDw*sin(DGD.A3-nAngleBaseUpDw))
|
|
dPosYHeadExt = ptRef:getY()+(dPosXHead*sin(DGD.A2))
|
|
else
|
|
dPosY = ptRef:getY()+(nRadBase*sin(DGD.A8+nAngleBase))
|
|
dPosYBox = ptRef:getY()+(nRadBaseBox*sin(DGD.A8))
|
|
dPosYUpDw = ptRef:getY()+(nRadBaseUpDw*sin(DGD.A8+nAngleBaseUpDw))
|
|
dPosYHeadExt = ptRef:getY()+(dPosXHead*sin(DGD.A1))
|
|
end
|
|
end
|
|
dPosYHead = ptRef:getY()
|
|
else
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
dPosY = DGD.dH - tFlushB.position
|
|
dPosYUpDw = DGD.dH - tFlushB.position
|
|
else
|
|
dPosY = tFlushB.position
|
|
dPosYUpDw = tFlushB.position
|
|
end
|
|
end
|
|
end
|
|
dPosYProbe = dPosY
|
|
dYFromExt = dPosY
|
|
else -- altrimenti tipo corner
|
|
|
|
if DGD.sFrame and ( DGD.nTypePz == 5 or DGD.nTypePz == 6) then
|
|
dPosY = 0 + DGD.dZedExtFrame
|
|
dPosYUpDw = dPosY
|
|
bPushDr = not bPushDr
|
|
else
|
|
if bRemake then
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PminTop
|
|
dPosY = ptRef:getY()+(dPosX*cos(DGD.A4))
|
|
else
|
|
ptRef = DGD.PmaxTop
|
|
dPosY = ptRef:getY()+(dPosX*cos(DGD.A8))
|
|
end
|
|
dPosYProbe = dPosY - DGD.DPR
|
|
dYFromExt = dPosY - DGD.DPR
|
|
else
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PminBot
|
|
dPosY = ptRef:getY()+(dPosX*cos(DGD.A4))
|
|
else
|
|
ptRef = DGD.PmaxBot
|
|
dPosY = ptRef:getY()+(dPosX*cos(DGD.A8))
|
|
end
|
|
dPosYProbe = dPosY + DGD.DPR
|
|
dYFromExt = dPosY + DGD.DPR
|
|
end
|
|
dPosYHead = ptRef:getY()
|
|
else
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
dPosY = DGD.dH
|
|
dPosYProbe = dPosY - DGD.DPR
|
|
dYFromExt = dPosY - DGD.DPR
|
|
else
|
|
dPosY = 0
|
|
dPosYProbe = DGD.DPR
|
|
dYFromExt = dPosY + DGD.DPR
|
|
end
|
|
end
|
|
end
|
|
dPosYUpDw = dPosY
|
|
end
|
|
|
|
if bPushDr then
|
|
dZedPos = dPosZ
|
|
else
|
|
dZedPos = (DGD.dT - dPosZ)
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
if string.lower(tFlushB.type) == 'extension' then
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), dPosY , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A4)), dPosYBox , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A4+nAngleBaseUpDw)),dPosYUpDw , DGD.dT)
|
|
ptPosHeadExt = Point3d( ptRef:getX()+(dPosXHead*cos(DGD.A5)), dPosYHeadExt , dZedPos)
|
|
else
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A3-nAngleBase)), dPosY , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A3)), dPosYBox , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A3-nAngleBaseUpDw)), dPosYUpDw , DGD.dT)
|
|
ptPosHeadExt = Point3d( ptRef:getX()+(dPosXHead*cos(DGD.A2)), dPosYHeadExt , dZedPos)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPos = Point3d( ptRef:getX()+(dPosX*sin(DGD.A3)), dPosY , dZedPos)
|
|
end
|
|
ptPosHead = Point3d( ptRef:getX(), dPosYHead , dZedPos)
|
|
dPosXProbe = ptPos:getX() + DGD.DPR
|
|
dXFromExt = ptPos:getX()
|
|
else
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0), dPosY , dZedPos)
|
|
ptPosBox = Point3d( EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0), dPosY , dZedPos)
|
|
dPosXProbe = dPosX + DGD.DPR
|
|
dXFromExt = 0
|
|
if tFlushB.back_set then
|
|
ptPosUpGeom = Point3d( ( dPosXUpDw + tFlushB.back_set + EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0)), dPosYUpDw , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
if string.lower(tFlushB.type) == 'extension' then
|
|
if string.lower(tFlushB.side) == 'top' then
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), dPosY , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A7)), dPosYBox , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A7-nAngleBaseUpDw)), dPosYUpDw , DGD.dT)
|
|
ptPosHeadExt = Point3d( ptRef:getX()+(dPosXHead*cos(DGD.A6)), dPosYHeadExt , dZedPos)
|
|
else
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A8+nAngleBase)), dPosY , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A8)), dPosYBox , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A8+nAngleBaseUpDw)), dPosYUpDw , DGD.dT)
|
|
ptPosHeadExt = Point3d( ptRef:getX()+(dPosXHead*cos(DGD.A1)), dPosYHeadExt , dZedPos)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPos = Point3d( ptRef:getX()+(dPosX*sin(DGD.A7)), dPosY , dZedPos)
|
|
end
|
|
ptPosHead = Point3d( ptRef:getX(), dPosYHead , dZedPos)
|
|
dPosXProbe = ptPos:getX() - DGD.DPR
|
|
dXFromExt = ptPos:getX()
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0)), dPosY , dZedPos)
|
|
ptPosBox = Point3d( DGD.dW - EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0), dPosY , dZedPos)
|
|
dPosXProbe = DGD.dW - dPosX - DGD.DPR
|
|
dXFromExt = DGD.dW
|
|
if tFlushB.back_set then
|
|
ptPosUpGeom = Point3d( ( DGD.dW - dPosXUpDw - tFlushB.back_set - EgtIf( DGD.sFrame, DGD.dSideExtFrame, 0)), dPosYUpDw , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
MoveGeometryLck( 'flushbolt', tFlushB.geom, sSideLk, bPushDr, ptPos, ptPosHead, ptPosHeadExt, dPosXHead, ptPosBox, ptPosUpGeom, ptPosDwGeom)
|
|
InsertProbeGeom( tFlushB.geom, Point3d(dPosXProbe,dPosYProbe,0), Point3d(dXFromExt,dYFromExt,0), 11, 3)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveEdgePull( tEdgeP, sSideLk, bPushDr)
|
|
|
|
local dPosX
|
|
local dPosZ
|
|
local ptPos
|
|
local ptRef
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local dPosXProbe
|
|
local dXFromExt
|
|
local dYFromExt
|
|
local dDeltaX
|
|
local dZedPos = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local ptDummy = Point3d{0,0,0}
|
|
|
|
if DGD.OFFSET and DGD.OFFSET > 0 then
|
|
dDeltaX = DGD.OFFSET * TAN3
|
|
dPosZ = DGD.OFFSET
|
|
else
|
|
dDeltaX = (DGD.dT/2) * TAN3
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BD' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- se profilo bevel
|
|
dPosX = dDeltaX
|
|
else
|
|
dPosX = 0
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the dPosX parameter
|
|
if DGC.Bwd and DGC.Bwd == 2 then
|
|
dPosX = 0
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(dPosX/tEdgeP.position)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tEdgeP.position*tEdgeP.position))
|
|
end
|
|
|
|
if bPushDr then
|
|
dZedPos = dPosZ
|
|
else
|
|
dZedPos = (DGD.dT - dPosZ)
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tEdgeP.position*cos(DGD.A4)), ptRef:getY()+(tEdgeP.position*sin(DGD.A4)) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tEdgeP.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tEdgeP.position) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
dPosXProbe = dPosX + DGD.DPR
|
|
dXFromExt = 0
|
|
dYFromExt = ptPos:getY()
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tEdgeP.position*cos(DGD.A7)), ptRef:getY()+(tEdgeP.position*sin(DGD.A7)) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tEdgeP.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tEdgeP.position) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
end
|
|
dPosXProbe = DGD.dW - dPosX - DGD.DPR
|
|
dXFromExt = DGD.dW
|
|
dYFromExt = ptPos:getY()
|
|
end
|
|
|
|
MoveGeometryLck( 'edgepull', tEdgeP.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom)
|
|
InsertProbeGeom( tEdgeP.geom, Point3d(dPosXProbe,ptPos:getY(),0), Point3d(dXFromExt,dYFromExt,0), 10, 3)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveStrike( tStrike, sSideLk, bPushDr)
|
|
|
|
local dPosX
|
|
local dPosXUpDw
|
|
local dPosZ
|
|
local ptPos
|
|
local ptPosBox
|
|
local ptRef
|
|
local ptFromExt
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local dDeltaX
|
|
local dZedPos = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nAngleBaseUpDw
|
|
local nRadBaseUpDw
|
|
|
|
if DGD.OFFSET and DGD.OFFSET > 0 then
|
|
dDeltaX = DGD.OFFSET * TAN3
|
|
dPosZ = DGD.OFFSET
|
|
else
|
|
dDeltaX = (DGD.dT/2) * TAN3
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BD' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- se profilo bevel
|
|
dPosX = dDeltaX
|
|
dPosXUpDw = dDeltaX
|
|
else
|
|
dPosX = 0
|
|
dPosXUpDw = 0
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the dPosXUpDw and dPosX parameters
|
|
if DGC.Bwd and DGC.Bwd >= 1 then
|
|
dPosXUpDw = 0
|
|
if DGC.Bwd == 2 then
|
|
dPosX = 0
|
|
end
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(dPosX/tStrike.position)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tStrike.position*tStrike.position))
|
|
nRadBaseBox = tStrike.position
|
|
nAngleBaseUpDw = atan((dPosXUpDw+tStrike.back_set)/tStrike.position)
|
|
nRadBaseUpDw = sqrt(((dPosXUpDw+tStrike.back_set)*(dPosXUpDw+tStrike.back_set))+(tStrike.position*tStrike.position))
|
|
end
|
|
|
|
if bPushDr then
|
|
dZedPos = dPosZ
|
|
else
|
|
dZedPos = (DGD.dT - dPosZ)
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A4)), ptRef:getY()+(nRadBaseBox*sin(DGD.A4)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A4+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A4+nAngleBaseUpDw)) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A4+nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A4+nAngleBaseUpDw)) , 0)
|
|
ptFromExt = ptPosUpGeom
|
|
else
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tStrike.position) , dZedPos)
|
|
ptPosBox = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tStrike.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( ( dPosXUpDw + tStrike.back_set + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ( dPosXUpDw + tStrike.back_set + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , 0)
|
|
ptFromExt = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tStrike.position) , DGD.dT)
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dZedPos)
|
|
ptPosBox = Point3d( ptRef:getX()+(nRadBaseBox*cos(DGD.A7)), ptRef:getY()+(nRadBaseBox*sin(DGD.A7)) , dZedPos)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A7-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A7-nAngleBaseUpDw)) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ptRef:getX()+(nRadBaseUpDw*cos(DGD.A7-nAngleBaseUpDw)), ptRef:getY()+(nRadBaseUpDw*sin(DGD.A7-nAngleBaseUpDw)) , 0)
|
|
ptFromExt = ptPosUpGeom
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , dZedPos)
|
|
ptPosBox = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , dZedPos)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - dPosXUpDw - tStrike.back_set - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , DGD.dT)
|
|
ptPosDwGeom = Point3d( ( DGD.dW - dPosXUpDw - tStrike.back_set - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , 0)
|
|
ptFromExt = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tStrike.position) , DGD.dT)
|
|
end
|
|
end
|
|
|
|
MoveGeometryLck( 'strike', tStrike.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom, ptPosDwGeom, nil, ptPosBox)
|
|
InsertProbeGeom( tStrike.geom, ptPosUpGeom, ptFromExt, 14, 3)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric processing : VIEWERS ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomViewer( nSubViewerId, sSideDoor, sSideLk, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
if ( sSideDoor == 'secure') then
|
|
EgtRotate( nSubViewerId, ORIG(), X_AX(), 180 ) -- ruoto su faccia inferiore
|
|
end
|
|
|
|
EgtRotate( nSubViewerId, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtMirror( nSubViewerId, ORIG(), X_AX()) -- faccio il mirror su asse Y
|
|
end
|
|
|
|
if ( sSideDoor == 'secure') then
|
|
EgtMove( nSubViewerId, ptPosDwGeom - ORIG())
|
|
else
|
|
EgtMove( nSubViewerId, ptPosUpGeom - ORIG())
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nSubViewerId), nSubViewerId, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nSubViewerId), EgtGetParent(nSubViewerId))
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveGeomViewer( nViewerId, sSideLk, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
if not nViewerId then return end
|
|
|
|
local nIdGeomViewer
|
|
local sSideDoorToMove
|
|
local sMessageErr = ''
|
|
|
|
-- devo ottenere tutte le geometrie dello spioncino
|
|
nIdGeomViewer = EgtGetFirstInGroup( nViewerId) -- ottengo la prima geometria
|
|
local nErr = 0
|
|
|
|
while nIdGeomViewer do
|
|
|
|
sSideDoorToMove = EgtGetInfo( nIdGeomViewer, 'SideDoor')
|
|
|
|
if sSideDoorToMove then
|
|
|
|
-- Controllo se la nota è corretta
|
|
local sSideDoor = string.lower(sSideDoorToMove)
|
|
|
|
-- keyway e secure: no rotazione angolo profilo;
|
|
if sSideDoor == 'keyway' or sSideDoor == 'secure' then
|
|
MoveSubGeomViewer( nIdGeomViewer, sSideDoor, sSideLk, ptPosUpGeom, ptPosDwGeom)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[418],nIdGeomViewer,nViewerId, sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1007
|
|
end
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[419],nIdGeomViewer,nViewerId, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1008
|
|
end
|
|
|
|
nIdGeomViewer = EgtGetNext(nIdGeomViewer)
|
|
end
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveViewer( tViewer, sSideLk, bPushDr)
|
|
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local ptRef
|
|
local dZedPos = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local dPosY
|
|
local dPosX
|
|
|
|
if bRemake then
|
|
dPosX = EgtIf( sSideLk == 'L', ( DGD.dW / 2) + tViewer.delta_center, ( DGD.dW / 2) - tViewer.delta_center)
|
|
nAngleBase = atan(dPosX,tViewer.bottom_rail)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tViewer.bottom_rail*tViewer.bottom_rail))
|
|
end
|
|
|
|
local dPosY = EgtIf( tViewer.side and tViewer.side == 'top', ( DGD.dH - tViewer.bottom_rail), tViewer.bottom_rail)
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
if tViewer.side and tViewer.side == 'top' then
|
|
ptRef = DGD.PminTop
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , DGD.dT)
|
|
else
|
|
ptRef = DGD.PminBot
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A3-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A3-nAngleBase)) , DGD.dT)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPosUpGeom = Point3d( ( ( DGD.dW / 2) + tViewer.delta_center), dPosY , DGD.dT)
|
|
ptPosDwGeom = Point3d( ( ( DGD.dW / 2) + tViewer.delta_center), dPosY , 0)
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
if tViewer.side and tViewer.side == 'top' then
|
|
ptRef = DGD.PmaxTop
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , DGD.dT)
|
|
else
|
|
ptRef = DGD.PmaxBot
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A8+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A8+nAngleBase)) , DGD.dT)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
else
|
|
ptPosUpGeom = Point3d( ( ( DGD.dW / 2) - tViewer.delta_center), dPosY , DGD.dT)
|
|
ptPosDwGeom = Point3d( ( ( DGD.dW / 2) - tViewer.delta_center), dPosY , 0)
|
|
end
|
|
end
|
|
|
|
MoveGeomViewer( tViewer.geom, sSideLk, ptPosUpGeom, ptPosDwGeom)
|
|
if bRemake then
|
|
local dAngleLoc
|
|
dAngleLoc = (DGD.A3 + DGD.A8) / 2
|
|
EgtRotate( tViewer.geom, ptPosUpGeom, Z_AX(), ( dAngleLoc-90))
|
|
end
|
|
|
|
InsertProbeGeom( tViewer.geom, ptPosDwGeom)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : ROLLERLATCHS ***
|
|
-----------------------------------------------------------------
|
|
local function ApplyDispRollerLatch( nIdGeomType, nExtraAngle, sSideLk, bPushDr, sSideDoor, ptPosUpGeom, ptPos)
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), -( 90 + nExtraAngle)) -- ruoto su faccia dietro
|
|
|
|
if DGD.SIDE == 'lock' then
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), 90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), -90 ) -- ruoto su faccia destra
|
|
end
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX())
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if string.lower(DGD.SIDE) == 'bottom' then -- frame superiore ( ha il side opposto)
|
|
if DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
else
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
elseif string.lower(DGD.SIDE) == 'top' then -- frame inferiore (ha il side opposto)
|
|
if not DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
end
|
|
end
|
|
else
|
|
if string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
end
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'edge' then -- se spostamento sul bordo
|
|
EgtMove( nIdGeomType, ptPosUpGeom - ORIG())
|
|
elseif ( sSideDoor == 'center') then -- se posizionamento in centro spessore
|
|
EgtMove( nIdGeomType, ptPos - ORIG())
|
|
end
|
|
end
|
|
|
|
local function MoveSubGeomRollerLatch( nSubRollerLatchId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, nExtraAngle, ptPosDwGeom)
|
|
|
|
-- ciclo sulle geometrie singole invece di modificare il layer
|
|
local nIdGeomType
|
|
|
|
nIdGeomType = EgtGetFirstInGroup( nSubRollerLatchId) -- ottengo la prima geometria
|
|
|
|
while nIdGeomType do
|
|
|
|
local sSideDoorBox = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoorBox and sSideDoorBox == 'upper' then
|
|
if not DGD.Dws then
|
|
if bPushDr then
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'secure')
|
|
sSideDoorBox = 'secure'
|
|
end
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
nUpperToDelete = nIdGeomType
|
|
end
|
|
|
|
if sSideDoorBox == 'keyway' or sSideDoorBox == 'secure' then
|
|
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), 180)
|
|
|
|
if DGD.SIDE == 'lock' then
|
|
if sSideLk == 'L' then -- se serratura a destra
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), 90 ) -- ruoto su faccia sinistra
|
|
else
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), -90 ) -- ruoto su faccia destra
|
|
end
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX())
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if string.lower(DGD.SIDE) == 'bottom' then -- frame superiore ( ha il side opposto)
|
|
if DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
else
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
elseif string.lower(DGD.SIDE) == 'top' then -- frame inferiore (ha il side opposto)
|
|
if not DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
end
|
|
end
|
|
else
|
|
if string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
end
|
|
|
|
EgtMove( nIdGeomType, ptPosDwGeom - ORIG())
|
|
else
|
|
ApplyDispRollerLatch( nIdGeomType, nExtraAngle, sSideLk, bPushDr, sSideDoor, ptPosUpGeom, ptPos)
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
else
|
|
if sSideDoorBox and string.lower(sSideDoorBox) == 'locklh' then
|
|
nExtraAngle = 0
|
|
end
|
|
ApplyDispRollerLatch( nIdGeomType, nExtraAngle, sSideLk, bPushDr, sSideDoor, ptPosUpGeom, ptPos)
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : PIVOTS ***
|
|
-----------------------------------------------------------------
|
|
local function ApplyDispPivot( nIdGeomType, nLocAngle, bPushDr, sSideLk, sSideDoor, ptPosUpGeom, ptPos)
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), ( 90 + nLocAngle), GDB_RT.GLOB) -- ruoto su faccia frontale per RHR e LHR
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), 90, GDB_RT.GLOB) -- ruoto su faccia destra RHR e LHR
|
|
|
|
if bPushDr then -- se apertura a spingere RH LH
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX(), GDB_RT.GLOB)
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra LH LHR
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX(), GDB_RT.GLOB)
|
|
end
|
|
|
|
if sSideDoor == 'edge' then -- se spostamento sul bordo
|
|
EgtMove( nIdGeomType, ptPosUpGeom - ORIG(), GDB_RT.GLOB)
|
|
elseif ( sSideDoor == 'center') then -- se posizionamento in centro spessore
|
|
EgtMove( nIdGeomType, ptPos - ORIG(), GDB_RT.GLOB)
|
|
end
|
|
end
|
|
|
|
local function MoveSubGeomPivot( nSubPivotId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUpGeom, nExtraAngle, ptPosDwGeom)
|
|
|
|
if string.lower(DGD.TYPE) ~= 'offsetintermediate' then
|
|
|
|
EgtRotate( nSubPivotId, ORIG(), X_AX(), -90) -- ruoto su faccia dietro
|
|
|
|
if DGD.sFrame then
|
|
if DGD.nTypePz == 5 then
|
|
-- se serratura a destra: LH, LHR, ... e non è sulla seconda anta
|
|
if ( sSideLk == 'R' and not DGD.OTHERD) or
|
|
( sSideLk == 'L' and DGD.OTHERD) then
|
|
EgtMirror( nSubPivotId, ORIG(), X_AX())
|
|
end
|
|
elseif DGD.nTypePz == 6 then
|
|
-- se serratura a destra: LH, LHR, ... e non è sulla seconda anta
|
|
if ( sSideLk == 'R' and DGD.OTHERD) or
|
|
( sSideLk == 'L' and not DGD.OTHERD) then
|
|
EgtMirror( nSubPivotId, ORIG(), X_AX())
|
|
end
|
|
end
|
|
|
|
if not bPushDr then -- se apertura a tirare
|
|
EgtMirror( nSubPivotId, ORIG(), Z_AX())
|
|
end
|
|
else
|
|
if sSideLk == 'R' then -- se serratura a destra: LH, LHR, ...
|
|
EgtMirror( nSubPivotId, ORIG(), X_AX())
|
|
end
|
|
|
|
if not bPushDr then -- se apertura a tirare
|
|
EgtMirror( nSubPivotId, ORIG(), Z_AX())
|
|
end
|
|
end
|
|
|
|
if ( string.lower(DGD.SIDE) == 'bottom') then
|
|
EgtMirror( nSubPivotId, ORIG(), Y_AX())
|
|
elseif DGD.sFrame and ( string.lower(DGD.SIDE) == 'top') then
|
|
EgtMirror( nSubPivotId, ORIG(), X_AX())
|
|
end
|
|
|
|
if sSideDoor == 'edge' then -- se spostamento sul bordo
|
|
EgtMove( nSubPivotId, ptPosUpGeom - ORIG())
|
|
elseif ( sSideDoor == 'center') then -- se posizionamento in centro spessore
|
|
EgtMove( nSubPivotId, ptPos - ORIG())
|
|
end
|
|
|
|
-- gestione percorsi upper
|
|
local nIdGeomType = EgtGetFirstInGroup( nSubPivotId) -- ottengo la prima geometria
|
|
local sSideDoorBox
|
|
|
|
while nIdGeomType do
|
|
|
|
sSideDoorBox = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoorBox and sSideDoorBox == 'upper' then
|
|
if not DGD.Dws then
|
|
if bPushDr then
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'secure')
|
|
sSideDoorBox = 'secure'
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
nUpperToDelete = nIdGeomType
|
|
end
|
|
|
|
if sSideDoorBox == 'keyway' or sSideDoorBox == 'secure' then
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
else -- altimrnti è offset intermediate
|
|
|
|
local nLocAngle = nExtraAngle
|
|
local sSideDoorBox
|
|
local nIdGeomType = EgtGetFirstInGroup( nSubPivotId) -- ottengo la prima geometria
|
|
|
|
while nIdGeomType do
|
|
|
|
sSideDoorBox = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
local nUpperToDelete
|
|
|
|
if sSideDoorBox and string.lower(sSideDoorBox) == 'locklh' then
|
|
nLocAngle = 0
|
|
end
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoorBox and sSideDoorBox == 'upper' then
|
|
if not DGD.Dws then
|
|
if bPushDr then
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'secure')
|
|
sSideDoorBox = 'secure'
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
nUpperToDelete = nIdGeomType
|
|
end
|
|
|
|
if sSideDoorBox == 'keyway' or sSideDoorBox == 'secure' then
|
|
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
|
|
-- if DGD.SIDE == 'hinge' then
|
|
-- if sSideLk == 'L' then -- se serratura a sinistra
|
|
-- EgtRotate( nIdGeomType, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
-- else
|
|
-- EgtRotate( nIdGeomType, ORIG(), Z_AX(), -90 ) -- ruoto su faccia sinistra
|
|
-- end
|
|
-- end
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), Z_AX(), 90 ) -- ruoto su faccia destra
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX())
|
|
end
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra LH LHR
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX(), GDB_RT.GLOB)
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if string.lower(DGD.SIDE) == 'bottom' then -- frame superiore ( ha il side opposto)
|
|
if DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
else
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
elseif string.lower(DGD.SIDE) == 'top' then -- frame inferiore (ha il side opposto)
|
|
if not DGD.OTHERD then
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX())
|
|
end
|
|
end
|
|
else
|
|
-- if string.lower(DGD.SIDE) == 'bottom' then
|
|
-- EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
-- end
|
|
end
|
|
|
|
EgtMove( nIdGeomType, ptPosDwGeom - ORIG())
|
|
else
|
|
ApplyDispPivot( nIdGeomType, nLocAngle, bPushDr, sSideLk, sSideDoor, ptPosUpGeom, ptPos)
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
else
|
|
|
|
ApplyDispPivot( nIdGeomType, nLocAngle, bPushDr, sSideLk, sSideDoor, ptPosUpGeom, ptPos)
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Geometric subgeom processing : STOPSANDCLOSERS ***
|
|
-----------------------------------------------------------------
|
|
local function MoveSubGeomStopAndCloser( nSubtStopAndCloserId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUp, nBoxGeom, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
local dDeltaPos = 0
|
|
local sDeltaPos
|
|
local psDelta
|
|
-- ciclo sulle geometrie singole invece di modificare il layer
|
|
local nIdGeomType
|
|
|
|
-- se devo muovere le singole geometrie dell' OverHead o il layer dello stop&closer e la geometria di ingombro presente nello Stop&Closer
|
|
if not nBoxGeom or nBoxGeom == 0 then
|
|
|
|
nIdGeomType = nSubtStopAndCloserId
|
|
|
|
-- se geometria sul fianco
|
|
if sSideDoor == 'edge' then -- se spostamento sul bordo
|
|
|
|
sDeltaPos = EgtGetInfo( nIdGeomType, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), -90 ) -- ruoto su faccia dietro
|
|
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX()) -- faccio il mirror su asse Z per ribaltare l'uscita in alto
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX()) -- faccio il mirror su asse X per risistemare la direzione percorso
|
|
EgtMove( nIdGeomType, Point3d( -dDeltaPos, 0, 0) - ORIG()) -- riposiziono per il ribaltamento del mirror in X
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if ( sSideLk == 'R' and DGD.OTHERD) or
|
|
( sSideLk == 'L' and not DGD.OTHERD) then
|
|
dDeltaPos = 0
|
|
end
|
|
else
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dDeltaPos = 0
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A2)), ( dDeltaPos * sin(DGD.A2)), 0)
|
|
else
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A5)), ( dDeltaPos * sin(DGD.A5)), 0)
|
|
end
|
|
else
|
|
psDelta = Point3d( dDeltaPos, 0, 0)
|
|
end
|
|
|
|
EgtMove( nIdGeomType, ( ptPosUp + psDelta) - ORIG())
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtRotate( nIdGeomType, ( ptPosUp + psDelta), Z_AX(), DGD.A2)
|
|
else
|
|
EgtRotate( nIdGeomType, ( ptPosUp + psDelta), Z_AX(), DGD.A5)
|
|
end
|
|
end
|
|
elseif ( sSideDoor == 'center') then -- se posizionamento in centro spessore
|
|
|
|
sDeltaPos = EgtGetInfo( nIdGeomType, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), -90, GDB_RT.GLOB) -- ruoto su faccia dietro su coordinate globali
|
|
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
if ( sSideLk == 'R' and DGD.OTHERD) or
|
|
( sSideLk == 'L' and not DGD.OTHERD) then
|
|
dDeltaPos = 0
|
|
end
|
|
else
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dDeltaPos = 0
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A2)), ( dDeltaPos * sin(DGD.A2)), 0)
|
|
else
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A5)), ( dDeltaPos * sin(DGD.A5)), 0)
|
|
end
|
|
else
|
|
psDelta = Point3d( dDeltaPos, 0, 0)
|
|
end
|
|
EgtMove( nIdGeomType, ( ptPos + psDelta) - ORIG())
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtRotate( nIdGeomType, ( ptPos + psDelta), Z_AX(), DGD.A2)
|
|
else
|
|
EgtRotate( nIdGeomType, ( ptPos + psDelta), Z_AX(), DGD.A5)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- cerco nel layer la geometria di ingombro presente nello Stop&Closer
|
|
if nBoxGeom then
|
|
|
|
nIdGeomType = EgtGetFirstInGroup( nSubtStopAndCloserId) -- ottengo la prima geometria
|
|
|
|
while nIdGeomType do
|
|
|
|
local sSideDoorBox = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
local nUpperToDelete
|
|
|
|
-- rinomino eventuali geometrie che descrivono solo la sezione
|
|
if sSideDoorBox and sSideDoorBox == 'upper' then
|
|
if not DGD.Dws then
|
|
if bPushDr then
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'secure')
|
|
sSideDoorBox = 'secure'
|
|
end
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
end
|
|
nUpperToDelete = nIdGeomType
|
|
end
|
|
|
|
if sSideDoorBox == 'keyway' or sSideDoorBox == 'secure' then
|
|
|
|
if not DGD.Dws then -- se disposizione frame su lato narrow o porta
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), -90 ) -- ruoto su faccia dietro
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
elseif sSideDoorBox == 'Keyway' then -- geometria originale
|
|
if not DGD.Dws then
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
end
|
|
elseif sSideDoorBox == 'Secure' then -- geometria originale
|
|
if not DGD.Dws then
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
end
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
-- cancello il percorso 'upper'
|
|
if nUpperToDelete then
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
end
|
|
elseif nBoxGeom == 1 then -- se singolo persorso di ingombro dell'OverHead
|
|
|
|
nIdGeomType = nSubtStopAndCloserId
|
|
|
|
if bPushDr then
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'keyway')
|
|
sSideDoorBox = 'keyway'
|
|
else
|
|
EgtSetInfo( nIdGeomType, 'SideDoor', 'secure')
|
|
sSideDoorBox = 'secure'
|
|
end
|
|
|
|
-- le geometrie di ingombro sono posizionate sempre sul bordo, quindi tipo 'edge'
|
|
sDeltaPos = EgtGetInfo( nIdGeomType, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
EgtRotate( nIdGeomType, ORIG(), X_AX(), 180 ) -- ruoto su faccia dietro
|
|
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtMirror( nIdGeomType, ORIG(), Y_AX())
|
|
end
|
|
|
|
if bPushDr then -- se apertura a spingere
|
|
EgtMirror( nIdGeomType, ORIG(), Z_AX()) -- faccio il mirror su asse Z per ribaltare l'uscita in alto
|
|
EgtMirror( nIdGeomType, ORIG(), X_AX()) -- faccio il mirror su asse X per risistemare la direzione percorso
|
|
EgtMove( nIdGeomType, Point3d( -dDeltaPos, 0, 0) - ORIG()) -- riposiziono per il ribaltamento del mirror in X
|
|
end
|
|
|
|
if DGD.sFrame then
|
|
-- se serratura a destra: LH, LHR, ... e non è sulla seconda anta
|
|
if ( sSideLk == 'R' and not DGD.OTHERD) or
|
|
( sSideLk == 'L' and DGD.OTHERD) then
|
|
EgtMirror( nSubPivotId, ORIG(), X_AX())
|
|
end
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dDeltaPos = 0
|
|
end
|
|
else
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
dDeltaPos = 0
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A2)), ( dDeltaPos * sin(DGD.A2)), 0)
|
|
else
|
|
psDelta = Point3d( ( dDeltaPos * cos(DGD.A5)), ( dDeltaPos * sin(DGD.A5)), 0)
|
|
end
|
|
else
|
|
psDelta = Point3d( dDeltaPos, 0, 0)
|
|
end
|
|
|
|
EgtMove( nIdGeomType, ( ptPosUp + psDelta) - ORIG())
|
|
|
|
if bRemake then
|
|
if DGD.SIDE and string.lower(DGD.SIDE) == 'bottom' then
|
|
EgtRotate( nIdGeomType, ( ptPosUp + psDelta), Z_AX(), DGD.A2)
|
|
else
|
|
EgtRotate( nIdGeomType, ( ptPosUp + psDelta), Z_AX(), DGD.A5)
|
|
end
|
|
end
|
|
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
AddSurfTmByExtrusion( EgtGetParent(nIdGeomType), nIdGeomType, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( EgtGetParent(nIdGeomType), EgtGetParent(nIdGeomType))
|
|
-- cancello il percorso 'upper'
|
|
EgtErase( nUpperToDelete)
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : common functions for rollerlatch, pivot, stopandcloser ***
|
|
-----------------------------------------------------------------------------------------
|
|
local function MoveGeometryTopDwHSide( sTypeGeom, nGeomId, sSideLk, bPushDr, ptPos, ptPosUp, nExtraAngle, ptPosDw, ptPosUpGeom, ptPosDwGeom)
|
|
|
|
if not nGeomId then return end
|
|
|
|
local sSideDoorToMove
|
|
local sMessageErr = ''
|
|
|
|
sSideDoorToMove = EgtGetInfo( nGeomId, 'InserPoint')
|
|
local nErr = 0
|
|
|
|
if DGD.sFrame and DGD.nTypePz == 5 then
|
|
DGD.SIDE = 'bottom'
|
|
elseif DGD.sFrame and DGD.nTypePz == 6 then
|
|
DGD.SIDE = 'top'
|
|
end
|
|
|
|
if sSideDoorToMove then
|
|
|
|
-- Controllo se la nota è corretta
|
|
local sSideDoor = string.lower(sSideDoorToMove)
|
|
|
|
if sTypeGeom == 'rollerlatch' then
|
|
-- Edge: sullo spigolo della porta; Centre: in centro allo spessore
|
|
if sSideDoor == 'edge' or sSideDoor == 'center' then
|
|
MoveSubGeomRollerLatch( nGeomId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUp, nExtraAngle, ptPosDw)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[415],nGeomId,'RollerLatch',sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1009
|
|
end
|
|
elseif sTypeGeom == 'pivot' then
|
|
-- Edge: sullo spigolo della porta; Centre: in centro allo spessore
|
|
if sSideDoor == 'edge' or sSideDoor == 'center' then
|
|
MoveSubGeomPivot( nGeomId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUp, nExtraAngle, ptPosDw)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[415],nGeomId,'Pivot',sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1011
|
|
end
|
|
elseif sTypeGeom == 'stopandcloser' then
|
|
-- Edge: sullo spigolo della porta; Centre: in centro allo spessore
|
|
if sSideDoor == 'edge' or sSideDoor == 'center' then
|
|
local nBoxGeom = 0
|
|
MoveSubGeomStopAndCloser( nGeomId, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUp, nBoxGeom, ptPosUpGeom, ptPosDwGeom)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[415],nGeomId,'StopAndCloser',sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1013
|
|
end
|
|
end
|
|
else
|
|
-- messaggio di errore in base al tipo di pezzo
|
|
if sTypeGeom == 'rollerlatch' then
|
|
sMessageErr = string.format( EgtDoorsMsg[416],nGeomId,'RollerLatch', DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1010
|
|
elseif sTypeGeom == 'pivot' then
|
|
sMessageErr = string.format( EgtDoorsMsg[416],nPivotId,'Pivot', DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1012
|
|
elseif sTypeGeom == 'stopandcloser' then
|
|
sMessageErr = string.format( EgtDoorsMsg[416],nStopAndCloserId,'StopAndCloser', DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1014
|
|
end
|
|
end
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- *** Geometric processing : ROLLERLATCH, PIVOTS, STOPSANDCLOSERS ***
|
|
----------------------------------------------------------------------
|
|
local function MoveRollerLatch( tRollerLatch, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosBox
|
|
local ptRef
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local dPosX
|
|
local dPosY
|
|
local dPosXProbe
|
|
local dPosYProbe
|
|
local dPosZ
|
|
local dPosZup
|
|
local dXFromExt
|
|
local dYFromExt
|
|
local dDeltaX
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nExtraAngle = 0
|
|
local nSideApplied = 2
|
|
|
|
if DGD.sFrame and DGD.nTypePz == 5 then
|
|
tRollerLatch.side = 'bottom'
|
|
bPushDr = not bPushDr
|
|
elseif DGD.sFrame and DGD.nTypePz == 6 then
|
|
tRollerLatch.side = 'top'
|
|
bPushDr = not bPushDr
|
|
end
|
|
|
|
if DGD.OFFSET and DGD.OFFSET > 0 then
|
|
dDeltaX = DGD.OFFSET * TAN3
|
|
dPosZ = DGD.OFFSET
|
|
else
|
|
dDeltaX = (DGD.dT/2) * TAN3
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
-- se latch face ricalcolo il delta
|
|
if DGD.LSREF then
|
|
dDeltaX = DGD.dT * TAN3
|
|
end
|
|
|
|
if bPushDr then
|
|
dPosZup = DGD.dT
|
|
else
|
|
dPosZ = (DGD.dT - dPosZ)
|
|
dPosZup = 0
|
|
end
|
|
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tRollerLatch.side) == 'bottom' then
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PminBot
|
|
dLocAngle = DGD.A2
|
|
else
|
|
ptRef = DGD.PmaxBot
|
|
dLocAngle = DGD.A1
|
|
end
|
|
dPosY = ptRef:getY()+((tRollerLatch.position)*sin(dLocAngle))
|
|
else
|
|
dPosY = EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
end
|
|
dPosYProbe = dPosY + DGD.DPR
|
|
dYFromExt = dPosY
|
|
nSideApplied = 4
|
|
elseif string.lower(tRollerLatch.side) == 'lock' then
|
|
|
|
if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BD' or
|
|
DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- se profilo bevel su lato lock
|
|
dPosX = dDeltaX
|
|
-- se non è presente il blocco rotazione su bevel
|
|
if not DGD.NOBVROT then
|
|
nExtraAngle = 3
|
|
end
|
|
else
|
|
dPosX = 0
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the dPosX parameter
|
|
if DGC.Bwd and DGC.Bwd == 2 then
|
|
dPosX = 0
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(dPosX/tRollerLatch.position)
|
|
nRadBase = sqrt((dPosX*dPosX)+(tRollerLatch.position*tRollerLatch.position))
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PminTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A4+nAngleBase)) , dPosZ)
|
|
ptPosBox = Point3d( ptRef:getX()+(tRollerLatch.position*cos(DGD.A4)), ptRef:getY()+(tRollerLatch.position*sin(DGD.A4)) , dPosZ)
|
|
dPosXProbe = ptRef:getX() + DGD.DPR
|
|
dXFromExt = ptRef:getX()
|
|
dPosYProbe = ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase)) + DGD.DPR -- setto la X invece della Y
|
|
dYFromExt = dPosYProbe
|
|
else
|
|
ptRef = DGD.PmaxTop
|
|
ptPos = Point3d( ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)), ptRef:getY()+(nRadBase*sin(DGD.A7-nAngleBase)) , dPosZ)
|
|
ptPosBox = Point3d( ptRef:getX()+(tRollerLatch.position*cos(DGD.A7)), ptRef:getY()+(tRollerLatch.position*sin(DGD.A7)) , dPosZ)
|
|
dPosXProbe = ptRef:getX() - DGD.DPR
|
|
dXFromExt = ptRef:getX()
|
|
dPosYProbe = ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase)) - DGD.DPR -- setto la X invece della Y
|
|
dYFromExt = dPosYProbe
|
|
end
|
|
else
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptPos = Point3d( dPosX + EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tRollerLatch.position) , dPosZ)
|
|
ptPosBox = Point3d( EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0), ( DGD.dH - tRollerLatch.position) , dPosZ)
|
|
dPosXProbe = ptPos:getX() + DGD.DPR
|
|
dXFromExt = EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - dPosX - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tRollerLatch.position) , dPosZ)
|
|
ptPosBox = Point3d( ( DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)), ( DGD.dH - tRollerLatch.position) , dPosZ)
|
|
dPosXProbe = ptPos:getX() - DGD.DPR
|
|
dXFromExt = DGD.dW - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
end
|
|
dPosYProbe = DGD.dH - tRollerLatch.position
|
|
dYFromExt = dPosYProbe
|
|
end
|
|
|
|
ptPosUpGeom = Point3d( ptPos:getX(), ptPos:getY(), dPosZup)
|
|
ptPosDwGeom = Point3d( ptPosBox:getX(), ptPosBox:getY(), dPosZup)
|
|
nSideApplied = 3
|
|
else
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PminTop
|
|
dLocAngle = DGD.A5
|
|
else
|
|
ptRef = DGD.PmaxTop
|
|
dLocAngle = DGD.A6
|
|
end
|
|
dPosY = ptRef:getY()+((tRollerLatch.position)*sin(dLocAngle))
|
|
else
|
|
dPosY = DGD.dH - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
end
|
|
dPosYProbe = dPosY - DGD.DPR
|
|
dYFromExt = dPosY
|
|
end
|
|
|
|
if string.lower(tRollerLatch.side) ~= 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if bRemake then
|
|
if string.lower(tRollerLatch.side) == 'top' then
|
|
dPosX = ptRef:getX()+(tRollerLatch.position*cos(DGD.A6))
|
|
else
|
|
dPosX = ptRef:getX()+(tRollerLatch.position*cos(DGD.A1))
|
|
end
|
|
else
|
|
dPosX = DGD.dW - tRollerLatch.position
|
|
end
|
|
dPosXProbe = dPosX
|
|
dXFromExt = dPosX
|
|
else -- serratura a sinistra
|
|
if bRemake then
|
|
if string.lower(tRollerLatch.side) == 'top' then
|
|
dPosX = ptRef:getX()+(tRollerLatch.position*cos(DGD.A5))
|
|
else
|
|
dPosX = ptRef:getX()+(tRollerLatch.position*cos(DGD.A2))
|
|
end
|
|
else
|
|
dPosX = tRollerLatch.position
|
|
end
|
|
dPosXProbe = dPosX
|
|
dXFromExt = dPosX
|
|
end
|
|
|
|
ptPos = Point3d( dPosX, dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( dPosX, dPosY, dPosZup)
|
|
ptPosDwGeom = ptPosUpGeom
|
|
end
|
|
|
|
MoveGeometryTopDwHSide( 'rollerlatch', tRollerLatch.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom, nExtraAngle, ptPosDwGeom)
|
|
|
|
if bRemake then
|
|
if string.lower(tRollerLatch.side) == 'top' then
|
|
EgtRotate( tRollerLatch.geom, ptPos, Z_AX(), DGD.A5)
|
|
elseif string.lower(tRollerLatch.side) == 'bottom' then
|
|
EgtRotate( tRollerLatch.geom, ptPos, Z_AX(), DGD.A2)
|
|
else
|
|
EgtRotate( tRollerLatch.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
end
|
|
InsertProbeGeom( tRollerLatch.geom, Point3d(dPosXProbe,dPosYProbe,0), Point3d(dXFromExt,dYFromExt,0), 9, nSideApplied)
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MovePivot( tPivot, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosProbe
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local ptRef
|
|
local ptFromExt
|
|
local dPosX
|
|
local dPosXProbe
|
|
local dPosY
|
|
local dPosYProbe
|
|
local dPosZ = (DGD.dT/2)
|
|
local dPosZup
|
|
local dPosZReg
|
|
local dXFromExt
|
|
local dYFromExt
|
|
local dDeltaPos = 0
|
|
local sDeltaPos
|
|
local nDeltaX = 0
|
|
local nExtraAngle = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
local nErr = 0
|
|
local nHardwareType = 12
|
|
local nSideApplied = 1
|
|
|
|
-- se non è offsetintermediate ( quindi offset o centerhung)
|
|
if string.lower(tPivot.type) ~= 'offsetintermediate' then
|
|
|
|
if string.lower(tPivot.side) == 'hinge' then
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[594], tPivot.type..' Pivot', tPivot.side)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1021
|
|
end
|
|
|
|
if DGD.sFrame and DGD.nTypePz == 5 then
|
|
tPivot.side = 'bottom'
|
|
elseif DGD.sFrame and DGD.nTypePz == 6 then
|
|
tPivot.side = 'top'
|
|
end
|
|
|
|
if string.lower(tPivot.type) == 'offset' then
|
|
sDeltaPos = EgtGetInfo( tPivot.geom, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
end
|
|
|
|
-- se applicato a lato top o bottom cambio la coordinata in Y
|
|
if string.lower(tPivot.side) == 'top' then
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxTop
|
|
dLocAngle = DGD.A6
|
|
else
|
|
ptRef = DGD.PminTop
|
|
dLocAngle = DGD.A5
|
|
end
|
|
dPosY = ptRef:getY()+((tPivot.position+dDeltaPos)*sin(dLocAngle))
|
|
else
|
|
dPosY = DGD.dH - EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
end
|
|
dPosYProbe = dPosY - DGD.DPR
|
|
dYFromExt = dPosY
|
|
nSideApplied = 2
|
|
else
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxBot
|
|
dLocAngle = DGD.A1
|
|
else
|
|
ptRef = DGD.PminBot
|
|
dLocAngle = DGD.A2
|
|
end
|
|
dPosY = ptRef:getY()+((tPivot.position+dDeltaPos)*sin(dLocAngle))
|
|
else
|
|
dPosY = EgtIf( DGD.sFrame, DGD.dZedExtFrame, 0)
|
|
end
|
|
dPosYProbe = dPosY + DGD.DPR
|
|
dYFromExt = dPosY
|
|
nSideApplied = 4
|
|
end
|
|
|
|
if DGD.OFFSET and DGD.OFFSET > 0 then
|
|
dPosZ = DGD.OFFSET
|
|
else
|
|
dPosZ = (DGD.dT/2)
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra: RH, RHR, ...
|
|
if bRemake then
|
|
if string.lower(tPivot.side) == 'top' then
|
|
dPosX = ptRef:getX()+((tPivot.position+dDeltaPos)*cos(DGD.A6))
|
|
else
|
|
dPosX = ptRef:getX()+((tPivot.position+dDeltaPos)*cos(DGD.A1))
|
|
end
|
|
else
|
|
dPosX = DGD.dW - tPivot.position - dDeltaPos
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
if string.lower(tPivot.side) == 'top' then
|
|
dPosX = ptRef:getX()+((tPivot.position+dDeltaPos)*cos(DGD.A5))
|
|
else
|
|
dPosX = ptRef:getX()+((tPivot.position+dDeltaPos)*cos(DGD.A2))
|
|
end
|
|
else
|
|
dPosX = tPivot.position + dDeltaPos
|
|
end
|
|
end
|
|
dPosXProbe = dPosX
|
|
dXFromExt = dPosX
|
|
|
|
if bPushDr then
|
|
dPosZup = DGD.BACK_SET
|
|
dPosZReg = 0
|
|
else
|
|
dPosZ = (DGD.dT - dPosZ)
|
|
dPosZup = DGD.dT - DGD.BACK_SET
|
|
dPosZReg = DGD.dT
|
|
end
|
|
else -- altrimenti tipo offsetintermediate
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
if string.lower(tPivot.side) ~= 'hinge' then
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[593], tPivot.type..' Pivot', 'hinge')
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = -1022
|
|
end
|
|
|
|
-- incremento il contatore di cerniere e pivot ( disposti su lato hinges)
|
|
nNumHingePivot = nNumHingePivot + 1
|
|
|
|
if DGD.tProfs.hingeedge.trimming == 'BD' or DGD.tProfs.hingeedge.trimming == 'BU' or
|
|
DGD.tProfs.hingeedge.trimming == 'BDEB' or DGD.tProfs.hingeedge.trimming == 'BUEB' then
|
|
nExtraAngle = 3
|
|
nDeltaX = (tPivot.back_set * sin(nExtraAngle))
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the nDeltaX parameter
|
|
if DGC.Bwd and DGC.Bwd == 2 then
|
|
nDeltaX = 0
|
|
end
|
|
|
|
sDeltaPos = EgtGetInfo( tPivot.geom, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
if bRemake then
|
|
local dLocAngle
|
|
nAngleBase = atan(nDeltaX/(tPivot.position+dDeltaPos))
|
|
nRadBase = sqrt((nDeltaX*nDeltaX)+((tPivot.position+dDeltaPos)*(tPivot.position+dDeltaPos)))
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxTop
|
|
dLocAngle = DGD.A7
|
|
else
|
|
ptRef = DGD.PminTop
|
|
dLocAngle = DGD.A4
|
|
end
|
|
dPosY = ptRef:getY()+((tPivot.position+dDeltaPos)*sin(dLocAngle))
|
|
dPosYProbe = dPosY
|
|
dYFromExt = dPosY
|
|
else
|
|
dPosY = DGD.dH - tPivot.position - dDeltaPos
|
|
dPosYProbe = dPosY
|
|
dYFromExt = dPosY
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra: RH, RHR, ...
|
|
if DGD.sFrame then
|
|
dPosX = DGD.dW - nDeltaX - DGD.dZedExtFrame
|
|
dXFromExt = DGD.dW - DGD.dZedExtFrame
|
|
else
|
|
if bRemake then
|
|
dPosX = ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase))
|
|
dXFromExt = dPosX
|
|
else
|
|
dPosX = DGD.dW - nDeltaX
|
|
dXFromExt = DGD.dW
|
|
end
|
|
end
|
|
dPosXProbe = dPosX - DGD.DPR
|
|
else -- serratura a destra
|
|
if DGD.sFrame then
|
|
dPosX = nDeltaX + DGD.dZedExtFrame
|
|
dXFromExt = DGD.dZedExtFrame
|
|
else
|
|
if bRemake then
|
|
dPosX = ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase))
|
|
dXFromExt = dPosX
|
|
else
|
|
dPosX = nDeltaX
|
|
dXFromExt = 0
|
|
end
|
|
end
|
|
dPosXProbe = dPosX + DGD.DPR
|
|
end
|
|
|
|
if bPushDr then
|
|
dPosZup = DGD.BACK_SET
|
|
dPosZReg = 0
|
|
else
|
|
dPosZup = DGD.dT - DGD.BACK_SET
|
|
dPosZReg = DGD.dT
|
|
end
|
|
-- assegno il tipo hardware come una hinge perchè viene applicato su quel lato
|
|
nHardwareType = 5
|
|
end
|
|
|
|
ptPos = Point3d( dPosX, dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( dPosX, dPosY, dPosZup)
|
|
ptPosDwGeom = Point3d( dPosX, dPosY, dPosZReg)
|
|
ptPosProbe = Point3d( dPosXProbe, dPosYProbe, 0)
|
|
ptFromExt = Point3d( dXFromExt, dYFromExt, 0)
|
|
|
|
MoveGeometryTopDwHSide( 'pivot', tPivot.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom, nExtraAngle, ptPosDwGeom)
|
|
if bRemake then
|
|
if string.lower(tPivot.type) == 'offsetintermediate' then
|
|
EgtRotate( tPivot.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A8, DGD.A3)-90))
|
|
else
|
|
EgtRotate( tPivot.geom, ptPos, Z_AX(), EgtIf( string.lower(tPivot.side) == 'top', DGD.A5, DGD.A2))
|
|
end
|
|
end
|
|
InsertProbeGeom( tPivot.geom, ptPosProbe, ptFromExt, nHardwareType, nSideApplied)
|
|
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveStopAndCloser( tStopAndCloser, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosUp
|
|
local ptPosUpGeom
|
|
local ptPosDwGeom
|
|
local ptRef
|
|
local dPosY
|
|
local dPosZ
|
|
local dPosZup
|
|
local dPosProbe
|
|
local ptFromExt
|
|
|
|
if DGD.sFrame and ( DGD.nTypePz == 5 or DGD.nTypePz == 6) then
|
|
dPosY = 0 + DGD.dZedExtFrame
|
|
bPushDr = not bPushDr
|
|
else
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxTop
|
|
dLocAngle = DGD.A6
|
|
else
|
|
ptRef = DGD.PminTop
|
|
dLocAngle = DGD.A5
|
|
end
|
|
dPosY = ptRef:getY()+((tStopAndCloser.position)*sin(dLocAngle))
|
|
else
|
|
dPosY = DGD.dH
|
|
end
|
|
end
|
|
|
|
if DGD.POCKET_OFFSET and DGD.POCKET_OFFSET > 0 then
|
|
dPosZ = EgtIf( bPushDr, DGD.POCKET_OFFSET, (DGD.dT - DGD.POCKET_OFFSET))
|
|
else
|
|
dPosZ = DGD.dT/2
|
|
end
|
|
dPosZup = EgtIf( bPushDr, DGD.dT, 0)
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if bRemake then
|
|
ptPos = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A5)), dPosY, dPosZ)
|
|
ptPosUp = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A5)), dPosY, dPosZup)
|
|
dPosProbe = Point3d( ptRef:getX()+(EgtIf( abs(tStopAndCloser.position) < DGD.DPR, (DGD.dW/4), tStopAndCloser.position)*cos(DGD.A5)), dPosY, dPosZup)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A5)), dPosY, DGD.dT)
|
|
else
|
|
ptPos = Point3d( tStopAndCloser.position, dPosY, dPosZ)
|
|
ptPosUp = Point3d( tStopAndCloser.position, dPosY, dPosZup)
|
|
dPosProbe = Point3d( EgtIf( abs(tStopAndCloser.position) < DGD.DPR, (DGD.dW/4), tStopAndCloser.position), dPosY, dPosZup)
|
|
ptPosUpGeom = Point3d( tStopAndCloser.position, dPosY, DGD.dT)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
ptFromExt = dPosProbe
|
|
else -- serratura a sinistra
|
|
if bRemake then
|
|
ptPos = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A6)), dPosY, dPosZ)
|
|
ptPosUp = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A6)), dPosY, dPosZup)
|
|
dPosProbe = Point3d( ptRef:getX()+(EgtIf( abs(tStopAndCloser.position) < DGD.DPR, (DGD.dW/4), tStopAndCloser.position)*cos(DGD.A6)), dPosY, dPosZup)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tStopAndCloser.position*cos(DGD.A6)), dPosY, DGD.dT)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - tStopAndCloser.position), dPosY, dPosZ)
|
|
ptPosUp = Point3d( ( DGD.dW - tStopAndCloser.position), dPosY, dPosZup)
|
|
dPosProbe = Point3d( ( DGD.dW - EgtIf( abs(tStopAndCloser.position) < DGD.DPR, (DGD.dW/4), tStopAndCloser.position)), dPosY, dPosZup)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - tStopAndCloser.position), dPosY, DGD.dT)
|
|
end
|
|
ptPosDwGeom = Point3d( ptPosUpGeom:getX(), ptPosUpGeom:getY() , 0)
|
|
ptFromExt = dPosProbe
|
|
end
|
|
|
|
MoveGeometryTopDwHSide( 'stopandcloser', tStopAndCloser.geom, sSideLk, bPushDr, ptPos, ptPosUp, nil, nil, ptPosUpGeom, ptPosDwGeom)
|
|
InsertProbeGeom( tStopAndCloser.geom, Point3d(dPosProbe:getX(),dPosProbe:getY()-DGD.DPR,0), Point3d(ptFromExt:getX(),ptFromExt:getY(),0), 4, 2)
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : functions for overhead ***
|
|
-----------------------------------------------------------------------------------------
|
|
local function MoveGeometryOverHead( sTypeGeom, nGeomId, sSideLk, bPushDr, ptPos, ptPosUp)
|
|
|
|
if not nGeomId then return end
|
|
|
|
local nIdGeomType
|
|
local sSideDoorToMove
|
|
local sMessageErr = ''
|
|
local nBoxGeom = 1
|
|
|
|
-- devo ottenere tutte le geometrie del over head
|
|
nIdGeomType = EgtGetFirstInGroup( nGeomId) -- ottengo la prima geometria
|
|
local nErr = 0
|
|
|
|
while nIdGeomType do
|
|
|
|
local sSideDoorBox = EgtGetInfo( nIdGeomType, 'SideDoor')
|
|
|
|
-- se geometrie che descrivono la sezione
|
|
if sSideDoorBox and sSideDoorBox == 'upper' then
|
|
MoveSubGeomStopAndCloser( nIdGeomType, sSideDoorBox, sSideLk, bPushDr, ptPos, ptPosUp, nBoxGeom)
|
|
else
|
|
|
|
sSideDoorToMove = EgtGetInfo( nIdGeomType, 'InserPoint')
|
|
|
|
if sSideDoorToMove then
|
|
|
|
-- Controllo se la nota è corretta
|
|
local sSideDoor = string.lower(sSideDoorToMove)
|
|
|
|
if sTypeGeom == 'overhead' then
|
|
-- Edge: sullo spigolo della porta; Centre: in centro allo spessore
|
|
if sSideDoor == 'edge' or sSideDoor == 'center' then
|
|
MoveSubGeomStopAndCloser( nIdGeomType, sSideDoor, sSideLk, bPushDr, ptPos, ptPosUp)
|
|
else
|
|
-- messaggio di errore
|
|
sMessageErr = string.format( EgtDoorsMsg[415], nIdGeomType,'OverHead',sSideDoor, DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1015
|
|
end
|
|
end
|
|
else
|
|
-- messaggio di errore in base al tipo di pezzo
|
|
if sTypeGeom == 'overhead' then
|
|
sMessageErr = string.format( EgtDoorsMsg[416], nIdGeomType,'OverHead', DGD.FILE)
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
nErr = 1016
|
|
end
|
|
end
|
|
end
|
|
|
|
nIdGeomType = EgtGetNext(nIdGeomType)
|
|
end
|
|
-- assegno codice errore se ancora non fatto
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveOverHead( tOverHead, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptPosUpGeom
|
|
local ptFromExt
|
|
local ptRef
|
|
local dPosY
|
|
local dPosYUp
|
|
local dPosZ
|
|
local dPosZup
|
|
|
|
if DGD.sFrame and ( DGD.nTypePz == 5 or DGD.nTypePz == 6) then
|
|
dPosY = 0 + DGD.dZedExtFrame
|
|
DGD.SIDE = 'bottom'
|
|
bPushDr = not bPushDr
|
|
else
|
|
if bRemake then
|
|
local dLocAngle
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxTop
|
|
dLocAngle = DGD.A6
|
|
else
|
|
ptRef = DGD.PminTop
|
|
dLocAngle = DGD.A5
|
|
end
|
|
dPosY = ptRef:getY()+((tOverHead.pockpos)*sin(dLocAngle))
|
|
dPosYUp = ptRef:getY()+((tOverHead.armpos)*sin(dLocAngle))
|
|
else
|
|
dPosY = DGD.dH
|
|
end
|
|
end
|
|
|
|
if DGD.POCKET_OFFSET and DGD.POCKET_OFFSET > 0 then
|
|
dPosZ = EgtIf( bPushDr, DGD.POCKET_OFFSET, (DGD.dT - DGD.POCKET_OFFSET))
|
|
else
|
|
dPosZ = DGD.dT/2
|
|
end
|
|
dPosZup = EgtIf( bPushDr, DGD.dT, 0)
|
|
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if bRemake then
|
|
ptPos = Point3d( ptRef:getX()+(tOverHead.pockpos*cos(DGD.A5)), dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tOverHead.armpos*cos(DGD.A5)), dPosYUp, dPosZup)
|
|
else
|
|
ptPos = Point3d( tOverHead.pockpos, dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( tOverHead.armpos, dPosY, dPosZup)
|
|
end
|
|
else -- serratura a sinistra
|
|
if bRemake then
|
|
ptPos = Point3d( ptRef:getX()+(tOverHead.pockpos*cos(DGD.A6)), dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( ptRef:getX()+(tOverHead.armpos*cos(DGD.A6)), dPosYUp, dPosZup)
|
|
else
|
|
ptPos = Point3d( ( DGD.dW - tOverHead.pockpos), dPosY, dPosZ)
|
|
ptPosUpGeom = Point3d( ( DGD.dW - tOverHead.armpos), dPosY, dPosZup)
|
|
end
|
|
end
|
|
ptFromExt = ptPosUpGeom
|
|
|
|
MoveGeometryOverHead( 'overhead', tOverHead.geom, sSideLk, bPushDr, ptPos, ptPosUpGeom)
|
|
InsertProbeGeom( tOverHead.geom, Point3d(ptPosUpGeom:getX(),ptPosUpGeom:getY()-DGD.DPR,0), Point3d(ptFromExt:getX(),ptFromExt:getY(),0), 13, 2)
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : functions for GROOVE ***
|
|
-----------------------------------------------------------------------------------------
|
|
local function MoveGeomGroove( nGrooveId, sSideLk, ptPos, sSide, bPushDr, dTopAngleDoor)
|
|
|
|
if sSide and ( sSide == 'top' or sSide == 'top_flat' or sSide == 'top_angle') then
|
|
if DGD.GRS then
|
|
EgtRotate( nGrooveId, ORIG(), X_AX(), 90 ) -- ruoto su faccia frontale ( faccia sotto della porta)
|
|
EgtMirror( nGrooveId, ORIG(), Y_AX()) -- faccio mirror in Y
|
|
else
|
|
EgtRotate( nGrooveId, ORIG(), X_AX(), -90 ) -- ruoto su faccia dietro ( faccia sopra della porta)
|
|
end
|
|
else
|
|
EgtRotate( nGrooveId, ORIG(), X_AX(), 90 ) -- ruoto su faccia frontale ( faccia sotto della porta)
|
|
end
|
|
|
|
if not sSide or ( sSide == 'top' or sSide == 'top_flat' or sSide == 'top_angle') or sSide == 'bottom' then
|
|
if sSideLk == 'R' and not DGD.GRS then -- se serratura a destra
|
|
EgtRotate( nGrooveId, ORIG(), Y_AX(), 180 ) -- ruoto per portare l'eventuale uscita dalla parte delle cerniere
|
|
end
|
|
|
|
if not bPushDr and DGD.GRS then -- se è una bevel dn
|
|
EgtRotate( nGrooveId, ORIG(), Y_AX(), 180 ) -- ruoto per portare lo scasso in basso sul lato narrow
|
|
end
|
|
|
|
if sSide == 'top_angle' and dTopAngleDoor and abs(dTopAngleDoor) > 0 then
|
|
EgtRotate( nGrooveId, ORIG(), Z_AX(), dTopAngleDoor) -- ruoto sull'angolo inclinato lato top
|
|
end
|
|
else -- se piazzamento sui fianchi
|
|
if not bPushDr and DGD.GRS then -- se è una bevel dn
|
|
EgtRotate( nGrooveId, ORIG(), Y_AX(), 180 ) -- ruoto per portare lo scasso in basso sul lato narrow
|
|
end
|
|
|
|
if sSide == 'hinge' then
|
|
if sSideLk == 'R' then
|
|
EgtRotate( nGrooveId, ORIG(), Z_AX(), -90 )
|
|
else
|
|
EgtRotate( nGrooveId, ORIG(), Z_AX(), 90 )
|
|
end
|
|
else
|
|
if sSideLk == 'R' then
|
|
EgtRotate( nGrooveId, ORIG(), Z_AX(), 90 )
|
|
else
|
|
EgtRotate( nGrooveId, ORIG(), Z_AX(), -90 )
|
|
end
|
|
end
|
|
end
|
|
|
|
EgtMove( nGrooveId, ptPos - ORIG())
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveGroove( tGroove, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptRef
|
|
local dPosX = DGD.dW / 2
|
|
local dPosY = 0
|
|
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
-- se è ad angoolo ricalcolo la posizione
|
|
if DGD.Tpa then
|
|
-- se è applicato su lato dritto piatto
|
|
if tGroove.side == 'top_flat' then
|
|
-- se lunghezza lato dritto esiste
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
-- se parte angolata sulla parte sinistra
|
|
if DGD.tProfs.top.angle > 0 then
|
|
dPosX = DGD.dW - ( DGD.tProfs.top.xdeltapos / 2)
|
|
-- altrimenti parte angolata sulla parte destra
|
|
else
|
|
dPosX = ( DGD.tProfs.top.xdeltapos / 2)
|
|
end
|
|
else
|
|
dPosX = DGD.dW / 2
|
|
end
|
|
-- altrimenti se applicato sul lato inclinato
|
|
elseif tGroove.side == 'top_angle' then
|
|
-- se lunghezza lato inclinato esiste
|
|
if ( DGD.dW - DGD.tProfs.top.xdeltapos) > 0 then
|
|
-- se parte angolata sulla parte sinistra
|
|
if DGD.tProfs.top.angle > 0 then
|
|
dPosX = ( DGD.dW - DGD.tProfs.top.xdeltapos) / 2
|
|
-- altrimenti parte angolata sulla parte destra
|
|
else
|
|
dPosX = DGD.dW - ( ( DGD.dW - DGD.tProfs.top.xdeltapos) / 2)
|
|
end
|
|
else
|
|
dPosX = DGD.dW / 2
|
|
end
|
|
else
|
|
dPosX = DGD.dW / 2
|
|
end
|
|
else
|
|
dPosX = DGD.dW / 2
|
|
end
|
|
-- se è ad angoolo e deve essere applicato sul lato inclinato
|
|
if DGD.Tpa and tGroove.side == 'top_angle' then
|
|
-- se lunghezza lato inclinato esiste
|
|
if ( DGD.dW - DGD.tProfs.top.xdeltapos) > 0 then
|
|
dPosY = DGD.dH - ( ( ( DGD.dW - DGD.tProfs.top.xdeltapos) / 2) * tan( abs( DGD.tProfs.top.angle)))
|
|
else
|
|
dPosY = DGD.dH
|
|
end
|
|
-- inserisco nota nella porta con id geometria se il groove è effettivamente applicato sul lato inclinato
|
|
if dPosY < DGD.dH then
|
|
-- verifico se la nota esiste già
|
|
local sAngGrooveNote = EgtGetInfo( DGD.PZ, 'GrooveOnAngle', 's')
|
|
-- se non è presente aggiungo
|
|
if not sAngGrooveNote then
|
|
sAngGrooveNote = EgtNumToString( tGroove.geom, 0)
|
|
else
|
|
sAngGrooveNote = sAngGrooveNote .. ',' .. EgtNumToString( tGroove.geom, 0)
|
|
end
|
|
EgtSetInfo( DGD.PZ, 'GrooveOnAngle', sAngGrooveNote)
|
|
end
|
|
else
|
|
dPosY = DGD.dH
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
dPosY = DGD.dH/2
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
dPosX = 0
|
|
else
|
|
dPosX = DGD.dW
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
dPosY = DGD.dH/2
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
dPosX = DGD.dW
|
|
else
|
|
dPosX = 0
|
|
end
|
|
else
|
|
dPosX = DGD.dW / 2
|
|
dPosY = 0
|
|
end
|
|
|
|
if bPushDr then -- se è una bevel up
|
|
if tGroove.groove_offset then
|
|
if DGD.GRS then
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_angle' or tGroove.side == 'top_flat') then
|
|
ptRef = EgtMP(nDoorTopTop)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
else
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotTop)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , DGD.dT)
|
|
end
|
|
else
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTopMid)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
else
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotMid)
|
|
end
|
|
ptPos = Point3d( EgtMP:getX(ptRef), EgtMP:getY(ptRef) , tGroove.groove_offset)
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , tGroove.groove_offset)
|
|
end
|
|
end
|
|
else
|
|
if DGD.GRS then
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTopTop)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
else
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotTop)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY, DGD.dT)
|
|
end
|
|
else
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTopMid)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
else
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotMid)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , (DGD.dT/2))
|
|
end
|
|
end
|
|
end
|
|
else -- se è bevel dw
|
|
if tGroove.groove_offset then
|
|
if DGD.GRS then
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTop)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeft)
|
|
else
|
|
ptRef = EgtMP(nDoorRight)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRight)
|
|
else
|
|
ptRef = EgtMP(nDoorLeft)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBot)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , 0)
|
|
end
|
|
else
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTopMid)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
else
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotMid)
|
|
end
|
|
ptPos = Point3d( EgtMP:getX(ptRef), EgtMP:getY(ptRef) , tGroove.groove_offset)
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , ( DGD.dT - tGroove.groove_offset))
|
|
end
|
|
end
|
|
else
|
|
if DGD.GRS then
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTop)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeft)
|
|
else
|
|
ptRef = EgtMP(nDoorRight)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRight)
|
|
else
|
|
ptRef = EgtMP(nDoorLeft)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBot)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , 0)
|
|
end
|
|
else
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
ptRef = EgtMP(nDoorTopMid)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
else
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
ptRef = EgtMP(nDoorRightMid)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftMid)
|
|
end
|
|
else
|
|
ptRef = EgtMP(nDoorBotMid)
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , (DGD.dT/2))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
MoveGeomGroove( tGroove.geom, sSideLk, ptPos, tGroove.side, bPushDr, DGD.tProfs.top.angle)
|
|
if bRemake then
|
|
if tGroove.side and ( tGroove.side == 'top' or tGroove.side == 'top_flat' or tGroove.side == 'top_angle') then
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), DGD.A5)
|
|
elseif tGroove.side and tGroove.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), (DGD.A3-90))
|
|
else
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), (DGD.A8-90))
|
|
end
|
|
elseif tGroove.side and tGroove.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), (DGD.A8-90))
|
|
else
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), (DGD.A3-90))
|
|
end
|
|
else
|
|
EgtRotate( tGroove.geom, ptPos, Z_AX(), DGD.A2)
|
|
end
|
|
end
|
|
-- creo estrusi e superfici piane delle geometrie passanti
|
|
local nGId = EgtGetFirstNameInGroup( tGroove.geom, 'BOXGROOVE')
|
|
if nGId then
|
|
AddSurfTmByExtrusion( tGroove.geom, nGId, true, nil, true)
|
|
-- sposto gli estrusi e le superfici piane nel layer solid
|
|
AddFlatSurf( tGroove.geom, tGroove.geom)
|
|
EgtErase(nGId)
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : functions for RABBET ***
|
|
-----------------------------------------------------------------------------------------
|
|
local function MoveGeomRabbet( nRabbetId, sSideLk, bPushDr, ptPos)
|
|
|
|
local nRotX
|
|
local nRotY
|
|
local nRotZ
|
|
|
|
if DGD.sFrame then
|
|
-- se frame lock or frame hinge on left
|
|
if (( DGD.sFrame == 'L' or DGD.sFrame == 'LE') and sSideLk == 'L') or
|
|
(( DGD.sFrame == 'H' or DGD.sFrame == 'HE') and sSideLk == 'R') then
|
|
|
|
EgtRotate( nRabbetId, ORIG(), Y_AX(), 90 )
|
|
|
|
if DGD.SIDE == 'top' then
|
|
nRotX = 0
|
|
elseif DGD.SIDE == 'bottom' then
|
|
nRotX = 180
|
|
else
|
|
if bPushDr then
|
|
nRotX = -90
|
|
else
|
|
nRotX = 90
|
|
end
|
|
end
|
|
|
|
if nRotX ~= 0 then
|
|
EgtRotate( nRabbetId, ORIG(), X_AX(), nRotX)
|
|
end
|
|
-- se frame lock or frame hinge on right
|
|
elseif (( DGD.sFrame == 'L' or DGD.sFrame == 'LE') and sSideLk == 'R') or
|
|
(( DGD.sFrame == 'H' or DGD.sFrame == 'HE') and sSideLk == 'L') then
|
|
|
|
EgtRotate( nRabbetId, ORIG(), Y_AX(), -90 )
|
|
|
|
if DGD.SIDE == 'top' then
|
|
nRotX = 0
|
|
elseif DGD.SIDE == 'bottom' then
|
|
nRotX = 180
|
|
else
|
|
if bPushDr then
|
|
nRotX = -90
|
|
else
|
|
nRotX = 90
|
|
end
|
|
end
|
|
|
|
if nRotX ~= 0 then
|
|
EgtRotate( nRabbetId, ORIG(), X_AX(), nRotX)
|
|
end
|
|
-- se frame top
|
|
elseif DGD.nTypePz == 5 then
|
|
|
|
EgtRotate( nRabbetId, ORIG(), X_AX(), 90 )
|
|
|
|
if DGD.SIDE == 'top' then
|
|
nRotY = 90
|
|
elseif DGD.SIDE == 'bottom' then
|
|
nRotY = -90
|
|
else
|
|
if bPushDr then
|
|
nRotY = 180
|
|
else
|
|
nRotY = 0
|
|
end
|
|
end
|
|
|
|
if nRotY ~= 0 then
|
|
EgtRotate( nRabbetId, ORIG(), Y_AX(), nRotY)
|
|
end
|
|
-- frame bottom
|
|
else
|
|
|
|
EgtRotate( nRabbetId, ORIG(), X_AX(), -90 )
|
|
|
|
if DGD.SIDE == 'top' then
|
|
nRotY = -90
|
|
elseif DGD.SIDE == 'bottom' then
|
|
nRotY = 90
|
|
else
|
|
if bPushDr then
|
|
nRotY = 0
|
|
else
|
|
nRotY = 180
|
|
end
|
|
end
|
|
|
|
if nRotY ~= 0 then
|
|
EgtRotate( nRabbetId, ORIG(), Y_AX(), nRotY)
|
|
end
|
|
end
|
|
else
|
|
-- se porta a tirare il rabbet va sotto
|
|
if not bPushDr then
|
|
EgtRotate( nRabbetId, ORIG(), Y_AX(), 180 )
|
|
end
|
|
|
|
if DGD.SIDE == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
nRotZ = 90
|
|
else
|
|
nRotZ = -90
|
|
end
|
|
elseif DGD.SIDE == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
nRotZ = -90
|
|
else
|
|
nRotZ = 90
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
nRotZ = 180
|
|
elseif DGD.SIDE == 'top' then
|
|
nRotZ = 0
|
|
end
|
|
|
|
if nRotZ ~= 0 then
|
|
EgtRotate( nRabbetId, ORIG(), Z_AX(), nRotZ )
|
|
end
|
|
end
|
|
|
|
EgtMove( nRabbetId, ptPos - ORIG())
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function CalcCommonFramePos( sSideLk, bPushDr)
|
|
|
|
local dPosX, dPosY, dPosZ
|
|
|
|
if DGD.sFrame == 'L' or DGD.sFrame == 'LE' then -- se frame lock
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = DGD.dW
|
|
else
|
|
dPosX = 0
|
|
end
|
|
dPosY = DGD.dH/2
|
|
elseif DGD.sFrame == 'H' or DGD.sFrame == 'HE' then -- se frame hinge
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = 0
|
|
else
|
|
dPosX = DGD.dW
|
|
end
|
|
dPosY = DGD.dH/2
|
|
else -- se frame top o bottom
|
|
dPosX = DGD.dW / 2
|
|
if DGD.nTypePz == 5 then -- se frame top
|
|
dPosY = 0
|
|
else
|
|
dPosY = DGD.dH
|
|
end
|
|
end
|
|
|
|
if bPushDr then
|
|
dPosZ = 0
|
|
else
|
|
dPosZ = DGD.dT
|
|
end
|
|
|
|
return dPosX, dPosY, dPosZ
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveRabbet( tRabbet, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptRef
|
|
local dPosX
|
|
local dPosY
|
|
local dPosZ
|
|
|
|
-- per i frame la posizione della rabbet sia su lato hinge che lock portano sempre allo spesso lato
|
|
if tRabbet.side == 'hinge' then
|
|
if DGD.sFrame then
|
|
dPosX,dPosY,dPosZ = CalcCommonFramePos( sSideLk, bPushDr)
|
|
else
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
dPosX = 0
|
|
else
|
|
dPosX = DGD.dW
|
|
end
|
|
dPosY = DGD.dH/2
|
|
end
|
|
elseif tRabbet.side == 'lock' then
|
|
if DGD.sFrame then
|
|
dPosX,dPosY,dPosZ = CalcCommonFramePos( sSideLk, bPushDr)
|
|
else
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
dPosX = DGD.dW
|
|
else
|
|
dPosX = 0
|
|
end
|
|
dPosY = DGD.dH/2
|
|
end
|
|
elseif tRabbet.side == 'top' then
|
|
if DGD.sFrame then
|
|
if DGD.sFrame == 'L' or DGD.sFrame == 'LE' then -- se frame lock
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = DGD.dW
|
|
else
|
|
dPosX = 0
|
|
end
|
|
dPosY = DGD.dH
|
|
elseif DGD.sFrame == 'H' or DGD.sFrame == 'HE' then -- se frame hinge
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = 0
|
|
else
|
|
dPosX = DGD.dW
|
|
end
|
|
dPosY = DGD.dH
|
|
elseif DGD.nTypePz == 5 then -- se frame top
|
|
dPosX = DGD.dW
|
|
dPosY = 0
|
|
else -- frame bottom
|
|
dPosX = DGD.dW
|
|
dPosY = DGD.dH
|
|
end
|
|
dPosZ = DGD.dT / 2
|
|
else
|
|
dPosX = DGD.dW/2
|
|
dPosY = DGD.dH
|
|
end
|
|
elseif tRabbet.side == 'bottom' then
|
|
if DGD.sFrame then
|
|
if DGD.sFrame == 'L' or DGD.sFrame == 'LE' then -- se frame lock
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = DGD.dW
|
|
else
|
|
dPosX = 0
|
|
end
|
|
dPosY = 0
|
|
elseif DGD.sFrame == 'H' or DGD.sFrame == 'HE' then -- se frame hinge
|
|
if sSideLk == 'L' then -- se lock a sx
|
|
dPosX = 0
|
|
else
|
|
dPosX = DGD.dW
|
|
end
|
|
dPosY = 0
|
|
elseif DGD.nTypePz == 5 then -- se frame top
|
|
dPosX = 0
|
|
dPosY = 0
|
|
else
|
|
dPosX = 0
|
|
dPosY = DGD.dH
|
|
end
|
|
dPosZ = DGD.dT / 2
|
|
else
|
|
dPosX = DGD.dW/2
|
|
dPosY = 0
|
|
end
|
|
end
|
|
|
|
if not DGD.sFrame then
|
|
if bPushDr then
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
dPosZ = 0
|
|
else
|
|
dPosZ = DGD.dT
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
dPosZ = DGD.dT
|
|
else
|
|
dPosZ = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
if bRemake then
|
|
if bPushDr then -- se è una bevel up
|
|
if tRabbet.side and tRabbet.side == 'top' then
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorTop)
|
|
else
|
|
ptRef = EgtMP(nDoorTopTop)
|
|
end
|
|
elseif tRabbet.side and tRabbet.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorLeft)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorRight)
|
|
else
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
end
|
|
end
|
|
elseif tRabbet.side and tRabbet.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorRight)
|
|
else
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorLeft)
|
|
else
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
end
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorBot)
|
|
else
|
|
ptRef = EgtMP(nDoorBotTop)
|
|
end
|
|
end
|
|
else -- se è bevel dw
|
|
if tRabbet.side and tRabbet.side == 'top' then
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorTopTop)
|
|
else
|
|
ptRef = EgtMP(nDoorTop)
|
|
end
|
|
elseif tRabbet.side and tRabbet.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
else
|
|
ptRef = EgtMP(nDoorLeft)
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
else
|
|
ptRef = EgtMP(nDoorRight)
|
|
end
|
|
end
|
|
elseif tRabbet.side and tRabbet.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorRightTop)
|
|
else
|
|
ptRef = EgtMP(nDoorRight)
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorLeftTop)
|
|
else
|
|
ptRef = EgtMP(nDoorLeft)
|
|
end
|
|
end
|
|
else
|
|
if tRabbet.oppo and tRabbet.oppo == 1 then
|
|
ptRef = EgtMP(nDoorBotTop)
|
|
else
|
|
ptRef = EgtMP(nDoorBot)
|
|
end
|
|
end
|
|
end
|
|
ptPos = ptRef
|
|
else
|
|
ptPos = Point3d( dPosX, dPosY , dPosZ)
|
|
end
|
|
MoveGeomRabbet( tRabbet.geom, sSideLk, bPushDr, ptPos)
|
|
if bRemake then
|
|
if tRabbet.side and tRabbet.side == 'top' then
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), DGD.A5)
|
|
elseif tRabbet.side and tRabbet.side == 'hinge' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), (DGD.A3-90))
|
|
else
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), (DGD.A8-90))
|
|
end
|
|
elseif tRabbet.side and tRabbet.side == 'lock' then
|
|
if sSideLk == 'R' then -- se serratura a destra
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), (DGD.A8-90))
|
|
else
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), (DGD.A3-90))
|
|
end
|
|
else
|
|
EgtRotate( tRabbet.geom, ptPos, Z_AX(), DGD.A2)
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveEPT( tEPT, sSideLk, bPushDr)
|
|
|
|
local ptPos
|
|
local ptProbe
|
|
local ptFromExt
|
|
local ptRef
|
|
local dPosX
|
|
local dPosXProbe
|
|
local dXFromExt
|
|
local dPosY
|
|
local dPosZ = 0
|
|
local dDeltaPos = 0
|
|
local sDeltaPos
|
|
local nDeltaX = 0
|
|
local nExtraAngle = 0
|
|
local nAngleBase
|
|
local nRadBase
|
|
|
|
if DGD.sFrame then
|
|
sSideLk = EgtIf( sSideLk == 'L', 'R', 'L')
|
|
end
|
|
|
|
if DGD.tProfs.hingeedge.trimming == 'BD' or DGD.tProfs.hingeedge.trimming == 'BU' or
|
|
DGD.tProfs.hingeedge.trimming == 'BDEB' or DGD.tProfs.hingeedge.trimming == 'BUEB' then
|
|
nExtraAngle = 3
|
|
nDeltaX = tEPT.back_set * TAN3
|
|
end
|
|
|
|
-- by DGC.Bwd setting set to 0 the nDeltaX parameter
|
|
if DGC.Bwd and DGC.Bwd == 2 then
|
|
nDeltaX = 0
|
|
end
|
|
|
|
sDeltaPos = EgtGetInfo( tEPT.geom, 'DeltaPos')
|
|
if sDeltaPos then
|
|
dDeltaPos = tonumber( sDeltaPos)
|
|
end
|
|
|
|
if bRemake then
|
|
nAngleBase = atan(nDeltaX/(tEPT.position+dDeltaPos))
|
|
nRadBase = sqrt((nDeltaX*nDeltaX)+((tEPT.position+dDeltaPos)*(tEPT.position+dDeltaPos)))
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
ptRef = DGD.PmaxTop
|
|
dPosY = ptRef:getY()+((tEPT.position+dDeltaPos)*sin(DGD.A7))
|
|
else
|
|
ptRef = DGD.PminTop
|
|
dPosY = ptRef:getY()+((tEPT.position+dDeltaPos)*sin(DGD.A4))
|
|
end
|
|
else
|
|
dPosY = DGD.dH - tEPT.position - dDeltaPos
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra: RH, RHR, ...
|
|
if DGD.sFrame then
|
|
dPosX = DGD.dW - nDeltaX - DGD.dZedExtFrame
|
|
dXFromExt = DGD.dW - DGD.dZedExtFrame
|
|
else
|
|
if bRemake then
|
|
dPosX = ptRef:getX()+(nRadBase*cos(DGD.A7-nAngleBase))
|
|
dXFromExt = dPosX
|
|
else
|
|
dPosX = DGD.dW - nDeltaX
|
|
dXFromExt = DGD.dW
|
|
end
|
|
end
|
|
dPosXProbe = dPosX - DGD.DPR
|
|
else -- serratura a destra
|
|
if DGD.sFrame then
|
|
dPosX = nDeltaX + DGD.dZedExtFrame
|
|
dXFromExt = DGD.dZedExtFrame
|
|
else
|
|
if bRemake then
|
|
dPosX = ptRef:getX()+(nRadBase*cos(DGD.A4+nAngleBase))
|
|
dXFromExt = dPosX
|
|
else
|
|
dPosX = nDeltaX
|
|
dXFromExt = 0
|
|
end
|
|
end
|
|
dPosXProbe = dPosX + DGD.DPR
|
|
end
|
|
|
|
if bPushDr then
|
|
dPosZ = tEPT.back_set
|
|
else
|
|
dPosZ = DGD.dT - tEPT.back_set
|
|
end
|
|
|
|
ptPos = Point3d( dPosX, dPosY, dPosZ)
|
|
ptProbe = Point3d( dPosXProbe, dPosY, 0)
|
|
ptFromExt = Point3d( dXFromExt, dPosY, 0)
|
|
|
|
MoveGeometryHng( 'ept', tEPT.geom, sSideLk, bPushDr, ptPos, nExtraAngle)
|
|
|
|
if bRemake then
|
|
EgtRotate( tEPT.geom, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A8, DGD.A3)-90))
|
|
end
|
|
InsertProbeGeom( tEPT.geom, ptProbe, ptFromExt, 17, 1)
|
|
end
|
|
|
|
-----------------------------------------------------------------------------------------
|
|
-- *** Geometric processing : functions for FACE DECORATION ***
|
|
-----------------------------------------------------------------------------------------
|
|
local function MoveGeomDecoration( nGeomId, sFace, sSideLk)
|
|
|
|
local ptPos
|
|
local ptRef
|
|
local dZedPos = 0
|
|
|
|
local bMirror = ( EgtGetInfo( nGeomId, 'Mirror', 'i') ~= 0)
|
|
local dRotToHinges = EgtGetInfo( nGeomId, 'Rotate', 'd') or 0
|
|
|
|
local b3Box = EgtGetBBox( nGeomId, GDB_BB.STANDARD)
|
|
-- sistemo per eventuale rotazione
|
|
if not bMirror and abs( dRotToHinges) > GEO.EPS_ANG_SMALL then
|
|
-- eseguo rotazione
|
|
local dAngRot = EgtIf( sSideLk == 'L', -dRotToHinges, dRotToHinges)
|
|
if string.lower( sFace) == 'secure' then dAngRot = -dAngRot end
|
|
local nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtRotate( nNewEnt, b3Box:getCenter(), Z_AX(), dAngRot)
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
local b3NewBox = EgtGetBBox( nGeomId, GDB_BB.STANDARD)
|
|
-- riporto in posizione
|
|
local vtMove = b3Box:getMin() - b3NewBox:getMin()
|
|
nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtMove( nNewEnt, vtMove)
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
-- aggiorno box
|
|
b3Box = EgtGetBBox( nGeomId, GDB_BB.STANDARD)
|
|
end
|
|
|
|
if string.lower( sFace) == 'keyway' then -- se specificato face su lato keyway (davanti)
|
|
dZedPos = DGD.dT
|
|
elseif string.lower( sFace) == 'secure' then -- se specificato face su lato secure (dietro)
|
|
-- faccio il mirror di tutte le geometrie rispetto al piano XY
|
|
local nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtMirror( nNewEnt, ORIG(), Z_AX())
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
-- se non richiesto mirror, per annullarne l'effetto
|
|
if not bMirror then
|
|
local nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtMirror( nNewEnt, Point3d( b3Box:getCenter():getX(), 0, 0), X_AX())
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
end
|
|
end
|
|
|
|
if sSideLk == 'L' then -- se serratura a sinistra
|
|
if bRemake then
|
|
ptRef = DGD.PminBot
|
|
ptPos = Point3d( ptRef:getX(), ptRef:getY(), dZedPos)
|
|
else
|
|
ptPos = Point3d( 0, 0, dZedPos)
|
|
end
|
|
else -- serratura a destra
|
|
if bRemake then
|
|
ptRef = DGD.PmaxBot
|
|
ptPos = Point3d( ptRef:getX(), ptRef:getY(), dZedPos)
|
|
else
|
|
ptPos = Point3d( DGD.dW, 0, dZedPos)
|
|
end
|
|
-- se ammesso, faccio il mirror di tutte le geometrie sul piano YZ
|
|
if bMirror then
|
|
local nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtMirror( nNewEnt, ORIG(), X_AX())
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
else
|
|
local vtMove = Vector3d( - 2 * b3Box:getCenter():getX(), 0, 0)
|
|
local nNewEnt = EgtGetFirstInGroup( nGeomId)
|
|
while nNewEnt do
|
|
EgtMove( nNewEnt, vtMove)
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
end
|
|
end
|
|
|
|
EgtMove( nGeomId, ptPos - ORIG())
|
|
|
|
if bRemake then
|
|
EgtRotate( nGeomId, ptPos, Z_AX(), ( EgtIf( sSideLk == 'L', DGD.A3, DGD.A8)-90))
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MoveCopyDecoration( tDecoration, sSideLk, bPushDr, bImport)
|
|
|
|
if not tDecoration then return end
|
|
if not tDecoration.geom then return end
|
|
|
|
local tCopyDec
|
|
|
|
if bImport then -- se importato
|
|
-- determino posizione della decorazione
|
|
local b3Box = EgtGetBBoxGlob( tDecoration.geom, GDB_BB.STANDARD)
|
|
local dX = 0
|
|
local dY = DGD.dH
|
|
if DGD.DFL then
|
|
dX = 0 + DGD.DFL
|
|
elseif DGD.DFH then
|
|
dX = DGD.dW - DGD.WIDTH - DGD.DFH
|
|
end
|
|
if DGD.DFT then
|
|
dY = DGD.dH - DGD.DFT
|
|
elseif DGD.DFB then
|
|
dY = 0 + DGD.LENGTH + DGD.DFB
|
|
end
|
|
local ptRef = Point3d( b3Box:getMin():getX(), b3Box:getMax():getY(), 0)
|
|
local ptPos = Point3d( dX, dY, 0)
|
|
-- muovo entità
|
|
local nNewEnt = EgtGetFirstInGroup( tDecoration.geom)
|
|
while nNewEnt do
|
|
EgtMove( nNewEnt, ptPos - ptRef)
|
|
-- sistemo lo spessore (negativo)
|
|
if tDecoration.depth then -- se ho spessore da ddf
|
|
EgtModifyCurveThickness( nNewEnt, -tDecoration.depth)
|
|
else -- non ho spessore
|
|
local dTh = EgtCurveThickness( nNewEnt) -- leggo spessore locale
|
|
if abs( dTh) > DGD.dT then -- se maggiore di spessore porta lo annullo
|
|
dTh = 0
|
|
end
|
|
EgtModifyCurveThickness( nNewEnt, -abs(dTh))
|
|
end
|
|
nNewEnt = EgtGetNext( nNewEnt)
|
|
end
|
|
-- eseguo trim con rettangolo porta aumentato di un poco (o con valori da disegno)
|
|
local dOffs, dOffL, dOffT, dOffH, dOffB = 20, 20, 20, 20, 20
|
|
local vOffs = EgtGetInfo( tDecoration.geom, 'TrimLTHB', 'vd')
|
|
if vOffs and #vOffs >= 4 then
|
|
dOffL = vOffs[1]
|
|
dOffT = vOffs[2]
|
|
dOffH = vOffs[3]
|
|
dOffB = vOffs[4]
|
|
end
|
|
local frRef = Frame3d( -dOffL, -dOffB, -dOffs)
|
|
local vtDiag = Vector3d( DGD.dW + dOffL + dOffH, DGD.dH + dOffB + dOffT, 2 * dOffs)
|
|
nNewEnt = EgtGetFirstInGroup( tDecoration.geom)
|
|
while nNewEnt do
|
|
local nNextEnt = EgtGetNext( nNewEnt)
|
|
local nCrvId, nCnt = EgtTrimFlatCurveWithBox( nNewEnt, frRef, vtDiag, true, true, GDB_RT.GLOB)
|
|
if nCnt > 1 then
|
|
for i = 2, nCnt do
|
|
local ptStart = EgtSP( nCrvId + i - 1, nCrvId)
|
|
EgtAddCurveCompoLine( nCrvId, ptStart, true, GDB_RT.LOC)
|
|
EgtAddCurveCompoCurve( nCrvId, nCrvId + i - 1, true, true)
|
|
end
|
|
end
|
|
EgtCloseCurveCompo( nCrvId)
|
|
nNewEnt = nNextEnt
|
|
end
|
|
end
|
|
|
|
if string.lower(DGD.FACE) == 'both' then -- se specificato su entrambe i lati faccio la copia
|
|
tCopyDec = EgtCopyGlob( tDecoration.geom, DGD.PZ)
|
|
MoveGeomDecoration( tDecoration.geom, 'secure', sSideLk)
|
|
if tCopyDec then
|
|
MoveGeomDecoration( tCopyDec, 'keyway', sSideLk)
|
|
end
|
|
else
|
|
MoveGeomDecoration( tDecoration.geom, DGD.FACE, sSideLk)
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** General Geometric Processing ***
|
|
-----------------------------------------------------------------
|
|
local function InsertSize( nTypeGeom, sSideLock, ptMedArc, dPosXHead, dAggrXPos,
|
|
dAggrYPos, dAggrBackSet, dAggrOffset, bRefXFromDoor, bRefYFromDoor,
|
|
nNumGeom)
|
|
|
|
-- se si disegnano anche le geometrie di lavorazione esco
|
|
if DGD.MachEn > 0 then
|
|
return
|
|
end
|
|
|
|
local dXPos
|
|
local dXPosRef
|
|
local dYPos
|
|
local dYPosRef
|
|
local dDeltaXPos
|
|
local dExtraXPos
|
|
local dExtraYPos
|
|
local dDeltaXValue
|
|
local bRigth
|
|
local bTop
|
|
local bCenter
|
|
local dBack
|
|
local dPosition
|
|
local nUp
|
|
local nRigth
|
|
|
|
-- tipo door
|
|
if nTypeGeom == 0 then
|
|
local DoorLayerDim
|
|
if DGD.tProfs.top.radius then
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(DGD.dW,0,0), Point3d(DGD.dW,DGD.dH,0), DGD.dH, false, 0, 1, BLACK())
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(0,0,0), Point3d(DGD.dW,0,0), DGD.dW, true, 0, 0, BLACK())
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra), ptMedArc, DGD.tProfs.top.radius, false, 0, 0, BLACK(), true)
|
|
elseif DGD.tProfs.top.angle then
|
|
if DGD.tProfs.top.angle > 0 then
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(DGD.dW,0,0), Point3d(DGD.dW,DGD.dH,0), DGD.dH, false, 0, 1, BLACK())
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d((DGD.dW-DGD.tProfs.top.xdeltapos),DGD.dH,0), Point3d(DGD.dW,DGD.dH,0), DGD.tProfs.top.xdeltapos, true, 1, 0, BLACK())
|
|
end
|
|
-- quoto angolo
|
|
-- DGD.DIM_DOOR = true -- per abilitare le quote nell'EgtCam5
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d((DGD.dW-DGD.tProfs.top.xdeltapos),DGD.dH,0), 180, DGD.tProfs.top.angle, true, 0, 1, BLACK(), false, '°', true)
|
|
-- DGD.DIM_DOOR = nil -- per abilitare le quote nell'EgtCam5
|
|
else
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(0,0,0), Point3d(0,DGD.dH,0), DGD.dH, false, 0, 0, BLACK())
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(0,DGD.dH,0), Point3d(DGD.tProfs.top.xdeltapos,DGD.dH,0), DGD.tProfs.top.xdeltapos, true, 1, 0, BLACK())
|
|
end
|
|
-- quoto angolo
|
|
-- DGD.DIM_DOOR = true -- per abilitare le quote nell'EgtCam5
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(DGD.tProfs.top.xdeltapos,DGD.dH,0), 0, DGD.tProfs.top.angle, true, 0, 1, BLACK(), false, '°', true)
|
|
-- DGD.DIM_DOOR = nil -- per abilitare le quote nell'EgtCam5
|
|
end
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(0,0,0), Point3d(DGD.dW,0,0), DGD.dW, true, 0, 0, BLACK())
|
|
else
|
|
-- DGD.DIM_DOOR = true -- per abilitare le quote nell'EgtCam5
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(DGD.dW,0,0), Point3d(DGD.dW,DGD.dH,0), DGD.dH, false, 0, 1, BLACK())
|
|
DoorLayerDim = AssignSize( DGD.PZ, DoorLayerDim, nTypePiece, 0, Point3d(0,0,0), Point3d(DGD.dW,0,0), DGD.dW, true, 0, 0, BLACK())
|
|
-- DGD.DIM_DOOR = nil -- per abilitare le quote nell'EgtCam5
|
|
--debug
|
|
-- if nTypePiece == 5 then
|
|
-- EgtSaveFile( sNgeFile)
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
-- end
|
|
end
|
|
-- tipo vision
|
|
elseif nTypeGeom == 1 then
|
|
dXPos = 0
|
|
dYPos = EgtIf( DGD.TOP_RAIL, DGD.TOP_RAIL, DGD.CENTER_FROM_TOP) or 0
|
|
dDeltaXPos = EgtIf( DGD.LOCK_STYLE, DGD.LOCK_STYLE, DGD.CENTER_FROM_LOCK) or 0
|
|
nRigth = 0
|
|
dBack = 1
|
|
bCenter = DGD.POINTAPP == 'center'
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
dXPosRef = dXPos
|
|
if bCenter then
|
|
dXPos = DGD.dW / 2
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPosRef,DGD.dH,0), Point3d((dXPos+(dDeltaXPos*dBack)),(DGD.dH-dYPos),0), dYPos, false, 0, nRigth, GREEN())
|
|
-- quota lock stile
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d((dXPos+(dDeltaXPos*dBack)),(DGD.dH-dYPos),0), dDeltaXPos, true, 1, nRigth, GREEN())
|
|
elseif nTypeGeom == 2 then -- tipo louver
|
|
dXPos = 0
|
|
dYPos = DGD.BOTTOM_RAIL
|
|
dDeltaXPos = DGD.LOCK_STYLE
|
|
nRigth = 0
|
|
dBack = 1
|
|
bCenter = DGD.POINTAPP == 'center'
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
dXPosRef = dXPos
|
|
if bCenter then
|
|
dXPos = DGD.dW / 2
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPosRef,0,0), Point3d((dXPos+(dDeltaXPos*dBack)),dYPos,0), dYPos, false, 0, nRigth, GREEN())
|
|
-- quota lock stile
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,0,0), Point3d((dXPos+(dDeltaXPos*dBack)),dYPos,0), dDeltaXPos, true, 0, nRigth, GREEN())
|
|
elseif nTypeGeom == 3 then -- tipo lock
|
|
-- DGD.DIM_LOCK = true -- per abilitare le quote nell'EgtCam5
|
|
if not DGD.SIDE or DGD.SIDE == 'lock_top' or DGD.SIDE == 'lock_bottom' then
|
|
dXPos = 0
|
|
nUp = 1
|
|
nRigth = 0
|
|
dYPos = DGD.dH
|
|
dExtraYPos = dAggrYPos or 0
|
|
dBack = 1
|
|
dPosition = DGD.POSITION
|
|
dAggrXPos = dAggrXPos or 0
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
if DGD.SIDE == 'lock_bottom' then
|
|
nUp = 0
|
|
dYPos = 0
|
|
if bRefYFromDoor then
|
|
dPosition = 0
|
|
else
|
|
dPosition = -DGD.POSITION
|
|
end
|
|
elseif DGD.SIDE == 'lock_top' and bRefYFromDoor then
|
|
dExtraYPos = -dAggrYPos or 0
|
|
dPosition = 0
|
|
end
|
|
if not nNumGeom or nNumGeom == 1 then
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d(dXPos,dYPos-dPosition,0), DGD.POSITION, false, nUp, nRigth, RED())
|
|
end
|
|
-- quota backset
|
|
local dLocBackSet = DGD.BACK_SET
|
|
if dAggrBackSet then
|
|
dLocBackSet = dAggrBackSet
|
|
end
|
|
-- se offset Y presente
|
|
if abs(dExtraYPos) > 0 then
|
|
local dOffsPoint = 0
|
|
if abs(dAggrXPos) > 0 then
|
|
-- se riferimengo globale in X quoto
|
|
if bRefXFromDoor then
|
|
dOffsPoint = dAggrXPos * EgtIf( sSideLock ~= 'L', 1, -1)
|
|
else
|
|
dOffsPoint = (dAggrXPos + dLocBackSet) * EgtIf( sSideLock ~= 'L', 1, -1)
|
|
end
|
|
end
|
|
-- se riferito a lato top-bottom
|
|
if bRefYFromDoor then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d(dXPos-dOffsPoint,dYPos+dExtraYPos,0), abs(dExtraYPos), false, nUp, nRigth, Color3d(64,128,128))
|
|
else
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos-dPosition,0), Point3d(dXPos-dOffsPoint,dYPos-dPosition+dExtraYPos,0), abs(dExtraYPos), false, nUp, nRigth, Color3d(64,128,128))
|
|
end
|
|
end
|
|
-- se riferimengo globale in X quoto
|
|
if bRefXFromDoor then
|
|
-- se offset esistente
|
|
if abs(dAggrXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos-dPosition+dExtraYPos,0), Point3d((dXPos+(dAggrXPos*dBack)), dYPos-dPosition+dExtraYPos,0), abs(dAggrXPos), true, -1, nRigth, Color3d(64,128,128), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
end
|
|
else
|
|
if dLocBackSet and dLocBackSet > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos-dPosition+dExtraYPos,0), Point3d((dXPos+(dLocBackSet*dBack)), dYPos-dPosition+dExtraYPos,0), dLocBackSet, true, -1, nRigth, RED(), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
end
|
|
-- se offset esistente
|
|
if abs(dAggrXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d((dXPos+(dLocBackSet*dBack)),dYPos-dPosition+dExtraYPos,0), Point3d((dXPos+((dLocBackSet+dAggrXPos)*dBack)), dYPos-dPosition+dExtraYPos,0), abs(dAggrXPos), true, -1, nRigth, Color3d(64,128,128), nil, EgtIf( not dLocBackSet or dLocBackSet == 0, '*', nil))
|
|
end
|
|
end
|
|
elseif DGD.SIDE == 'top' then
|
|
dXPos = 0
|
|
nUp = 1
|
|
nRigth = 0
|
|
dYPos = DGD.dH
|
|
dExtraXPos = dAggrXPos
|
|
dPosition = DGD.POSITION
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dPosition = -DGD.POSITION
|
|
dExtraXPos = -dAggrXPos
|
|
dBack = -1
|
|
end
|
|
if not nNumGeom or nNumGeom == 1 then
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dPosition),dYPos,0), DGD.POSITION, true, nUp, false, RED())
|
|
end
|
|
-- quota backset
|
|
local dLocBackSet = DGD.BACK_SET
|
|
if dAggrBackSet then
|
|
dLocBackSet = dAggrBackSet
|
|
end
|
|
-- se offset X presente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
local dOffsPoint = 0
|
|
if dAggrYPos and abs(dAggrYPos) > 0 then
|
|
-- se riferimengo globale in Y quoto
|
|
if bRefYFromDoor then
|
|
dOffsPoint = -dAggrYPos
|
|
else
|
|
dOffsPoint = -dLocBackSet+dAggrYPos
|
|
end
|
|
end
|
|
-- se riferito a lato lock
|
|
if bRefXFromDoor then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dExtraXPos),dYPos+dOffsPoint,0), abs(dExtraXPos), true, nUp, false, Color3d(64,128,128), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
else
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+dPosition,dYPos,0), Point3d((dXPos+dPosition+dExtraXPos),dYPos+dOffsPoint,0), abs(dExtraXPos), true, nUp, false, Color3d(64,128,128))
|
|
end
|
|
end
|
|
-- riassegno la posizione in base al flag di riferimento posizione globale in X
|
|
if bRefXFromDoor then
|
|
dPosition = 0
|
|
else
|
|
dPosition = DGD.POSITION
|
|
end
|
|
-- se riferimengo globale in Y quoto
|
|
if bRefYFromDoor then
|
|
-- se offset esistente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos-dAggrYPos,0), abs(dAggrYPos), false, -1, -1, Color3d(64,128,128))
|
|
end
|
|
else
|
|
-- se quota backset maggiore di 0
|
|
if dLocBackSet and dLocBackSet > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos-dLocBackSet,0), dLocBackSet, false, -1, -1, RED())
|
|
end
|
|
-- se offset esistente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos-dLocBackSet,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos-dLocBackSet+dAggrYPos,0), abs(dAggrYPos), false, -1, -1, Color3d(64,128,128))
|
|
end
|
|
end
|
|
-- quota offset (solo sui frame)
|
|
local dLocOffset = DGD.OFFSET
|
|
if dAggrOffset then
|
|
dLocOffset = dAggrOffset
|
|
end
|
|
if dLocOffset and dLocOffset > 0 and nTypePiece > 2 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(DGD.POSITION*dBack), 0, -DGD.dH), Point3d(dXPos+(DGD.POSITION*dBack), dLocOffset, -DGD.dH), dLocOffset, false, -1, -1, RED(), nil, nil, nil, GDB_FR.FRONT)
|
|
end
|
|
elseif DGD.SIDE == 'bottom' then
|
|
dXPos = 0
|
|
nUp = 0
|
|
nRigth = 0
|
|
dYPos = 0
|
|
dExtraXPos = dAggrXPos
|
|
dPosition = DGD.POSITION
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dPosition = -DGD.POSITION
|
|
dExtraXPos = -dAggrXPos
|
|
dBack = -1
|
|
end
|
|
if not nNumGeom or nNumGeom == 1 then
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dPosition),dYPos,0), DGD.POSITION, true, nUp, false, RED())
|
|
end
|
|
-- quota backset
|
|
local dLocBackSet = DGD.BACK_SET
|
|
if dAggrBackSet then
|
|
dLocBackSet = dAggrBackSet
|
|
end
|
|
-- se offset X presente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
local dOffsPoint = 0
|
|
if dAggrYPos and abs(dAggrYPos) > 0 then
|
|
-- se riferimengo globale in Y quoto
|
|
if bRefYFromDoor then
|
|
dOffsPoint = dAggrYPos
|
|
else
|
|
dOffsPoint = dLocBackSet+dAggrYPos
|
|
end
|
|
end
|
|
-- se riferito a lato lock
|
|
if bRefXFromDoor then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dExtraXPos),dYPos+dOffsPoint,0), abs(dExtraXPos), true, nUp, false, Color3d(64,128,128), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
else
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+dPosition,dYPos,0), Point3d((dXPos+dPosition+dExtraXPos),dYPos+dOffsPoint,0), abs(dExtraXPos), true, nUp, false, Color3d(64,128,128))
|
|
end
|
|
end
|
|
-- riassegno la posizione in base al flag di riferimento posizione globale in X
|
|
if bRefXFromDoor then
|
|
dPosition = 0
|
|
else
|
|
dPosition = DGD.POSITION
|
|
end
|
|
-- se riferimengo globale in Y quoto
|
|
if bRefYFromDoor then
|
|
-- se offset esistente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos+dAggrYPos,0), abs(dAggrYPos), false, -1, -1, Color3d(64,128,128))
|
|
end
|
|
else
|
|
-- se quota backset maggiore di 0
|
|
if dLocBackSet and dLocBackSet > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos+dLocBackSet,0), dLocBackSet, false, -1, -1, RED())
|
|
end
|
|
-- se quota esistente
|
|
if dExtraXPos and abs(dExtraXPos) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos+dLocBackSet,0), Point3d(dXPos+(dPosition*dBack)+dExtraXPos,dYPos+dLocBackSet+dAggrYPos,0), abs(dAggrYPos), false, -1, -1, Color3d(64,128,128))
|
|
end
|
|
end
|
|
-- quota offset (solo sui frame)
|
|
local dLocOffset = DGD.OFFSET
|
|
if dAggrOffset then
|
|
dLocOffset = dAggrOffset
|
|
end
|
|
if dLocOffset and dLocOffset > 0 and nTypePiece > 2 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos+(DGD.POSITION*dBack),dYPos,0), Point3d(dXPos+(DGD.POSITION*dBack),dYPos+dLocOffset,0), dLocOffset, false, -1, -1, RED(), nil, nil, nil, GDB_FR.FRONT)
|
|
end
|
|
end
|
|
-- DGD.DIM_LOCK = nil -- per abilitare le quote nell'EgtCam5
|
|
--debug
|
|
-- if nTypePiece == 5 then
|
|
-- EgtSaveFile( sNgeFile)
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
-- end
|
|
elseif nTypeGeom == 5 then -- tipo hinge
|
|
dXPos = 0
|
|
nRigth = 0
|
|
if sSideLock == 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
end
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.POSITION,0), DGD.POSITION, false, 0, nRigth, BLUE())
|
|
elseif nTypeGeom == 6 then -- tipo mail_slot
|
|
dXPos = DGD.dW
|
|
dYPos = DGD.BOTTOM_RAIL
|
|
dDeltaXPos = DGD.DELTA_CENTER
|
|
dDeltaXValue = DGD.DELTA_CENTER
|
|
nRigth = 1
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = 0
|
|
dDeltaXPos = -DGD.DELTA_CENTER
|
|
nRigth = 0
|
|
dBack = -1
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,0,0), Point3d(((DGD.dW/2)+dDeltaXPos),dYPos,0), dYPos, false, 0, nRigth, GREEN())
|
|
-- quota delta_center
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d((DGD.dW/2),0,0), Point3d(((DGD.dW/2)+dDeltaXPos),dYPos,0), dDeltaXValue, true, 0, nRigth, GREEN())
|
|
elseif nTypeGeom == 7 then -- tipo flush_pull
|
|
dXPos = 0
|
|
nRigth = 0
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.POSITION,0), DGD.POSITION, false, 0, nRigth, {221,0,0,100})
|
|
-- quota backset
|
|
if DGD.BACK_SET and DGD.BACK_SET > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH-DGD.POSITION,0), Point3d((dXPos+(DGD.BACK_SET*dBack)),DGD.dH-DGD.POSITION,0), DGD.BACK_SET, true, -1, bRigth, {221,0,0,100})
|
|
end
|
|
elseif nTypeGeom == 8 then -- tipo viewer
|
|
dXPos = DGD.dW
|
|
dYPos = DGD.BOTTOM_RAIL
|
|
dDeltaXPos = DGD.DELTA_CENTER
|
|
dDeltaXValue = DGD.DELTA_CENTER
|
|
nRigth = 1
|
|
bTop = DGD.SIDE and DGD.SIDE == 'top'
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = 0
|
|
dDeltaXPos = -DGD.DELTA_CENTER
|
|
nRigth = 0
|
|
dBack = -1
|
|
end
|
|
if not bTop then
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,0,0), Point3d(((DGD.dW/2)+dDeltaXPos),dYPos,0), dYPos, false, 0, nRigth, GREEN())
|
|
-- quota delta_center
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d((DGD.dW/2),0,0), Point3d(((DGD.dW/2)+dDeltaXPos),dYPos,0), dDeltaXValue, true, 0, nRigth, GREEN())
|
|
else
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(((DGD.dW/2)+dDeltaXPos),(DGD.dH-dYPos),0), dYPos, false, 0, nRigth, GREEN())
|
|
-- quota delta_center
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d((DGD.dW/2),DGD.dH,0), Point3d(((DGD.dW/2)+dDeltaXPos),(DGD.dH-dYPos),0), dDeltaXValue, true, 1, nRigth, GREEN())
|
|
end
|
|
elseif nTypeGeom == 9 then -- tipo rollerlatch
|
|
if DGD.SIDE == 'lock' then
|
|
dXPos = 0
|
|
nUp = 0
|
|
nRigth = 0
|
|
dYPos = DGD.dH
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d(dXPos,dYPos-DGD.POSITION,0), DGD.POSITION, false, nUp, nRigth, {17,255,17,100})
|
|
else
|
|
dXPos = 0
|
|
nUp = 1
|
|
dYPos = DGD.dH
|
|
dPosition = DGD.POSITION
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
dPosition = -DGD.POSITION
|
|
end
|
|
if DGD.SIDE ~= 'top' then
|
|
dYPos = 0
|
|
nUp = 0
|
|
end
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dPosition),dYPos,0), DGD.POSITION, true, nUp, false, {17,255,17,100})
|
|
end
|
|
elseif nTypeGeom == 10 then -- tipo edgepull
|
|
dXPos = 0
|
|
nRigth = 0
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.POSITION,0), DGD.POSITION, false, 0, nRigth, {193,0,0,100})
|
|
-- quota backset
|
|
if DGD.BACK_SET and DGD.BACK_SET > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH-DGD.POSITION,0), Point3d((dXPos+(DGD.BACK_SET*dBack)),DGD.dH-DGD.POSITION,0), DGD.BACK_SET, true, -1, nRigth, RED(), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
end
|
|
elseif nTypeGeom == 11 then -- tipo flushbolt
|
|
-- quoto solo gli extension
|
|
if string.lower(DGD.TYPE) == 'extension' then
|
|
dXPos = 0
|
|
dYPos = DGD.dH
|
|
nRigth = 0
|
|
dBack = 1
|
|
nUp = 1
|
|
dPosition = DGD.POSITION
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
if DGD.SIDE ~= 'top' then
|
|
dYPos = 0
|
|
nUp = 0
|
|
dPosition = -DGD.POSITION
|
|
end
|
|
-- quota top/bottom position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d(dXPos,dYPos-dPosition,0), DGD.POSITION, false, 0, nRigth, {147,0,0,100})
|
|
-- se presente cava di testa
|
|
if abs(dPosXHead) > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+(dPosXHead*dBack)),dYPos,0), dPosXHead, true, nUp, nRigth, {147,0,0,100}, nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
end
|
|
end
|
|
elseif nTypeGeom == 12 then -- tipo pivot
|
|
-- se tipo center hung o offset
|
|
if string.lower(DGD.TYPE) ~= 'offsetintermediate' then
|
|
dXPos = 0
|
|
dYPos = DGD.dH
|
|
nUp = 1
|
|
dPosition = DGD.POSITION
|
|
if sSideLock == 'L' then
|
|
dXPos = DGD.dW
|
|
dPosition = -DGD.POSITION
|
|
end
|
|
if DGD.SIDE ~= 'top' then
|
|
dYPos = 0
|
|
nUp = 0
|
|
end
|
|
-- quota top/bottom position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,dYPos,0), Point3d((dXPos+dPosition),dYPos,0), DGD.POSITION, true, nUp, false, {255,0,128,100})
|
|
else -- tipo offsetintermediate
|
|
dXPos = 0
|
|
nRigth = 0
|
|
if sSideLock == 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
end
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.POSITION,0), DGD.POSITION, false, 0, nRigth, {255,0,128,100})
|
|
end
|
|
elseif nTypeGeom == 14 then -- tipo strike
|
|
dXPos = 0
|
|
nRigth = 0
|
|
dBack = 1
|
|
if sSideLock ~= 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
dBack = -1
|
|
end
|
|
-- quota position
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.POSITION,0), DGD.POSITION, false, 0, nRigth, RED())
|
|
-- quota backset
|
|
if DGD.BACK_SET and DGD.BACK_SET > 0 then
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH-DGD.POSITION,0), Point3d((dXPos+(DGD.BACK_SET*dBack)),DGD.dH-DGD.POSITION,0), DGD.BACK_SET, true, -1, nRigth, RED(), nil, EgtIf( not DGC.Bwd or DGC.Bwd == 0, '*', nil))
|
|
end
|
|
elseif nTypeGeom == 17 then -- tipo ept
|
|
dXPos = 0
|
|
nRigth = 0
|
|
if sSideLock == 'L' then
|
|
dXPos = DGD.dW
|
|
nRigth = 1
|
|
end
|
|
DGD.tSizeLayer[nTypeGeom] = AssignSize( DGD.PZ, DGD.tSizeLayer[nTypeGeom], nTypePiece, nTypeGeom, Point3d(dXPos,DGD.dH,0), Point3d(dXPos,DGD.dH-DGD.TOPTOCL,0), DGD.TOPTOCL, false, 0, nRigth, {0,0,164,100})
|
|
end
|
|
end
|
|
|
|
|
|
-----------------------------------------------------------------
|
|
local function InsertGeom( tGeometries, sSideLock, bPushDoor, sTypeGeom)
|
|
|
|
local nCont = 1
|
|
local sFileExt
|
|
local sFileName
|
|
local sFilePath
|
|
local nErr, sErr
|
|
local bBox
|
|
local sPathLua
|
|
local sSubPath
|
|
local nTypeGeom
|
|
local bImport
|
|
local sImportType
|
|
local nGeomId
|
|
|
|
if not sTypeGeom then
|
|
return false
|
|
elseif string.lower(sTypeGeom) == 'vision' then
|
|
sSubPath = 'Compo\\VisionCutOuts\\'
|
|
nTypeGeom = 1
|
|
elseif string.lower(sTypeGeom) == 'louver' then
|
|
sSubPath = 'Compo\\LouverCutOuts\\'
|
|
nTypeGeom = 2
|
|
elseif string.lower(sTypeGeom) == 'lock' then
|
|
sSubPath = 'Compo\\Locks\\'
|
|
nTypeGeom = 3
|
|
elseif string.lower(sTypeGeom) == 'stopandcloser' then
|
|
sSubPath = 'Compo\\StopsAndClosers\\'
|
|
nTypeGeom = 4
|
|
elseif string.lower(sTypeGeom) == 'hinge' then
|
|
sSubPath = 'Compo\\Hinges\\'
|
|
nTypeGeom = 5
|
|
elseif string.lower(sTypeGeom) == 'mail' then
|
|
sSubPath = 'Compo\\MailSlots\\'
|
|
nTypeGeom = 6
|
|
elseif string.lower(sTypeGeom) == 'flush' then
|
|
sSubPath = 'Compo\\FlushPulls\\'
|
|
nTypeGeom = 7
|
|
elseif string.lower(sTypeGeom) == 'viewer' then
|
|
sSubPath = 'Compo\\Viewers\\'
|
|
nTypeGeom = 8
|
|
elseif string.lower(sTypeGeom) == 'rollerlatch' then
|
|
sSubPath = 'Compo\\RollerLatchs\\'
|
|
nTypeGeom = 9
|
|
elseif string.lower(sTypeGeom) == 'edgepull' then
|
|
sSubPath = 'Compo\\EdgePulls\\'
|
|
nTypeGeom = 10
|
|
elseif string.lower(sTypeGeom) == 'flushbolt' then
|
|
sSubPath = 'Compo\\FlushBolts\\'
|
|
nTypeGeom = 11
|
|
elseif string.lower(sTypeGeom) == 'pivot' then
|
|
sSubPath = 'Compo\\Pivots\\'
|
|
nTypeGeom = 12
|
|
elseif string.lower(sTypeGeom) == 'overhead' then
|
|
sSubPath = 'Compo\\OverHeads\\'
|
|
nTypeGeom = 13
|
|
elseif string.lower(sTypeGeom) == 'strike' then
|
|
sSubPath = 'Compo\\Strikes\\'
|
|
nTypeGeom = 14
|
|
elseif string.lower(sTypeGeom) == 'groove' then
|
|
sSubPath = 'Compo\\Groove\\'
|
|
nTypeGeom = 15
|
|
elseif string.lower(sTypeGeom) == 'rabbet' then
|
|
sSubPath = 'Compo\\Rabbets\\'
|
|
nTypeGeom = 16
|
|
elseif string.lower(sTypeGeom) == 'ept' then
|
|
sSubPath = 'Compo\\Epts\\'
|
|
nTypeGeom = 17
|
|
elseif string.lower(sTypeGeom) == 'facedecoration' then
|
|
sSubPath = 'Compo\\FaceDecoration\\'
|
|
nTypeGeom = 18
|
|
end
|
|
|
|
while nCont <= #tGeometries do
|
|
|
|
if nTypeGeom == 1 then -- se vision
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].shape
|
|
DGD.SPLIT = tGeometries[nCont].split
|
|
DGD.DIR = tGeometries[nCont].dir
|
|
if tGeometries[nCont].split or ( tGeometries[nCont].length and tGeometries[nCont].width) then
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
DGD.TOP_RAIL = tGeometries[nCont].top_rail
|
|
DGD.LOCK_STYLE = tGeometries[nCont].lock_stile
|
|
DGD.POINTAPP = tGeometries[nCont].door_center
|
|
DGD.RADIUS = tGeometries[nCont].radius
|
|
-- se split è assente
|
|
elseif tGeometries[nCont].split == nil then
|
|
-- setto anche variabili lunghezza e larghezza che sono a nil per evitare di mantenere precedenti settaggi delle stesse variabili
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
DGD.RADIUS = tGeometries[nCont].radius
|
|
DGD.CENTER_FROM_TOP = tGeometries[nCont].center_from_top
|
|
DGD.CENTER_FROM_LOCK = tGeometries[nCont].center_from_lock
|
|
DGD.POINTAPP = tGeometries[nCont].door_center
|
|
end
|
|
elseif nTypeGeom == 2 then -- se louver
|
|
if not tGeometries[nCont].shape then -- se non ho shape lancio il rect di default
|
|
sPathLua = sBaseDir .. sSubPath .. 'rect' -- con il louver c'è solo una forma rettangolare
|
|
else
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].shape
|
|
end
|
|
if tGeometries[nCont].length and tGeometries[nCont].width then
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
DGD.BOTTOM_RAIL = tGeometries[nCont].bottom_rail
|
|
DGD.LOCK_STYLE = tGeometries[nCont].lock_stile
|
|
DGD.POINTAPP = tGeometries[nCont].door_center
|
|
end
|
|
elseif nTypeGeom == 3 then -- se lock
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 4 then -- se stop_and_closer
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.POCKET_OFFSET = tGeometries[nCont].pocket_offset
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 5 then -- se hinge
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.THICKNESS = tGeometries[nCont].thickness
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
elseif nTypeGeom == 6 then -- se mail_slot
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
DGD.BOTTOM_RAIL = tGeometries[nCont].bottom_rail
|
|
DGD.DELTA_CENTER = tGeometries[nCont].delta_center
|
|
elseif nTypeGeom == 7 then -- se flush_pull
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.DEPTH = tGeometries[nCont].depth
|
|
DGD.FACE = tGeometries[nCont].face
|
|
elseif nTypeGeom == 8 then -- se viewer
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.BOTTOM_RAIL = tGeometries[nCont].bottom_rail
|
|
DGD.DELTA_CENTER = tGeometries[nCont].delta_center
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
elseif nTypeGeom == 9 then -- se roller_latch
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 10 then -- se edge_pull
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
elseif nTypeGeom == 11 then -- se flush_bolt
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.TYPE = tGeometries[nCont].type
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 12 then -- se pivot
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.TYPE = tGeometries[nCont].type
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.RADIUS = tGeometries[nCont].radius
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.DEPTH_F = tGeometries[nCont].depth_f
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 13 then -- se overhead
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.POCKPOS = tGeometries[nCont].pockpos
|
|
DGD.POCKLENGTH = tGeometries[nCont].pocklength
|
|
DGD.POCKET_OFFSET = tGeometries[nCont].pocket_offset
|
|
DGD.ARMPOS = tGeometries[nCont].armpos
|
|
DGD.ARMLENGTH = tGeometries[nCont].armlength
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 14 then -- se strike
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.BACK_SET = tGeometries[nCont].back_set
|
|
DGD.POSITION = tGeometries[nCont].position
|
|
DGD.OFFSET = tGeometries[nCont].offset
|
|
DGD.OTHERD = tGeometries[nCont].other_door
|
|
elseif nTypeGeom == 15 then -- se groove
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.TYPE = tGeometries[nCont].type
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
DGD.FST = tGeometries[nCont].fst
|
|
DGD.HST = tGeometries[nCont].hst
|
|
DGD.LST = tGeometries[nCont].lst
|
|
if DGD.SIDE == 'hinge' or DGD.SIDE == 'lock' then
|
|
if bRemake then
|
|
if DGD.SIDE == 'lock' then
|
|
DGD.LENGTH = EgtIf( sSideLock == 'L', max(DGD.L2Top,DGD.L2), max(DGD.L4Top,DGD.L4))
|
|
else
|
|
DGD.LENGTH = EgtIf( sSideLock == 'L', max(DGD.L4Top,DGD.L4), max(DGD.L2Top,DGD.L2))
|
|
end
|
|
else
|
|
DGD.LENGTH = DGD.dH -- setto come altezza porta
|
|
end
|
|
if DGD.HST and DGD.LST and DGD.TYPE == 'center' then
|
|
DGD.LENGTH = DGD.LENGTH - DGD.HST - DGD.LST
|
|
end
|
|
else
|
|
if bRemake then
|
|
if DGD.SIDE == 'top' or DGD.SIDE == 'top_angle' or DGD.SIDE == 'top_flat' then
|
|
DGD.LENGTH = max(DGD.L3Top,DGD.L3)
|
|
else
|
|
DGD.LENGTH = max(DGD.L1Top,DGD.L1)
|
|
end
|
|
else
|
|
-- se lato top ed è ad angoolo ricalcolo il lato
|
|
if ( DGD.SIDE == 'top_flat' or DGD.SIDE == 'top_angle') and DGD.Tpa then
|
|
-- se devo applicare il groove su lato diritto corto
|
|
if DGD.SIDE == 'top_flat' then
|
|
-- se lunghezza lato dritto esiste
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
DGD.LENGTH = DGD.tProfs.top.xdeltapos
|
|
else
|
|
DGD.LENGTH = DGD.dW -- setto di base come larghezza porta
|
|
end
|
|
-- altrimenti è da applicare su lato inclinato
|
|
else
|
|
if ( DGD.dW - DGD.tProfs.top.xdeltapos) > 0 then
|
|
DGD.LENGTH = ( DGD.dW - DGD.tProfs.top.xdeltapos) / cos(abs(DGD.tProfs.top.angle))
|
|
else
|
|
DGD.LENGTH = DGD.dW -- setto di base come larghezza porta
|
|
end
|
|
end
|
|
else
|
|
DGD.LENGTH = DGD.dW -- setto di base come larghezza porta
|
|
end
|
|
end
|
|
DGD.SIDELENGTH = DGD.LENGTH
|
|
if DGD.HST and DGD.LST then
|
|
-- se lato top ed è ad angoolo ed è presente lato piano ricalcolo il lato
|
|
-- if DGD.SIDE == 'top_flat' and DGD.Tpa and DGD.tProfs.top.xdeltapos > 0 then
|
|
-- -- se parte angolata sulla parte sinistra
|
|
-- if DGD.tProfs.top.angle > 0 then
|
|
-- -- se lato losk a sinsitra
|
|
-- if DGD.Lock == 'L' then
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.HST
|
|
-- DGD.LST = 0
|
|
-- else
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.LST
|
|
-- DGD.HST = 0
|
|
-- end
|
|
-- -- altrimenti parte angolata sulla parte destra
|
|
-- else
|
|
-- -- se lato losk a sinsitra
|
|
-- if DGD.Lock == 'L' then
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.LST
|
|
-- DGD.HST = 0
|
|
-- else
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.HST
|
|
-- DGD.LST = 0
|
|
-- end
|
|
-- end
|
|
-- elseif DGD.SIDE == 'top_angle' and DGD.Tpa and ( DGD.dW - DGD.tProfs.top.xdeltapos) > 0 then
|
|
-- -- se parte angolata sulla parte sinistra
|
|
-- if DGD.tProfs.top.angle > 0 then
|
|
-- -- se lato losk a sinsitra
|
|
-- if DGD.Lock == 'L' then
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.LST
|
|
-- DGD.HST = 0
|
|
-- else
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.HST
|
|
-- DGD.LST = 0
|
|
-- end
|
|
-- -- altrimenti parte angolata sulla parte destra
|
|
-- else
|
|
-- -- se lato losk a sinsitra
|
|
-- if DGD.Lock == 'L' then
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.HST
|
|
-- DGD.LST = 0
|
|
-- else
|
|
-- -- ricalcolo il lato
|
|
-- DGD.LENGTH = DGD.LENGTH - DGD.LST
|
|
-- DGD.HST = 0
|
|
-- end
|
|
-- end
|
|
-- else
|
|
DGD.LENGTH = DGD.LENGTH - DGD.HST - DGD.LST
|
|
-- end
|
|
end
|
|
-- se larghezza porta è large width setto flag
|
|
if DGD.Part and DGD.Part > 0 and DGD.dW > DGD.Part then
|
|
DGD.bPart = true
|
|
end
|
|
end
|
|
if DGD.FST then
|
|
tGeometries[nCont].width = DGD.dT - DGD.FST - DGD.FST
|
|
end
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
DGD.DEPTH = tGeometries[nCont].depth
|
|
DGD.GROOVE_OFFSET = tGeometries[nCont].groove_offset
|
|
elseif nTypeGeom == 16 then -- se rabbet
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.SIDE = tGeometries[nCont].side
|
|
if DGD.SIDE == 'hinge' or DGD.SIDE == 'lock' then
|
|
if bRemake then
|
|
if DGD.SIDE == 'lock' then
|
|
DGD.LENGTH = EgtIf( sSideLock == 'L', max(DGD.L2Top,DGD.L2), max(DGD.L4Top,DGD.L4))
|
|
else
|
|
DGD.LENGTH = EgtIf( sSideLock == 'L', max(DGD.L4Top,DGD.L4), max(DGD.L2Top,DGD.L2))
|
|
end
|
|
else
|
|
DGD.LENGTH = DGD.dH -- setto come altezza porta
|
|
end
|
|
else
|
|
if bRemake then
|
|
if DGD.SIDE == 'top' then
|
|
DGD.LENGTH = max(DGD.L3Top,DGD.L3)
|
|
else
|
|
DGD.LENGTH = max(DGD.L1Top,DGD.L1)
|
|
end
|
|
else
|
|
DGD.LENGTH = DGD.dW -- setto di base come larghezza porta
|
|
end
|
|
-- se larghezza porta è large width setto flag
|
|
if DGD.Part and DGD.Part > 0 and DGD.dW > DGD.Part then
|
|
DGD.bPart = true
|
|
end
|
|
end
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
DGD.DEPTH = tGeometries[nCont].depth
|
|
DGD.ANGLE = tGeometries[nCont].angle
|
|
DGD.OPPO = tGeometries[nCont].oppo
|
|
elseif nTypeGeom == 17 then -- se ept
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.FACETOCL = tGeometries[nCont].back_set
|
|
DGD.TOPTOCL = tGeometries[nCont].position
|
|
elseif nTypeGeom == 18 then -- se facedecoration
|
|
sPathLua = sBaseDir .. sSubPath .. tGeometries[nCont].template
|
|
DGD.TYPE = tGeometries[nCont].type
|
|
DGD.DEPTH = tGeometries[nCont].depth
|
|
DGD.DFT = tGeometries[nCont].dft
|
|
DGD.DFB = tGeometries[nCont].dfb
|
|
DGD.DFL = tGeometries[nCont].dfl
|
|
DGD.DFH = tGeometries[nCont].dfh
|
|
DGD.FACE = tGeometries[nCont].face
|
|
end
|
|
|
|
-- Controllo se nel nome file è già presente l'estensione .nge
|
|
sFilePath,sFileName,sFileExt = EgtSplitPath( string.lower(sPathLua))
|
|
bImport = false
|
|
|
|
-- se trovata estensione .nge nel template
|
|
if sFileExt and sFileExt == '.nge' then
|
|
sImportType = 'nge'
|
|
else -- non contiene direttamente estensione nge
|
|
if EgtExistsFile( string.lower(sPathLua)..'.lua') then-- provo con lua
|
|
sImportType = 'lua'
|
|
elseif EgtExistsFile( string.lower(sPathLua)..'.nge') then -- provo con nge
|
|
sImportType = 'nge'
|
|
sFileExt = '.nge'
|
|
else -- altrimenti tipo non riconosciuto
|
|
sImportType = 'bad'
|
|
end
|
|
end
|
|
|
|
-- in base al tipo lancio l'import, o il componente lua o do errore
|
|
if sImportType == 'nge' then
|
|
|
|
local sPathNge = sBaseDir .. 'LuaLibs\\ImportNgeFile.lua'
|
|
-- compongo il parametro nomefile
|
|
sFileName = sFileName .. sFileExt
|
|
local MHgen = require('ImportNgeFile')
|
|
nErr, sErr, nGeomId = MHgen.Draw( sFilePath,sFileName)
|
|
|
|
if nErr == 0 and nGeomId then
|
|
|
|
-- in base al tipo ri-setto le dimensioni di ingombro della geometria importata
|
|
if nTypeGeom == 1 or nTypeGeom == 2 or nTypeGeom == 18 then -- se vision o louver o decoration
|
|
bBox = EgtGetBBox( nGeomId, 0)
|
|
tGeometries[nCont].length = bBox:getDimY(bBox)
|
|
tGeometries[nCont].width = bBox:getDimX(bBox)
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
DGD.WIDTH = tGeometries[nCont].width
|
|
elseif nTypeGeom == 6 then -- se mail slot
|
|
bBox = EgtGetBBox( nGeomId, 0)
|
|
tGeometries[nCont].length = bBox:getDimY(bBox)
|
|
DGD.LENGTH = tGeometries[nCont].length
|
|
end
|
|
bImport = true
|
|
end
|
|
elseif sImportType == 'lua' then -- componente lua
|
|
sPathLua = sPathLua .. '.lua'
|
|
nErr, sErr, nGeomId = dofile( sPathLua)
|
|
else
|
|
nErr = 1000
|
|
sErr = string.format(EgtDoorsMsg[411],sPathLua, DGD.FILE)
|
|
end
|
|
|
|
if nErr > 0 then
|
|
DoorOutLog( sErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sErr
|
|
if DGD.ERR <= 0 then DGD.ERR = nErr end
|
|
break
|
|
else
|
|
-- se presente messaggio di warning
|
|
if nErr < 0 then
|
|
DoorOutLog( sErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sErr
|
|
if DGD.ERR == 0 then DGD.ERR = nErr end
|
|
end
|
|
|
|
--debug
|
|
-- EgtSaveFile( sNgeFile)
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
|
|
-- posizionamento geometria
|
|
-- tipo vision
|
|
if nTypeGeom == 1 then
|
|
if DGD.SPLIT then
|
|
if DGD.LENGTH and tGeometries[nCont].length and abs( DGD.LENGTH - tGeometries[nCont].length) > GEO.EPS_SMALL then
|
|
tGeometries[nCont].length = DGD.LENGTH
|
|
end
|
|
if DGD.WIDTH and tGeometries[nCont].width and abs( DGD.WIDTH - tGeometries[nCont].width) > GEO.EPS_SMALL then
|
|
tGeometries[nCont].width = DGD.WIDTH
|
|
end
|
|
end
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveCutOuts( tGeometries[nCont], sSideLock, bPushDoor, bImport, nTypeGeom)
|
|
-- vision sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 2 then -- tipo louver
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveCutOuts( tGeometries[nCont], sSideLock, bPushDoor, bImport, nTypeGeom)
|
|
-- louver sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 3 then -- tipo lock
|
|
-- verifico se è un aggregato
|
|
local sType = type(nGeomId)
|
|
if sType == 'table' then
|
|
if #nGeomId >= 1 then
|
|
for k = 1, #nGeomId do
|
|
tGeometries[nCont].geom = nGeomId[k][1]
|
|
tGeometries[nCont].back_set = nGeomId[k][2]
|
|
tGeometries[nCont].offset = nGeomId[k][3]
|
|
MoveLock( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- lock sizing
|
|
InsertSize( nTypeGeom, sSideLock, nil, nil, nGeomId[k][4],
|
|
nGeomId[k][5], nGeomId[k][2], nGeomId[k][3], nGeomId[k][6], nGeomId[k][7],
|
|
k)
|
|
end
|
|
end
|
|
else
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveLock( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- lock sizing
|
|
InsertSize( nTypeGeom, sSideLock, nil, nil, 0, 0)
|
|
end
|
|
elseif nTypeGeom == 4 then -- tipo stop_and_closer
|
|
-- verifico se è un aggregato
|
|
local sType = type(nGeomId)
|
|
if sType == 'table' then
|
|
if #nGeomId >= 1 then
|
|
for k = 1, #nGeomId do
|
|
tGeometries[nCont].geom = nGeomId[k]
|
|
MoveStopAndCloser( tGeometries[nCont], sSideLock, bPushDoor)
|
|
end
|
|
end
|
|
else
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveStopAndCloser( tGeometries[nCont], sSideLock, bPushDoor)
|
|
end
|
|
elseif nTypeGeom == 5 then -- tipo hinge
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveHinge( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- hinge sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 6 then -- tipo mail_slot
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveCutOuts( tGeometries[nCont], sSideLock, bPushDoor, bImport, nTypeGeom)
|
|
-- mail slot sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 7 then -- tipo flush_pull
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveFlushPull( tGeometries[nCont], sSideLock, bPushDoor, bImport)
|
|
-- flush_pull sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 8 then -- tipo viewer
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveViewer( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- viewer sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 9 then -- tipo rollerlatch
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveRollerLatch( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- roller latch sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 10 then -- tipo edgepull
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveEdgePull( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- EdgePull sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 11 then -- tipo flushbolt
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveFlushBolt( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- FlushBolt sizing
|
|
local dPosHead = 0
|
|
if string.lower(DGD.TYPE) == 'extension' then
|
|
-- ricavo nota spostamento cava di testa
|
|
dPosHead = EgtGetInfo( tGeometries[nCont].geom, 'DB_X', 'd') or 0
|
|
end
|
|
InsertSize( nTypeGeom, sSideLock, nil, dPosHead)
|
|
elseif nTypeGeom == 12 then -- tipo pivot
|
|
tGeometries[nCont].geom = nGeomId
|
|
MovePivot( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- Pivot sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 13 then -- tipo overhead
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveOverHead( tGeometries[nCont], sSideLock, bPushDoor)
|
|
elseif nTypeGeom == 14 then -- tipo strike
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveStrike( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- Strike sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 15 then -- tipo groove
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveGroove( tGeometries[nCont], sSideLock, bPushDoor)
|
|
elseif nTypeGeom == 16 then -- tipo rabbet
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveRabbet( tGeometries[nCont], sSideLock, bPushDoor)
|
|
elseif nTypeGeom == 17 then -- tipo ept
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveEPT( tGeometries[nCont], sSideLock, bPushDoor)
|
|
-- EPT sizing
|
|
InsertSize( nTypeGeom, sSideLock)
|
|
elseif nTypeGeom == 18 then -- tipo facedecoration
|
|
tGeometries[nCont].geom = nGeomId
|
|
MoveCopyDecoration( tGeometries[nCont], sSideLock, bPushDoor, bImport)
|
|
end
|
|
end
|
|
|
|
nCont = nCont + 1
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function SubAndDeleteTempSurf( nIdLs)
|
|
|
|
-- ricerca delle superfici princiapli
|
|
local nIdSurfUp
|
|
local nIdSurfDw
|
|
local nIdSurf = EgtGetFirstInGroup( nIdLs)
|
|
while nIdSurf and ( not nIdSurfUp or not nIdSurfDw) do
|
|
-- nome della superficie
|
|
local sSurfName = EgtGetName( nIdSurf)
|
|
-- se trovata superfice up principale
|
|
if not nIdSurfUp and sSurfName and string.lower( sSurfName) == 'flat_up' then
|
|
nIdSurfUp = nIdSurf
|
|
end
|
|
-- se trovata superfice dw principale
|
|
if not nIdSurfDw and sSurfName and string.lower( sSurfName) == 'flat_dw' then
|
|
nIdSurfDw = nIdSurf
|
|
end
|
|
-- passo alla successiva
|
|
nIdSurf = EgtGetNext( nIdSurf)
|
|
end
|
|
|
|
-- creo superfici temporanee di inviluppo rettangolare delle principali
|
|
local nIdRectHullUp
|
|
if nIdSurfUp then
|
|
local b3SurfUp = EgtGetBBox( nIdSurfUp, GDB_BB.STANDARD)
|
|
nIdRectHullUp = EgtSurfFrRectangle( nIdLs, b3SurfUp:getMin(), b3SurfUp:getMax())
|
|
if nIdRectHullUp and EgtSurfFrNormVersor( nIdSurfUp) * EgtSurfFrNormVersor( nIdRectHullUp) < 0 then
|
|
EgtInvertSurf( nIdRectHullUp)
|
|
end
|
|
end
|
|
local nIdRectHullDw
|
|
if nIdSurfDw then
|
|
local b3SurfDw = EgtGetBBox( nIdSurfDw, GDB_BB.STANDARD)
|
|
nIdRectHullDw = EgtSurfFrRectangle( nIdLs, b3SurfDw:getMin(), b3SurfDw:getMax())
|
|
if nIdRectHullDw and EgtSurfFrNormVersor( nIdSurfDw) * EgtSurfFrNormVersor( nIdRectHullDw) < 0 then
|
|
EgtInvertSurf( nIdRectHullDw)
|
|
end
|
|
end
|
|
|
|
-- ciclo sulle superfici del gruppo
|
|
nIdSurf = EgtGetFirstInGroup( nIdLs)
|
|
while nIdSurf do
|
|
|
|
local sSurfName = EgtGetName( nIdSurf)
|
|
local nNextId = EgtGetNext( nIdSurf)
|
|
|
|
-- se superfice up temporanea la sottraggo alla principale e poi la elimino
|
|
if nIdSurfUp and sSurfName and string.lower( sSurfName) == 'flat_up_tmp' then
|
|
local nIdSurfTmpUp = nIdSurf
|
|
EgtSurfFrSubtract( nIdSurfUp, nIdSurfTmpUp)
|
|
EgtErase( nIdSurfTmpUp)
|
|
end
|
|
|
|
-- se superfice dw temporanea la sottraggo alla principale e poi la elimino
|
|
if nIdSurfDw and sSurfName and string.lower( sSurfName) == 'flat_dw_tmp' then
|
|
local nIdSurfTmpDw = nIdSurf
|
|
EgtSurfFrSubtract( nIdSurfDw, nIdSurfTmpDw)
|
|
EgtErase( nIdSurfTmpDw)
|
|
end
|
|
|
|
-- se superfice up temporanea speciale (da percorsi di hatching) la sommo alla principale e poi la elimino
|
|
if nIdSurfUp and nIdRectHullUp and sSurfName and string.lower( sSurfName) == 'flat_up_tmp_sp' then
|
|
local nIdSurfTmpUp = nIdSurf
|
|
EgtSurfFrIntersect( nIdSurfTmpUp, nIdRectHullUp)
|
|
if EgtExistsObj( nIdSurfTmpUp) then
|
|
EgtSurfFrAdd( nIdSurfUp, nIdSurfTmpUp)
|
|
EgtErase( nIdSurfTmpUp)
|
|
end
|
|
end
|
|
|
|
-- se superfice dw temporanea speciale (da percorsi di hatching) la sommo alla principale e poi la elimino
|
|
if nIdSurfUp and nIdRectHullDw and sSurfName and string.lower( sSurfName) == 'flat_dw_tmp_sp' then
|
|
local nIdSurfTmpDw = nIdSurf
|
|
EgtSurfFrIntersect( nIdSurfTmpDw, nIdRectHullDw)
|
|
if EgtExistsObj( nIdSurfTmpDw) then
|
|
EgtSurfFrAdd( nIdSurfDw, nIdSurfTmpDw)
|
|
EgtErase( nIdSurfTmpDw)
|
|
end
|
|
end
|
|
|
|
-- passo alla successiva
|
|
nIdSurf = nNextId
|
|
end
|
|
|
|
-- cancello le superfici di inviluppo temporanee
|
|
EgtErase( nIdRectHullUp)
|
|
EgtErase( nIdRectHullDw)
|
|
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetEdgeToMachine( sSide)
|
|
if DGD.Lock == sSide then
|
|
return DGD.tProfs.lockedge.machining
|
|
elseif sSide == 'L' or sSide == 'R' then
|
|
return DGD.tProfs.hingeedge.machining
|
|
elseif sSide == 'T' then
|
|
return DGD.tProfs.top.machining
|
|
elseif sSide == 'B' then
|
|
return DGD.tProfs.bottom.machining
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetEdgeTrimming( sSide)
|
|
if DGD.Lock == sSide then
|
|
return DGD.tProfs.lockedge.trimming
|
|
elseif sSide == 'L' or sSide == 'R' then
|
|
return DGD.tProfs.hingeedge.trimming
|
|
elseif sSide == 'T' then
|
|
return DGD.tProfs.top.trimming
|
|
elseif sSide == 'B' then
|
|
return DGD.tProfs.bottom.trimming
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function SetInvertEdgeTrimming( sProfile)
|
|
if sProfile == 'BD' then
|
|
sProfile = 'BU'
|
|
elseif sProfile == 'BU' then
|
|
sProfile = 'BD'
|
|
elseif sProfile == 'BDEB' then
|
|
sProfile = 'BUEB'
|
|
elseif sProfile == 'BUEB' then
|
|
sProfile = 'BDEB'
|
|
end
|
|
return sProfile
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetRealEdgeTrimming( sSide)
|
|
local sTrim = GetEdgeTrimming( sSide)
|
|
if not DGD.sFrame then
|
|
if sTrim == 'BD' or sTrim == 'BU' then
|
|
if DGD.Push then
|
|
sTrim = 'BU'
|
|
else
|
|
sTrim = 'BD'
|
|
end
|
|
elseif sTrim == 'BDEB' or sTrim == 'BUEB' then
|
|
if DGD.Push then
|
|
sTrim = 'BUEB'
|
|
else
|
|
sTrim = 'BDEB'
|
|
end
|
|
end
|
|
end
|
|
return sTrim
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function GetEdgeOffset( sSide)
|
|
if DGD.Lock == sSide then
|
|
return DGD.tProfs.lockedge.offset
|
|
else
|
|
return DGD.tProfs.hingeedge.offset
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function SetFrameThickValues( bSideLeft)
|
|
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
if bSideLeft then
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
else
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
end
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
if bSideLeft then
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
else
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
end
|
|
elseif nTypePiece == 5 then -- se frame TOP
|
|
if bSideLeft then
|
|
DGD.Bul = 0
|
|
DGD.Bur = 0
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
else
|
|
DGD.Bdl = 0
|
|
DGD.Bdr = 0
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
end
|
|
elseif nTypePiece == 6 then -- se frame BOTTOM
|
|
if bSideLeft then
|
|
DGD.Bdl = 0
|
|
DGD.Bdr = 0
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
else
|
|
DGD.Bul = 0
|
|
DGD.Bur = 0
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
end
|
|
end
|
|
else
|
|
|
|
if bSideLeft then
|
|
DGD.Ult = DGD.dT
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Dlb = 0
|
|
DGD.Dlt = 0
|
|
if DGD.PROBE == 2 then
|
|
DGD.Mlb = DGD.dT/2
|
|
DGD.Mlt = DGD.dT/2
|
|
end
|
|
else
|
|
DGD.Urt = DGD.dT
|
|
DGD.Urb = DGD.dT
|
|
DGD.Drb = 0
|
|
DGD.Drt = 0
|
|
if DGD.PROBE == 2 then
|
|
DGD.Mrb = DGD.dT/2
|
|
DGD.Mrt = DGD.dT/2
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function RemakeDoor( sLeftType, dRadProf, sRightType, dRadProfR)
|
|
|
|
local nLa = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLa, 'REC')
|
|
EgtSetColor( nLa, BROWN())
|
|
local dDistToExtX = tProbeDoor.PX + (2*25.4) -- calcolo linea di estensione in X in base al settaggio nella macro + 2 Inch extra
|
|
local dDistToExtY = tProbeDoor.PY + (2*25.4) -- calcolo linea di estensione in Y in base al settaggio nella macro + 2 inch extra
|
|
|
|
-- dichiaro le variabili dei lati
|
|
local nBase
|
|
local nBaseMid
|
|
local nBaseTop
|
|
local nRight
|
|
local nRightMid
|
|
local nRightTop
|
|
local nTop
|
|
local nTopMid
|
|
local nTopTop
|
|
local nLeft
|
|
local nLeftMid
|
|
local nLeftTop
|
|
|
|
-- creo linee principali (in senso antiorario)
|
|
nBase = EgtLine( nLa, { tProbeDoor.P2x, tProbeDoor.P2y, 0}, { tProbeDoor.P3x, tProbeDoor.P3y, 0}, GDB_RT.LOC) -- p2 a p3
|
|
|
|
if not nBase then
|
|
return
|
|
end
|
|
|
|
if DGC.Pms == 0 then -- se ricostruzione completa porta
|
|
nRight = EgtLine( nLa, { tProbeDoor.P4x, tProbeDoor.P4y, 0}, { tProbeDoor.P5x, tProbeDoor.P5y, 0}, GDB_RT.LOC) -- p4 a p5
|
|
nTop = EgtLine( nLa, { tProbeDoor.P6x, tProbeDoor.P6y, 0}, { tProbeDoor.P7x, tProbeDoor.P7y, 0}, GDB_RT.LOC) -- p6 a p7
|
|
nLeft = EgtLine( nLa, { tProbeDoor.P8x, tProbeDoor.P8y, 0}, { tProbeDoor.P1x, tProbeDoor.P1y, 0}, GDB_RT.LOC) -- p8 a p1
|
|
else -- se modalità 1 (solo 4 punti probe, calcolo solo larghezza) o modalità 2 ( 5 punti probe, calcolo larghezza e lunghezza)
|
|
|
|
-- calcolo l'angolo di rotazione
|
|
local vDirEnt = EgtSV(nBase)
|
|
local dAngRotbase = atan(vDirEnt:getY(),vDirEnt:getX())
|
|
|
|
-- continuo la costruzione delle linee con un solo angolo calcolato
|
|
if tProbeDoor.DD == 0 then -- se porta disposta a destra
|
|
-- linea destra calcolata sul punto più vicino alla linea di base
|
|
nRight = EgtLinePDL( nLa, { tProbeDoor.P4x, tProbeDoor.P4y, 0}, dAngRotbase+90, ( DGD.dW - (2*tProbeDoor.PY)) ,GDB_RT.LOC) -- p4 con angolo e lunghezza
|
|
-- linea top calcolata sul punto opposto in Y a P3 cioè P6
|
|
nTop = EgtLinePDL( nLa, { tProbeDoor.P6x, tProbeDoor.P6y, 0}, dAngRotbase + 180, ( DGD.dH - (2*tProbeDoor.PX)), GDB_RT.LOC) -- p6 con angolo e lunghezza
|
|
|
|
-- se ho il punto anche in lunghezza
|
|
if DGC.Pms == 2 then
|
|
nLeft = EgtLinePDL( nLa, { tProbeDoor.P1x, tProbeDoor.P1y, 0}, dAngRotbase+90, ( DGD.dW - (2*tProbeDoor.PY)), GDB_RT.LOC) -- p1 con angolo e lunghezza
|
|
-- inverto la direzione
|
|
EgtInvertCurve(nLeft)
|
|
elseif DGC.Pms == 1 then
|
|
-- faccio l'offset della linea alla distanza pari all'altezza della porta
|
|
nLeft = EgtOffsetCurveAdv( nRight, -DGD.dH)
|
|
-- inverto la direzione
|
|
EgtInvertCurve(nLeft)
|
|
end
|
|
else -- altrimenti disposta a sinistra
|
|
-- linea sinistra calcolata sul punto più vicino alla linea di base
|
|
nLeft = EgtLinePDL( nLa, { tProbeDoor.P1x, tProbeDoor.P1y, 0}, dAngRotbase+90, ( DGD.dW - (2*tProbeDoor.PY)) ,GDB_RT.LOC) -- p4 con angolo e lunghezza
|
|
-- inverto la direzione
|
|
EgtInvertCurve(nLeft)
|
|
-- linea top calcolata sul punto opposto in Y a P2, cioè P7
|
|
nTop = EgtLinePDL( nLa, { tProbeDoor.P7x, tProbeDoor.P7y, 0}, dAngRotbase, ( DGD.dH - (2*tProbeDoor.PX)), GDB_RT.LOC) -- p6 con angolo e lunghezza
|
|
-- inverto la direzione
|
|
EgtInvertCurve(nTop)
|
|
|
|
-- se ho il punto anche in lunghezza
|
|
if DGC.Pms == 2 then
|
|
nRight = EgtLinePDL( nLa, { tProbeDoor.P4x, tProbeDoor.P4y, 0}, dAngRotbase+90, ( DGD.dW - (2*tProbeDoor.PY)), GDB_RT.LOC) -- p1 con angolo e lunghezza
|
|
elseif DGC.Pms == 1 then
|
|
-- faccio l'offset della linea alla distanza pari all'altezza della porta
|
|
nRight = EgtOffsetCurveAdv( nLeft, -DGD.dH)
|
|
-- inverto la direzione
|
|
EgtInvertCurve(nRight)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- lati di riferimento della porta
|
|
local nParFlip = 1
|
|
|
|
if tProbeDoor.FD > 0.5 then -- se porta flippata
|
|
if tProbeDoor.TD > 0.5 then -- se top a destra
|
|
nDoorLeft = nBase
|
|
nDoorRight = nTop
|
|
nDoorTop = nRight
|
|
nDoorBot = nLeft
|
|
else
|
|
nDoorLeft = nTop
|
|
nDoorRight = nBase
|
|
nDoorTop = nLeft
|
|
nDoorBot = nRight
|
|
end
|
|
nParFlip = -1
|
|
else -- porta non flippata
|
|
if tProbeDoor.TD > 0.5 then -- se top a destra
|
|
nDoorLeft = nTop
|
|
nDoorRight = nBase
|
|
nDoorTop = nRight
|
|
nDoorBot = nLeft
|
|
else
|
|
nDoorLeft = nBase
|
|
nDoorRight = nTop
|
|
nDoorTop = nLeft
|
|
nDoorBot = nRight
|
|
end
|
|
end
|
|
|
|
if nBase then
|
|
if abs(tProbeDoor.DR) > 0 then -- se ho la linea probase faccio l'eventuale offset e la assegno alla variabile giusta
|
|
EgtOffsetCurve( nBase, tProbeDoor.DR)
|
|
end
|
|
-- se la base è il lato sinistro
|
|
if nDoorLeft == nBase then
|
|
nDoorLeftTop = EgtCopyGlob(nBase, nLa)
|
|
nBaseTop = nDoorLeftTop
|
|
nDoorLeftMid = EgtCopyGlob(nBase, nLa)
|
|
nBaseMid = nDoorLeftMid
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
elseif sLeftType == 'BU' or sLeftType == 'BUEB' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorLeftTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorLeftMid, -DGD.dT/2 * TAN3)
|
|
elseif sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nBase, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorLeftMid, -DGD.dT/2 * TAN3)
|
|
elseif sLeftType == '1B' or sLeftType == '2B' or sLeftType == '3B' or sLeftType == '4B' or
|
|
sLeftType == '5B' or sLeftType == '6B' or sLeftType == '7B' or sLeftType == '8B'then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nBase, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
EgtOffsetCurve( nDoorLeftTop, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
elseif sLeftType == 'CV' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorLeftMid, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
end
|
|
else
|
|
nDoorRightTop = EgtCopyGlob(nBase, nLa)
|
|
nBaseTop = nDoorRightTop
|
|
nDoorRightMid = EgtCopyGlob(nBase, nLa)
|
|
nBaseMid = nDoorRightMid
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
elseif sRightType == 'BU' or sRightType == 'BUEB' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorRightTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorRightMid, -DGD.dT/2 * TAN3)
|
|
elseif sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nBase, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorRightMid, -DGD.dT/2 * TAN3)
|
|
elseif sRightType == '1B' or sRightType == '2B' or sRightType == '3B' or sRightType == '4B' or
|
|
sRightType == '5B' or sRightType == '6B' or sRightType == '7B' or sRightType == '8B' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nBase, -(dRadProfR - sqrt( ( dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
EgtOffsetCurve( nDoorRightTop, -(dRadProfR - sqrt((dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
elseif sRightType == 'CV' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorRightMid, -(dRadProfR - sqrt((dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
end
|
|
end
|
|
end
|
|
if nTop then
|
|
if abs(tProbeDoor.DO) > 0 then -- se ho la linea probase faccio l'eventuale offset e la assegno alla variabile giusta
|
|
EgtOffsetCurve( nTop, tProbeDoor.DO)
|
|
end
|
|
-- se il lato top è il lato sinistro
|
|
if nDoorLeft == nTop then
|
|
nDoorLeftTop = EgtCopyGlob(nTop, nLa)
|
|
nTopTop = nDoorLeftTop
|
|
nDoorLeftMid = EgtCopyGlob(nTop, nLa)
|
|
nTopMid = nDoorLeftMid
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
elseif sLeftType == 'BU' or sLeftType == 'BUEB' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorLeftTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorLeftMid, -DGD.dT/2 * TAN3)
|
|
elseif sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorLeftMid, -DGD.dT/2 * TAN3)
|
|
elseif sLeftType == '1B' or sLeftType == '2B' or sLeftType == '3B' or sLeftType == '4B' or
|
|
sLeftType == '5B' or sLeftType == '6B' or sLeftType == '7B' or sLeftType == '8B' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nTop, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
EgtOffsetCurve( nDoorLeftTop, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
elseif sLeftType == 'CV' then
|
|
EgtMove( nDoorLeftTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorLeftMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorLeftMid, -(dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
end
|
|
else
|
|
nDoorRightTop = EgtCopyGlob(nTop, nLa)
|
|
nTopTop = nDoorRightTop
|
|
nDoorRightMid = EgtCopyGlob(nTop, nLa)
|
|
nTopMid = nDoorRightMid
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
elseif sRightType == 'BU' or sRightType == 'BUEB' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorRightTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorRightMid, -DGD.dT/2 * TAN3)
|
|
elseif sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nTop, -DGD.dT * TAN3)
|
|
EgtOffsetCurve( nDoorRightMid, -DGD.dT/2 * TAN3)
|
|
elseif sRightType == '1B' or sRightType == '2B' or sRightType == '3B' or sRightType == '4B' or
|
|
sRightType == '5B' or sRightType == '6B' or sRightType == '7B' or sRightType == '8B' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nTop, -(dRadProfR - sqrt( ( dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
EgtOffsetCurve( nDoorRightTop, -(dRadProfR - sqrt((dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
elseif sRightType == 'CV' then
|
|
EgtMove( nDoorRightTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorRightMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
EgtOffsetCurve( nDoorRightMid, -(dRadProfR - sqrt((dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))))
|
|
end
|
|
end
|
|
end
|
|
if nLeft then
|
|
-- se il lato sinistro è il top
|
|
if nDoorTop == nLeft then
|
|
nDoorTopTop = EgtCopyGlob(nLeft, nLa)
|
|
nLeftTop = nDoorTopTop
|
|
nDoorTopMid = EgtCopyGlob(nLeft, nLa)
|
|
nLeftMid = nDoorTopMid
|
|
EgtMove( nDoorTopTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorTopMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
else
|
|
nDoorBotTop = EgtCopyGlob(nLeft, nLa)
|
|
nLeftTop = nDoorBotTop
|
|
nDoorBotMid = EgtCopyGlob(nLeft, nLa)
|
|
nLeftMid = nDoorBotMid
|
|
EgtMove( nDoorBotTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorBotMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
end
|
|
end
|
|
if nRight then
|
|
-- se il lato sinistro è il bottom
|
|
if nDoorBot == nRight then
|
|
nDoorBotTop = EgtCopyGlob(nRight, nLa)
|
|
nRightTop = nDoorBotTop
|
|
nDoorBotMid = EgtCopyGlob(nRight, nLa)
|
|
nRightMid = nDoorBotMid
|
|
EgtMove( nDoorBotTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorBotMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
else
|
|
nDoorTopTop = EgtCopyGlob(nRight, nLa)
|
|
nRightTop = nDoorTopTop
|
|
nDoorTopMid = EgtCopyGlob(nRight, nLa)
|
|
nRightMid = nDoorTopMid
|
|
EgtMove( nDoorTopTop, ORIG() + Point3d(0,0,(nParFlip*DGD.dT)), GDB_RT.GRID)
|
|
EgtMove( nDoorTopMid, ORIG() + Point3d(0,0,(nParFlip*DGD.dT/2)), GDB_RT.GRID)
|
|
end
|
|
end
|
|
|
|
-- estendo le linee per creare i quadrilateri di base, medio e top
|
|
if nRight and nBase then -- base con destra
|
|
EgtTrimExtendCurveByLen( nBase,dDistToExtX,EgtEP(nBase))
|
|
EgtTrimExtendCurveByLen( nRight,dDistToExtY,EgtSP(nRight))
|
|
local nIdDel = EgtSplitCurveAtPoint( nBase, EgtIP(nBase,nRight,EgtEP(nBase)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nRight
|
|
nRight = EgtSplitCurveAtPoint( nRight, EgtEP(nBase))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nRightMid and nBaseMid then -- base con destra mid
|
|
EgtTrimExtendCurveByLen( nBaseMid,dDistToExtX,EgtEP(nBaseMid))
|
|
EgtTrimExtendCurveByLen( nRightMid,dDistToExtY,EgtSP(nRightMid))
|
|
local nIdDel = EgtSplitCurveAtPoint( nBaseMid, EgtIP(nBaseMid,nRightMid,EgtEP(nBaseMid)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nRightMid
|
|
nRightMid = EgtSplitCurveAtPoint( nRightMid, EgtEP(nBaseMid))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nRightTop and nBaseTop then -- base con destra top
|
|
EgtTrimExtendCurveByLen( nBaseTop,dDistToExtX,EgtEP(nBaseTop))
|
|
EgtTrimExtendCurveByLen( nRightTop,dDistToExtY,EgtSP(nRightTop))
|
|
local nIdDel = EgtSplitCurveAtPoint( nBaseTop, EgtIP(nBaseTop,nRightTop,EgtEP(nBaseTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nRightTop
|
|
nRightTop = EgtSplitCurveAtPoint( nRightTop, EgtEP(nBaseTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
|
|
if nLeft and nBase then -- base con sinistra
|
|
EgtTrimExtendCurveByLen( nBase,dDistToExtX,EgtSP(nBase))
|
|
EgtTrimExtendCurveByLen( nLeft,dDistToExtY, EgtEP(nLeft))
|
|
local nIdDel = nBase
|
|
nBase = EgtSplitCurveAtPoint( nBase, EgtIP(nBase,nLeft,EgtSP(nBase)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nLeft, EgtSP(nBase))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nLeftMid and nBaseMid then -- base con sinistra mid
|
|
EgtTrimExtendCurveByLen( nBaseMid,dDistToExtX,EgtSP(nBaseMid))
|
|
EgtTrimExtendCurveByLen( nLeftMid,dDistToExtY, EgtEP(nLeftMid))
|
|
local nIdDel = nBaseMid
|
|
nBaseMid = EgtSplitCurveAtPoint( nBaseMid, EgtIP(nBaseMid,nLeftMid,EgtSP(nBaseMid)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nLeftMid, EgtSP(nBaseMid))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nLeftTop and nBaseTop then -- base con sinistra top
|
|
EgtTrimExtendCurveByLen( nBaseTop,dDistToExtX,EgtSP(nBaseTop))
|
|
EgtTrimExtendCurveByLen( nLeftTop,dDistToExtY, EgtEP(nLeftTop))
|
|
local nIdDel = nBaseTop
|
|
nBaseTop = EgtSplitCurveAtPoint( nBaseTop, EgtIP(nBaseTop,nLeftTop,EgtSP(nBaseTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nLeftTop, EgtSP(nBaseTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
|
|
if nRight and nTop then -- top con destra
|
|
EgtTrimExtendCurveByLen( nTop,dDistToExtX,EgtSP(nTop))
|
|
EgtTrimExtendCurveByLen( nRight,dDistToExtY, EgtEP(nRight))
|
|
local nIdDel = nTop
|
|
nTop = EgtSplitCurveAtPoint( nTop, EgtIP(nTop,nRight,EgtSP(nTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nRight, EgtSP(nTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nRightMid and nTopMid then -- top con destra mid
|
|
EgtTrimExtendCurveByLen( nTopMid,dDistToExtX,EgtSP(nTopMid))
|
|
EgtTrimExtendCurveByLen( nRightMid,dDistToExtY, EgtEP(nRightMid))
|
|
local nIdDel = nTopMid
|
|
nTopMid = EgtSplitCurveAtPoint( nTopMid, EgtIP(nTopMid,nRightMid,EgtSP(nTopMid)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nRightMid, EgtSP(nTopMid))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nRightTop and nTopTop then -- top con destra top
|
|
EgtTrimExtendCurveByLen( nTopTop,dDistToExtX,EgtSP(nTopTop))
|
|
EgtTrimExtendCurveByLen( nRightTop,dDistToExtY, EgtEP(nRightTop))
|
|
local nIdDel = nTopTop
|
|
nTopTop = EgtSplitCurveAtPoint( nTopTop, EgtIP(nTopTop,nRightTop,EgtSP(nTopTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = EgtSplitCurveAtPoint( nRightTop, EgtSP(nTopTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
|
|
if nLeft and nTop then -- top con sinistra
|
|
EgtTrimExtendCurveByLen( nTop,dDistToExtX,EgtEP(nTop))
|
|
EgtTrimExtendCurveByLen( nLeft,dDistToExtY, EgtSP(nLeft))
|
|
local nIdDel = EgtSplitCurveAtPoint( nTop, EgtIP(nTop,nLeft,EgtEP(nTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nLeft
|
|
nLeft = EgtSplitCurveAtPoint( nLeft, EgtEP(nTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nLeftMid and nTopMid then -- top con sinistra mid
|
|
EgtTrimExtendCurveByLen( nTopMid,dDistToExtX,EgtEP(nTopMid))
|
|
EgtTrimExtendCurveByLen( nLeftMid,dDistToExtY, EgtSP(nLeftMid))
|
|
local nIdDel = EgtSplitCurveAtPoint( nTopMid, EgtIP(nTopMid,nLeftMid,EgtEP(nTopMid)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nLeftMid
|
|
nLeftMid = EgtSplitCurveAtPoint( nLeftMid, EgtEP(nTopMid))
|
|
EgtErase(nIdDel)
|
|
end
|
|
if nLeftTop and nTopTop then -- top con sinistra top
|
|
EgtTrimExtendCurveByLen( nTopTop,dDistToExtX,EgtEP(nTopTop))
|
|
EgtTrimExtendCurveByLen( nLeftTop,dDistToExtY, EgtSP(nLeftTop))
|
|
local nIdDel = EgtSplitCurveAtPoint( nTopTop, EgtIP(nTopTop,nLeftTop,EgtEP(nTopTop)))
|
|
EgtErase(nIdDel)
|
|
nIdDel = nLeftTop
|
|
nLeftTop = EgtSplitCurveAtPoint( nLeftTop, EgtEP(nTopTop))
|
|
EgtErase(nIdDel)
|
|
end
|
|
|
|
if tProbeDoor.FD > 0.5 then -- se porta flippata
|
|
|
|
-- dopo rotazione il giro è orario
|
|
EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), X_AX(), 180 )
|
|
EgtRotate( {nBaseMid,nRightMid,nTopMid,nLeftMid} , ORIG(), X_AX(), 180 )
|
|
EgtRotate( {nBaseTop,nRightTop,nTopTop,nLeftTop} , ORIG(), X_AX(), 180 )
|
|
|
|
if tProbeDoor.TD > 0.5 then -- se top a destra
|
|
EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), Z_AX(), 90 )
|
|
EgtRotate( {nBaseMid,nRightMid,nTopMid,nLeftMid} , ORIG(), Z_AX(), 90 )
|
|
EgtRotate( {nBaseTop,nRightTop,nTopTop,nLeftTop} , ORIG(), Z_AX(), 90 )
|
|
nDoorLeft = nBase
|
|
nDoorRight = nTop
|
|
nDoorTop = nRight
|
|
nDoorBot = nLeft
|
|
nDoorLeftMid = nBaseMid
|
|
nDoorRightMid = nTopMid
|
|
nDoorTopMid = nRightMid
|
|
nDoorBotMid = nLeftMid
|
|
nDoorLeftTop = nBaseTop
|
|
nDoorRightTop = nTopTop
|
|
nDoorTopTop = nRightTop
|
|
nDoorBotTop = nLeftTop
|
|
else
|
|
EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), Z_AX(), -90 )
|
|
EgtRotate( {nBaseMid,nRightMid,nTopMid,nLeftMid} , ORIG(), Z_AX(), -90 )
|
|
EgtRotate( {nBaseTop,nRightTop,nTopTop,nLeftTop} , ORIG(), Z_AX(), -90 )
|
|
nDoorLeft = nTop
|
|
nDoorRight = nBase
|
|
nDoorTop = nLeft
|
|
nDoorBot = nRight
|
|
nDoorLeftMid = nTopMid
|
|
nDoorRightMid = nBaseMid
|
|
nDoorTopMid = nLeftMid
|
|
nDoorBotMid = nRightMid
|
|
nDoorLeftTop = nTopTop
|
|
nDoorRightTop = nBaseTop
|
|
nDoorTopTop = nLeftTop
|
|
nDoorBotTop = nRightTop
|
|
end
|
|
else -- porta non flippata
|
|
|
|
--inverto la direzione delle entità per avere giro orario
|
|
EgtInvertCurve({nBase,nRight,nTop,nLeft})
|
|
EgtInvertCurve({nBaseMid,nRightMid,nTopMid,nLeftMid})
|
|
EgtInvertCurve({nBaseTop,nRightTop,nTopTop,nLeftTop})
|
|
|
|
if tProbeDoor.TD > 0.5 then -- se top a destra
|
|
EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), Z_AX(), 90 )
|
|
EgtRotate( {nBaseMid,nRightMid,nTopMid,nLeftMid} , ORIG(), Z_AX(), 90 )
|
|
EgtRotate( {nBaseTop,nRightTop,nTopTop,nLeftTop} , ORIG(), Z_AX(), 90 )
|
|
nDoorLeft = nTop
|
|
nDoorRight = nBase
|
|
nDoorTop = nRight
|
|
nDoorBot = nLeft
|
|
nDoorLeftMid = nTopMid
|
|
nDoorRightMid = nBaseMid
|
|
nDoorTopMid = nRightMid
|
|
nDoorBotMid = nLeftMid
|
|
nDoorLeftTop = nTopTop
|
|
nDoorRightTop = nBaseTop
|
|
nDoorTopTop = nRightTop
|
|
nDoorBotTop = nLeftTop
|
|
else
|
|
EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), Z_AX(), -90 )
|
|
EgtRotate( {nBaseMid,nRightMid,nTopMid,nLeftMid} , ORIG(), Z_AX(), -90 )
|
|
EgtRotate( {nBaseTop,nRightTop,nTopTop,nLeftTop} , ORIG(), Z_AX(), -90 )
|
|
nDoorLeft = nBase
|
|
nDoorRight = nTop
|
|
nDoorTop = nLeft
|
|
nDoorBot = nRight
|
|
nDoorLeftMid = nBaseMid
|
|
nDoorRightMid = nTopMid
|
|
nDoorTopMid = nLeftMid
|
|
nDoorBotMid = nRightMid
|
|
nDoorLeftTop = nBaseTop
|
|
nDoorRightTop = nTopTop
|
|
nDoorTopTop = nLeftTop
|
|
nDoorBotTop = nRightTop
|
|
end
|
|
end
|
|
|
|
EgtSetName (nDoorLeft, 'Left')
|
|
EgtSetName (nDoorRight, 'Right')
|
|
EgtSetName (nDoorTop, 'Top')
|
|
EgtSetName (nDoorBot, 'Bottom')
|
|
EgtSetName (nDoorLeftMid, 'LeftMid')
|
|
EgtSetName (nDoorRightMid, 'RightMid')
|
|
EgtSetName (nDoorTopMid, 'TopMid')
|
|
EgtSetName (nDoorBotMid, 'BottomMid')
|
|
EgtSetName (nDoorLeftTop, 'LeftTop')
|
|
EgtSetName (nDoorRightTop, 'RightTop')
|
|
EgtSetName (nDoorTopTop, 'TopTop')
|
|
EgtSetName (nDoorBotTop, 'BottomTop')
|
|
|
|
-- Per ogni quadrilatero Prendo i 4 punti base e le direzioni relative che definiranno la porta
|
|
DGD.P1=EgtEP( nDoorBotTop, GDB_RT.GLOB)
|
|
DGD.P2=EgtEP( nDoorRightTop, GDB_RT.GLOB)
|
|
DGD.P3=EgtEP( nDoorRight, GDB_RT.GLOB)
|
|
DGD.P4=EgtEP( nDoorBot, GDB_RT.GLOB)
|
|
DGD.P5=EgtEP( nDoorBotMid, GDB_RT.GLOB)
|
|
DGD.P6=EgtEP( nDoorRightMid, GDB_RT.GLOB)
|
|
DGD.P7=EgtEP( nDoorLeftTop, GDB_RT.GLOB)
|
|
DGD.P8=EgtEP( nDoorTopTop, GDB_RT.GLOB)
|
|
DGD.P9=EgtEP( nDoorTop, GDB_RT.GLOB)
|
|
DGD.P10=EgtEP( nDoorLeft, GDB_RT.GLOB)
|
|
DGD.P11=EgtEP( nDoorLeftMid, GDB_RT.GLOB)
|
|
DGD.P12=EgtEP( nDoorTopMid, GDB_RT.GLOB)
|
|
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == '1B' or sLeftType == '2B' or sLeftType == '3B' or
|
|
sLeftType == '4B' or sLeftType == '5B' or sLeftType == '6B' or sLeftType == '7B' or sLeftType == '8B' or
|
|
sLeftType == 'FDWC' then
|
|
DGD.PminBot = DGD.P5
|
|
DGD.PminTop = DGD.P11
|
|
elseif sLeftType == 'BU' or sLeftType == 'BUEB' or sLeftType == 'CV' then
|
|
DGD.PminBot = DGD.P4
|
|
DGD.PminTop = DGD.P10
|
|
elseif sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
DGD.PminBot = DGD.P1
|
|
DGD.PminTop = DGD.P7
|
|
end
|
|
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == '1B' or sRightType == '2B' or sRightType == '3B' or
|
|
sRightType == '4B' or sRightType == '5B' or sRightType == '6B' or sRightType == '7B' or sRightType == '8B' or
|
|
sRightType == 'FDWC' then
|
|
DGD.PmaxBot = DGD.P6
|
|
DGD.PmaxTop = DGD.P12
|
|
elseif sRightType == 'BU' or sRightType == 'BUEB' or sRightType == 'CV' then
|
|
DGD.PmaxBot = DGD.P3
|
|
DGD.PmaxTop = DGD.P9
|
|
elseif sRightType == 'BD' or sRightType == 'BDEB' then
|
|
DGD.PmaxBot = DGD.P2
|
|
DGD.PmaxTop = DGD.P8
|
|
end
|
|
|
|
local vDirEnt = EgtSV(nDoorBot)
|
|
DGD.A1=atan(vDirEnt:getY(),vDirEnt:getX())
|
|
DGD.A2=DGD.A1+180
|
|
DGD.L1=EgtCurveLength( nDoorBot)
|
|
DGD.L1Top=EgtCurveLength( nDoorBotTop)
|
|
|
|
vDirEnt = EgtSV(nDoorLeft)
|
|
DGD.A3=atan(vDirEnt:getY(),vDirEnt:getX())
|
|
DGD.A4=DGD.A3+180
|
|
DGD.L2=EgtCurveLength( nDoorLeft)
|
|
DGD.L2Top=EgtCurveLength( nDoorLeftTop)
|
|
|
|
vDirEnt = EgtSV(nDoorTop)
|
|
DGD.A5=atan(vDirEnt:getY(),vDirEnt:getX())
|
|
DGD.A6=DGD.A5+180
|
|
DGD.L3=EgtCurveLength( nDoorTop)
|
|
DGD.L3Top=EgtCurveLength( nDoorTopTop)
|
|
|
|
vDirEnt = EgtSV(nDoorRight)
|
|
DGD.A7=atan(vDirEnt:getY(),vDirEnt:getX())
|
|
DGD.A8=DGD.A7+180
|
|
DGD.L4=EgtCurveLength( nDoorRight)
|
|
DGD.L4Top=EgtCurveLength( nDoorRightTop)
|
|
|
|
-- errato calcolo: prende le ipotenuse di maggior lunghezza e larghezza e non i box
|
|
-- calcolo le dimensioni della porta
|
|
-- local dLungMax = max ( sqrt( ( DGD.PmaxBot[1] - DGD.PmaxTop[1]) * ( DGD.PmaxBot[1] - DGD.PmaxTop[1]) +
|
|
-- ( DGD.PmaxBot[2] - DGD.PmaxTop[2]) * ( DGD.PmaxBot[2] - DGD.PmaxTop[2])),
|
|
-- sqrt( ( DGD.PminBot[1] - DGD.PminTop[1]) * ( DGD.PminBot[1] - DGD.PminTop[1]) +
|
|
-- ( DGD.PminBot[2] - DGD.PminTop[2]) * ( DGD.PminBot[2] - DGD.PminTop[2])))
|
|
--
|
|
-- local dLarghMax = max ( sqrt( ( DGD.PmaxBot[1] - DGD.PminBot[1]) * ( DGD.PmaxBot[1] - DGD.PminBot[1]) +
|
|
-- ( DGD.PmaxBot[2] - DGD.PminBot[2]) * ( DGD.PmaxBot[2] - DGD.PminBot[2])),
|
|
-- sqrt( ( DGD.PmaxTop[1] - DGD.PminTop[1]) * ( DGD.PmaxTop[1] - DGD.PminTop[1]) +
|
|
-- ( DGD.PmaxTop[2] - DGD.PminTop[2]) * ( DGD.PmaxTop[2] - DGD.PminTop[2])))
|
|
local dLungMax = max ( DGD.PmaxTop[2], DGD.PminTop[2]) - min( DGD.PmaxBot[2], DGD.PminBot[2])
|
|
local dLarghMax = max ( DGD.PmaxTop[1], DGD.PmaxBot[1]) - min( DGD.PminTop[1], DGD.PminBot[1])
|
|
|
|
-- Sposto tutte e 4 le geometrie nel primo quadrante
|
|
-- EgtMove( {nBase,nRight,nTop,nLeft}, ORIG() - EgtSP(nDoorLeft), GDB_RT.GRID)
|
|
|
|
-- allineo il lato sinistro con la Y
|
|
-- local vDirLeft = EgtSV( nDoorLeft)
|
|
-- EgtRotate( {nBase,nRight,nTop,nLeft} , ORIG(), Z_AX(), atan(vDirLeft:getX()/vDirLeft:getY()) )
|
|
|
|
-- ritorno le dimensioni calcolate
|
|
return dLungMax, dLarghMax
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function MakeSurfProfiles( nParLay, sBotType, dRadProfB, sRghtType, dRadProfR,
|
|
sTopType, dRadProfT, sLftType, dRadProfL, sSideName,
|
|
dPlnProfB, dPlnProfR, dPlnProfT, dPlnProf)
|
|
|
|
-- setto variabili che indicano se i profili sono compatibili
|
|
local bJoinRgt = true
|
|
local bJoinLft = true
|
|
local bDelete = true
|
|
|
|
-- profilo superiore
|
|
local nTopPath, nToptSezPath, ptMedArc
|
|
|
|
-- creo curva superiore
|
|
if DGD.tProfs.top.radius then
|
|
-- se ci sono tangenze con profili diversi verifico se concatenare la swept superiore
|
|
if DGD.TPR then
|
|
if sTopType == 'BD' or sTopType == 'BDEB' or sTopType == 'BU' or sTopType == 'BUEB' then
|
|
if sRghtType == 'SQ' or sRghtType == 'EB' or sRightType == 'FDWC' then
|
|
bJoinRgt = false
|
|
elseif sRghtType == '1B' or sRghtType == '2B' or sRghtType == '3B' or sRghtType == '4B' or
|
|
sRghtType == '5B' or sRghtType == '6B' or sRghtType == '7B' or sRghtType == '8B' then
|
|
bJoinRgt = true
|
|
elseif sRghtType == 'CV' then
|
|
bJoinRgt = false
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
|
|
if sRghtType == '1B' or sRghtType == '2B' or sRghtType == '3B' or sRghtType == '4B' or
|
|
sRghtType == '5B' or sRghtType == '6B' or sRghtType == '7B' or sRghtType == '8B' then
|
|
-- tolgo di mezzo il B e confronto i numeri
|
|
local sNumProfTop = sTopType:gsub( 'B', '')
|
|
local sNumProfSide = sRghtType:gsub( 'B', '')
|
|
local nNumProfTop = tonumber(sNumProfTop)
|
|
local nNumProfSide = tonumber(sNumProfSide)
|
|
if nNumProfTop < nNumProfSide then
|
|
bJoinRgt = false
|
|
end
|
|
elseif sRghtType == 'BD' or sRghtType == 'BDEB' or sRghtType == 'BU' or sRghtType == 'BUEB' then
|
|
bJoinRgt = false
|
|
elseif sRghtType == 'CV' or sRghtType == 'SQ' or sRghtType == 'EB' or sRightType == 'FDWC' then
|
|
bJoinRgt = false
|
|
end
|
|
elseif sTopType == 'CV' then
|
|
if sRghtType == 'BD' or sRghtType == 'BDEB' or sRghtType == 'BU' or sRghtType == 'BUEB' then
|
|
bJoinRgt = false
|
|
elseif sRghtType == '1B' or sRghtType == '2B' or sRghtType == '3B' or sRghtType == '4B' or
|
|
sRghtType == '5B' or sRghtType == '6B' or sRghtType == '7B' or sRghtType == '8B' then
|
|
bJoinRgt = false
|
|
end
|
|
end
|
|
end
|
|
if DGD.TPL then
|
|
if sTopType == 'BD' or sTopType == 'BDEB' or sTopType == 'BU' or sTopType == 'BUEB' then
|
|
if sLftType == 'SQ' or sLftType == 'EB' or sLftType == 'FDWC' then
|
|
bJoinLft = false
|
|
elseif sLftType == '1B' or sLftType == '2B' or sLftType == '3B' or sLftType == '4B' or
|
|
sLftType == '5B' or sLftType == '6B' or sLftType == '7B' or sLftType == '8B' then
|
|
bJoinLft = true
|
|
elseif sLftType == 'CV' then
|
|
bJoinLft = false
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
|
|
if sLftType == '1B' or sLftType == '2B' or sLftType == '3B' or sLftType == '4B' or
|
|
sLftType == '5B' or sLftType == '6B' or sLftType == '7B' or sLftType == '8B' then
|
|
-- tolgo di mezzo il B e confronto i numeri
|
|
local sNumProfTop = sTopType:gsub( 'B', '')
|
|
local sNumProfSide = sLftType:gsub( 'B', '')
|
|
local nNumProfTop = tonumber(sNumProfTop)
|
|
local nNumProfSide = tonumber(sNumProfSide)
|
|
if nNumProfTop < nNumProfSide then
|
|
bJoinLft = false
|
|
end
|
|
elseif sLftType == 'BD' or sLftType == 'BDEB' or sLftType == 'BU' or sLftType == 'BUEB' then
|
|
bJoinLft = false
|
|
elseif sLftType == 'CV' or sLftType == 'SQ' or sLftType == 'EB' or sLftType == 'FDWC' then
|
|
bJoinLft = false
|
|
end
|
|
elseif sTopType == 'CV' then
|
|
if sLftType == 'BD' or sLftType == 'BDEB' or sLftType == 'BU' or sLftType == 'BUEB' then
|
|
bJoinLft = false
|
|
elseif sLftType == '1B' or sLftType == '2B' or sLftType == '3B' or sLftType == '4B' or
|
|
sLftType == '5B' or sLftType == '6B' or sLftType == '7B' or sLftType == '8B' then
|
|
bJoinLft = false
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Arco top
|
|
nTopPath = EgtArcC2P( nParLay, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.RMa, DGD.AMr, DGD.Dra}, { DGD.LMa, DGD.AMl, DGD.Dla}, GDB_RT.GLOB) -- arco max
|
|
local vcIni = EgtSV(nTopPath)
|
|
EgtErase(nTopPath)
|
|
nTopPath = EgtArc2PV( nParLay, { DGD.RMa, DGD.AMr, DGD.Dra}, { DGD.LMa, DGD.AMl, DGD.Dla}, vcIni, GDB_RT.GLOB)
|
|
ptMedArc = EgtMP(nTopPath)
|
|
if not DGD.TPR then -- se non ho tangenza a destra allungo il percorso
|
|
local dDistY = abs((DGD.dH-DGD.tProfs.top.ydeltapos) - DGD.AMr)
|
|
if dDistY > 50.8 then
|
|
EgtTrimExtendCurveByLen( nTopPath, 50.8 , { DGD.RMa, DGD.AMr, DGD.Dra})
|
|
else
|
|
EgtTrimExtendCurveByLen( nTopPath, dDistY*1.1 , { DGD.RMa, DGD.AMr, DGD.Dra})
|
|
end
|
|
end
|
|
if not DGD.TPL then -- se non ho tangenza a sinistra allungo il percorso
|
|
local dDistY = abs((DGD.dH-DGD.tProfs.top.ydeltapos) - DGD.AMl)
|
|
if dDistY > 50.8 then
|
|
EgtTrimExtendCurveByLen( nTopPath, 50.8 , { DGD.LMa, DGD.AMl, DGD.Dla})
|
|
else
|
|
EgtTrimExtendCurveByLen( nTopPath, dDistY*1.1 , { DGD.LMa, DGD.AMl, DGD.Dla})
|
|
end
|
|
end
|
|
elseif DGD.Tpa then
|
|
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
local nE1 = EgtLine( nParLay, {DGD.Rua,DGD.Aur,DGD.Dra}, {DGD.Cmu,DGD.Aut,DGD.Dla}, GDB_RT.GLOB) -- p14 a p19
|
|
local nE2 = EgtLine( nParLay, {DGD.Cmu,DGD.Aut,DGD.Dla}, {DGD.Lua,DGD.Aul,DGD.Dla}, GDB_RT.GLOB) -- p19 a p13
|
|
nTopPath = EgtCurveCompo( nParLay, {nE1,nE2}, true)
|
|
else
|
|
nTopPath = EgtLine( nParLay, {DGD.Rua,DGD.Aur,DGD.Dra}, {DGD.Lua,DGD.Aul,DGD.Dla}, GDB_RT.GLOB) -- p14 a p13
|
|
end
|
|
|
|
EgtTrimExtendCurveByLen( nTopPath, DGD.dW/4, {DGD.Rua,DGD.Aur,DGD.Dra})
|
|
EgtTrimExtendCurveByLen( nTopPath, DGD.dW/4, {DGD.Lua,DGD.Aul,DGD.Dla})
|
|
else
|
|
nTopPath = EgtLine( nParLay, {DGD.Rut,DGD.Tur,DGD.Drt}, {DGD.Lut,DGD.Tul,DGD.Dlt}, GDB_RT.GLOB) -- p8 a p7
|
|
EgtTrimExtendCurveByLen( nTopPath, DGD.dW/4, {DGD.Rut,DGD.Tur,DGD.Drt})
|
|
EgtTrimExtendCurveByLen( nTopPath, DGD.dW/4, {DGD.Lut,DGD.Tul,DGD.Dlt})
|
|
end
|
|
|
|
-- prendo il versore iniziale
|
|
local vIni = EgtSV( nTopPath, GDB_RT.GLOB)
|
|
local pIni = EgtSP( nTopPath, GDB_RT.GLOB)
|
|
|
|
-- griglia locale
|
|
EgtSetGridFrame( Frame3d( pIni, vIni))
|
|
|
|
if sTopType == 'BD' or sTopType == 'BDEB' then
|
|
-- profilo sezione
|
|
nToptSezPath = EgtLine ( nParLay, {(DGD.dT*TAN3),0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
elseif sTopType == 'BU' or sTopType == 'BUEB' then
|
|
if DGD.tProfs.top.radius then
|
|
-- profilo sezione
|
|
nToptSezPath = EgtLine ( nParLay, {0,0,0}, {(DGD.dT*TAN3),DGD.dT,0}, GDB_RT.GRID)
|
|
else
|
|
-- profilo sezione
|
|
nToptSezPath = EgtLine ( nParLay, {-(DGD.dT*TAN3),0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
local dDeltaPos = dRadProfT - sqrt( ( dRadProfT * dRadProfT) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
if DGD.tProfs.top.radius then
|
|
-- profilo sezione
|
|
nToptSezPath = EgtArc3P( nParLay, {dDeltaPos,0,0}, {0,DGD.dT/2,0}, {dDeltaPos,DGD.dT,0}, GDB_RT.GRID)
|
|
else
|
|
-- profilo sezione
|
|
nToptSezPath = EgtArc3P( nParLay, {0,0,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
elseif sTopType == 'CV' then
|
|
local dDeltaPos = dRadProfT - sqrt( ( dRadProfT * dRadProfT) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
-- profilo sezione
|
|
if dPlnProfT > 0 then
|
|
local nLine1, nLine2, nArc
|
|
nLine1 = EgtLine ( nParLay, {0,0,0}, {0,dPlnProfT,0}, GDB_RT.GRID)
|
|
nArc = EgtArc3P( nParLay, {0,dPlnProfT,0}, {dDeltaPos,DGD.dT/2,0}, {0,DGD.dT-dPlnProfT,0}, GDB_RT.GRID)
|
|
nLine2 = EgtLine ( nParLay, {0,DGD.dT-dPlnProfT,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
nToptSezPath = EgtCurveCompo( nParLay, {nLine1,nArc,nLine2}, true)
|
|
else
|
|
nToptSezPath = EgtArc3P( nParLay, {0,0,0}, {dDeltaPos,DGD.dT/2,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
else -- profilo SQ o FDWC
|
|
-- profilo sezione
|
|
nToptSezPath = EgtLine ( nParLay, {0,0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
|
|
-- disegno le swept sopra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
local nSwT = EgtSurfTmSwept( nParLay, nToptSezPath, nTopPath,false, 0.05)
|
|
|
|
-------------------------------
|
|
-- semi-profili inferiori
|
|
-------------------------------
|
|
local nBotPath, nBotPath2, nBotPathL, nBotPathR, nBotSezPath
|
|
-- griglia a sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
|
|
if sBotType == 'BD' or sBotType == 'BDEB' then
|
|
-- profilo sezione
|
|
nBotSezPath = EgtLine ( nParLay, {-(DGD.dT*TAN3),0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nBotPathL = EgtLine ( nParLay, {-(DGD.dW/4),(DGD.dT*TAN3),0}, {(DGD.dW/2),(DGD.dT*TAN3),0}, GDB_RT.GRID)
|
|
nBotPathR = EgtLine ( nParLay, {(DGD.dW/2),(DGD.dT*TAN3),0}, {(DGD.dW*1.25),(DGD.dT*TAN3),0}, GDB_RT.GRID)
|
|
elseif sBotType == 'BU' or sBotType == 'BUEB' then
|
|
-- profilo sezione
|
|
nBotSezPath = EgtLine ( nParLay, {0,0,0}, {-(DGD.dT*TAN3),DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nBotPathL = EgtLine ( nParLay, {-(DGD.dW/4),0,0}, {(DGD.dW/2),0,0}, GDB_RT.GRID)
|
|
nBotPathR = EgtLine ( nParLay, {(DGD.dW/2),0,0}, {(DGD.dW*1.25),0,0}, GDB_RT.GRID)
|
|
elseif sBotType == '1B' or sBotType == '2B' or sBotType == '3B' or sBotType == '4B' or
|
|
sBotType == '5B' or sBotType == '6B' or sBotType == '7B' or sBotType == '8B' then
|
|
local dDeltaPos = dRadProfB - sqrt( ( dRadProfB * dRadProfB) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
-- profilo sezione
|
|
nBotSezPath = EgtArc3P( nParLay, {-dDeltaPos,0,0}, {0,DGD.dT/2,0}, {-dDeltaPos,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nBotPathL = EgtLine ( nParLay, {-(DGD.dW/4),dDeltaPos,0}, {(DGD.dW/2),dDeltaPos,0}, GDB_RT.GRID)
|
|
nBotPathR = EgtLine ( nParLay, {(DGD.dW/2),dDeltaPos,0}, {(DGD.dW*1.25),dDeltaPos,0}, GDB_RT.GRID)
|
|
elseif sBotType == 'CV' then
|
|
local dDeltaPos = dRadProfB - sqrt( ( dRadProfB * dRadProfB) - (((DGD.dT/2)-dPlnProfB)*((DGD.dT/2)-dPlnProfB)))
|
|
-- profilo sezione
|
|
if dPlnProfB > 0 then
|
|
local nLine1, nLine2, nArc
|
|
nLine1 = EgtLine ( nParLay, {0,0,0}, {0,dPlnProfB,0}, GDB_RT.GRID)
|
|
nArc = EgtArc3P( nParLay, {0,dPlnProfB,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT-dPlnProfB,0}, GDB_RT.GRID)
|
|
nLine2 = EgtLine ( nParLay, {0,DGD.dT-dPlnProfB,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
nBotSezPath = EgtCurveCompo( nParLay, {nLine1,nArc,nLine2}, true)
|
|
else
|
|
nBotSezPath = EgtArc3P( nParLay, {0,0,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nBotPathL = EgtLine ( nParLay, {-(DGD.dW/4),0,0}, {(DGD.dW/2),0,0}, GDB_RT.GRID)
|
|
nBotPathR = EgtLine ( nParLay, {(DGD.dW/2),0,0}, {(DGD.dW*1.25),0,0}, GDB_RT.GRID)
|
|
else -- profilo SQ o FDWC
|
|
-- profilo sezione
|
|
nBotSezPath = EgtLine ( nParLay, {0,0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nBotPathL = EgtLine ( nParLay, {-(DGD.dW/4),0,0}, {(DGD.dW/2),0,0}, GDB_RT.GRID)
|
|
nBotPathR = EgtLine ( nParLay, {(DGD.dW/2),0,0}, {(DGD.dW*1.25),0,0}, GDB_RT.GRID)
|
|
end
|
|
-- disegno le swept inferiori
|
|
local nSwBL, nSwBR
|
|
nSwBL = EgtSurfTmSwept( nParLay, nBotSezPath, nBotPathL,false, 0.05)
|
|
nSwBR = EgtSurfTmSwept( nParLay, nBotSezPath, nBotPathR,false, 0.05)
|
|
|
|
-- profilo destro
|
|
local nRghtPath, nRghtSezPath
|
|
|
|
-- griglia in fronte
|
|
EgtSetGridFrame( Frame3d( DGD.dW,0,0, GDB_FR.FRONT))
|
|
|
|
if sRghtType == 'BD' or sRghtType == 'BDEB' then
|
|
-- profilo sezione
|
|
nRghtSezPath = EgtLine ( nParLay, {-(DGD.dT*TAN3),0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nRghtPath = EgtLine ( nParLay, {DGD.dW,-(DGD.dH*0.25),0}, {DGD.dW,(DGD.dH*1.25),0}, GDB_RT.GRID)
|
|
elseif sRghtType == 'BU' or sRghtType == 'BUEB' then
|
|
-- profilo sezione
|
|
nRghtSezPath = EgtLine ( nParLay, {0,0,0}, {-(DGD.dT*TAN3),DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nRghtPath = EgtLine ( nParLay, {DGD.dW-(DGD.dT*TAN3),-(DGD.dH*0.25),0}, {DGD.dW-(DGD.dT*TAN3),(DGD.dH*1.25),0}, GDB_RT.GRID)
|
|
elseif sRghtType == '1B' or sRghtType == '2B' or sRghtType == '3B' or sRghtType == '4B' or
|
|
sRghtType == '5B' or sRghtType == '6B' or sRghtType == '7B' or sRghtType == '8B' then
|
|
local dDeltaPos = dRadProfR - sqrt( ( dRadProfR * dRadProfR) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
-- profilo sezione
|
|
nRghtSezPath = EgtArc3P( nParLay, {-dDeltaPos,0,0}, {0,DGD.dT/2,0}, {-dDeltaPos,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nRghtPath = EgtLine ( nParLay, {DGD.dW-dDeltaPos,-(DGD.dH*0.25),0}, {DGD.dW-dDeltaPos,(DGD.dH*1.25),0}, GDB_RT.GRID)
|
|
elseif sRghtType == 'CV' then
|
|
local dDeltaPos = dRadProfR - sqrt( ( dRadProfR * dRadProfR) - (((DGD.dT/2)-dPlnProfR)*((DGD.dT/2)-dPlnProfR)))
|
|
-- profilo sezione
|
|
if dPlnProfR > 0 then
|
|
local nLine1, nLine2, nArc
|
|
nLine1 = EgtLine ( nParLay, {0,0,0}, {0,dPlnProfR,0}, GDB_RT.GRID)
|
|
nArc = EgtArc3P( nParLay, {0,dPlnProfR,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT-dPlnProfR,0}, GDB_RT.GRID)
|
|
nLine2 = EgtLine ( nParLay, {0,DGD.dT-dPlnProfR,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
nRghtSezPath = EgtCurveCompo( nParLay, {nLine1,nArc,nLine2}, true)
|
|
else
|
|
nRghtSezPath = EgtArc3P( nParLay, {0,0,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nRghtPath = EgtLine ( nParLay, {DGD.dW,-(DGD.dH*0.25),0}, {DGD.dW,(DGD.dH*1.25),0}, GDB_RT.GRID)
|
|
else -- profilo SQ o FDWC
|
|
-- profilo sezione
|
|
nRghtSezPath = EgtLine ( nParLay, {0,0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nRghtPath = EgtLine ( nParLay, {DGD.dW,-(DGD.dH*0.25),0}, {DGD.dW,(DGD.dH*1.25),0}, GDB_RT.GRID)
|
|
end
|
|
-- disegno la swept destra
|
|
local nSwR = EgtSurfTmSwept( nParLay, nRghtSezPath, nRghtPath,false, 0.05)
|
|
|
|
-- profilo sinistro
|
|
local nLftPath, nLftSezPath
|
|
|
|
-- griglia dietro
|
|
EgtSetGridFrame( Frame3d( 0,DGD.dH,0, GDB_FR.BACK))
|
|
|
|
if sLftType == 'BD' or sLftType == 'BDEB' then
|
|
-- profilo sezione
|
|
nLftSezPath = EgtLine ( nParLay, {-(DGD.dT*TAN3),0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nLftPath = EgtLine ( nParLay, {(DGD.dT*TAN3),(DGD.dH*1.25),0}, {(DGD.dT*TAN3),-(DGD.dH*0.25),0}, GDB_RT.GRID)
|
|
elseif sLftType == 'BU' or sLftType == 'BUEB' then
|
|
-- profilo sezione
|
|
nLftSezPath = EgtLine ( nParLay, {0,0,0}, {-(DGD.dT*TAN3),DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nLftPath = EgtLine ( nParLay, {0,(DGD.dH*1.25),0}, {0,-(DGD.dH*0.25),0}, GDB_RT.GRID)
|
|
elseif sLftType == '1B' or sLftType == '2B' or sLftType == '3B' or sLftType == '4B' or
|
|
sLftType == '5B' or sLftType == '6B' or sLftType == '7B' or sLftType == '8B' then
|
|
local dDeltaPos = dRadProfL - sqrt( ( dRadProfL * dRadProfL) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
-- profilo sezione
|
|
nLftSezPath = EgtArc3P( nParLay, {-dDeltaPos,0,0}, {0,DGD.dT/2,0}, {-dDeltaPos,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nLftPath = EgtLine ( nParLay, {dDeltaPos,(DGD.dH*1.25),0}, {dDeltaPos,-(DGD.dH*0.25),0}, GDB_RT.GRID)
|
|
elseif sLftType == 'CV' then
|
|
local dDeltaPos = dRadProfL - sqrt( ( dRadProfL * dRadProfL) - (((DGD.dT/2)-dPlnProf)*((DGD.dT/2)-dPlnProf)))
|
|
-- profilo sezione
|
|
if dPlnProf > 0 then
|
|
local nLine1, nLine2, nArc
|
|
nLine1 = EgtLine ( nParLay, {0,0,0}, {0,dPlnProf,0}, GDB_RT.GRID)
|
|
nArc = EgtArc3P( nParLay, {0,dPlnProf,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT-dPlnProf,0}, GDB_RT.GRID)
|
|
nLine2 = EgtLine ( nParLay, {0,DGD.dT-dPlnProf,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
nLftSezPath = EgtCurveCompo( nParLay, {nLine1,nArc,nLine2}, true)
|
|
else
|
|
nLftSezPath = EgtArc3P( nParLay, {0,0,0}, {-dDeltaPos,DGD.dT/2,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
end
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nLftPath = EgtLine ( nParLay, {0,(DGD.dH*1.25),0}, {0,-(DGD.dH*0.25),0}, GDB_RT.GRID)
|
|
else -- profilo SQ o FDWC
|
|
-- profilo sezione
|
|
nLftSezPath = EgtLine ( nParLay, {0,0,0}, {0,DGD.dT,0}, GDB_RT.GRID)
|
|
-- percorsi guida
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
nLftPath = EgtLine ( nParLay, {0,(DGD.dH*1.25),0}, {0,-(DGD.dH*0.25),0}, GDB_RT.GRID)
|
|
end
|
|
|
|
-- disegno la swept sinistra
|
|
local nSwL = EgtSurfTmSwept( nParLay, nLftSezPath, nLftPath,false, 0.05)
|
|
|
|
-- se ci sono tutte le swept procedo a rastremarle
|
|
if nSwT and nSwBL and nSwBR and nSwR and nSwL then
|
|
|
|
-- in base al profilo del top e se è in tangenza creo una superficie di appoggio
|
|
if DGD.TPL and sTopType ~= 'SQ' and sTopType ~= 'EB' and sTopType ~= 'FDWC' then
|
|
local nLine1, nLine2, nSwTmp
|
|
nLine1 = EgtLine( nParLay, {(DGD.dW/2),DGD.AMl,0}, {(DGD.dW/2),DGD.AMl,DGD.dT})
|
|
nLine2 = EgtLine( nParLay, {-100,DGD.AMl,0}, {-100,DGD.AMl,DGD.dT})
|
|
-- nLine1 = EgtLine( nParLay, {(DGD.Lda+DGD.dT),DGD.Adl+(DGD.dT*tan(60)),0}, {(DGD.Lua+DGD.dT),DGD.Aul+(DGD.dT*tan(60)),DGD.dT})
|
|
-- nLine2 = EgtLine( nParLay, {-10,DGD.Adl-((10+DGD.Lda)*tan(60)),0}, {-10,DGD.Aul-((10+DGD.Lua)*tan(60)),DGD.dT})
|
|
nSwTmp = EgtSurfTmRuled( nParLay, nLine2, nLine1, 0.05)
|
|
|
|
if bDelete then
|
|
EgtErase( nLine1)
|
|
EgtErase( nLine2)
|
|
end
|
|
|
|
-- somma tra le due superfici
|
|
EgtSurfTmAdd(nSwT,nSwTmp)
|
|
if nSwT then -- se ho una superficie sommata cancello la seconda
|
|
EgtErase( nSwTmp)
|
|
end
|
|
end
|
|
|
|
-- estrapolo il percorso intersezione
|
|
EgtSurfTmSurfTmInters(nSwL,nSwT,nParLay)
|
|
-- trimmo la swept sinistra con la superiore
|
|
EgtSurfTmIntersect(nSwL,nSwT)
|
|
if nSwL then -- se ho una superficie trimmata cancello la seconda
|
|
-- EgtOutBox( 'trim ok', 'Trim', 'Trim')
|
|
EgtErase( nSwT)
|
|
else
|
|
-- EgtOutBox( 'trim bad', 'Error Trim', 'Error Trim')
|
|
return false
|
|
end
|
|
|
|
-- in base al profilo del top e se è in tangenza creo una superficie di appoggio
|
|
if DGD.TPR and sTopType ~= 'SQ' and sTopType ~= 'EB' and sTopType ~= 'FDWC' then
|
|
local nLine1, nLine2, nSwTmp
|
|
nLine1 = EgtLine( nParLay, {DGD.dW+100,DGD.AMr,0}, {DGD.dW+100,DGD.AMr,DGD.dT})
|
|
nLine2 = EgtLine( nParLay, {(DGD.dW/2),DGD.AMr,0}, {(DGD.dW/2),DGD.AMr,DGD.dT})
|
|
-- nLine1 = EgtLine( nParLay, {DGD.dW+10,DGD.Adr-((DGD.dW-DGD.Rda+10)*tan(60)),0}, {DGD.dW+10,DGD.Aur-((DGD.dW-DGD.Rua+10)*tan(60)),DGD.dT})
|
|
-- nLine2 = EgtLine( nParLay, {(DGD.Rda-DGD.dT),DGD.Adr+(DGD.dT*tan(60)),0}, {(DGD.Rua-DGD.dT),DGD.Aur+(DGD.dT*tan(60)),DGD.dT})
|
|
nSwTmp = EgtSurfTmRuled( nParLay, nLine2, nLine1, 0.05)
|
|
|
|
if bDelete then
|
|
EgtErase( nLine1)
|
|
EgtErase( nLine2)
|
|
end
|
|
|
|
-- somma tra le due superfici
|
|
EgtSurfTmAdd(nSwL,nSwTmp)
|
|
if nSwL then -- se ho una superficie sommata cancello la seconda
|
|
EgtErase( nSwTmp)
|
|
end
|
|
end
|
|
|
|
--debug
|
|
-- EgtSaveFile( sNgeFile)
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
|
|
-- estrapolo il percorso intersezione
|
|
EgtSurfTmSurfTmInters(nSwL,nSwR,nParLay)
|
|
-- trimmo la swept sinistra/superiore con la destra
|
|
EgtSurfTmIntersect(nSwL,nSwR)
|
|
if nSwL then -- se ho una superficie trimmata cancello la seconda
|
|
EgtErase( nSwR)
|
|
else
|
|
return false
|
|
end
|
|
|
|
-- estrapolo il percorso intersezione
|
|
EgtSurfTmSurfTmInters(nSwL,nSwBL,nParLay)
|
|
-- trimmo la swept sinistra/superiore/destra con la swept inferiore sinistra
|
|
EgtSurfTmIntersect(nSwL,nSwBL)
|
|
if nSwL then -- se ho una superficie trimmata cancello la seconda
|
|
EgtErase( nSwBL)
|
|
else
|
|
return false
|
|
end
|
|
|
|
-- estrapolo il percorso intersezione
|
|
EgtSurfTmSurfTmInters(nSwL,nSwBR,nParLay)
|
|
-- trimmo la swept inferiore destra con la restante swept
|
|
EgtSurfTmIntersect(nSwL,nSwBR)
|
|
if nSwL then -- se ho una superficie trimmata cancello la seconda
|
|
EgtErase( nSwBR)
|
|
else
|
|
return false
|
|
end
|
|
|
|
EgtSetName( nSwL, sSideName)
|
|
|
|
--debug
|
|
-- EgtSaveFile( sNgeFile)
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
|
|
if bDelete then
|
|
-- cancello eventuali percorsi di costruzione
|
|
if nTopPath then
|
|
EgtErase(nTopPath)
|
|
end
|
|
if nToptSezPath then
|
|
EgtErase(nToptSezPath)
|
|
end
|
|
if nBotPathL then
|
|
EgtErase(nBotPathL)
|
|
end
|
|
if nBotPathR then
|
|
EgtErase(nBotPathR)
|
|
end
|
|
if nBotSezPath then
|
|
EgtErase(nBotSezPath)
|
|
end
|
|
if nRghtPath then
|
|
EgtErase(nRghtPath)
|
|
end
|
|
if nRghtSezPath then
|
|
EgtErase(nRghtSezPath)
|
|
end
|
|
if nLftPath then
|
|
EgtErase(nLftPath)
|
|
end
|
|
if nLftSezPath then
|
|
EgtErase(nLftSezPath)
|
|
end
|
|
end
|
|
|
|
return true, ptMedArc, bJoinRgt, bJoinLft
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
local function CreateDoor()
|
|
|
|
local bInactive
|
|
|
|
-- determinazione lato serratura
|
|
if DGD.sSwing == 'RH' or DGD.sSwing == 'RHR' or DGD.sSwing == 'RHA' or
|
|
DGD.sSwing == 'RHRI' or DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRA' then
|
|
DGD.Lock = 'L'
|
|
else
|
|
DGD.Lock = 'R'
|
|
end
|
|
|
|
-- determinazione se apertura a spingere o tirare
|
|
if DGD.sSwing == 'RH' or DGD.sSwing == 'RHA' or DGD.sSwing == 'RHI' or
|
|
DGD.sSwing == 'LH' or DGD.sSwing == 'LHI' or DGD.sSwing == 'LHA' then
|
|
DGD.Push = true
|
|
else
|
|
DGD.Push = false
|
|
end
|
|
|
|
if DGD.sSwing == 'LHI' or DGD.sSwing == 'RHI' or
|
|
DGD.sSwing == 'RHRI' or DGD.sSwing == 'LHRI' then
|
|
bInactive = true
|
|
end
|
|
|
|
local sLocalLockPrf = DGD.tProfs.lockedge.trimming
|
|
local sLocalHingeProf = DGD.tProfs.hingeedge.trimming
|
|
|
|
if string.find( DGD.tProfs.lockedge.trimming, 'BU') then
|
|
sLocalLockPrf = 'BU'
|
|
elseif string.find( DGD.tProfs.lockedge.trimming, 'BD') then
|
|
sLocalLockPrf = 'BD'
|
|
end
|
|
if string.find( DGD.tProfs.hingeedge.trimming, 'BU') then
|
|
sLocalHingeProf = 'BU'
|
|
elseif string.find( DGD.tProfs.hingeedge.trimming, 'BD') then
|
|
sLocalHingeProf = 'BD'
|
|
end
|
|
|
|
-- Se porta inattiva
|
|
if bInactive then
|
|
-- Premessa: per definizione il profilo scritto indica la disposizione voluta, quindi se un profilo bevel è in opposizione
|
|
-- al parametro secure, allora indica il profilo opposto.
|
|
-- Se profilo serratura opposto al secure e diverso dal profilo hinge
|
|
if ( ( DGD.Push and DGD.sSecSide == 'UP' and sLocalLockPrf == 'BU' ) or
|
|
( DGD.Push and DGD.sSecSide == 'DN' and sLocalLockPrf == 'BD' ) or
|
|
( not DGD.Push and DGD.sSecSide == 'DN' and sLocalLockPrf == 'BU' ) or
|
|
( not DGD.Push and DGD.sSecSide == 'UP' and sLocalLockPrf == 'BD' ) ) and
|
|
sLocalHingeProf ~= sLocalLockPrf then
|
|
DGD.bBothOppoBevel = true
|
|
else
|
|
DGD.bBothOppoBevel = false
|
|
end
|
|
else
|
|
-- determino se ho entrambe profili bevel e diversi tra loro
|
|
DGD.bBothOppoBevel = ( sLocalLockPrf == 'BU' or sLocalLockPrf == 'BD') and
|
|
( sLocalHingeProf == 'BU' or sLocalHingeProf == 'BD') and
|
|
( sLocalHingeProf ~= sLocalLockPrf)
|
|
end
|
|
|
|
-- se porta non inactive e profilo hinge e lock con bevel discordanti emetto warning
|
|
if not bInactive and DGD.bBothOppoBevel then
|
|
-- Warning con outbox
|
|
DoorOutLog( string.format( EgtDoorsMsg[500], DGD.sSwing, DGD.tProfs.hingeedge.trimming, DGD.tProfs.lockedge.trimming), 0)
|
|
EgtOutBox( string.format(EgtDoorsMsg[500], DGD.sSwing, DGD.tProfs.hingeedge.trimming, DGD.tProfs.lockedge.trimming), EgtDoorsMsg[501], EgtDoorsMsg[502])
|
|
end
|
|
|
|
-- verifico congruenza tra presenza di profili bevel ed eventuale parametro 'secure'
|
|
local sBevelPrf
|
|
if sLocalHingeProf == 'BU' then sBevelPrf = 'BU' end
|
|
if not sBevelPrf and sLocalHingeProf == 'BD' then sBevelPrf = 'BD' end
|
|
if not sBevelPrf and sLocalLockPrf == 'BU' then sBevelPrf = 'BU' end
|
|
if not sBevelPrf and sLocalLockPrf == 'BD' then sBevelPrf = 'BD' end
|
|
|
|
-- casi di parametri incongruenti ( solo su porta, nei frame il secure è sempre DN)
|
|
if DGD.sSecSide and sBevelPrf then -- se profilo bevel e parametro secure esistenti
|
|
if not DGD.sFrame then
|
|
if ( DGD.Push and sBevelPrf == 'BU' and DGD.sSecSide == 'UP' and not DGD.bBothOppoBevel) or
|
|
( DGD.Push and sBevelPrf == 'BD' and DGD.sSecSide == 'DN' and not DGD.bBothOppoBevel) or
|
|
( not DGD.Push and sBevelPrf == 'BU' and DGD.sSecSide == 'DN' and not DGD.bBothOppoBevel) or
|
|
( not DGD.Push and sBevelPrf == 'BD' and DGD.sSecSide == 'UP' and not DGD.bBothOppoBevel) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[544], DGD.sSwing, sBevelPrf, DGD.sSecSide), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[544], DGD.sSwing, sBevelPrf, DGD.sSecSide), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
end
|
|
-- se non c'è il profilo bevel e neppure il secure
|
|
elseif ( not DGD.sSecSide or #DGD.sSecSide == 0) and not sBevelPrf and DGD.MachEn > 0 then
|
|
DoorOutLog( EgtDoorsMsg[545], 0)
|
|
EgtOutBox( EgtDoorsMsg[545], EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
|
|
-- casi di incongruenza per frame: se posizione nel ddf non corrisponde con swing e tipo frame
|
|
if DGD.sFrame then
|
|
-- se frame sinistro
|
|
if nTypePiece == 3 then
|
|
-- se tipo hinge e lato serratura sinistro o tipo lock e lato serratura destro, incongruenza
|
|
if ( ( DGD.sFrame == 'H' or DGD.sFrame == 'HE') and DGD.Lock == 'L') or
|
|
( ( DGD.sFrame == 'L' or DGD.sFrame == 'LE') and DGD.Lock == 'R') then
|
|
DoorOutLog( string.format( EgtDoorsMsg[609],EgtDoorsMsg[605], DGD.sFrame, DGD.Lock), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[609], EgtDoorsMsg[605], DGD.sFrame, DGD.Lock), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
-- se frame destro
|
|
elseif nTypePiece == 4 then
|
|
-- se tipo hinge e lato serratura destro o tipo lock e lato serratura sinistro, incongruenza
|
|
if ( ( DGD.sFrame == 'H' or DGD.sFrame == 'HE') and DGD.Lock == 'R') or
|
|
( ( DGD.sFrame == 'L' or DGD.sFrame == 'LE') and DGD.Lock == 'L') then
|
|
DoorOutLog( string.format( EgtDoorsMsg[609],EgtDoorsMsg[606], DGD.sFrame, DGD.Lock), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[609], EgtDoorsMsg[606], DGD.sFrame, DGD.Lock), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
-- se frame top
|
|
elseif nTypePiece == 5 then
|
|
-- se tipo non top incongruenza
|
|
if DGD.nTypePz ~= 5 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[609],EgtDoorsMsg[607], DGD.sFrame, '-'), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[609], EgtDoorsMsg[607], DGD.sFrame, '-'), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
-- se frame bottom
|
|
elseif nTypePiece == 6 then
|
|
-- se tipo non bottom incongruenza
|
|
if DGD.nTypePz ~= 6 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[609],EgtDoorsMsg[608], DGD.sFrame, '-'), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[609], EgtDoorsMsg[608], DGD.sFrame, '-'), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
end
|
|
else
|
|
-- setto la variabile che indica che il top è effettivamente ad angolo e
|
|
-- il lato piatto è minore della larghezza porta - un delta
|
|
DGD.Tpa = DGD.tProfs.top.angle and abs(DGD.tProfs.top.angle) >= GEO.EPS_SMALL
|
|
DGD.Tpa = DGD.Tpa and DGD.tProfs.top.xdeltapos and DGD.tProfs.top.xdeltapos < ( DGD.dW - (2* DGD.dT * TAN3))
|
|
-- se porta ad arco o con angolo con probe attivato do errore
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and ( DGD.PROBE > 0 and DGC.NPM == 0) then
|
|
DoorOutLog( EgtDoorsMsg[628], 0)
|
|
EgtOutBox( EgtDoorsMsg[628], EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 0
|
|
end
|
|
end
|
|
|
|
-- setto le variabili profili per edge break (EB)
|
|
local tEbThProf = {}
|
|
local sFoundProfEb = ''
|
|
local sProfName = ''
|
|
|
|
-- verifico (e correggo) se variabile globale per dimensione piano su profilo CV si avvicina alla metà spessore porta
|
|
if DGC.CVP and DGC.CVP >= ( DGD.dT*0.45) then DGC.CVP = 0 end
|
|
|
|
-- tipo profilo lato sinistro
|
|
local sLeftType = GetRealEdgeTrimming( 'L')
|
|
local dRadProf = 0
|
|
local dPlnProf = 0
|
|
-- se profilo tondo ottengo il raggio per il confronto con lo spessore porta
|
|
if sLeftType == '1B' then dRadProf = DGC.B1 end
|
|
if sLeftType == '2B' then dRadProf = DGC.B2 end
|
|
if sLeftType == '3B' then dRadProf = DGC.B3 end
|
|
if sLeftType == '4B' then dRadProf = DGC.B4 end
|
|
if sLeftType == '5B' then dRadProf = DGC.B5 end
|
|
if sLeftType == '6B' then dRadProf = DGC.B6 end
|
|
if sLeftType == '7B' then dRadProf = DGC.B7 end
|
|
if sLeftType == '8B' then dRadProf = DGC.B8 end
|
|
if sLeftType == 'CV' then dRadProf = DGC.CV end
|
|
if sLeftType == 'CV' then dPlnProf = DGC.CVP or 0 end
|
|
local dRadProfL = dRadProf
|
|
-- se profilo edge break ottengo la tabella con gli spessori dei profili con gli errori per ogni profilo
|
|
if sLeftType == 'EB' or sLeftType == 'BUEB' or sLeftType == 'BDEB' then
|
|
tEbThProf = DGC.EB
|
|
sFoundProfEb = EgtIf( DGD.Lock == 'L', EgtDoorsMsg[519], EgtDoorsMsg[518]) .. ',' .. sFoundProfEb
|
|
sProfName = sLeftType
|
|
end
|
|
|
|
if (sLeftType == 'BD' or sLeftType == 'BDEB' or sLeftType == 'BU' or sLeftType == 'BUEB') and not DGD.sFrame then
|
|
-- se lato sinistro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'L' and ( DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
-- inverto il profilo
|
|
sLeftType = SetInvertEdgeTrimming(sLeftType)
|
|
end
|
|
end
|
|
|
|
-- tipo profilo lato destro
|
|
local sRightType = GetRealEdgeTrimming( 'R')
|
|
local dRadProfR = 0
|
|
local dPlnProfR = 0
|
|
-- se profilo tondo ottengo il raggio per il confronto con lo spessore porta
|
|
if sRightType == '1B' then dRadProfR = DGC.B1 end
|
|
if sRightType == '2B' then dRadProfR = DGC.B2 end
|
|
if sRightType == '3B' then dRadProfR = DGC.B3 end
|
|
if sRightType == '4B' then dRadProfR = DGC.B4 end
|
|
if sRightType == '5B' then dRadProfR = DGC.B5 end
|
|
if sRightType == '6B' then dRadProfR = DGC.B6 end
|
|
if sRightType == '7B' then dRadProfR = DGC.B7 end
|
|
if sRightType == '8B' then dRadProfR = DGC.B8 end
|
|
if sRightType == 'CV' then dRadProfR = DGC.CV end
|
|
if sRightType == 'CV' then dPlnProfR = DGC.CVP or 0 end
|
|
-- se profilo edge break ottengo la tabella con gli spessori dei profili con gli errori per ogni profilo
|
|
if sRightType == 'EB' or sRightType == 'BUEB' or sRightType == 'BDEB' then
|
|
tEbThProf = DGC.EB
|
|
sFoundProfEb = EgtIf( DGD.Lock == 'L', EgtDoorsMsg[518], EgtDoorsMsg[519]) .. ',' .. sFoundProfEb
|
|
sProfName = sRightType
|
|
end
|
|
|
|
if ( sRightType == 'BD' or sRightType == 'BDEB' or sRightType == 'BU' or sRightType == 'BUEB') and not DGD.sFrame then
|
|
-- se lato destro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'R' and ( DGD.sSwing == 'LHI' or DGD.sSwing == 'LHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
-- inverto il profilo
|
|
sRightType = SetInvertEdgeTrimming(sRightType)
|
|
end
|
|
end
|
|
|
|
-- tipo profilo lato top
|
|
local sTopType = GetRealEdgeTrimming( 'T')
|
|
local dRadProfT = 0
|
|
local dPlnProfT = 0
|
|
-- se profilo tondo ottengo il raggio per il confronto con lo spessore porta
|
|
if sTopType == '1B' then dRadProfT = DGC.B1 end
|
|
if sTopType == '2B' then dRadProfT = DGC.B2 end
|
|
if sTopType == '3B' then dRadProfT = DGC.B3 end
|
|
if sTopType == '4B' then dRadProfT = DGC.B4 end
|
|
if sTopType == '5B' then dRadProfT = DGC.B5 end
|
|
if sTopType == '6B' then dRadProfT = DGC.B6 end
|
|
if sTopType == '7B' then dRadProfT = DGC.B7 end
|
|
if sTopType == '8B' then dRadProfT = DGC.B8 end
|
|
if sTopType == 'CV' then dRadProfT = DGC.CV end
|
|
if sTopType == 'CV' then dPlnProfT = DGC.CVP or 0 end
|
|
-- se profilo edge break ottengo la tabella con gli spessori dei profili con gli errori per ogni profilo
|
|
if sTopType == 'EB' or sTopType == 'BUEB' or sTopType == 'BDEB' then
|
|
tEbThProf = DGC.EB
|
|
sFoundProfEb = EgtDoorsMsg[607] .. ',' .. sFoundProfEb
|
|
sProfName = sTopType
|
|
end
|
|
|
|
-- tipo profilo lato bottom
|
|
local sBotType = GetRealEdgeTrimming( 'B')
|
|
local dRadProfB = 0
|
|
local dPlnProfB = 0
|
|
-- se profilo tondo ottengo il raggio per il confronto con lo spessore porta
|
|
if sBotType == '1B' then dRadProfB = DGC.B1 end
|
|
if sBotType == '2B' then dRadProfB = DGC.B2 end
|
|
if sBotType == '3B' then dRadProfB = DGC.B3 end
|
|
if sBotType == '4B' then dRadProfB = DGC.B4 end
|
|
if sBotType == '5B' then dRadProfB = DGC.B5 end
|
|
if sBotType == '6B' then dRadProfB = DGC.B6 end
|
|
if sBotType == '7B' then dRadProfB = DGC.B7 end
|
|
if sBotType == '8B' then dRadProfB = DGC.B8 end
|
|
if sBotType == 'CV' then dRadProfB = DGC.CV end
|
|
if sBotType == 'CV' then dPlnProfB = DGC.CVP or 0 end
|
|
-- se profilo edge break ottengo la tabella con gli spessori dei profili con gli errori per ogni profilo
|
|
if sBotType == 'EB' or sTopType == 'BUEB' or sTopType == 'BDEB' then
|
|
tEbThProf = DGC.EB
|
|
sFoundProfEb = EgtDoorsMsg[644] .. ',' .. sFoundProfEb
|
|
sProfName = sBotType
|
|
end
|
|
|
|
------------------------------------------------------------------------------
|
|
-- verifica se il profilo EB è stato configurato nel file CurrDoorsCustomData
|
|
------------------------------------------------------------------------------
|
|
if not tEbThProf and #sFoundProfEb > 0 then
|
|
local sErrMess = string.format( EgtDoorsMsg[667], sProfName, sFoundProfEb)
|
|
return false, 2, sErrMess
|
|
end
|
|
|
|
------------------------------------------------------------------------------
|
|
-- verifica del profilo EB nei lati destro, sinistro, sopra e sotto
|
|
-- in caso lo spessore è compatibile con uno dei profili, viene ridefinito anche
|
|
-- il valore della variabile di massimo errore ammesso sullo spessore tastato: DGC.Dt
|
|
------------------------------------------------------------------------------
|
|
-- se ho un profilo edge break (EB) verifico se gli spessori profili sono congruenti con lo spessore porta
|
|
if #tEbThProf > 0 then
|
|
|
|
local bMatchprofile
|
|
|
|
if #DGD.EBP > 0 then -- se ho già settato la compatibilità di profilo, evito di ricalcolarla
|
|
bMatchprofile = true
|
|
else
|
|
for i = 1, #tEbThProf do
|
|
-- se lo spessore porta è compreso tra lo spessore profilo + o - la tolleranza esco con match a true
|
|
if DGD.dT <= ( tEbThProf[i][1] + tEbThProf[i][2]) and DGD.dT >= ( tEbThProf[i][1] - tEbThProf[i][2]) then
|
|
bMatchprofile = true
|
|
DGD.EBP = string.format( '%s', i) -- setto la variabile globale con il numero profilo congruente
|
|
-- reinizializzo la variabile di errore massimo in tastatura dello spessore
|
|
if not DGD.sFrame and DGD.PROBE == 2 then
|
|
DGC.Dt = tEbThProf[i][2]
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
if not bMatchprofile then
|
|
local sListThProf = '('
|
|
for i = 1, #tEbThProf do
|
|
sListThProf = sListThProf .. string.format( EgtDoorsMsg[642], i, EgtToUiUnits(tEbThProf[i][1])) .. ','
|
|
end
|
|
sListThProf = sListThProf .. ')'
|
|
local sErrMess = string.format( EgtDoorsMsg[643], sProfName, sFoundProfEb, EgtToUiUnits(DGD.dT), sProfName, sListThProf)
|
|
return false, 2, sErrMess
|
|
end
|
|
end
|
|
|
|
-- se non è un frame e la tabella è completa, ricreo pezzo porta
|
|
if not DGD.sFrame and DGD.PROBE == 2 then
|
|
|
|
-- ricostruisco la geometria porta dai punti tastati
|
|
local dLungMax, dLarghMax = RemakeDoor( sLeftType, dRadProf, sRightType, dRadProfR, dPlnProf, dPlnProfR)
|
|
bRemake = true -- setto il flag per indicare che la funzione RemakeDoor è stata fatta
|
|
|
|
-- verifico se le dimensioni ricavate differiscono molto dalle dimensioni originarie
|
|
if ( abs( dLungMax - DGD.dH) > DGC.Dh) or ( abs( dLarghMax - DGD.dW) > DGC.Dw) or
|
|
( abs( tProbeDoor.PZ - DGD.dT) > DGC.Dt) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[629],
|
|
EgtNumToString( EgtToUiUnits(dLungMax), 4), EgtNumToString( EgtToUiUnits(dLarghMax), 4), EgtNumToString( EgtToUiUnits(tProbeDoor.PZ), 4),
|
|
EgtToUiUnits(DGC.Dh), EgtToUiUnits(DGC.Dw), EgtToUiUnits(DGC.Dt),
|
|
EgtToUiUnits(DGD.dH), EgtToUiUnits(DGD.dW), EgtToUiUnits(DGD.dT)), 0)
|
|
EgtOutBox( string.format( EgtDoorsMsg[629],
|
|
EgtNumToString( EgtToUiUnits(dLungMax), 4), EgtNumToString( EgtToUiUnits(dLarghMax), 4), EgtNumToString( EgtToUiUnits(tProbeDoor.PZ), 4),
|
|
EgtToUiUnits(DGC.Dh), EgtToUiUnits(DGC.Dw), EgtToUiUnits(DGC.Dt),
|
|
EgtToUiUnits(DGD.dH), EgtToUiUnits(DGD.dW), EgtToUiUnits(DGD.dT)), EgtDoorsMsg[476], EgtDoorsMsg[477])
|
|
return false, 1
|
|
else -- altrimenti le dimensioni accettate, scrivo le note con le dimensioni calcolate
|
|
EgtSetInfo( DGD.PZ, 'ProbeDoorWidth', EgtToUiUnits(dLarghMax))
|
|
EgtSetInfo( DGD.PZ, 'ProbeDoorHeight', EgtToUiUnits(dLungMax))
|
|
EgtSetInfo( DGD.PZ, 'ProbeDoorThick', EgtToUiUnits(tProbeDoor.PZ))
|
|
end
|
|
end
|
|
|
|
-----------------
|
|
-- lato sinistro
|
|
-----------------
|
|
|
|
-- assegno a variabile globale
|
|
if DGD.Lock == 'R' then
|
|
DGD.RPH = dRadProf
|
|
DGD.PPH = dPlnProf
|
|
DGD.RPL = dRadProfR
|
|
DGD.PPL = dPlnProfR
|
|
end
|
|
|
|
-- verifico se lo spessore porta è congruente con il raggio profilo
|
|
if dRadProf > 0 then
|
|
if ( DGD.dT - (2*dPlnProf)) > (2*dRadProf) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[433], ( DGD.dT - (2*dPlnProf)), sLeftType, dRadProf), 0)
|
|
return false, 0
|
|
end
|
|
end
|
|
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 5 then -- se frame SX o TOP
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Urb = DGD.dT
|
|
DGD.Ult = DGD.dT
|
|
DGD.Urt = DGD.dT
|
|
elseif nTypePiece == 4 or nTypePiece == 6 then -- se frame DX o BOTTOM
|
|
DGD.Drb = 0
|
|
DGD.Dlb = 0
|
|
DGD.Drt = 0
|
|
DGD.Dlt = 0
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Lut = DGD.P7:getX()
|
|
DGD.Lub = DGD.P1:getX()
|
|
DGD.Ldt = DGD.P10:getX()
|
|
DGD.Ldb = DGD.P4:getX()
|
|
else
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
end
|
|
end
|
|
elseif sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB'then
|
|
if DGD.sFrame then
|
|
-- se frame left e BD
|
|
if ( nTypePiece == 3 and ( sLeftType == 'BD' or sLeftType == 'BDEB')) then
|
|
DGD.Ulb = DGD.dT - ( DGD.dW * TAN3)
|
|
DGD.Ult = DGD.Ulb
|
|
DGD.Urb = DGD.dT
|
|
DGD.Urt = DGD.dT
|
|
-- se frame left e BU
|
|
elseif ( nTypePiece == 3 and ( sLeftType == 'BU' or sLeftType == 'BUEB')) then
|
|
DGD.Urb = DGD.dT - ( DGD.dW * TAN3)
|
|
DGD.Urt = DGD.Urb
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Ult = DGD.dT
|
|
-- se frame right e BD
|
|
elseif ( nTypePiece == 4 and ( sLeftType == 'BD' or sLeftType == 'BDEB')) then
|
|
DGD.Dlb = 0
|
|
DGD.Dlt = 0
|
|
DGD.Drb = ( DGD.dW * TAN3)
|
|
DGD.Drt = DGD.Drb
|
|
-- se frame right e BU
|
|
elseif ( nTypePiece == 4 and ( sLeftType == 'BU' or sLeftType == 'BUEB')) then
|
|
DGD.Drb = 0
|
|
DGD.Drt = 0
|
|
DGD.Dlb = ( DGD.dW * TAN3)
|
|
DGD.Dlt = DGD.Dlb
|
|
elseif nTypePiece == 5 then -- se frame top
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Urb = DGD.dT
|
|
DGD.Ult = DGD.dT - ( DGD.dH * TAN3)
|
|
DGD.Urt = DGD.Ult
|
|
elseif sLeftType == 'BU' or sLeftType == 'BUEB' then
|
|
DGD.Ulb = DGD.dT - ( DGD.dH * TAN3)
|
|
DGD.Urb = DGD.Ulb
|
|
DGD.Ult = DGD.dT
|
|
DGD.Urt = DGD.dT
|
|
end
|
|
elseif nTypePiece == 6 then -- se frame bottom
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
DGD.Drb = ( DGD.dH * TAN3)
|
|
DGD.Dlb = DGD.Drb
|
|
DGD.Drt = 0
|
|
DGD.Dlt = 0
|
|
elseif sLeftType == 'BU' or sLeftType == 'BUEB' then
|
|
DGD.Drb = 0
|
|
DGD.Dlb = 0
|
|
DGD.Drt = ( DGD.dH * TAN3)
|
|
DGD.Dlt = DGD.Drt
|
|
end
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Lut = DGD.P7:getX()
|
|
DGD.Lub = DGD.P1:getX()
|
|
DGD.Ldt = DGD.P10:getX()
|
|
DGD.Ldb = DGD.P4:getX()
|
|
else
|
|
-- se lato sinistro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'L' and ( DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
if DGD.Push then
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Ldt = DGD.dT * TAN3
|
|
DGD.Ldb = DGD.Ldt
|
|
else
|
|
DGD.Lut = DGD.dT * TAN3
|
|
DGD.Lub = DGD.Lut
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
end
|
|
else -- altrimenti normale
|
|
if DGD.Push then
|
|
DGD.Lut = DGD.dT * TAN3
|
|
DGD.Lub = DGD.Lut
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
else
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Ldt = DGD.dT * TAN3
|
|
DGD.Ldb = DGD.Ldt
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif sLeftType == '1B' or sLeftType == '2B' or sLeftType == '3B' or sLeftType == '4B' or
|
|
sLeftType == '5B' or sLeftType == '6B' or sLeftType == '7B' or sLeftType == '8B' then
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Lut = DGD.P7:getX()
|
|
DGD.Lub = DGD.P1:getX()
|
|
DGD.Ldt = DGD.P10:getX()
|
|
DGD.Ldb = DGD.P4:getX()
|
|
DGD.Lmb = DGD.P5:getX()
|
|
DGD.Lmt = DGD.P11:getX()
|
|
else
|
|
DGD.Lut = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
DGD.Lub = DGD.Lut
|
|
DGD.Ldt = DGD.Lut
|
|
DGD.Ldb = DGD.Lut
|
|
DGD.Lm = 0
|
|
end
|
|
elseif sLeftType == 'CV' then
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Lut = DGD.P7:getX()
|
|
DGD.Lub = DGD.P1:getX()
|
|
DGD.Ldt = DGD.P10:getX()
|
|
DGD.Ldb = DGD.P4:getX()
|
|
DGD.Lmb = DGD.P5:getX()
|
|
DGD.Lmt = DGD.P11:getX()
|
|
else
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
DGD.Lm = dRadProf - sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProf)*((DGD.dT/2)-dPlnProf)))
|
|
end
|
|
end
|
|
|
|
-- setto punti relativi allo spessore
|
|
SetFrameThickValues( true)
|
|
|
|
-----------------
|
|
-- lato destro
|
|
-----------------
|
|
|
|
-- assegno a variabile globale
|
|
if DGD.Lock == 'L' then
|
|
DGD.RPH = dRadProfR
|
|
DGD.PPH = dPlnProfR
|
|
DGD.RPL = dRadProf
|
|
DGD.PPL = dPlnProf
|
|
end
|
|
|
|
dRadProf = dRadProfR -- assegno il valore del raggio profilo
|
|
|
|
-- verifico se lo spessore porta è congruente con il raggio profilo
|
|
if dRadProf > 0 then
|
|
if ( DGD.dT - (2*dPlnProfR)) > (2*dRadProf) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[433], ( DGD.dT - (2*dPlnProfR)), sRightType, dRadProf), 0)
|
|
return false, 0
|
|
end
|
|
end
|
|
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 5 then -- se frame SX o TOP
|
|
DGD.Drb = 0
|
|
DGD.Dlb = 0
|
|
DGD.Drt = 0
|
|
DGD.Dlt = 0
|
|
elseif nTypePiece == 4 or nTypePiece == 6 then -- se frame DX o BOTTOM
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Urb = DGD.dT
|
|
DGD.Ult = DGD.dT
|
|
DGD.Urt = DGD.dT
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Rub = DGD.P2:getX()
|
|
DGD.Rut = DGD.P8:getX()
|
|
DGD.Rdb = DGD.P3:getX()
|
|
DGD.Rdt = DGD.P9:getX()
|
|
else
|
|
DGD.Rub = DGD.dW
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
DGD.Rdt = DGD.dW
|
|
end
|
|
end
|
|
elseif sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' then
|
|
|
|
if DGD.sFrame then
|
|
-- se frame left e BD
|
|
if ( nTypePiece == 3 and ( sRightType == 'BD' or sRightType == 'BDEB')) then
|
|
DGD.Dlb = ( DGD.dW * TAN3)
|
|
DGD.Dlt = DGD.Dlb
|
|
DGD.Drb = 0
|
|
DGD.Drt = 0
|
|
-- se frame left e BU
|
|
elseif ( nTypePiece == 3 and ( sLeftType == 'BU' or sLeftType == 'BUEB')) then
|
|
DGD.Drb = ( DGD.dW * TAN3)
|
|
DGD.Drt = DGD.Drb
|
|
DGD.Dlb = 0
|
|
DGD.Dlt = 0
|
|
-- se frame right e BU
|
|
elseif ( nTypePiece == 4 and ( sRightType == 'BU' or sRightType == 'BUEB')) then
|
|
DGD.Ulb = DGD.dT - ( DGD.dW * TAN3)
|
|
DGD.Ult = DGD.Ulb
|
|
DGD.Urb = DGD.dT
|
|
DGD.Urt = DGD.dT
|
|
-- se frame right e BD
|
|
elseif ( nTypePiece == 4 and ( sRightType == 'BD' or sRightType == 'BDEB')) then
|
|
DGD.Urb = DGD.dT - ( DGD.dW * TAN3)
|
|
DGD.Urt = DGD.Urb
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Ult = DGD.dT
|
|
elseif nTypePiece == 5 then -- se frame top
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
DGD.Dlb = 0
|
|
DGD.Drb = 0
|
|
DGD.Dlt = ( DGD.dH * TAN3)
|
|
DGD.Drt = DGD.Dlt
|
|
elseif sRightType == 'BU' or sRightType == 'BUEB'then
|
|
DGD.Dlb = ( DGD.dH * TAN3)
|
|
DGD.Drb = DGD.Dlb
|
|
DGD.Dlt = 0
|
|
DGD.Drt = 0
|
|
end
|
|
elseif nTypePiece == 6 then -- se frame bottom
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
DGD.Urb = DGD.dT - ( DGD.dH * TAN3)
|
|
DGD.Ulb = DGD.Urb
|
|
DGD.Urt = DGD.dT
|
|
DGD.Ult = DGD.dT
|
|
elseif sRightType == 'BU' or sRightType == 'BUEB' then
|
|
DGD.Urb = DGD.dT
|
|
DGD.Ulb = DGD.dT
|
|
DGD.Urt = DGD.dT - ( DGD.dH * TAN3)
|
|
DGD.Ult = DGD.Urt
|
|
end
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Rub = DGD.P2:getX()
|
|
DGD.Rut = DGD.P8:getX()
|
|
DGD.Rdb = DGD.P3:getX()
|
|
DGD.Rdt = DGD.P9:getX()
|
|
else
|
|
-- se lato destro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'R' and ( DGD.sSwing == 'LHI' or DGD.sSwing == 'LHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
if DGD.Push then
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
DGD.Rdt = DGD.dW - ( DGD.dT * TAN3)
|
|
DGD.Rdb = DGD.Rdt
|
|
else
|
|
DGD.Rut = DGD.dW - ( DGD.dT * TAN3)
|
|
DGD.Rub = DGD.Rut
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
end
|
|
else -- altrimenti normale
|
|
if DGD.Push then
|
|
DGD.Rut = DGD.dW - ( DGD.dT * TAN3)
|
|
DGD.Rub = DGD.Rut
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
else
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
DGD.Rdt = DGD.dW - ( DGD.dT * TAN3)
|
|
DGD.Rdb = DGD.Rdt
|
|
end
|
|
end
|
|
end
|
|
end
|
|
elseif sRightType == '1B' or sRightType == '2B' or sRightType == '3B' or sRightType == '4B' or
|
|
sRightType == '5B' or sRightType == '6B' or sRightType == '7B' or sRightType == '8B' then
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Rub = DGD.P2:getX()
|
|
DGD.Rut = DGD.P8:getX()
|
|
DGD.Rdb = DGD.P3:getX()
|
|
DGD.Rdt = DGD.P9:getX()
|
|
DGD.Rmb = DGD.P6:getX()
|
|
DGD.Rmt = DGD.P12:getX()
|
|
else
|
|
DGD.Rut = DGD.dW - dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
DGD.Rub = DGD.Rut
|
|
DGD.Rdt = DGD.Rut
|
|
DGD.Rdb = DGD.Rut
|
|
DGD.Rm = DGD.dW
|
|
end
|
|
elseif sRightType == 'CV' then
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Rub = DGD.P2:getX()
|
|
DGD.Rut = DGD.P8:getX()
|
|
DGD.Rdb = DGD.P3:getX()
|
|
DGD.Rdt = DGD.P9:getX()
|
|
DGD.Rmb = DGD.P6:getX()
|
|
DGD.Rmt = DGD.P12:getX()
|
|
else
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
DGD.Rm = DGD.dW + sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfR)*((DGD.dT/2)-dPlnProfR))) - dRadProf
|
|
end
|
|
end
|
|
|
|
-- setto punti relativi allo spessore
|
|
SetFrameThickValues()
|
|
|
|
-----------------
|
|
-- lato top
|
|
-----------------
|
|
dRadProf = dRadProfT -- setto il valore del raggio profilo
|
|
-- assegno a variabile globale
|
|
DGD.RPT = dRadProf
|
|
DGD.PPT = dPlnProfT
|
|
|
|
-- verifico se lo spessore porta è congruente con il raggio profilo
|
|
if dRadProf > 0 then
|
|
if ( DGD.dT - (2*dPlnProfT)) > (2*dRadProf) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[433], ( DGD.dT - (2*dPlnProfT)), sRightType, dRadProf), 0)
|
|
return false, 0
|
|
end
|
|
end
|
|
|
|
-- Nei frame top e bottom sempre SQ o FDWC
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 4 then -- se frame SX o DX
|
|
DGD.Bul = 0
|
|
DGD.Bur = 0
|
|
DGD.Bdl = 0
|
|
DGD.Bdr = 0
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
elseif nTypePiece == 5 or nTypePiece == 6 then -- se frame TOP o BOTTOM
|
|
DGD.Lut = 0
|
|
DGD.Lub = 0
|
|
DGD.Ldt = 0
|
|
DGD.Ldb = 0
|
|
DGD.Rut = DGD.dW
|
|
DGD.Rub = DGD.dW
|
|
DGD.Rdt = DGD.dW
|
|
DGD.Rdb = DGD.dW
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
DGD.Bul = DGD.P1:getY()
|
|
DGD.Bur = DGD.P2:getY()
|
|
DGD.Bdl = DGD.P4:getY()
|
|
DGD.Bdr = DGD.P3:getY()
|
|
DGD.Bml = DGD.P5:getY()
|
|
DGD.Bmr = DGD.P6:getY()
|
|
DGD.Tul = DGD.P7:getY()
|
|
DGD.Tur = DGD.P8:getY()
|
|
DGD.Tdl = DGD.P10:getY()
|
|
DGD.Tdr = DGD.P9:getY()
|
|
DGD.Tml = DGD.P11:getY()
|
|
DGD.Tmr = DGD.P12:getY()
|
|
else
|
|
if sTopType == 'SQ' or sTopType == 'EB' or sTopType == 'FDWC' then
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
DGD.Tml = DGD.dH
|
|
DGD.Tmr = DGD.dH
|
|
elseif sTopType == 'BD' or sTopType == 'BU' or sTopType == 'BDEB' or sTopType == 'BUEB' then
|
|
if DGD.Push then
|
|
DGD.Tul = DGD.dH - ( DGD.dT * TAN3)
|
|
DGD.Tur = DGD.Tul
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
DGD.Tml = DGD.dH - ( DGD.dT * TAN3)/2
|
|
DGD.Tmr = DGD.Tml
|
|
else
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
DGD.Tdl = DGD.dH - ( DGD.dT * TAN3)
|
|
DGD.Tdr = DGD.Tdl
|
|
DGD.Tml = DGD.dH - ( DGD.dT * TAN3)/2
|
|
DGD.Tmr = DGD.Tml
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
DGD.Tul = DGD.dH - dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
DGD.Tur = DGD.Tul
|
|
DGD.Tdl = DGD.Tul
|
|
DGD.Tdr = DGD.Tul
|
|
DGD.Tml = DGD.dH
|
|
DGD.Tmr = DGD.dH
|
|
elseif sTopType == 'CV' then
|
|
DGD.Tul = DGD.dH
|
|
DGD.Tur = DGD.dH
|
|
DGD.Tdl = DGD.dH
|
|
DGD.Tdr = DGD.dH
|
|
DGD.Tml = DGD.dH - dRadProf + sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
DGD.Tmr = DGD.Tml
|
|
end
|
|
|
|
-- se top è ad arco
|
|
if DGD.tProfs.top.radius then
|
|
|
|
if not DGD.tProfs.top.xdeltapos then
|
|
DGD.tProfs.top.xdeltapos = 0
|
|
end
|
|
|
|
-- calcolo il delta y dell'arco
|
|
-- se centro arco è compreso nella larghezza porta
|
|
if abs(DGD.tProfs.top.xdeltapos) <= (DGD.dW/2) then
|
|
DGD.tProfs.top.ydeltapos = DGD.tProfs.top.radius
|
|
else -- altrimenti è esterno
|
|
DGD.tProfs.top.ydeltapos = CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos)), nil, DGD.tProfs.top.radius)
|
|
end
|
|
|
|
-- verifico se ho una tangenza con l'arco
|
|
if abs( abs(DGD.tProfs.top.xdeltapos) + (DGD.dW/2) - DGD.tProfs.top.radius) <= GEO.EPS_SMALL then
|
|
if DGD.tProfs.top.xdeltapos < 0 then -- se centro arco verso X- la tangenza è a destra
|
|
DGD.TPR = DGD.dH-DGD.tProfs.top.ydeltapos
|
|
elseif DGD.tProfs.top.xdeltapos > 0 then -- se centro arco verso X+ la tangenza è a sinistra
|
|
DGD.TPL = DGD.dH-DGD.tProfs.top.ydeltapos
|
|
else -- entrambe le tangenze
|
|
DGD.TPR = DGD.dH-DGD.tProfs.top.ydeltapos
|
|
DGD.TPL = DGD.TPR
|
|
end
|
|
end
|
|
|
|
if sTopType == 'SQ' or sTopType == 'EB' or sTopType == 'FDWC' then -- se top con profilo diritto prendo i valori dai fianchi
|
|
DGD.Rua = DGD.Rut
|
|
DGD.Rda = DGD.Rdt
|
|
DGD.Rma = DGD.Rm
|
|
DGD.Lua = DGD.Lut
|
|
DGD.Lda = DGD.Ldt
|
|
DGD.Lma = DGD.Lm
|
|
elseif sTopType == 'BD' or sTopType == 'BDEB' then
|
|
-- se la quota X dell'arco è interna al fianco tengo quella dell'arco
|
|
if DGD.dW - DGD.Rut >= GEO.EPS_SMALL then
|
|
DGD.Rua = DGD.Rut
|
|
else
|
|
DGD.Rua = DGD.dW
|
|
end
|
|
if DGD.Rdt <= (DGD.dW - ( DGD.dT * TAN3)) then
|
|
DGD.Rda = DGD.Rdt
|
|
else
|
|
if not DGD.TPR then
|
|
if sRightType == 'CV' or sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
DGD.Rda = DGD.dW
|
|
else
|
|
DGD.Rda = DGD.dW - ( DGD.dT * TAN3)
|
|
end
|
|
else
|
|
DGD.Rda = DGD.dW - ( DGD.dT * TAN3)
|
|
end
|
|
end
|
|
if DGD.Lut >= GEO.EPS_SMALL then
|
|
DGD.Lua = DGD.Lut
|
|
else
|
|
DGD.Lua = 0
|
|
end
|
|
if DGD.Ldt >= ( DGD.dT * TAN3) then
|
|
DGD.Lda = DGD.Ldt
|
|
else
|
|
if not DGD.TPL then
|
|
if sLeftType == 'CV' or sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
DGD.Lda = 0
|
|
else
|
|
DGD.Lda = ( DGD.dT * TAN3)
|
|
end
|
|
else
|
|
DGD.Lda = ( DGD.dT * TAN3)
|
|
end
|
|
end
|
|
elseif sTopType == 'BU' or sTopType == 'BUEB' then
|
|
if DGD.Rut <= (DGD.dW - ( DGD.dT * TAN3)) then
|
|
DGD.Rua = DGD.Rut
|
|
else
|
|
if not DGD.TPR then
|
|
if sRightType == 'CV' or sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
DGD.Rua = DGD.dW
|
|
else
|
|
DGD.Rua = DGD.dW - ( DGD.dT * TAN3)
|
|
end
|
|
else
|
|
DGD.Rua = DGD.dW - ( DGD.dT * TAN3)
|
|
end
|
|
end
|
|
if DGD.Rdt <= DGD.dW then
|
|
DGD.Rda = DGD.Rdt
|
|
else
|
|
DGD.Rda = DGD.dW
|
|
end
|
|
if DGD.Lut >= ( DGD.dT * TAN3) then
|
|
DGD.Lua = DGD.Lut
|
|
else
|
|
if not DGD.TPL then
|
|
if sLeftType == 'CV' or sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
DGD.Lua = 0
|
|
else
|
|
DGD.Lua = ( DGD.dT * TAN3)
|
|
end
|
|
else
|
|
DGD.Lua = ( DGD.dT * TAN3)
|
|
end
|
|
end
|
|
if DGD.Ldt >= 0 then
|
|
DGD.Lda = DGD.Ldt
|
|
else
|
|
DGD.Lda = 0
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
if DGD.Rut <= (DGD.dW - ( dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2))))) then
|
|
DGD.Rua = DGD.Rut
|
|
else
|
|
DGD.Rua = DGD.dW - dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
end
|
|
if DGD.Rdt <= (DGD.dW - ( dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2))))) then
|
|
DGD.Rda = DGD.Rdt
|
|
else
|
|
DGD.Rda = DGD.dW - dRadProf + sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
end
|
|
DGD.Rma = DGD.dW
|
|
if DGD.Lut >= ( dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))) then
|
|
DGD.Lua = DGD.Lut
|
|
else
|
|
DGD.Lua = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
end
|
|
if DGD.Ldt >= ( dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))) then
|
|
DGD.Lda = DGD.Ldt
|
|
else
|
|
DGD.Lda = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
end
|
|
DGD.Lma = 0
|
|
elseif sTopType == 'CV' then
|
|
if DGD.dW - DGD.Rut >= GEO.EPS_SMALL then
|
|
DGD.Rua = DGD.Rut
|
|
else
|
|
DGD.Rua = DGD.dW
|
|
end
|
|
if DGD.dW - DGD.Rdt >= GEO.EPS_SMALL then
|
|
DGD.Rda = DGD.Rdt
|
|
else
|
|
DGD.Rda = DGD.dW
|
|
end
|
|
DGD.Rma = DGD.dW - dRadProf + sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
if DGD.Lut >= GEO.EPS_SMALL then
|
|
DGD.Lua = DGD.Lut
|
|
else
|
|
DGD.Lua = 0
|
|
end
|
|
if DGD.Ldt >= GEO.EPS_SMALL then
|
|
DGD.Lda = DGD.Ldt
|
|
else
|
|
DGD.Lda = 0
|
|
end
|
|
DGD.Lma = dRadProf - sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
end
|
|
|
|
local dDistRad = 0
|
|
local dDistRadCv = 0
|
|
|
|
if sTopType == 'BD' or sTopType == 'BDEB' then -- se top bevel down
|
|
DGD.Adt = ( DGD.dT * TAN3)
|
|
DGD.Amt = DGD.Adt / 2
|
|
elseif sTopType == 'BU' or sTopType == 'BUEB' then
|
|
DGD.Aut = ( DGD.dT * TAN3)
|
|
DGD.Amt = DGD.Aut / 2
|
|
elseif sTopType == 'CV' then
|
|
dDistRadCv = dRadProf - sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
dDistRad = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
end
|
|
|
|
-- valori x max arco
|
|
DGD.LMa = 0
|
|
DGD.RMa = DGD.dW
|
|
-- valori x min arco
|
|
DGD.lma = dDistRadCv + (DGD.Amt*2)
|
|
DGD.rma = DGD.dW - dDistRadCv - (DGD.Amt*2)
|
|
|
|
-- valori in Z arco
|
|
DGD.Ula = DGD.dT
|
|
DGD.Ura = DGD.dT
|
|
DGD.Dra = 0
|
|
DGD.Dla = 0
|
|
DGD.Mla = DGD.dT / 2
|
|
DGD.Mra = DGD.dT / 2
|
|
|
|
-- se centro arco è compreso nella larghezza porta
|
|
if abs(DGD.tProfs.top.xdeltapos) <= (DGD.dW/2) then
|
|
DGD.Aul = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) + DGD.tProfs.top.xdeltapos - DGD.Lua), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adl = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) + DGD.tProfs.top.xdeltapos - DGD.Lda), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aur = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) - DGD.tProfs.top.xdeltapos - (DGD.dW - DGD.Rua)), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adr = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) - DGD.tProfs.top.xdeltapos - (DGD.dW - DGD.Rda)), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aml = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) + DGD.tProfs.top.xdeltapos - DGD.Lma), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
DGD.Amr = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) - DGD.tProfs.top.xdeltapos - (DGD.dW - DGD.Rma)), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
-- punti con ingombro max
|
|
DGD.AMl = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) + DGD.tProfs.top.xdeltapos - DGD.LMa), nil, DGD.tProfs.top.radius)
|
|
DGD.AMr = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) - DGD.tProfs.top.xdeltapos - (DGD.dW - DGD.RMa)), nil, DGD.tProfs.top.radius)
|
|
-- punti con ingombro min per profilo CV
|
|
DGD.aml = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) + DGD.tProfs.top.xdeltapos - DGD.lma), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
DGD.amr = DGD.dH - DGD.tProfs.top.radius + CalcSideRectTringle( ((DGD.dW/2) - DGD.tProfs.top.xdeltapos - (DGD.dW - DGD.rma)), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
else -- altrimenti è esterno
|
|
if DGD.tProfs.top.xdeltapos > 0 then -- se centro arco è a destra
|
|
DGD.Aul = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - DGD.Lua), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adl = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - DGD.Lda), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aur = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rua)), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rda)), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aml = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - DGD.Lma), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
DGD.Amr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rma)), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
-- punti con ingombro max
|
|
DGD.AMl = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - DGD.LMa), nil, DGD.tProfs.top.radius)
|
|
DGD.AMr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.RMa)), nil, DGD.tProfs.top.radius)
|
|
-- punti con ingombro min per profilo CV
|
|
DGD.aml = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - DGD.lma), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
DGD.amr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.rma)), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
else -- altrimenti centro arco è a sinistra
|
|
DGD.Aul = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - DGD.Lua), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adl = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - DGD.Lda), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aur = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rua)), nil, ( DGD.tProfs.top.radius - DGD.Aut-dDistRad))
|
|
DGD.Adr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rda)), nil, ( DGD.tProfs.top.radius - DGD.Adt-dDistRad))
|
|
DGD.Aml = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - DGD.Lma), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
DGD.Amr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.Rma)), nil, ( DGD.tProfs.top.radius - DGD.Amt-dDistRad))
|
|
-- punti con ingombro max
|
|
DGD.AMl = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - DGD.LMa), nil, DGD.tProfs.top.radius)
|
|
DGD.AMr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.RMa)), nil, DGD.tProfs.top.radius)
|
|
-- punti con ingombro min per profilo CV
|
|
DGD.aml = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) - abs(DGD.tProfs.top.xdeltapos) - DGD.lma), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
DGD.amr = DGD.dH - DGD.tProfs.top.ydeltapos + CalcSideRectTringle( ((DGD.dW/2) + abs(DGD.tProfs.top.xdeltapos) - (DGD.dW - DGD.rma)), nil, ( DGD.tProfs.top.radius - dDistRadCv - (DGD.Amt*2)))
|
|
end
|
|
end
|
|
elseif DGD.Tpa then -- se top ad angolo
|
|
|
|
if not DGD.tProfs.top.xdeltapos then
|
|
DGD.tProfs.top.xdeltapos = 0
|
|
end
|
|
if DGD.tProfs.top.xdeltapos <= (2* DGD.dT * TAN3) and
|
|
( sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB') and
|
|
( sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB') then
|
|
DGD.tProfs.top.xdeltapos = 0
|
|
end
|
|
if sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB' or sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'FDWC' then
|
|
DGD.Lua = DGD.Lut
|
|
DGD.Lda = DGD.Ldt
|
|
DGD.Lma = (DGD.Lut + DGD.Ldt) / 2
|
|
else
|
|
DGD.Lua = DGD.Lut
|
|
DGD.Lda = DGD.Lua
|
|
DGD.Lma = DGD.Lm
|
|
end
|
|
|
|
if sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' or sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'FDWC' then
|
|
DGD.Rua = DGD.Rut
|
|
DGD.Rda = DGD.Rdt
|
|
DGD.Rma = (DGD.Rut + DGD.Rdt) / 2
|
|
else
|
|
DGD.Rua = DGD.Rut
|
|
DGD.Rda = DGD.Rua
|
|
DGD.Rma = DGD.Rm
|
|
end
|
|
|
|
if sTopType == 'BD' or sTopType == 'BDEB' then -- se top bevel down
|
|
DGD.Adt = ( DGD.dT * TAN3)
|
|
DGD.Amt = DGD.Adt / 2
|
|
DGD.Dpd = DGD.Adt / abs(cos(DGD.tProfs.top.angle))
|
|
elseif sTopType == 'BU' or sTopType == 'BUEB' then
|
|
DGD.Aut = ( DGD.dT * TAN3)
|
|
DGD.Amt = DGD.Aut / 2
|
|
DGD.Dpu = DGD.Aut / abs(cos(DGD.tProfs.top.angle))
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
DGD.Adt = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
DGD.Aut = DGD.Adt
|
|
DGD.Dpu = DGD.Adt / abs(cos(DGD.tProfs.top.angle))
|
|
DGD.Dpd = DGD.Dpu
|
|
elseif sTopType == 'CV' then
|
|
DGD.Amt = dRadProf - sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfT)*((DGD.dT/2)-dPlnProfT)))
|
|
DGD.Dpm = DGD.Amt / abs(cos(DGD.tProfs.top.angle))
|
|
end
|
|
|
|
DGD.Ula = DGD.dT
|
|
DGD.Ura = DGD.dT
|
|
DGD.Dra = 0
|
|
DGD.Dla = 0
|
|
DGD.Mla = DGD.dT / 2
|
|
DGD.Mra = DGD.dT / 2
|
|
|
|
-- se angolo positivo
|
|
if DGD.tProfs.top.angle > 0 then
|
|
DGD.Aul = DGD.dH - (( DGD.dW - DGD.tProfs.top.xdeltapos - DGD.Lua) * tan( DGD.tProfs.top.angle)) - DGD.Dpu
|
|
DGD.Adl = DGD.dH - (( DGD.dW - DGD.tProfs.top.xdeltapos - DGD.Lda) * tan( DGD.tProfs.top.angle)) - DGD.Dpd
|
|
DGD.Aur = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Aut, ((( DGD.dW - DGD.Rua) * tan( DGD.tProfs.top.angle)) + DGD.Dpu))
|
|
DGD.Adr = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Adt, ((( DGD.dW - DGD.Rda) * tan( DGD.tProfs.top.angle)) + DGD.Dpd))
|
|
DGD.Aml = DGD.dH - (( DGD.dW - DGD.tProfs.top.xdeltapos - DGD.Lma) * tan( DGD.tProfs.top.angle)) - DGD.Amt
|
|
DGD.Amr = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Amt, ((( DGD.dW - DGD.Rma) * tan( DGD.tProfs.top.angle)) + DGD.Dpm))
|
|
else
|
|
DGD.Aul = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Aut, (( DGD.Lua * tan( abs(DGD.tProfs.top.angle))) + DGD.Dpu))
|
|
DGD.Adl = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Adt, (( DGD.Lda * tan( abs(DGD.tProfs.top.angle))) + DGD.Dpd))
|
|
DGD.Aur = DGD.dH - (( DGD.Rua - DGD.tProfs.top.xdeltapos) * tan( abs(DGD.tProfs.top.angle))) - DGD.Dpu
|
|
DGD.Adr = DGD.dH - (( DGD.Rda - DGD.tProfs.top.xdeltapos) * tan( abs(DGD.tProfs.top.angle))) - DGD.Dpd
|
|
DGD.Aml = DGD.dH - EgtIf( DGD.tProfs.top.xdeltapos > 0, DGD.Amt, (( DGD.Lma * tan( abs(DGD.tProfs.top.angle))) + DGD.Dpm))
|
|
DGD.Amr = DGD.dH - (( DGD.Rma - DGD.tProfs.top.xdeltapos) * tan( abs(DGD.tProfs.top.angle))) - DGD.Amt
|
|
end
|
|
|
|
-- punti intersezione curva sopra
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
local dTempU = DGD.Aut
|
|
local dTempD = DGD.Adt
|
|
local dTempM = DGD.Amt
|
|
DGD.Aut = DGD.dH - DGD.Aut
|
|
DGD.Adt = DGD.dH - DGD.Adt
|
|
DGD.Amt = DGD.dH - DGD.Amt
|
|
-- se angolo positivo
|
|
if DGD.tProfs.top.angle > 0 then
|
|
DGD.Cmu = DGD.dW - DGD.tProfs.top.xdeltapos + ( dTempU * tan(DGD.tProfs.top.angle/2))
|
|
DGD.Cmd = DGD.dW - DGD.tProfs.top.xdeltapos + ( dTempD * tan(DGD.tProfs.top.angle/2))
|
|
DGD.Cmm = DGD.dW - DGD.tProfs.top.xdeltapos + ( dTempM * tan(DGD.tProfs.top.angle/2))
|
|
else
|
|
DGD.Cmu = DGD.tProfs.top.xdeltapos + ( dTempU * tan(DGD.tProfs.top.angle/2))
|
|
DGD.Cmd = DGD.tProfs.top.xdeltapos + ( dTempD * tan(DGD.tProfs.top.angle/2))
|
|
DGD.Cmm = DGD.tProfs.top.xdeltapos + ( dTempM * tan(DGD.tProfs.top.angle/2))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------
|
|
-- lato bottom
|
|
-----------------
|
|
dRadProf = dRadProfB -- setto il valore del raggio profilo
|
|
-- assegno a variabile globale
|
|
DGD.RPB = dRadProf
|
|
DGD.PPB = dPlnProfB
|
|
|
|
-- verifico se lo spessore porta è congruente con il raggio profilo
|
|
if dRadProf > 0 then
|
|
if ( DGD.dT - (2*dPlnProfB)) > (2*dRadProf) then
|
|
DoorOutLog( string.format( EgtDoorsMsg[433], ( DGD.dT - (2*dPlnProfB)), sRightType, dRadProf), 0)
|
|
return false, 0
|
|
end
|
|
end
|
|
|
|
if not DGD.sFrame then
|
|
|
|
if not( DGD.PROBE == 2 and bRemake) then
|
|
|
|
DGD.Bul = 0
|
|
DGD.Bur = 0
|
|
DGD.Bdl = 0
|
|
DGD.Bdr = 0
|
|
|
|
if sBotType == 'BD' or sBotType == 'BU' or sBotType == 'BDEB' or sBotType == 'BUEB' then
|
|
if DGD.Push then
|
|
DGD.Bul = ( DGD.dT * TAN3)
|
|
DGD.Bur = ( DGD.dT * TAN3)
|
|
DGD.Bml = DGD.Bul / 2
|
|
DGD.Bmr = DGD.Bml
|
|
else
|
|
DGD.Bdl = ( DGD.dT * TAN3)
|
|
DGD.Bdr = ( DGD.dT * TAN3)
|
|
DGD.Bml = DGD.Bdl / 2
|
|
DGD.Bmr = DGD.Bml
|
|
end
|
|
elseif sBotType == '1B' or sBotType == '2B' or sBotType == '3B' or sBotType == '4B' or
|
|
sBotType == '5B' or sBotType == '6B' or sBotType == '7B' or sBotType == '8B' then
|
|
DGD.Bul = dRadProf - sqrt( ( dRadProf * dRadProf) - ((DGD.dT/2)*(DGD.dT/2)))
|
|
DGD.Bur = DGD.Bul
|
|
DGD.Bdl = DGD.Bul
|
|
DGD.Bdr = DGD.Bul
|
|
elseif sBotType == 'CV' then
|
|
DGD.Bml = dRadProf - sqrt( ( dRadProf * dRadProf) - (((DGD.dT/2)-dPlnProfB)*((DGD.dT/2)-dPlnProfB)))
|
|
DGD.Bmr = DGD.Bml
|
|
end
|
|
end
|
|
end
|
|
|
|
--------------------
|
|
-- creo pezzo porta
|
|
--------------------
|
|
|
|
--local nP = EgtGetFirstGroupInGroup( GDB_ID.ROOT)
|
|
local nLa = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLa, 'AUX')
|
|
EgtSetColor( nLa, BROWN())
|
|
local nLs = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLs, 'SOLID')
|
|
|
|
if DGD.bProoduce then
|
|
if DGD.Material and string.lower(DGD.Material) == 'wood' then
|
|
EgtSetColor( nLs, ORANGE())
|
|
EgtSetBackground( Color3d(176,208,210), Color3d(145,177,196), false)
|
|
elseif DGD.Material and string.lower(DGD.Material) == 'steel' then
|
|
EgtSetColor( nLs, Color3d(167,196,197))
|
|
-- EgtSetColor( nLs, Color3d(186,193,199))
|
|
EgtSetBackground( WHITE(), GRAY(), false)
|
|
elseif DGD.Material and string.lower(DGD.Material) == 'aluminum' then
|
|
EgtSetColor( nLs, Color3d(208,213,217))
|
|
-- EgtSetBackground( WHITE(), GRAY(), false)
|
|
EgtSetBackground( WHITE(), Color3d(170,170,170), false)
|
|
elseif DGD.Material and string.lower(DGD.Material) == 'fiberglass' then
|
|
EgtSetColor( nLs, Color3d(198,227,211))
|
|
EgtSetBackground( WHITE(), Color3d(210,255,210), false)
|
|
else
|
|
EgtSetColor( nLs, ORANGE())
|
|
end
|
|
EgtSetAlpha( nLs, 30)
|
|
else
|
|
EgtSetColor( nLs, BLACK())
|
|
EgtSetAlpha( nLs, 20)
|
|
EgtSetAlpha( nLa, 20)
|
|
end
|
|
|
|
local nFu, nFd
|
|
local sFlatU = 'FLAT_UP'
|
|
local sFlatU2 = 'FLAT_UP_2'
|
|
local sFlatD = 'FLAT_DW'
|
|
local sFlatD2 = 'FLAT_DW_2'
|
|
local sSideL = 'SIDE_LF'
|
|
local sSideR = 'SIDE_RH'
|
|
local sSide = 'SIDE'
|
|
|
|
local bMakeSideSurf, ptMedArc, bJoinRgt, bJoinLft = MakeSurfProfiles( nLs, sBotType, dRadProfB, sRightType, dRadProfR,
|
|
sTopType, dRadProfT, sLeftType, dRadProfL, sSide,
|
|
dPlnProfB, dPlnProfR, dPlnProfT, dPlnProf)
|
|
|
|
if not bMakeSideSurf then
|
|
local sErrMess = EgtDoorsMsg[677]
|
|
return bMakeSideSurf, 2, sErrMess
|
|
end
|
|
|
|
-- disegno facce sopra e sotto
|
|
if DGD.sFrame then
|
|
|
|
-- setto la disposizione di piatto o di fianco dei jamb laterali e superiore,
|
|
-- per quello inferiore, se le dimensioni della sezione sono sotto un certo valore, viene disposto solo di piatto
|
|
if nTypePiece == 3 then -- se frame SX
|
|
if DGD.Dws then -- se disposizione sul lato wide (di piatto)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT))
|
|
nFu = EgtRectangle2P( nLa, { DGD.Bur, DGD.Urb, DGD.Rub}, { DGD.Tdr, DGD.Drt, DGD.Rdt}, GDB_RT.GRID ) -- p2 a p9
|
|
nFd = EgtRectangle2P( nLa, { DGD.Bul, DGD.Ulb, DGD.Lub}, { DGD.Tdl, DGD.Dlt, DGD.Ldt}, GDB_RT.GRID ) -- p1 a p10
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
else -- altrimenti disposizione su lato narrow
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rut, DGD.Tur, DGD.Urt}) -- p1 a p8
|
|
nFd = EgtRectangle2P( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdt, DGD.Tdr, DGD.Drt}) -- p4 a p9
|
|
end
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
if DGD.Dws then -- se disposizione sul lato wide (di piatto)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
nFu = EgtRectangle2P( nLa, { -DGD.Tdl, DGD.Dlt, -DGD.Ldt}, { -DGD.Bul, DGD.Ulb, -DGD.Lub}, GDB_RT.GRID ) -- p10 a p1
|
|
nFd = EgtRectangle2P( nLa, { -DGD.Tdr, DGD.Drt, -DGD.Rdt}, { -DGD.Bur, DGD.Urb, -DGD.Rub}, GDB_RT.GRID ) -- p9 a p2
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
else -- altrimenti disposizione su lato narrow
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rut, DGD.Tur, DGD.Urt}) -- p1 a p8
|
|
nFd = EgtRectangle2P( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdt, DGD.Tdr, DGD.Drt}) -- p4 a p9
|
|
end
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
if DGD.Dws then -- se disposizione sul lato wide (di piatto)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Ulb, DGD.Bul}, { DGD.Rdb, DGD.Drb, DGD.Bdr}, GDB_RT.GRID ) -- p1 a p3
|
|
nFd = EgtRectangle2P( nLa, { DGD.Lut, DGD.Ult, -DGD.Tul}, { DGD.Rdt, DGD.Drt, -DGD.Tdr}, GDB_RT.GRID ) -- p7 a p9
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
else -- altrimenti disposizione su lato narrow
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rut, DGD.Tur, DGD.Urt}) -- p1 a p8
|
|
nFd = EgtRectangle2P( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdt, DGD.Tdr, DGD.Drt}) -- p4 a p9
|
|
end
|
|
else -- tipo frame bottom
|
|
if DGD.Dws then -- se disposizione sul lato wide (di piatto)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.BACK))
|
|
nFu = EgtRectangle2P( nLa, { -DGD.Ldt, DGD.Dlt, DGD.Tdl}, { -DGD.Rut, DGD.Urt, DGD.Tur}, GDB_RT.GRID ) -- p10 a p8
|
|
nFd = EgtRectangle2P( nLa, { -DGD.Ldb, DGD.Dlb, DGD.Bdl}, { -DGD.Rub, DGD.Urb, DGD.Bur}, GDB_RT.GRID ) --p4 a p2
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
else -- altrimenti disposizione su lato narrow
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rut, DGD.Tur, DGD.Urt}) -- p1 a p8
|
|
nFd = EgtRectangle2P( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdt, DGD.Tdr, DGD.Drt}) -- p4 a p9
|
|
end
|
|
end
|
|
else
|
|
-- se top è ad arco
|
|
if DGD.tProfs.top.radius then
|
|
-- percorso superiore
|
|
local nE1 = EgtLine( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rub, DGD.Bur, DGD.Urb}, GDB_RT.LOC) -- p1 a p2
|
|
local nE2
|
|
local nE4
|
|
local nE5
|
|
local nE6
|
|
if bJoinRgt then
|
|
nE2 = EgtLine( nLa, { DGD.Rub, DGD.Bur, DGD.Urb}, { DGD.Rua, DGD.Aur, DGD.Ura}, GDB_RT.LOC) -- p2 a p14(con XY nuova)
|
|
else
|
|
nE2 = EgtLine( nLa, { DGD.Rub, DGD.Bur, DGD.Urb}, { DGD.Rut, DGD.Aur, DGD.Ura}, GDB_RT.LOC) -- p2 a p14(con XY nuova)
|
|
nE5 = EgtLine( nLa, { DGD.Rut, DGD.Aur, DGD.Ura}, { DGD.Rua, DGD.Aur, DGD.Ura}, GDB_RT.LOC) -- linea giunzione discontinuità
|
|
end
|
|
local nE3 = EgtArcC2P( nLa, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Ura},
|
|
{ DGD.Rua, DGD.Aur, DGD.Ura}, { DGD.Lua, DGD.Aul, DGD.Ula}, GDB_RT.LOC) -- arco p14 a p13
|
|
-- per migliorare l'arco recupero la direzione iniziale, cancello l'arco e lo ricreo con il punto finale preciso
|
|
if nE3 then
|
|
local vcIni = EgtSV(nE3)
|
|
EgtErase(nE3)
|
|
nE3 = EgtArc2PV( nLa, { DGD.Rua, DGD.Aur, DGD.Ura}, { DGD.Lua, DGD.Aul, DGD.Ula}, vcIni, GDB_RT.LOC)
|
|
end
|
|
if bJoinLft then
|
|
nE4 = EgtLine( nLa, { DGD.Lua, DGD.Aul, DGD.Ula}, { DGD.Lub, DGD.Bul, DGD.Ulb}, GDB_RT.LOC) -- p13(con Y nuova) a p1
|
|
else
|
|
nE6 = EgtLine( nLa, { DGD.Lua, DGD.Aul, DGD.Ula}, { DGD.Lut, DGD.Aul, DGD.Ula}, GDB_RT.LOC) -- linea giunzione discontinuità
|
|
nE4 = EgtLine( nLa, { DGD.Lut, DGD.Aul, DGD.Ula}, { DGD.Lub, DGD.Bul, DGD.Ulb}, GDB_RT.LOC) -- p13(con XY nuova) a p1
|
|
end
|
|
|
|
if nE5 and nE6 then
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE5,nE3,nE6,nE4}, true)
|
|
elseif nE5 and not nE6 then
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE5,nE3,nE4}, true)
|
|
elseif not nE5 and nE6 then
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE6,nE4}, true)
|
|
else
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4}, true)
|
|
end
|
|
|
|
-- percorso inferiore
|
|
nE5 = nil
|
|
nE6 = nil
|
|
nE1 = EgtLine( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdb, DGD.Bdr, DGD.Drb}, GDB_RT.LOC) -- p4 a p3
|
|
if bJoinRgt then
|
|
nE2 = EgtLine( nLa, { DGD.Rdb, DGD.Bdr, DGD.Drb}, { DGD.Rda, DGD.Adr, DGD.Dra}, GDB_RT.LOC) -- p3 a p15(con XY nuova)
|
|
else
|
|
nE2 = EgtLine( nLa, { DGD.Rdb, DGD.Bdr, DGD.Drb}, { DGD.Rdt, DGD.Adr, DGD.Dra}, GDB_RT.LOC) -- p3 a p15(con XY nuova)
|
|
nE5 = EgtLine( nLa, { DGD.Rdt, DGD.Adr, DGD.Dra}, { DGD.Rda, DGD.Adr, DGD.Dra}, GDB_RT.LOC) -- linea giunzione discontinuità
|
|
end
|
|
nE3 = EgtArcC2P( nLa, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.Rda, DGD.Adr, DGD.Dra}, { DGD.Lda, DGD.Adl, DGD.Dla}, GDB_RT.LOC) -- arco p15 a p16
|
|
-- per migliorare l'arco recupero la direzione iniziale, cancello l'arco e lo ricreo con il punto finale preciso
|
|
if nE3 then
|
|
local vcIni = EgtSV(nE3)
|
|
EgtErase(nE3)
|
|
nE3 = EgtArc2PV( nLa, { DGD.Rda, DGD.Adr, DGD.Dra}, { DGD.Lda, DGD.Adl, DGD.Dla}, vcIni, GDB_RT.LOC)
|
|
end
|
|
if bJoinLft then
|
|
nE4 = EgtLine( nLa, { DGD.Lda, DGD.Adl, DGD.Dla}, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, GDB_RT.LOC) -- p16 a p4
|
|
else
|
|
nE6 = EgtLine( nLa, { DGD.Lda, DGD.Adl, DGD.Dla}, { DGD.Ldt, DGD.Adl, DGD.Dla}, GDB_RT.LOC) -- linea giunzione discontinuità
|
|
nE4 = EgtLine( nLa, { DGD.Ldt, DGD.Adl, DGD.Dla}, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, GDB_RT.LOC) -- p16 a p4
|
|
end
|
|
|
|
if nE5 and nE6 then
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE5,nE3,nE6,nE4}, true)
|
|
elseif nE5 and not nE6 then
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE5,nE3,nE4}, true)
|
|
elseif not nE5 and nE6 then
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE6,nE4}, true)
|
|
else
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4}, true)
|
|
end
|
|
elseif DGD.Tpa then -- se top è ad angolo
|
|
-- percorso superiore
|
|
local nE1 = EgtLine( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rub, DGD.Bur, DGD.Urb}, GDB_RT.LOC) -- p1 a p2
|
|
local nE2 = EgtLine( nLa, { DGD.Rub, DGD.Bur, DGD.Urb}, { DGD.Rua, DGD.Aur, DGD.Ura}, GDB_RT.LOC) -- p2 a p14
|
|
local nE3, nE4, nE5
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
nE3 = EgtLine( nLa, { DGD.Rua, DGD.Aur, DGD.Ura}, { DGD.Cmu, DGD.Aut, DGD.Ura}, GDB_RT.LOC) -- p14 a p19
|
|
nE4 = EgtLine( nLa, { DGD.Cmu, DGD.Aut, DGD.Ura}, { DGD.Lua, DGD.Aul, DGD.Ula}, GDB_RT.LOC) -- p19 a p13
|
|
nE5 = EgtLine( nLa, { DGD.Lua, DGD.Aul, DGD.Ula}, { DGD.Lub, DGD.Bul, DGD.Ulb}, GDB_RT.LOC) -- p13 a p1
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4,nE5}, true)
|
|
else
|
|
nE3 = EgtLine( nLa, { DGD.Rua, DGD.Aur, DGD.Ura}, { DGD.Lua, DGD.Aul, DGD.Ula}, GDB_RT.LOC) -- p14 a p13
|
|
nE4 = EgtLine( nLa, { DGD.Lua, DGD.Aul, DGD.Ula}, { DGD.Lub, DGD.Bul, DGD.Ulb}, GDB_RT.LOC) -- p13 a p1
|
|
nFu = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4}, true)
|
|
end
|
|
-- percorso inferiore
|
|
nE1 = EgtLine( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdb, DGD.Bdr, DGD.Drb}, GDB_RT.LOC) -- p4 a p3
|
|
nE2 = EgtLine( nLa, { DGD.Rdb, DGD.Bdr, DGD.Drb}, { DGD.Rda, DGD.Adr, DGD.Dra}, GDB_RT.LOC) -- p3 a p15
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
nE3 = EgtLine( nLa, { DGD.Rda, DGD.Adr, DGD.Dra}, { DGD.Cmd, DGD.Adt, DGD.Dra}, GDB_RT.LOC) -- p15 a p20
|
|
nE4 = EgtLine( nLa, { DGD.Cmd, DGD.Adt, DGD.Dra}, { DGD.Lda, DGD.Adl, DGD.Dla}, GDB_RT.LOC) -- p20 a p16
|
|
nE5 = EgtLine( nLa, { DGD.Lda, DGD.Adl, DGD.Dla}, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, GDB_RT.LOC) -- p16 a p4
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4,nE5}, true)
|
|
else
|
|
nE3 = EgtLine( nLa, { DGD.Rda, DGD.Adr, DGD.Dra}, { DGD.Lda, DGD.Adl, DGD.Dla}, GDB_RT.LOC) -- p15 a p16
|
|
nE4 = EgtLine( nLa, { DGD.Lda, DGD.Adl, DGD.Dla}, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, GDB_RT.LOC) -- p16 a p4
|
|
nFd = EgtCurveCompo( nLa, {nE1,nE2,nE3,nE4}, true)
|
|
end
|
|
else
|
|
if DGD.PROBE == 2 and bRemake then
|
|
EgtInvertCurve({nDoorLeft,nDoorTop,nDoorRight,nDoorBot})
|
|
EgtInvertCurve({nDoorLeftMid,nDoorTopMid,nDoorRightMid,nDoorBotMid})
|
|
EgtInvertCurve({nDoorLeftTop,nDoorTopTop,nDoorRightTop,nDoorBotTop})
|
|
nFu = EgtCurveCompo( nLa, {nDoorBotTop,nDoorRightTop,nDoorTopTop,nDoorLeftTop}, false)
|
|
nFd = EgtCurveCompo( nLa, {nDoorBot,nDoorRight,nDoorTop,nDoorLeft}, false)
|
|
else
|
|
nFu = EgtRectangle2P( nLa, { DGD.Lub, DGD.Bul, DGD.Ulb}, { DGD.Rut, DGD.Tur, DGD.Urt}) -- p1 a p8
|
|
nFd = EgtRectangle2P( nLa, { DGD.Ldb, DGD.Bdl, DGD.Dlb}, { DGD.Rdt, DGD.Tdr, DGD.Drt}) -- p4 a p9
|
|
end
|
|
end
|
|
end
|
|
|
|
local nFrU
|
|
local nFrD
|
|
local nCountSurf
|
|
if DGD.PROBE == 2 and bRemake then
|
|
nFrU = EgtSurfFlatRegion( nLs, nFu)
|
|
EgtSetName( nFrU, sFlatU2)
|
|
EgtSetAlpha( nFrU, 10)
|
|
end
|
|
nFrU = EgtSurfFlatRegion( nLs, nFu)
|
|
EgtSetName( nFrU, sFlatU)
|
|
if DGD.PROBE == 2 and bRemake then
|
|
nFrD = EgtSurfFlatRegion( nLs, nFd)
|
|
EgtInvertSurf(nFrD)
|
|
EgtSetName( nFrD, sFlatD2)
|
|
EgtSetAlpha( nFrD, 10)
|
|
end
|
|
nFrD = EgtSurfFlatRegion( nLs, nFd)
|
|
EgtInvertSurf(nFrD)
|
|
EgtSetName( nFrD, sFlatD)
|
|
|
|
-- tabelle percorsi profili
|
|
local tProPath = {}
|
|
|
|
-- disegno bordo sinistro
|
|
local nFrL
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB' or sLeftType == 'FDWC' then
|
|
-- disegno
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
tProPath.nClt = EgtLine( nLa, {DGD.Lut,DGD.Tul,DGD.Ult}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p7 a p8
|
|
tProPath.nClb = EgtLine( nLa, {DGD.Lub,DGD.Bul,DGD.Ulb}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p1 a p2
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
tProPath.nClt = EgtLine( nLa, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Ldt,DGD.Tdl,DGD.Dlt}) -- p9 a p10
|
|
tProPath.nClb = EgtLine( nLa, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Ldb,DGD.Bdl,DGD.Dlb}) -- p3 a p4
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
tProPath.nClt = EgtLine( nLa, {DGD.Rut,DGD.Tur,DGD.Urt}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p8 a p2
|
|
tProPath.nClb = EgtLine( nLa, {DGD.Lut,DGD.Tul,DGD.Ult}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p7 a p1
|
|
else -- tipo frame bottom
|
|
tProPath.nClt = EgtLine( nLa, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Rdt,DGD.Tdr,DGD.Drt}) -- p3 a p9
|
|
tProPath.nClb = EgtLine( nLa, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Ldt,DGD.Tdl,DGD.Dlt}) -- p4 a p10
|
|
end
|
|
nFrL = EgtSurfTmRuled( nLs, tProPath.nClt, tProPath.nClb, 0.05)
|
|
EgtInvertSurf(nFrL)
|
|
EgtSetName( nFrL, sSideL)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'L') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Left')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'L'))
|
|
local nMId
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
nMId = EgtLine( nLl, {DGD.Lut,DGD.Tul,DGD.Ult}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p7 a p1
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
nMId = EgtLine( nLl, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Rdb,DGD.Bdr,DGD.Drb}) -- p9 a p3
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
nMId = EgtLine( nLl, {DGD.Rut,DGD.Tur,DGD.Urt}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p8 a p7
|
|
else -- tipo frame bottom
|
|
nMId = EgtLine( nLl, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Ldb,DGD.Bdl,DGD.Dlb}) -- p3 a p4
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Lda,max(DGD.Adl,DGD.Aul),DGD.Dla}, {DGD.Ldb,min(DGD.Bdl,DGD.Bul,DGD.Bml),DGD.Dlb}) -- p16 a p4
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Ldt,max(DGD.Tdl,DGD.Tul,DGD.Tml),DGD.Dlt}, {DGD.Ldb,min(DGD.Bdl,DGD.Bul,DGD.Bml),DGD.Dlb}) -- p10 a p4
|
|
end
|
|
end
|
|
|
|
if sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB' then
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( COS3, 0, SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( COS3, 0, -SIN3), GDB_RT.GLOB)
|
|
end
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -COS3, 0, -SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -COS3, 0, SIN3), GDB_RT.GLOB)
|
|
end
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -COS3, SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -COS3, -SIN3), GDB_RT.GLOB)
|
|
end
|
|
else -- tipo frame bottom
|
|
if sLeftType == 'BD' or sLeftType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, COS3, -SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, COS3, SIN3), GDB_RT.GLOB)
|
|
end
|
|
end
|
|
else
|
|
-- se lato sinistro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'L' and ( DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -SIN3, 0, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( SIN3, 0, COS3), GDB_RT.GLOB)
|
|
end
|
|
else
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( SIN3, 0, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -SIN3, 0, COS3), GDB_RT.GLOB)
|
|
end
|
|
end
|
|
end
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 4 then -- se frame SX o DX
|
|
EgtModifyCurveThickness( nMId, DGD.dW / COS3)
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dH / COS3)
|
|
end
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dT / COS3)
|
|
end
|
|
else
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
else -- tipo frame bottom
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, 1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
end
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
end
|
|
end
|
|
EgtSetName( nMId, sLeftType .. EgtIf( string.find( sLeftType,'EB'), DGD.EBP, ''))
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
end
|
|
end
|
|
elseif sLeftType == '1B' or sLeftType == '2B' or sLeftType == '3B' or sLeftType == '4B' or
|
|
sLeftType == '5B' or sLeftType == '6B' or sLeftType == '7B' or sLeftType == '8B' then
|
|
-- setto la griglia di fronte : da rivedere
|
|
if DGD.PROBE == 2 and bRemake then
|
|
tProPath.nClb = EgtArc3P( nLa, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Lmb,DGD.Bml,DGD.Mlb}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p4 a p5 a p1
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
tProPath.nClt = EgtArc3P( nLa, {DGD.Lda,DGD.Adl,DGD.Dla}, {DGD.Lma,DGD.Aml,DGD.Mla}, {DGD.Lua,DGD.Aul,DGD.Ula}) -- p16 a p17 a p13
|
|
else
|
|
tProPath.nClt = EgtArc3P( nLa, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Lmt,DGD.Tml,DGD.Mlt}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p10 a p11 a p7
|
|
end
|
|
nFrL = EgtSurfTmRuled( nLs, tProPath.nClt, tProPath.nClb, 0.05)
|
|
EgtInvertSurf(nFrL)
|
|
EgtSetName( nFrL, sSideL)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'L') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Left')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'L'))
|
|
local nMId
|
|
if DGD.PROBE == 2 and bRemake then
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Lma, DGD.Aml, DGD.Dla}, { DGD.Lmb, DGD.Bml, DGD.Dlb}) -- pmu a pmd
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Lmt, DGD.Tml, DGD.Dlt}, { DGD.Lmb, DGD.Bml, DGD.Dlb}) -- pmu a pmd
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Lm, max(DGD.Adl,DGD.Aul), DGD.Dla}, { DGD.Lm, min(DGD.Bdl,DGD.Bul,DGD.Bml), DGD.Dlb}) -- pmu a pmd
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Lm, max(DGD.Tdl,DGD.Tul,DGD.Tml), DGD.Dlt}, { DGD.Lm, min(DGD.Bdl,DGD.Bul,DGD.Bml), DGD.Dlb}) -- pmu a pmd
|
|
end
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sLeftType)
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
end
|
|
end
|
|
elseif sLeftType == 'CV' then
|
|
-- setto la griglia di fronte: da rivedere
|
|
if DGD.PROBE == 2 and bRemake then
|
|
tProPath.nClb = EgtArc3P( nLa, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Lmb,DGD.Bml,DGD.Mlb}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p4 a p5 a p1
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
tProPath.nClt = EgtArc3P( nLa, {DGD.Lda,DGD.Adl,DGD.Dla}, {DGD.Lma,DGD.Aml,DGD.Mla}, {DGD.Lua,DGD.Aul,DGD.Ula}) -- p16 a p17 a p13
|
|
else
|
|
tProPath.nClt = EgtArc3P( nLa, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Lmt,DGD.Tml,DGD.Mlt}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p10 a p11 a p7
|
|
end
|
|
nFrL = EgtSurfTmRuled( nLs, tProPath.nClt, tProPath.nClb, 0.05)
|
|
EgtInvertSurf(nFrL)
|
|
EgtSetName( nFrL, sSideL)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'L') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Left')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'L'))
|
|
local nMId
|
|
if DGD.PROBE == 2 and bRemake then
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Lma, DGD.Aml, DGD.Dla}, { DGD.Lmb, DGD.Bml, DGD.Dlb}) -- pmu a pmd
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Lmt, DGD.Tml, DGD.Dlt}, { DGD.Lmb, DGD.Bml, DGD.Dlb}) -- pmu a pmd
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Lm, max(DGD.Adl,DGD.Aul), DGD.Dla}, { DGD.Lm, min(DGD.Bdl,DGD.Bul,DGD.Bml), DGD.Dlb}) -- pmu a pmd
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Lm, max(DGD.Tdl,DGD.Tul,DGD.Tml), DGD.Dlt}, { DGD.Lm, min(DGD.Bdl,DGD.Bul,DGD.Bml), DGD.Dlb}) -- pmu a pmd
|
|
end
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sLeftType)
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
end
|
|
end
|
|
end
|
|
|
|
-- disegno bordo destro
|
|
local nFrR
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' or sRightType == 'FDWC' then
|
|
-- disegno
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
tProPath.nCrt = EgtLine( nLa, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Rdt,DGD.Tdr,DGD.Drt}) -- p10 a p9
|
|
tProPath.nCrb = EgtLine( nLa, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Rdb,DGD.Bdr,DGD.Drb}) -- p4 a p3
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
tProPath.nCrt = EgtLine( nLa, {DGD.Rut,DGD.Tur,DGD.Urt}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p8 a p7
|
|
tProPath.nCrb = EgtLine( nLa, {DGD.Rub,DGD.Bur,DGD.Urb}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p2 a p1
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
tProPath.nCrt = EgtLine( nLa, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Rdb,DGD.Bdr,DGD.Drb}) -- p9 a p3
|
|
tProPath.nCrb = EgtLine( nLa, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Ldb,DGD.Bdl,DGD.Dlb}) -- p10 a p4
|
|
else -- tipo frame bottom
|
|
tProPath.nCrt = EgtLine( nLa, {DGD.Rub,DGD.Bur,DGD.Urb}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p2 a p8
|
|
tProPath.nCrb = EgtLine( nLa, {DGD.Lub,DGD.Bul,DGD.Ulb}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p1 a p7
|
|
end
|
|
nFrR = EgtSurfTmRuled( nLs, tProPath.nCrt, tProPath.nCrb, 0.05)
|
|
EgtSetName( nFrR, sSideR)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'R') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Right')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'R'))
|
|
local nMId
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
nMId = EgtLine( nLl, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Ldt,DGD.Tdl,DGD.Dlt}) -- p4 a p10
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
nMId = EgtLine( nLl, {DGD.Rub,DGD.Bur,DGD.Urb}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p2 a p8
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
nMId = EgtLine( nLl, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Rdt,DGD.Tdr,DGD.Drt}) -- p10 a p9
|
|
else -- tipo frame bottom
|
|
nMId = EgtLine( nLl, {DGD.Lub,DGD.Bul,DGD.Ulb}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p1 a p2
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Rdb,min(DGD.Bdr,DGD.Bur),DGD.Drb}, {DGD.Rda,max(DGD.Adr,DGD.Aur),DGD.Dra}) -- p3 a p15
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rdb,min(DGD.Bdr,DGD.Bur,DGD.Bmr),DGD.Drb}, {DGD.Rdt,max(DGD.Tdr,DGD.Tur,DGD.Tmr),DGD.Drt}) -- p3 a p9
|
|
end
|
|
end
|
|
|
|
if sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' then
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( COS3, 0, -SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( COS3, 0, SIN3), GDB_RT.GLOB)
|
|
end
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -COS3, 0, SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -COS3, 0, -SIN3), GDB_RT.GLOB)
|
|
end
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -COS3, -SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -COS3, SIN3), GDB_RT.GLOB)
|
|
end
|
|
else -- tipo frame bottom
|
|
if sRightType == 'BD' or sRightType == 'BDEB' then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, COS3, SIN3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, COS3, -SIN3), GDB_RT.GLOB)
|
|
end
|
|
end
|
|
else
|
|
-- se lato destro con serratura e senza maniglia e abilitata la funzione
|
|
-- di inversione automatica bevel sul lato inactive o discordanza tra i due profili, inverto l'inclinazione
|
|
if DGD.Lock == 'R' and ( DGD.sSwing == 'LHI' or DGD.sSwing == 'LHRI') and
|
|
( ( DGD.RevInBv and DGD.RevInBv == 1) or DGD.bBothOppoBevel) then
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( SIN3, 0, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -SIN3, 0, COS3), GDB_RT.GLOB)
|
|
end
|
|
else
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -SIN3, 0, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( SIN3, 0, COS3), GDB_RT.GLOB)
|
|
end
|
|
end
|
|
end
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 4 then -- se frame SX o DX
|
|
EgtModifyCurveThickness( nMId, DGD.dW / COS3)
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dH / COS3)
|
|
end
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dT / COS3)
|
|
end
|
|
else
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
else -- tipo frame bottom
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, 1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
end
|
|
else
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
end
|
|
end
|
|
EgtSetName( nMId, sRightType .. EgtIf( string.find( sRightType,'EB'), DGD.EBP, ''))
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
end
|
|
end
|
|
elseif sRightType == '1B' or sRightType == '2B' or sRightType == '3B' or sRightType == '4B' or
|
|
sRightType == '5B' or sRightType == '6B' or sRightType == '7B' or sRightType == '8B' then
|
|
-- setto la griglia di fronte: da rivedere
|
|
if DGD.PROBE == 2 and bRemake then
|
|
tProPath.nCrb = EgtArc3P( nLa, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Rmb,DGD.Bmr,DGD.Mrb}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p3 a p6 a p2
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
tProPath.nCrt = EgtArc3P( nLa, {DGD.Rda,DGD.Adr,DGD.Dra}, {DGD.Rma,DGD.Amr,DGD.Mra}, {DGD.Rua,DGD.Aur,DGD.Ura}) -- p15 a p18 a p14
|
|
else
|
|
tProPath.nCrt = EgtArc3P( nLa, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Rmt,DGD.Tmr,DGD.Mrt}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p9 a p12 a p8
|
|
end
|
|
nFrR = EgtSurfTmRuled( nLs, tProPath.nCrt, tProPath.nCrb, 0.05)
|
|
EgtSetName( nFrR, sSideR)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'R') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Right')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'R'))
|
|
local nMId
|
|
if DGD.PROBE == 2 and bRemake then
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Rmb, DGD.Bmr, DGD.Drb}, { DGD.Rma, DGD.Amr, DGD.Dra}) -- pmd a pmu
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rmb, DGD.Bmr, DGD.Drb}, { DGD.Rmt, DGD.Tmr, DGD.Drt}) -- pmd a pmu
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Rm, min(DGD.Bdr,DGD.Bur), DGD.Drb}, { DGD.Rm, max(DGD.Adr,DGD.Aur), DGD.Dra}) -- pmd a pmu
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rm, min(DGD.Bdr,DGD.Bur,DGD.Bmr), DGD.Drb}, { DGD.Rm, max(DGD.Tdr,DGD.Tur,DGD.Tmr), DGD.Drt}) -- pmd a pmu
|
|
end
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sRightType)
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
end
|
|
end
|
|
elseif sRightType == 'CV' then
|
|
-- setto la griglia di fronte: da rivedere
|
|
if DGD.PROBE == 2 and bRemake then
|
|
tProPath.nCrb = EgtArc3P( nLa, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Rmb,DGD.Bmr,DGD.Mrb}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p3 a p6 a p2
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
tProPath.nCrt = EgtArc3P( nLa, {DGD.Rda,DGD.Adr,DGD.Dra}, {DGD.Rma,DGD.Amr,DGD.Mra}, {DGD.Rua,DGD.Aur,DGD.Ura}) -- p15 a p18 a p14
|
|
else
|
|
tProPath.nCrt = EgtArc3P( nLa, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Rmt,DGD.Tmr,DGD.Mrt}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p9 a p12 a p8
|
|
end
|
|
nFrR = EgtSurfTmRuled( nLs, tProPath.nCrt, tProPath.nCrb, 0.05)
|
|
EgtSetName( nFrR, sSideR)
|
|
end
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'R') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Right')
|
|
EgtSetInfo( nLl, 'Offs', GetEdgeOffset( 'R'))
|
|
local nMId
|
|
if DGD.PROBE == 2 and bRemake then
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Rmb, DGD.Bmr, DGD.Drb}, { DGD.Rma, DGD.Amr, DGD.Dra}) -- pmd a pmu
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rmb, DGD.Bmr, DGD.Drb}, { DGD.Rmt, DGD.Tmr, DGD.Drt}) -- pmd a pmu
|
|
end
|
|
else
|
|
-- se top è ad arco e solo in modalità disegno
|
|
if ( DGD.tProfs.top.radius or DGD.Tpa) and DGD.MachEn == 0 then
|
|
nMId = EgtLine( nLl, {DGD.Rm, min(DGD.Bdr,DGD.Bur), DGD.Drb}, { DGD.Rm, max(DGD.Adr,DGD.Aur), DGD.Dra}) -- pmd a pmu
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rm, min(DGD.Bdr,DGD.Bur,DGD.Bmr), DGD.Drb}, { DGD.Rm, max(DGD.Tdr,DGD.Tur,DGD.Tmr), DGD.Drt}) -- pmd a pmu
|
|
end
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sRightType)
|
|
EgtSetColor( nMId, BLACK())
|
|
if DGD.Lock == 'L' then
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'H')
|
|
else
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'L')
|
|
end
|
|
end
|
|
end
|
|
|
|
-- bordo in basso
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'B') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Bottom')
|
|
EgtSetInfo( nLl, 'Offs', DGD.tProfs.bottom.offset)
|
|
local nMId, nAsl, nAsr
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
nMId = EgtLine( nLl, {DGD.Lub,DGD.Bul,DGD.Ulb}, {DGD.Ldb,DGD.Bdl,DGD.Dlb}) -- p1 a p4
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
nMId = EgtLine( nLl, {DGD.Rdb,DGD.Bdr,DGD.Drb}, {DGD.Rub,DGD.Bur,DGD.Urb}) -- p3 a p2
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
nMId = EgtLine( nLl, {DGD.Lut,DGD.Tul,DGD.Ult}, {DGD.Ldt,DGD.Tdl,DGD.Dlt}) -- p7 a p10
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
else -- tipo frame bottom
|
|
nMId = EgtLine( nLl, {DGD.Ldb,DGD.Bdl,DGD.Dlb}, {DGD.Lub,DGD.Bul,DGD.Ulb}) -- p4 a p1
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, 1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
end
|
|
EgtSetName( nMId, 'SQ_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
else
|
|
if sBotType == 'BD' or sBotType == 'BU' or sBotType == 'BDEB' or sBotType == 'BUEB' then
|
|
nMId = EgtLine( nLl, {min(DGD.Ldb,DGD.Lm,DGD.Lub),DGD.Bdl,DGD.Dlb}, {max(DGD.Rdb,DGD.Rm,DGD.Rub),DGD.Bdr,DGD.Drb}) -- p4 a p3
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, SIN3, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -SIN3, COS3), GDB_RT.GLOB)
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT / COS3)
|
|
elseif sBotType == '1B' or sBotType == '2B' or sBotType == '3B' or sBotType == '4B' or
|
|
sBotType == '5B' or sBotType == '6B' or sBotType == '7B' or sBotType == '8B' then
|
|
nMId = EgtLine( nLl, {min(DGD.Ldb,DGD.Lm,DGD.Lub),DGD.Bml,DGD.Dlb}, {max(DGD.Rdb,DGD.Rm,DGD.Rub),DGD.Bmr,DGD.Drb}) -- p5 a p6 con Z0
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
elseif sBotType == 'CV' then
|
|
nMId = EgtLine( nLl, {min(DGD.Ldb,DGD.Lm,DGD.Lub),DGD.Bml,DGD.Dlb}, {max(DGD.Rdb,DGD.Rm,DGD.Rub),DGD.Bmr,DGD.Drb}) -- p4 a p3
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
else -- SQ/EB/FDWC
|
|
nMId = EgtLine( nLl, {min(DGD.Ldb,DGD.Lm,DGD.Lub),DGD.Bdl,DGD.Dlb}, {max(DGD.Rdb,DGD.Rm,DGD.Rub),DGD.Bdr,DGD.Drb}) -- p4 a p3
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
end
|
|
|
|
-- creo percorsi anti-scheggia lungo lo spessore
|
|
if not ( sBotType == '1B' or sBotType == '2B' or sBotType == '3B' or sBotType == '4B' or
|
|
sBotType == '5B' or sBotType == '6B' or sBotType == '7B' or sBotType == '8B' or
|
|
sBotType == 'CV') then
|
|
-- griglia a sinistra per percorso a sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB' or sLeftType == 'FDWC' then
|
|
nAsl = EgtLine( nLl, {-DGD.Bdl,DGD.Dlb,-DGD.Ldb}, {-DGD.Bul,DGD.Ulb,-DGD.Lub}, GDB_RT.GRID) -- p4 a p1
|
|
else
|
|
nAsl = EgtLine( nLl, {-DGD.Bdl,DGD.Dlb,-(min(DGD.Ldb,DGD.Lm,DGD.Lub))}, {-DGD.Bul,DGD.Ulb,-(min(DGD.Ldb,DGD.Lm,DGD.Lub))}, GDB_RT.GRID) -- p4 a p1
|
|
end
|
|
EgtModifyCurveThickness( nAsl, 0)
|
|
EgtSetColor( nAsl, BLACK())
|
|
-- griglia a destra per percorso a destra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT))
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' or sRightType == 'FDWC' then
|
|
nAsr = EgtLine( nLl, {DGD.Bur,DGD.Urb,DGD.Rub}, {DGD.Bdr,DGD.Drb,DGD.Rdb}, GDB_RT.GRID) -- p2 a p3
|
|
else
|
|
nAsr = EgtLine( nLl, {DGD.Bur,DGD.Urb,max(DGD.Rub,DGD.Rm,DGD.Rdb)}, {DGD.Bdr,DGD.Drb,max(DGD.Rub,DGD.Rm,DGD.Rdb)}, GDB_RT.GRID) -- p2 a p3
|
|
end
|
|
EgtModifyCurveThickness( nAsr, 0)
|
|
EgtSetColor( nAsr, BLACK())
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
|
|
if DGD.Lock == 'R' then
|
|
EgtSetName( nAsl, 'ASLB_HNG') -- indico nel nome che è sul lato hinge
|
|
EgtSetName( nAsr, 'ASRB')
|
|
else
|
|
EgtSetName( nAsl, 'ASLB')
|
|
EgtSetName( nAsr, 'ASRB_HNG') -- indico nel nome che è sul lato hinge
|
|
end
|
|
end
|
|
EgtSetName( nMId, sBotType .. EgtIf( string.find( sBotType,'EB'), DGD.EBP, '') .. '_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
end
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'B')
|
|
end
|
|
|
|
-- bordo in alto
|
|
-- se richiesta lavorazione
|
|
if GetEdgeToMachine( 'T') and DGD.MachEn > 0 then
|
|
local nLl = EgtGroup( DGD.PZ)
|
|
EgtSetName( nLl, 'Top')
|
|
EgtSetInfo( nLl, 'Offs', DGD.tProfs.top.offset)
|
|
local nMId, nAsl, nAsr
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
nMId = EgtLine( nLl, {DGD.Ldt,DGD.Tdl,DGD.Dlt}, {DGD.Lut,DGD.Tul,DGD.Ult}) -- p10 a p7
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
nMId = EgtLine( nLl, {DGD.Rut,DGD.Tur,DGD.Urt}, {DGD.Rdt,DGD.Tdr,DGD.Drt}) -- p8 a p9
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( -1, 0, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dW)
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
nMId = EgtLine( nLl, {DGD.Rdt,DGD.Tdr,DGD.Drt}, {DGD.Rut,DGD.Tur,DGD.Urt}) -- p9 a p8
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
else -- tipo frame bottom
|
|
nMId = EgtLine( nLl, {DGD.Rub,DGD.Bur,DGD.Urb}, {DGD.Rdb,DGD.Bdr,DGD.Drb}) -- p2 a p3
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, 1, 0), GDB_RT.GLOB)
|
|
EgtModifyCurveThickness( nMId, DGD.dH)
|
|
end
|
|
EgtSetName( nMId, 'SQ_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
else
|
|
-- se top è ad arco
|
|
if DGD.tProfs.top.radius then
|
|
if sTopType == 'BD' or sTopType == 'BU' or sTopType == 'BDEB' or sTopType == 'BUEB' or
|
|
sTopType == 'SQ' or sTopType == 'EB' or sTopType == 'BV' or sTopType == 'BVEB' or
|
|
sTopType == 'FDWC' then -- profilo top
|
|
if DGD.Push then -- se a spingere percorso con punti da curva sopra spessore (la curva più stretta)
|
|
|
|
nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.rma, DGD.amr, DGD.Dra}, { DGD.lma, DGD.aml, DGD.Dla}, GDB_RT.LOC) -- arco p22 a p23
|
|
-- nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
-- { DGD.Rua, DGD.Aur, DGD.Dra}, { DGD.Lua, DGD.Aul, DGD.Dla}, GDB_RT.LOC) -- arco p22 a p23
|
|
else -- altrimenti a tirare percorso con punti da curva sotto (la curva più stretta)
|
|
|
|
nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.rma, DGD.amr, DGD.Dra}, { DGD.lma, DGD.aml, DGD.Dla}, GDB_RT.LOC) -- arco p24 a p25
|
|
-- nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
-- { DGD.Rda, DGD.Adr, DGD.Dra}, { DGD.Lda, DGD.Adl, DGD.Dla}, GDB_RT.LOC) -- arco p24 a p25
|
|
end
|
|
elseif sTopType == 'CV' then
|
|
nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.rma, DGD.amr, DGD.Dra}, { DGD.lma, DGD.aml, DGD.Dla}, GDB_RT.LOC) -- arco interno P24 a P25
|
|
else
|
|
nMId = EgtArcC2P( nLl, {((DGD.dW/2)+DGD.tProfs.top.xdeltapos), (DGD.dH-DGD.tProfs.top.ydeltapos), DGD.Dra},
|
|
{ DGD.RMa, DGD.AMr, DGD.Dra}, { DGD.LMa, DGD.AMl, DGD.Dla}, GDB_RT.LOC) -- arco p22 a p23
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sTopType .. EgtIf( string.find( sTopType,'EB'), DGD.EBP, '') .. '_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'T')
|
|
elseif DGD.Tpa then -- se top ad angolo
|
|
if sTopType == 'BD' or sTopType == 'BU' or sTopType == 'BDEB' or sTopType == 'BUEB' or
|
|
sTopType == 'SQ' or sTopType == 'EB' or sTopType == 'BV' or sTopType == 'BVEB' or
|
|
sTopType == 'FDWC' then -- profilo top
|
|
if DGD.Push then
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
local nE1 = EgtLine( nLl, {DGD.Rua,DGD.Aur,DGD.Dra}, {DGD.Cmu,DGD.Aut,DGD.Dla}) -- p14 a p19
|
|
local nE2 = EgtLine( nLl, {DGD.Cmu,DGD.Aut,DGD.Dla}, {DGD.Lua,DGD.Aul,DGD.Dla}) -- p19 a p13
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rua) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nE1)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE1, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rua,DGD.Aur,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max(DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lua) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nE2)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE2, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lua,DGD.Aul,DGD.Dla})
|
|
end
|
|
nMId = EgtCurveCompo( nLl, {nE1,nE2}, true)
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rua,DGD.Aur,DGD.Dra}, {DGD.Lua,DGD.Aul,DGD.Dla}) -- p14 a p13
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rua) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rua,DGD.Aur,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max(DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lua) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lua,DGD.Aul,DGD.Dla})
|
|
end
|
|
end
|
|
else
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
local nE1 = EgtLine( nLl, {DGD.Rda,DGD.Adr,DGD.Dra}, {DGD.Cmd,DGD.Adt,DGD.Drt}) -- p15 a p20
|
|
local nE2 = EgtLine( nLl, {DGD.Cmd,DGD.Adt,DGD.Drt}, {DGD.Lda,DGD.Adl,DGD.Dla}) -- p20 a p16
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs( max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rda) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nE1)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE1, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rda,DGD.Adr,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max( DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs( min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lda) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nE2)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE2, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lda,DGD.Adl,DGD.Dla})
|
|
end
|
|
nMId = EgtCurveCompo( nLl, {nE1,nE2}, true)
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rda,DGD.Adr,DGD.Dra}, {DGD.Lda,DGD.Adl,DGD.Dla}) -- p15 a p16
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rda) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rda,DGD.Adr,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max(DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lda) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lda,DGD.Adl,DGD.Dla})
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if DGD.tProfs.top.xdeltapos > 0 then
|
|
local nE1 = EgtLine( nLl, {DGD.Rma,DGD.Amr,DGD.Dra}, {DGD.Cmm,DGD.Amt,DGD.Drt}) -- p18 a p21
|
|
local nE2 = EgtLine( nLl, {DGD.Cmm,DGD.Amt,DGD.Drt}, {DGD.Lma,DGD.Aml,DGD.Dla}) -- p21 a p17
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs( max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rma) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nE1)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE1, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rdm,DGD.Amr,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max( DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs( min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lma) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nE2)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nE2, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lma,DGD.Aml,DGD.Dla})
|
|
end
|
|
nMId = EgtCurveCompo( nLl, {nE1,nE2}, true)
|
|
else
|
|
nMId = EgtLine( nLl, {DGD.Rma,DGD.Amr,DGD.Dra}, {DGD.Lma,DGD.Aml,DGD.Dla}) -- p18 a p17
|
|
-- eventuale allungamento percorso sull'inizio
|
|
local dDistMax = max(DGD.Rda,DGD.Rua,DGD.Rma) - min(DGD.Rda,DGD.Rua,DGD.Rma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(max(DGD.Rda,DGD.Rua,DGD.Rma) - DGD.Rma) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtSV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)) ,{DGD.Rma,DGD.Amr,DGD.Dra})
|
|
end
|
|
-- eventuale allungamento percorso sulla fine
|
|
dDistMax = max(DGD.Lda,DGD.Lua,DGD.Lma) - min(DGD.Lda,DGD.Lua,DGD.Lma)
|
|
if dDistMax > GEO.EPS_SMALL and abs(min(DGD.Lda,DGD.Lua,DGD.Lma) - DGD.Lma) > GEO.EPS_SMALL then
|
|
local sVecIni = EgtEV(nMId)
|
|
local dCompoY = (dDistMax/sVecIni:getX()*sVecIni:getY())
|
|
EgtTrimExtendCurveByLen( nMId, sqrt( (dDistMax*dDistMax) + (dCompoY*dCompoY)), {DGD.Lma,DGD.Aml,DGD.Dla})
|
|
end
|
|
end
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sTopType .. EgtIf( string.find( sTopType,'EB'), DGD.EBP, '') .. '_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'T')
|
|
else
|
|
if sTopType == 'BD' or sTopType == 'BU' or sTopType == 'BDEB' or sTopType == 'BUEB' or sTopType == 'SQ' or sTopType == 'EB' or sTopType == 'FDWC' then
|
|
nMId = EgtLine( nLl, {max(DGD.Rdt,DGD.Rm,DGD.Rut),DGD.Tdr,DGD.Drt}, {min(DGD.Ldt,DGD.Lm,DGD.Lut),DGD.Tdl,DGD.Dlt}) -- p9 a p10
|
|
if sTopType == 'BD' or sTopType == 'BU' or sTopType == 'BDEB' or sTopType == 'BUEB' then
|
|
if DGD.Push then
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, -SIN3, COS3), GDB_RT.GLOB)
|
|
else
|
|
EgtModifyCurveExtrusion( nMId, Vector3d( 0, SIN3, COS3), GDB_RT.GLOB)
|
|
end
|
|
EgtModifyCurveThickness( nMId, DGD.dT / COS3)
|
|
else -- SQ/EB/FDWC
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
end
|
|
EgtSetName( nMId, sTopType .. EgtIf( string.find( sTopType,'EB'), DGD.EBP, '') .. '_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'T')
|
|
-- creo percorsi anti-scheggia lungo lo spessore
|
|
-- griglia a destra per percorso a destra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT))
|
|
if sRightType == 'SQ' or sRightType == 'EB' or sRightType == 'BD' or sRightType == 'BU' or sRightType == 'BDEB' or sRightType == 'BUEB' or sRightType == 'FDWC' then
|
|
nAsr = EgtLine( nLl, {DGD.Tdr,DGD.Drt,DGD.Rdt}, {DGD.Tur,DGD.Urt,DGD.Rut}, GDB_RT.GRID) -- p9 a p8
|
|
else
|
|
nAsr = EgtLine( nLl, {DGD.Tdr,DGD.Drt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, {DGD.Tur,DGD.Urt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, GDB_RT.GRID) -- p9 a p8
|
|
end
|
|
EgtModifyCurveThickness( nAsr, 0)
|
|
EgtSetColor( nAsr, BLACK())
|
|
-- griglia a sinistra per percorso a sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
if sLeftType == 'SQ' or sLeftType == 'EB' or sLeftType == 'BD' or sLeftType == 'BU' or sLeftType == 'BDEB' or sLeftType == 'BUEB' or sLeftType == 'FDWC' then
|
|
nAsl = EgtLine( nLl, {-DGD.Tul,DGD.Ult,-DGD.Lut}, {-DGD.Tdl,DGD.Dlt,-DGD.Ldt}, GDB_RT.GRID) -- p7 a p10
|
|
else
|
|
nAsl = EgtLine( nLl, {-DGD.Tul,DGD.Ult,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, {-DGD.Tdl,DGD.Dlt,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, GDB_RT.GRID) -- p7 a p10
|
|
end
|
|
EgtModifyCurveThickness( nAsl, 0)
|
|
EgtSetColor( nAsl, BLACK())
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
|
|
if DGD.Lock == 'R' then
|
|
EgtSetName( nAsl, 'ASLT_HNG') -- indico nel nome che è sul lato hinge
|
|
EgtSetName( nAsr, 'ASRT')
|
|
else
|
|
EgtSetName( nAsl, 'ASLT')
|
|
EgtSetName( nAsr, 'ASRT_HNG') -- indico nel nome che è sul lato hinge
|
|
end
|
|
elseif sTopType == '1B' or sTopType == '2B' or sTopType == '3B' or sTopType == '4B' or
|
|
sTopType == '5B' or sTopType == '6B' or sTopType == '7B' or sTopType == '8B' then
|
|
nMId = EgtLine( nLl, {max(DGD.Rdt,DGD.Rm,DGD.Rut),DGD.Tdr,DGD.Drt}, {min(DGD.Ldt,DGD.Lm,DGD.Lut),DGD.Tdl,DGD.Dlt}) -- p9 a p10
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sTopType..'_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'T')
|
|
--[[
|
|
-- creo percorsi antischeggia lungo lo spessore
|
|
-- griglia a destra per percorso a destra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT))
|
|
nAsr = EgtLine( nLl, {max(DGD.Tdr,DGD.Tur),DGD.Drt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, {max(DGD.Tdr,DGD.Tur),DGD.Urt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, GDB_RT.GRID) -- p9 a p8
|
|
EgtModifyCurveThickness( nAsr, 0)
|
|
EgtSetColor( nAsr, BLACK())
|
|
-- griglia a sinistra per percorso a sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
nAsl = EgtLine( nLl, {-(max(DGD.Tul,DGD.Tdl)),DGD.Ult,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, {-(max(DGD.Tul,DGD.Tdl)),DGD.Dlt,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, GDB_RT.GRID) -- p7 a p10
|
|
EgtModifyCurveThickness( nAsl, 0)
|
|
EgtSetColor( nAsl, BLACK())
|
|
|
|
if DGD.Lock == 'R' then
|
|
EgtSetName( nAsl, 'ASLT_HNG') -- indico nel nome che è sul lato hinge
|
|
EgtSetName( nAsr, 'ASRT')
|
|
else
|
|
EgtSetName( nAsl, 'ASLT')
|
|
EgtSetName( nAsr, 'ASRT_HNG') -- indico nel nome che è sul lato hinge
|
|
end
|
|
]]--
|
|
elseif sTopType == 'CV' then
|
|
nMId = EgtLine( nLl, {max(DGD.Rdt,DGD.Rm,DGD.Rut),DGD.Tmr,DGD.Drt}, {min(DGD.Ldt,DGD.Lm,DGD.Lut),DGD.Tml,DGD.Dlt}) -- p9 a p10
|
|
EgtModifyCurveThickness( nMId, DGD.dT)
|
|
EgtSetName( nMId, sTopType..'_H')
|
|
EgtSetColor( nMId, BLACK())
|
|
EgtSetInfo( nMId, 'EdgeDoor', 'T')
|
|
--[[
|
|
-- creo percorsi antischeggia lungo lo spessore
|
|
-- griglia a destra per percorso a destra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT))
|
|
nAsr = EgtLine( nLl, {max(DGD.Tdr,DGD.Tur),DGD.Drt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, {max(DGD.Tdr,DGD.Tur),DGD.Urt,max(DGD.Rdt,DGD.Rm,DGD.Rut)}, GDB_RT.GRID) -- p9 a p8
|
|
EgtModifyCurveThickness( nAsr, 0)
|
|
EgtSetColor( nAsr, BLACK())
|
|
-- griglia a sinistra per percorso a sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
nAsl = EgtLine( nLl, {-(max(DGD.Tul,DGD.Tdl)),DGD.Ult,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, {-(max(DGD.Tul,DGD.Tdl)),DGD.Dlt,-(min(DGD.Lut,DGD.Lm,DGD.Ldt))}, GDB_RT.GRID) -- p7 a p10
|
|
EgtModifyCurveThickness( nAsl, 0)
|
|
EgtSetColor( nAsl, BLACK())
|
|
|
|
if DGD.Lock == 'R' then
|
|
EgtSetName( nAsl, 'ASLT_HNG') -- indico nel nome che è sul lato hinge
|
|
EgtSetName( nAsr, 'ASRT')
|
|
else
|
|
EgtSetName( nAsl, 'ASLT')
|
|
EgtSetName( nAsr, 'ASRT_HNG') -- indico nel nome che è sul lato hinge
|
|
end
|
|
]]--
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- elimino le 12 linee
|
|
EgtErase(nDoorBot)
|
|
EgtErase(nDoorLeft)
|
|
EgtErase(nDoorTop)
|
|
EgtErase(nDoorRight)
|
|
EgtErase(nDoorBotMid)
|
|
EgtErase(nDoorLeftMid)
|
|
EgtErase(nDoorTopMid)
|
|
EgtErase(nDoorRightMid)
|
|
EgtErase(nDoorBotTop)
|
|
EgtErase(nDoorLeftTop)
|
|
EgtErase(nDoorTopTop)
|
|
EgtErase(nDoorRightTop)
|
|
|
|
-- per i frame risetto le variabili profilo a SQ
|
|
if DGD.sFrame then
|
|
DGD.tProfs.hingeedge.trimming = 'SQ'
|
|
DGD.tProfs.lockedge.trimming = 'SQ'
|
|
end
|
|
|
|
-- inserisco sfinestrature
|
|
if #DGD.tVisions > 0 then
|
|
InsertGeom( DGD.tVisions, DGD.Lock, DGD.Push, 'vision')
|
|
end
|
|
|
|
-- inserisco sfinestrature inferiori
|
|
if #DGD.tLouvers > 0 then
|
|
InsertGeom( DGD.tLouvers, DGD.Lock, DGD.Push, 'louver')
|
|
end
|
|
|
|
-- inserisco sfinestrature inferiori mail slot
|
|
if #DGD.tMailSlots > 0 then
|
|
InsertGeom( DGD.tMailSlots, DGD.Lock, DGD.Push, 'mail')
|
|
end
|
|
|
|
-- inserisco spioncini
|
|
if #DGD.tViewers > 0 then
|
|
InsertGeom( DGD.tViewers, DGD.Lock, DGD.Push, 'viewer')
|
|
end
|
|
|
|
-- inserisco disegni flush pull
|
|
if #DGD.tFlushPulls > 0 then
|
|
InsertGeom( DGD.tFlushPulls, DGD.Lock, DGD.Push, 'flush')
|
|
end
|
|
|
|
-- inserisco disegni cerniere
|
|
if #DGD.tHinges > 0 then
|
|
nNumHingePivot = nNumHingePivot + #DGD.tHinges -- prendo il numero di cerniere inserite
|
|
InsertGeom( DGD.tHinges, DGD.Lock, DGD.Push, 'hinge')
|
|
end
|
|
|
|
-- inserisco disegni EPT
|
|
if #DGD.tEPTs > 0 then
|
|
InsertGeom( DGD.tEPTs, DGD.Lock, DGD.Push, 'ept')
|
|
end
|
|
|
|
--inserisco disegni serrature
|
|
if #DGD.tLocks > 0 then
|
|
InsertGeom( DGD.tLocks, DGD.Lock, DGD.Push, 'lock')
|
|
end
|
|
|
|
--inserisco disegni flush bolt
|
|
if #DGD.tFlushBolts > 0 then
|
|
InsertGeom( DGD.tFlushBolts, DGD.Lock, DGD.Push, 'flushbolt')
|
|
end
|
|
|
|
--inserisco disegni edge pull
|
|
if #DGD.tEdgePulls > 0 then
|
|
InsertGeom( DGD.tEdgePulls, DGD.Lock, DGD.Push, 'edgepull')
|
|
end
|
|
|
|
--inserisco disegni Roller Latch
|
|
if #DGD.tRollerLatchs > 0 then
|
|
InsertGeom( DGD.tRollerLatchs, DGD.Lock, DGD.Push, 'rollerlatch')
|
|
end
|
|
|
|
--inserisco disegni Pivot
|
|
if #DGD.tPivots > 0 then
|
|
InsertGeom( DGD.tPivots, DGD.Lock, DGD.Push, 'pivot')
|
|
end
|
|
|
|
--inserisco disegni stops and closers
|
|
if #DGD.tStopsAndClosers > 0 then
|
|
InsertGeom( DGD.tStopsAndClosers, DGD.Lock, DGD.Push, 'stopandcloser')
|
|
end
|
|
|
|
--inserisco disegni over heads
|
|
if #DGD.tOHeads > 0 then
|
|
InsertGeom( DGD.tOHeads, DGD.Lock, DGD.Push, 'overhead')
|
|
end
|
|
|
|
--inserisco disegni strike
|
|
if #DGD.tStrikes > 0 then
|
|
InsertGeom( DGD.tStrikes, DGD.Lock, DGD.Push, 'strike')
|
|
end
|
|
|
|
--inserisco disegni groove
|
|
if #DGD.tGrooves > 0 then
|
|
InsertGeom( DGD.tGrooves, DGD.Lock, DGD.Push, 'groove')
|
|
end
|
|
|
|
--inserisco disegni rabbet
|
|
if #DGD.tRabbets > 0 then
|
|
InsertGeom( DGD.tRabbets, DGD.Lock, DGD.Push, 'rabbet')
|
|
end
|
|
|
|
--inserisco disegni face decoration
|
|
if #DGD.tDecorations > 0 then
|
|
InsertGeom( DGD.tDecorations, DGD.Lock, DGD.Push, 'facedecoration')
|
|
end
|
|
--debug
|
|
-- EgtSaveFile()
|
|
-- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG())
|
|
|
|
-- sottraggo le superfici in modo da avere la visualizzazione della porta con le sfinestrature
|
|
-- ed elimino le superfici temporanee
|
|
SubAndDeleteTempSurf( nLs)
|
|
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 then -- se frame SX
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( DGD.PZ, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtMove( DGD.PZ, Point3d(DGD.dT,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT))
|
|
EgtRotate( DGD.PZ, Point3d(DGD.dW,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia frontale
|
|
EgtMove( DGD.PZ, Point3d(-DGD.dW,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( DGD.PZ, Point3d(-DGD.dH,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
EgtMove( DGD.PZ, Point3d(DGD.dH,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtRotate( DGD.PZ, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia top
|
|
EgtMove( DGD.PZ, Point3d(DGD.dT,0,0) - ORIG(), GDB_RT.GRID)
|
|
else -- tipo frame bottom
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT))
|
|
EgtRotate( DGD.PZ, Point3d(0,0,0), Z_AX(), -90, GDB_RT.GRID) -- ruoto su faccia sinistra
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
EgtRotate( DGD.PZ, Point3d(0,0,0), Z_AX(), 90, GDB_RT.GRID) -- ruoto su faccia top
|
|
end
|
|
end
|
|
|
|
-- scritta TOP per debug
|
|
if DGD.sFrame then
|
|
if nTypePiece == 3 or nTypePiece == 4 then -- se frame SX o DX
|
|
EgtText(nLa,{ 5, DGD.dH - 100, DGD.dW},'TOP-'.. EgtIf( nTypePiece == 3, 'JL', 'JR') .. '-' .. DGD.sAliasSwng,20,GDB_RT.GLOB)
|
|
else
|
|
EgtText(nLa,{ 5, DGD.dW - 100, DGD.dH},'TOP-'.. EgtIf( nTypePiece == 5, 'JT', 'JB') .. '-' .. DGD.sAliasSwng,20,GDB_RT.GLOB)
|
|
end
|
|
else
|
|
if DGD.tProfs.top.angle then
|
|
-- faccio il calcolo per capire se taglia la scritta
|
|
local nDltPosY
|
|
if DGD.tProfs.top.angle > 0 then
|
|
nDltPosY = ( DGD.dW - DGD.tProfs.top.xdeltapos - (0.5*(DGD.Lut+DGD.Rut)-150)) * tan(DGD.tProfs.top.angle)
|
|
else
|
|
nDltPosY = ( ( 0.5*(DGD.Lut+DGD.Rut)+150) - DGD.tProfs.top.xdeltapos) * tan(abs(DGD.tProfs.top.angle))
|
|
end
|
|
if nDltPosY < 0 then
|
|
nDltPosY = 0
|
|
end
|
|
EgtText(nLa,{ 0.5*(DGD.Lut+DGD.Rut)-150, DGD.Tul - 100 - nDltPosY, DGD.dT},'TOP-'..DGD.sAliasSwng,50,GDB_RT.GLOB)
|
|
else
|
|
EgtText(nLa,{ 0.5*(DGD.Lut+DGD.Rut)-150, DGD.Tul - 100, DGD.dT},'TOP-'..DGD.sAliasSwng,50,GDB_RT.GLOB)
|
|
end
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
end
|
|
|
|
-------------------
|
|
-- quotatura porta
|
|
-------------------
|
|
InsertSize( 0, nil, ptMedArc, nil)
|
|
|
|
return true
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** read Probe file ***
|
|
-----------------------------------------------------------------
|
|
local function LoadDataProbeFile( sOriProbeFile, sProbeFile)
|
|
|
|
local bReadFile = true
|
|
|
|
if DGD.PROBE == 2 then
|
|
|
|
local nIdPrb = OpenPrbFile( sOriProbeFile, 'r')
|
|
|
|
-- se trovato il file generico data.dat lo rinomino in <nomeddf>.dat
|
|
if nIdPrb then
|
|
nIdPrb:close() -- chiudo il file
|
|
EgtCopyFile( sOriProbeFile, sProbeFile) -- faccio la copia sovrascrivendo l'eventuale file <nomeddf>.dat
|
|
-- elimino il file data.dat così poi c'è il tempo per riaprire il file <nomeddf>.dat
|
|
EgtEraseFile( sOriProbeFile)
|
|
end
|
|
|
|
nIdPrb = OpenPrbFile( sProbeFile, 'r')
|
|
|
|
if nIdPrb then
|
|
-- leggo la prossima linea
|
|
local sLine = nIdPrb:read( '*l')
|
|
|
|
while sLine do
|
|
-- elimino spazi finali (compresi tab e simili)
|
|
sLine = EgtTrimRight( sLine)
|
|
-- se linea contiene qualcosa
|
|
if sLine:len() > 0 then
|
|
|
|
-- se non ci sono commenti
|
|
local nI = sLine:find( ';', 1, true)
|
|
|
|
if not nI then
|
|
|
|
if sLine:find( 'OPM=', 1, true) then
|
|
sLine = sLine:sub( 5)
|
|
tProbeDoor.OPM = tonumber(sLine)
|
|
elseif sLine:find( 'P1.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P1x = tonumber(sLine)
|
|
elseif sLine:find( 'P1.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P1y = tonumber(sLine)
|
|
elseif sLine:find( 'P2.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P2x = tonumber(sLine)
|
|
elseif sLine:find( 'P2.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P2y = tonumber(sLine)
|
|
elseif sLine:find( 'P3.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P3x = tonumber(sLine)
|
|
elseif sLine:find( 'P3.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P3y = tonumber(sLine)
|
|
elseif sLine:find( 'P4.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P4x = tonumber(sLine)
|
|
elseif sLine:find( 'P4.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P4y = tonumber(sLine)
|
|
elseif sLine:find( 'P5.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P5x = tonumber(sLine)
|
|
elseif sLine:find( 'P5.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P5y = tonumber(sLine)
|
|
elseif sLine:find( 'P6.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P6x = tonumber(sLine)
|
|
elseif sLine:find( 'P6.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P6y = tonumber(sLine)
|
|
elseif sLine:find( 'P7.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P7x = tonumber(sLine)
|
|
elseif sLine:find( 'P7.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P7y = tonumber(sLine)
|
|
elseif sLine:find( 'P8.x=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P8x = tonumber(sLine)
|
|
elseif sLine:find( 'P8.y=', 1, true) then
|
|
sLine = sLine:sub( 6)
|
|
tProbeDoor.P8y = tonumber(sLine)
|
|
elseif sLine:find( 'FD=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.FD = tonumber(sLine)
|
|
elseif sLine:find( 'TD=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.TD = tonumber(sLine)
|
|
elseif sLine:find( 'DR=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.DR = EgtIf( DGD.bMM, 1, GEO.ONE_INCH)*tonumber(sLine)
|
|
elseif sLine:find( 'DO=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.DO = EgtIf( DGD.bMM, 1, GEO.ONE_INCH)*tonumber(sLine)
|
|
elseif sLine:find( 'DD=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.DD = tonumber(sLine)
|
|
elseif sLine:find( 'PX=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.PX = tonumber(sLine)
|
|
elseif sLine:find( 'PY=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.PY = tonumber(sLine)
|
|
elseif sLine:find( 'PZ=', 1, true) then
|
|
sLine = sLine:sub( 4)
|
|
tProbeDoor.PZ = tonumber(sLine)
|
|
-- se lo spessore passato è 0 lo setto allo spessore nominale
|
|
if abs(tProbeDoor.PZ) < GEO.EPS_SMALL then
|
|
tProbeDoor.PZ = DGD.dT
|
|
end
|
|
end
|
|
end
|
|
end
|
|
sLine = nIdPrb:read( '*l')
|
|
end
|
|
-- chiudo il file
|
|
nIdPrb:close()
|
|
else
|
|
bReadFile = false
|
|
end
|
|
end
|
|
|
|
return bReadFile
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Verify Mtable ***
|
|
-----------------------------------------------------------------
|
|
local function VerifyMtable()
|
|
|
|
local M
|
|
local bLocFoundMTable = true
|
|
|
|
-- verifico se esiste il nome file
|
|
if not sMTable or #sMTable <= 0 then
|
|
bLocFoundMTable = false
|
|
end
|
|
|
|
if bLocFoundMTable and DGD.MachEn > 0 then
|
|
|
|
-- verifico se esiste il file
|
|
sMTablePath = sBaseDir..'MTables\\'..sMTable..'.mtl'
|
|
|
|
if EgtExistsFile(sMTablePath) then
|
|
|
|
sMTablePath = sBaseDir..'MTables\\'
|
|
M = require( sMTable)
|
|
|
|
if M then
|
|
tMachineData = M.MMachineData
|
|
if not tMachineData then
|
|
local sMessageErr = string.format( EgtDoorsMsg[489], sMTable) -- dati macchina non validi
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 25
|
|
-- WriteErrFile( sErrFileM)
|
|
bLocFoundMTable = false
|
|
end
|
|
else
|
|
local sMessageErr = string.format( EgtDoorsMsg[490], sMTable) -- tabella non trovata
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 24
|
|
-- WriteErrFile( sErrFileM)
|
|
bLocFoundMTable = false
|
|
end
|
|
else
|
|
local sMessageErr = string.format( EgtDoorsMsg[487], 'Mtable ',sMTablePath) -- non c'è il file della tabella
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 23
|
|
-- WriteErrFile( sErrFileM)
|
|
bLocFoundMTable = false
|
|
end
|
|
elseif DGD.MachEn > 0 then
|
|
local sMessageErr = string.format( EgtDoorsMsg[487], 'Mtable ', sMTable) -- il nome del file della tabella non è valido
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 22
|
|
-- WriteErrFile( sErrFileM)
|
|
end
|
|
|
|
return bLocFoundMTable
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** DOOR creation ***
|
|
-----------------------------------------------------------------
|
|
local function DoorCreation()
|
|
|
|
local bLocFoundMTable = true
|
|
|
|
-- Creo pezzo porta
|
|
EgtNewFile()
|
|
DGD.PZ = EgtGroup( GDB_ID.ROOT)
|
|
if not DGD.sFrame then
|
|
EgtSetName( DGD.PZ, 'DOOR')
|
|
elseif DGD.sFrame == 'L' then
|
|
EgtSetName( DGD.PZ, 'FRAME_LOCK')
|
|
elseif DGD.sFrame == 'LE' then
|
|
EgtSetName( DGD.PZ, 'FRAME_LOCK_EXT')
|
|
elseif DGD.sFrame == 'H' then
|
|
EgtSetName( DGD.PZ, 'FRAME_HINGE')
|
|
elseif DGD.sFrame == 'HE' then
|
|
EgtSetName( DGD.PZ, 'FRAME_HINGE_EXT')
|
|
elseif DGD.sFrame == 'T' then
|
|
EgtSetName( DGD.PZ, 'FRAME_TOP')
|
|
elseif DGD.sFrame == 'TE' then
|
|
EgtSetName( DGD.PZ, 'FRAME_TOP_EXT')
|
|
elseif DGD.sFrame == 'B' then
|
|
EgtSetName( DGD.PZ, 'FRAME_BOT')
|
|
elseif DGD.sFrame == 'BE' then
|
|
EgtSetName( DGD.PZ, 'FRAME_BOT_EXT')
|
|
end
|
|
|
|
EgtSetCurrPartLayer( DGD.PZ, GDB_ID.NULL)
|
|
|
|
-- scrivo le note
|
|
local tAppo
|
|
local sParam, sValue
|
|
for i = 1, #tGenInfo do
|
|
tAppo = tGenInfo[i]
|
|
sParam = tAppo[1]
|
|
sValue = tAppo[2]
|
|
EgtSetInfo( DGD.PZ, sParam, sValue)
|
|
end
|
|
|
|
-- nota del frame
|
|
EgtSetInfo( DGD.PZ, 'Frame', DGD.sFrame)
|
|
|
|
-- controllo la macchina solo se ho abilitato la generazione della geometria di lavorazione
|
|
if DGD.MachEn > 0 then
|
|
|
|
-- faccio qui il controllo come frame deve essere disposto ed eventualmente modifico la Mtable
|
|
if DGD.sFrame then
|
|
local nDispJamb = 0
|
|
if DGC.Dwjs and DGD.Material and string.lower(DGD.Material) == 'wood' then
|
|
nDispJamb = DGC.Dwjs
|
|
elseif DGC.Dsjs and DGD.Material and string.lower(DGD.Material) == 'steel' then
|
|
nDispJamb = DGC.Dsjs
|
|
elseif DGC.Dajs and DGD.Material and string.lower(DGD.Material) == 'aluminum' then
|
|
nDispJamb = DGC.Dajs
|
|
elseif DGC.Dfjs and DGD.Material and string.lower(DGD.Material) == 'fiberglass' then
|
|
nDispJamb = DGC.Dfjs
|
|
end
|
|
|
|
-- setto la disposizione di piatto o di fianco dei jamb laterali e superiore,
|
|
-- per quello inferiore, se le dimensioni della sezione sono sotto un certo valore, viene disposto solo di piatto
|
|
if nTypePiece == 3 then -- se frame SX
|
|
if nDispJamb > 0 and DGD.dW > DGC.Mjn then -- se disposizione sul lato narrow e lato maggiore del valore minimo
|
|
DGD.Dws = false
|
|
else
|
|
DGD.Dws = true
|
|
end
|
|
elseif nTypePiece == 4 then -- se frame DX
|
|
if nDispJamb > 0 and DGD.dW > DGC.Mjn then -- se disposizione sul lato narrow e lato maggiore del valore minimo
|
|
DGD.Dws = false
|
|
else
|
|
DGD.Dws = true
|
|
end
|
|
elseif nTypePiece == 5 then -- tipo frame top
|
|
if nDispJamb > 0 and DGD.dH > DGC.Mjn then -- se disposizione sul lato narrow e lato maggiore del valore minimo
|
|
DGD.Dws = false
|
|
else
|
|
DGD.Dws = true
|
|
end
|
|
else -- tipo frame bottom
|
|
if nDispJamb > 0 and DGD.dH > DGC.Mjn then -- se disposizione sul lato narrow e lato maggiore del valore minimo
|
|
DGD.Dws = false
|
|
else
|
|
DGD.Dws = true
|
|
end
|
|
end
|
|
|
|
-- se ho disposto eventuale frame sul lato wide modifico il nome della Mtable e la verifico
|
|
if DGD.Dws then
|
|
sMTable = sMTable .. '_wide'
|
|
bLocFoundMTable = VerifyMtable()
|
|
end
|
|
DGD.Spd = DGC.Spd or 0
|
|
else
|
|
DGD.Dws = nil
|
|
DGD.Spd = 0
|
|
end
|
|
|
|
-- Check machines and search into CurrCamInfo the parameter for manage large wide door
|
|
for i = 1, #tMachineData do
|
|
|
|
-- se nome macchina non c'è
|
|
if not tMachineData[i].MachName then
|
|
DoorOutLog( string.format(EgtDoorsMsg[488], tMachineData[i].MachName), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format(EgtDoorsMsg[488], tMachineData[i].MachName)
|
|
DGD.ERR = -12
|
|
-- se non c'è la macchina
|
|
elseif not EgtSetCurrMachine( tMachineData[i].MachName) then
|
|
DoorOutLog( string.format(EgtDoorsMsg[488], tMachineData[i].MachName), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format(EgtDoorsMsg[488], tMachineData[i].MachName)
|
|
DGD.ERR = -11
|
|
-- macchina presente
|
|
else
|
|
local CCI = require( 'CurrCamInfo')
|
|
for j = 1, #CCI do
|
|
if CCI[j].MachName == tMachineData[i].MachName then
|
|
if CCI[j].WideDoorWidth and CCI[j].WideDoorWidth > 0 then
|
|
DGD.Part = CCI[j].WideDoorWidth
|
|
end
|
|
if CCI[j].SideDoorDefined and CCI[j].SideDoorDefined >= 0 then
|
|
DGD.SDF = CCI[j].SideDoorDefined
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Note della tabella utilizzata ( deve essere settata prima di creare il pezzo con CreateDoor() perchè i componenti inseriti vanno ad utilizzarla)
|
|
EgtSetInfo( DGD.PZ, 'MTable', sMTable)
|
|
EgtSetInfo( DGD.PZ, 'MTablePath', sMTablePath)
|
|
-- setto il tipo di disposizione del frame
|
|
EgtSetInfo( DGD.PZ, 'FrameDispositionOnSide', DGD.Dws)
|
|
-- setto la nota per large wide door
|
|
if DGD.Part and DGD.Part > 0 then
|
|
EgtSetInfo( DGD.PZ, 'ManageLargeWideDoor', DGD.Part)
|
|
end
|
|
end
|
|
|
|
-- Note della disposizione
|
|
EgtSetInfo( DGD.PZ, 'SwingDriveDisp', DGD.SwDD or 1)
|
|
|
|
if bLocFoundMTable then
|
|
|
|
------------------------------------------------------
|
|
------------------------------------------------------
|
|
-- Costruzione della porta
|
|
local bOk, nNumErr, sMessErr = CreateDoor()
|
|
------------------------------------------------------
|
|
------------------------------------------------------
|
|
|
|
-- In caso di errore, lo segnalo
|
|
if not bOk then
|
|
if nNumErr == 0 then
|
|
DoorOutLog( EgtDoorsMsg[454], 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. EgtDoorsMsg[454]
|
|
DGD.ERR = 10
|
|
elseif nNumErr == 1 then
|
|
DoorOutLog( EgtDoorsMsg[630], 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. EgtDoorsMsg[630]
|
|
DGD.ERR = 11
|
|
elseif nNumErr == 2 then
|
|
DoorOutLog( sMessErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessErr
|
|
DGD.ERR = 14
|
|
end
|
|
else
|
|
|
|
-- Note del profilo bevel invertito
|
|
EgtSetInfo( DGD.PZ, 'OppoBevelProf', DGD.bBothOppoBevel)
|
|
-- Note del raggio profilo su hinge
|
|
EgtSetInfo( DGD.PZ, 'RadHingeProfile', DGD.RPH or 0)
|
|
-- Note del raggio profilo su lock
|
|
EgtSetInfo( DGD.PZ, 'RadLockProfile', DGD.RPL or 0)
|
|
-- Note del raggio profilo su top
|
|
EgtSetInfo( DGD.PZ, 'RadTopProfile', DGD.RPT or 0)
|
|
-- Note del raggio profilo su bottom
|
|
EgtSetInfo( DGD.PZ, 'RadBottomProfile', DGD.RPB or 0)
|
|
-- Note del piano sul profilo CV su hinge
|
|
EgtSetInfo( DGD.PZ, 'PlnHingeProfile', DGD.PPH or 0)
|
|
-- Note del piano sul profilo CV su lock
|
|
EgtSetInfo( DGD.PZ, 'PlnLockProfile', DGD.PPL or 0)
|
|
-- Note del piano sul profilo CV su top
|
|
EgtSetInfo( DGD.PZ, 'PlnTopProfile', DGD.PPT or 0)
|
|
-- Note del piano sul profilo CV su bottom
|
|
EgtSetInfo( DGD.PZ, 'PlnBottomProfile', DGD.PPB or 0)
|
|
-- note del numero di elementi inseriti nel lato cerniere (esclusi EPT per il momento)
|
|
EgtSetInfo( DGD.PZ, 'NumHingesPivots', nNumHingePivot or 0)
|
|
-- note dispsizione jambs materiale legno
|
|
EgtSetInfo( DGD.PZ, 'DisposeWJambsOnSide', DGC.Dwjs or 0)
|
|
-- note dispsizione jambs materiale acciaio
|
|
EgtSetInfo( DGD.PZ, 'DisposeSJambsOnSide', DGC.Dsjs or 0)
|
|
-- note dispsizione jambs materiale alluminio
|
|
EgtSetInfo( DGD.PZ, 'DisposeAJambsOnSide', DGC.Dajs or 0)
|
|
-- note dispsizione jambs materiale fibra di vetro
|
|
EgtSetInfo( DGD.PZ, 'DisposeFJambsOnSide', DGC.Dfjs or 0)
|
|
-- nota presenza cutout
|
|
EgtSetInfo( DGD.PZ, 'ExistsCutOut', DGD.ExistCutOut)
|
|
-- nota mancanza riduzione sfridi
|
|
EgtSetInfo( DGD.PZ, 'WholeCutOut', DGD.NotExistHatch)
|
|
end
|
|
end
|
|
|
|
return bLocFoundMTable, bWriteWide
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** DDF parse and make door ***
|
|
-----------------------------------------------------------------
|
|
local function ReadAndParseDdfAndMakeDoors()
|
|
|
|
local sOutLogMsg = ''
|
|
local sPrvKeyLine = ''
|
|
local bOpenDdf = true
|
|
local bWriteErr = false
|
|
local bLocFoundMTable
|
|
local nLimitPieces = 6
|
|
|
|
---------------------------------------------------
|
|
-- Lettura parametri necessari con errori bloccanti
|
|
---------------------------------------------------
|
|
|
|
-- Apertura file DDF
|
|
if not OpenFile( DGD.FILE) then
|
|
DoorOutLog( EgtDoorsMsg[434], 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. EgtDoorsMsg[434]
|
|
DGD.ERR = 1
|
|
bOpenDdf = false
|
|
end
|
|
|
|
-- esco se trovo il codice di fine file o non è finito il file
|
|
while bOpenDdf and not EndOfFile() and not KeyFromLine( '...') and nCountPieces < nLimitPieces do
|
|
|
|
-- Reset librerie per evitare l'errore in caso riparto da una situazione di errore dello script
|
|
ResetDoorsGlobData()
|
|
tGenInfo={}
|
|
|
|
if not KeyFromLine( '---') then
|
|
|
|
sPrvKeyLine = ''
|
|
|
|
-- Lettura numero versione ddf
|
|
GetVersion()
|
|
sOutLogMsg = ' DGD.nVersion=' .. tostring( DGD.nVersion)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- Lettura flag di produzione pezzo
|
|
GetProoduce()
|
|
sOutLogMsg = ' DGD.bProoduce=' .. tostring( DGD.bProoduce)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- Lettura unità di misura
|
|
if not GetMeasures() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[435], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[435], GetLineNumber())
|
|
DGD.ERR = 2
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.bMM=' .. tostring( DGD.bMM)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- Lettura codice identificativo
|
|
if not GetCode() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[436], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[436], GetLineNumber())
|
|
DGD.ERR = 3
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.sCode=' .. DGD.sCode
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- Lettura dati ordine
|
|
if not GetOrder() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[437], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[437], GetLineNumber())
|
|
DGD.ERR = 4
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.tOrder=' .. table.concat( DGD.tOrder, ',')
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- Lettura data
|
|
if not GetDate() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[438], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[438], GetLineNumber())
|
|
DGD.ERR = 5
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.sDate=' .. DGD.sDate
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- lettura tipo pezzo
|
|
if GetPiece() then
|
|
sOutLogMsg = ' DGD.sFrame=' .. ( DGD.sFrame or '')
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- lettura coordinate disposizione
|
|
if GetPosition() then
|
|
sOutLogMsg = ' DGD.tPosition=' .. EgtNumToString( DGD.tPosition[1], 4) .. ' ' .. EgtNumToString( DGD.tPosition[2], 4) .. ' ' .. EgtNumToString( DGD.tPosition[3], 4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- Lettura dimensioni
|
|
if not GetSize() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[439], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[439], GetLineNumber())
|
|
DGD.ERR = 6
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.dW='..EgtNumToString( DGD.dW, 4)..' DGD.dH='..EgtNumToString( DGD.dH, 4)..' DGD.dT='..EgtNumToString( DGD.dT, 4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- lettura altezza originale porta (opzionale, solo per i frame)
|
|
if GetDoorHeight() then
|
|
sOutLogMsg = ' DGD.dOH='..EgtNumToString( DGD.dOH, 4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- Lettura tipo di apertura
|
|
local bGetSwing, sTmpSwing = GetSwing()
|
|
if not bGetSwing then
|
|
DoorOutLog( string.format( EgtDoorsMsg[440], sTmpSwing, GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[440], sTmpSwing, GetLineNumber())
|
|
DGD.ERR = 7
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
sOutLogMsg = ' DGD.sAliasSwng=' .. DGD.sAliasSwng
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
sOutLogMsg = ' DGD.sSwing=' .. DGD.sSwing
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
-- lettura disposizione porta senza bevel
|
|
if not GetSecurSide() then
|
|
DoorOutLog( EgtDoorsMsg[543], 0)
|
|
else
|
|
sOutLogMsg = ' DGD.sSecSide=' .. DGD.sSecSide
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- lettura materiale porta
|
|
if not GetDoorMaterial() then
|
|
DoorOutLog( EgtDoorsMsg[668], 0)
|
|
else
|
|
sOutLogMsg = ' DGD.Material=' .. DGD.Material
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- lettura proprietà porta
|
|
if not GetDoorProperties() then
|
|
DoorOutLog( EgtDoorsMsg[635], 0)
|
|
else
|
|
if DGD.Properties and #DGD.Properties > 0 then
|
|
local sProp = ''
|
|
for k = 1, #DGD.Properties do
|
|
sProp = sProp .. DGD.Properties[k] .. ','
|
|
end
|
|
sOutLogMsg = ' DGD.Properties=' .. sProp
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
end
|
|
|
|
-- Lettura tipo di profili
|
|
local nErrPrf = GetProfiles()
|
|
if nErrPrf == 1 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[441], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[441], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 2 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[613], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[613], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 3 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[614], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[614], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 4 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[615], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[615], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 5 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[637], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[637], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 6 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[660], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[660], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 7 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[661], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[661], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 8 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[662], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[662], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 9 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[663], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[663], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 10 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[664], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[664], GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
elseif nErrPrf == 11 then
|
|
DoorOutLog( string.format( EgtDoorsMsg[703], DGD.nVersion, GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[703], DGD.nVersion, GetLineNumber())
|
|
DGD.ERR = 8
|
|
bWriteErr = false
|
|
break
|
|
else
|
|
-- se non ci sono proprietà alla porta, con modalità probe e uno dei fianchi è lavorato, do errore per incompatibilità
|
|
if not DGD.Properties and ( DGD.PROBE > 0 and DGC.NPM == 0) and
|
|
( DGD.tProfs.top.machining or DGD.tProfs.bottom.machining or DGD.tProfs.hingeedge.machining or DGD.tProfs.lockedge.machining) then
|
|
|
|
DoorOutLog( EgtDoorsMsg[632], 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. EgtDoorsMsg[632]
|
|
DGD.ERR = 13
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
end
|
|
sOutLogMsg = ' DGD.tProfs.top='..DGD.tProfs.top.trimming..' '..
|
|
tostring(DGD.tProfs.top.machining)..' '..
|
|
EgtNumToString(DGD.tProfs.top.offset,4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
sOutLogMsg = ' DGD.tProfs.bottom='..DGD.tProfs.bottom.trimming..' '..
|
|
tostring(DGD.tProfs.bottom.machining)..' '..
|
|
EgtNumToString(DGD.tProfs.bottom.offset,4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
sOutLogMsg = ' DGD.tProfs.hingeedge='..DGD.tProfs.hingeedge.trimming..' '..
|
|
tostring(DGD.tProfs.hingeedge.machining)..' '..
|
|
EgtNumToString(DGD.tProfs.hingeedge.offset,4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
sOutLogMsg = ' DGD.tProfs.lockedge='..DGD.tProfs.lockedge.trimming..' '..
|
|
tostring(DGD.tProfs.lockedge.machining)..' '..
|
|
EgtNumToString(DGD.tProfs.lockedge.offset,4)
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
|
|
------------------------------------------
|
|
-- Lettura parametri ferramenta, opzionali
|
|
------------------------------------------
|
|
if DGD.nVersion >= 2 then
|
|
local StartHw = StringFromLine( 'hardware:')
|
|
if not StartHw then
|
|
DoorOutLog( string.format( EgtDoorsMsg[702], DGD.nVersion), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[702], DGD.nVersion)
|
|
DGD.ERR = 28
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
end
|
|
|
|
-- Lettura sfinestrature vision cutout
|
|
if not DGD.sFrame then
|
|
if GetVisionCutOuts() then
|
|
if DGD.tVisions then
|
|
local nContVC = 1
|
|
while nContVC <= #DGD.tVisions do
|
|
sOutLogMsg = ' DGD.tVisions.Id='..EgtNumToString(nContVC,0)..' '..
|
|
DGD.tVisions[nContVC].shape
|
|
if DGD.tVisions[nContVC].length then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].length,4)
|
|
end
|
|
if DGD.tVisions[nContVC].width then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].width,4)
|
|
end
|
|
if DGD.tVisions[nContVC].top_rail then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].top_rail,4)
|
|
end
|
|
if DGD.tVisions[nContVC].lock_stile then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].lock_stile,4)
|
|
end
|
|
if DGD.tVisions[nContVC].radius then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].radius,4)
|
|
end
|
|
if DGD.tVisions[nContVC].center_from_top then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].center_from_top,4)
|
|
end
|
|
if DGD.tVisions[nContVC].center_from_lock then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tVisions[nContVC].center_from_lock,4)
|
|
end
|
|
if DGD.tVisions[nContVC].door_center then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tVisions[nContVC].door_center
|
|
end
|
|
if DGD.tVisions[nContVC].split then
|
|
sOutLogMsg = sOutLogMsg..' '.. EgtIf( DGD.tVisions[nContVC].split, '1', '0')
|
|
end
|
|
if DGD.tVisions[nContVC].dir then
|
|
sOutLogMsg = sOutLogMsg..' '.. DGD.tVisions[nContVC].dir
|
|
end
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContVC = nContVC + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tVisions == 0 then -- se non ho trovato sfinestrature
|
|
DoorOutLog( EgtDoorsMsg[442], 0)
|
|
end
|
|
|
|
-- Lettura sfinestratura inferiori: louver
|
|
if not DGD.sFrame then
|
|
if GetLouverCutOut() then
|
|
if DGD.tLouvers then
|
|
local nContLC = 1
|
|
while nContLC <= #DGD.tLouvers do
|
|
sOutLogMsg = ' DGD.tLouvers.Id='..EgtNumToString(nContLC,0)
|
|
if DGD.tLouvers[nContLC].length then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tLouvers[nContLC].length,4)
|
|
end
|
|
if DGD.tLouvers[nContLC].width then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tLouvers[nContLC].width,4)
|
|
end
|
|
if DGD.tLouvers[nContLC].bottom_rail then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tLouvers[nContLC].bottom_rail,4)
|
|
end
|
|
if DGD.tLouvers[nContLC].lock_stile then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tLouvers[nContLC].lock_stile,4)
|
|
end
|
|
if DGD.tLouvers[nContLC].door_center then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tLouvers[nContLC].door_center
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContLC = nContLC + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tLouvers == 0 then -- se non ho trovato sfinestrature inferiori
|
|
DoorOutLog( EgtDoorsMsg[443], 0)
|
|
end
|
|
|
|
-- Lettura sfinestrature inferiori: mail slot
|
|
if not DGD.sFrame then
|
|
if GetMailSlots() then
|
|
if DGD.tMailSlots then
|
|
local nContMS = 1
|
|
while nContMS <= #DGD.tMailSlots do
|
|
sOutLogMsg = ' DGD.tMailSlots.Id='..EgtNumToString(nContMS,0)..' '..
|
|
DGD.tMailSlots[nContMS].template
|
|
if DGD.tMailSlots[nContMS].length then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tMailSlots[nContMS].length,4)
|
|
end
|
|
if DGD.tMailSlots[nContMS].bottom_rail then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tMailSlots[nContMS].bottom_rail,4)
|
|
end
|
|
if DGD.tMailSlots[nContMS].delta_center then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tMailSlots[nContMS].delta_center,4)
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContMS = nContMS + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tMailSlots == 0 then -- se non ho trovato sfinestrature inferiori tipo mail slot
|
|
DoorOutLog( EgtDoorsMsg[444], 0)
|
|
end
|
|
|
|
-- Lettura spioncini: viewer
|
|
if not DGD.sFrame then
|
|
if GetViewers() then
|
|
if DGD.tViewers then
|
|
local nContVw = 1
|
|
while nContVw <= #DGD.tViewers do
|
|
sOutLogMsg = ' DGD.tViewers.Id='..EgtNumToString(nContVw,0)..' '..
|
|
DGD.tViewers[nContVw].template
|
|
if DGD.tViewers[nContVw].bottom_rail then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tViewers[nContVw].bottom_rail,4)
|
|
end
|
|
if DGD.tViewers[nContVw].delta_center then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tViewers[nContVw].delta_center,4)
|
|
end
|
|
if DGD.tViewers[nContVw].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tViewers[nContVw].side
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContVw = nContVw + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tViewers == 0 then -- se non ho trovato spioncini viewer
|
|
DoorOutLog( EgtDoorsMsg[445], 0)
|
|
end
|
|
|
|
-- Lettura sfinestrature flush pull
|
|
if not DGD.sFrame then
|
|
if GetFlushPulls() then
|
|
if DGD.tFlushPulls then
|
|
local nContFp = 1
|
|
while nContFp <= #DGD.tFlushPulls do
|
|
sOutLogMsg = ' DGD.tFlushPulls.Id='..EgtNumToString(nContFp,0)..' '..
|
|
DGD.tFlushPulls[nContFp].template
|
|
if DGD.tFlushPulls[nContFp].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushPulls[nContFp].position,4)
|
|
end
|
|
if DGD.tFlushPulls[nContFp].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushPulls[nContFp].back_set,4)
|
|
end
|
|
if DGD.tFlushPulls[nContFp].depth then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushPulls[nContFp].depth,4)
|
|
end
|
|
if DGD.tFlushPulls[nContFp].face then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tFlushPulls[nContFp].face
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContFp = nContFp + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tFlushPulls == 0 then -- se non ho trovato geometrie tipo flush pull
|
|
DoorOutLog( EgtDoorsMsg[446], 0)
|
|
end
|
|
|
|
-- Lettura dati cerniere
|
|
if not DGD.sFrame or DGD.sFrame == 'H' or DGD.sFrame == 'HE' then
|
|
if GetHinges() then
|
|
if DGD.tHinges then
|
|
local nContHg = 1
|
|
while nContHg <= #DGD.tHinges do
|
|
sOutLogMsg = ' DGD.tHinges.Id='..EgtNumToString(nContHg,0)..' '..
|
|
DGD.tHinges[nContHg].template
|
|
if DGD.tHinges[nContHg].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tHinges[nContHg].position,4)
|
|
end
|
|
if DGD.tHinges[nContHg].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tHinges[nContHg].back_set,4)
|
|
end
|
|
if DGD.tHinges[nContHg].thickness then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tHinges[nContHg].thickness,4)
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContHg = nContHg + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tHinges == 0 then -- se non ho trovato cerniere
|
|
DoorOutLog( EgtDoorsMsg[447], 0)
|
|
end
|
|
|
|
-- Lettura dati EPT
|
|
if not DGD.sFrame or DGD.sFrame == 'H' or DGD.sFrame == 'HE' then
|
|
if GetEPT() then
|
|
if DGD.tEPTs then
|
|
local nContEPT = 1
|
|
while nContEPT <= #DGD.tEPTs do
|
|
sOutLogMsg = ' DGD.tEPTs.Id='..EgtNumToString(nContEPT,0)..' '..
|
|
DGD.tEPTs[nContEPT].template
|
|
if DGD.tEPTs[nContEPT].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tEPTs[nContEPT].position,4)
|
|
end
|
|
if DGD.tEPTs[nContEPT].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tEPTs[nContEPT].back_set,4)
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContEPT = nContEPT + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tEPTs == 0 then -- se non ho trovato EPT
|
|
DoorOutLog( EgtDoorsMsg[557], 0)
|
|
end
|
|
|
|
-- Lettura dati serrature
|
|
if not DGD.sFrame or DGD.sFrame == 'L' or DGD.sFrame == 'LE' or DGD.nTypePz == 5 or
|
|
DGD.nTypePz == 6 then
|
|
if GetLocks() then
|
|
if DGD.tLocks then
|
|
local nContLk = 1
|
|
while nContLk <= #DGD.tLocks do
|
|
sOutLogMsg = ' DGD.tLocks.Id='..EgtNumToString(nContLk,0)..' '..
|
|
DGD.tLocks[nContLk].template
|
|
if DGD.tLocks[nContLk].position then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. EgtNumToString(DGD.tLocks[nContLk].position,4)
|
|
end
|
|
if DGD.tLocks[nContLk].back_set then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. EgtNumToString(DGD.tLocks[nContLk].back_set,4)
|
|
end
|
|
if DGD.tLocks[nContLk].offset then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. EgtNumToString(DGD.tLocks[nContLk].offset,4)
|
|
end
|
|
if DGD.tLocks[nContLk].side then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tLocks[nContLk].side
|
|
end
|
|
if DGD.tLocks[nContLk].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tLocks[nContLk].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContLk = nContLk + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tLocks == 0 then -- se non ho trovato serrature
|
|
DoorOutLog( EgtDoorsMsg[448], 0)
|
|
end
|
|
|
|
-- Lettura dati flush bolts
|
|
if not DGD.sFrame or DGD.nTypePz == 5 or DGD.nTypePz == 6 then
|
|
if GetFlushBolts() then
|
|
if DGD.tFlushBolts then
|
|
local nContFBt = 1
|
|
while nContFBt <= #DGD.tFlushBolts do
|
|
sOutLogMsg = ' DGD.tFlushBolts.Id='..EgtNumToString(nContFBt,0)..' '..
|
|
DGD.tFlushBolts[nContFBt].template
|
|
if DGD.tFlushBolts[nContFBt].type then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tFlushBolts[nContFBt].type
|
|
end
|
|
if DGD.tFlushBolts[nContFBt].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tFlushBolts[nContFBt].side
|
|
end
|
|
if DGD.tFlushBolts[nContFBt].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushBolts[nContFBt].position,4)
|
|
end
|
|
if DGD.tFlushBolts[nContFBt].offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushBolts[nContFBt].offset,4)
|
|
end
|
|
if DGD.tFlushBolts[nContFBt].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tFlushBolts[nContFBt].back_set,4)
|
|
end
|
|
if DGD.tFlushBolts[nContFBt].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tFlushBolts[nContFBt].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContFBt = nContFBt + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tFlushBolts == 0 then -- se non ho trovato serrature
|
|
DoorOutLog( EgtDoorsMsg[449], 0)
|
|
end
|
|
|
|
-- Lettura dati serrature
|
|
if not DGD.sFrame or DGD.sFrame == 'L' or DGD.sFrame == 'LE' then
|
|
if GetEdgePulls() then
|
|
if DGD.tEdgePulls then
|
|
local nContEp = 1
|
|
while nContEp <= #DGD.tEdgePulls do
|
|
sOutLogMsg = ' DGD.tEdgePulls.Id='..EgtNumToString(nContEp,0)..' '..
|
|
DGD.tEdgePulls[nContEp].template
|
|
if DGD.tEdgePulls[nContEp].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tEdgePulls[nContEp].position,4)
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContEp = nContEp + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tEdgePulls == 0 then -- se non ho trovato serrature
|
|
DoorOutLog( EgtDoorsMsg[450], 0)
|
|
end
|
|
|
|
-- Lettura dati Roller Latch
|
|
if not DGD.sFrame or DGD.sFrame == 'L' or DGD.sFrame == 'LE' or DGD.nTypePz == 5 or
|
|
DGD.nTypePz == 6 then
|
|
if GetRollerLatchs() then
|
|
if DGD.tRollerLatchs then
|
|
local nContRL = 1
|
|
while nContRL <= #DGD.tRollerLatchs do
|
|
sOutLogMsg = ' DGD.tRollerLatchs.Id='..EgtNumToString(nContRL,0)..' '..
|
|
DGD.tRollerLatchs[nContRL].template
|
|
if DGD.tRollerLatchs[nContRL].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tRollerLatchs[nContRL].side
|
|
end
|
|
if DGD.tRollerLatchs[nContRL].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tRollerLatchs[nContRL].position,4)
|
|
end
|
|
if DGD.tRollerLatchs[nContRL].offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tRollerLatchs[nContRL].offset,4)
|
|
end
|
|
if DGD.tRollerLatchs[nContRL].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tRollerLatchs[nContRL].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContRL = nContRL + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tRollerLatchs == 0 then -- se non ho trovato Roller Latchs
|
|
DoorOutLog( EgtDoorsMsg[451], 0)
|
|
end
|
|
|
|
-- Lettura dati Pivot Hinge
|
|
if not DGD.sFrame or DGD.sFrame == 'H' or DGD.sFrame == 'HE' or DGD.nTypePz == 5 or DGD.nTypePz == 6 then
|
|
if GetPivots() then
|
|
if DGD.tPivots then
|
|
local nContPv = 1
|
|
while nContPv <= #DGD.tPivots do
|
|
sOutLogMsg = ' DGD.tPivots.Id='..EgtNumToString(nContPv,0)..' '..
|
|
DGD.tPivots[nContPv].template
|
|
if DGD.tPivots[nContPv].type then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tPivots[nContPv].type
|
|
end
|
|
if DGD.tPivots[nContPv].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tPivots[nContPv].side
|
|
end
|
|
if DGD.tPivots[nContPv].radius then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tPivots[nContPv].radius,4)
|
|
end
|
|
if DGD.tPivots[nContPv].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tPivots[nContPv].position,4)
|
|
end
|
|
if DGD.tPivots[nContPv].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tPivots[nContPv].back_set,4)
|
|
end
|
|
if DGD.tPivots[nContPv].depth_f then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tPivots[nContPv].depth_f,4)
|
|
end
|
|
if DGD.tPivots[nContPv].offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tPivots[nContPv].offset,4)
|
|
end
|
|
if DGD.tPivots[nContPv].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tPivots[nContPv].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContPv = nContPv + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tPivots == 0 then -- se non ho trovato Pivot Hinges
|
|
DoorOutLog( EgtDoorsMsg[452], 0)
|
|
end
|
|
|
|
-- Lettura dati stops and closers
|
|
if not DGD.sFrame or DGD.nTypePz == 5 then
|
|
if GetStopsAndClosers() then
|
|
if DGD.tStopsAndClosers then
|
|
local nContSC = 1
|
|
while nContSC <= #DGD.tStopsAndClosers do
|
|
sOutLogMsg = ' DGD.tStopsAndClosers.Id='..EgtNumToString(nContSC,0)..' '..
|
|
DGD.tStopsAndClosers[nContSC].template
|
|
if DGD.tStopsAndClosers[nContSC].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tStopsAndClosers[nContSC].position,4)
|
|
end
|
|
if DGD.tStopsAndClosers[nContSC].pocket_offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tStopsAndClosers[nContSC].pocket_offset,4)
|
|
end
|
|
if DGD.tStopsAndClosers[nContSC].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tStopsAndClosers[nContSC].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContSC = nContSC + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tStopsAndClosers == 0 then -- se non ho trovato stop and closers
|
|
DoorOutLog( EgtDoorsMsg[453], 0)
|
|
end
|
|
|
|
-- Lettura dati over head
|
|
if not DGD.sFrame or DGD.nTypePz == 5 then
|
|
if GetOverHeads() then
|
|
if DGD.tOHeads then
|
|
local nContOH = 1
|
|
while nContOH <= #DGD.tOHeads do
|
|
sOutLogMsg = ' DGD.tOHeads.Id='..EgtNumToString(nContOH,0)..' '..
|
|
DGD.tOHeads[nContOH].template
|
|
if DGD.tOHeads[nContOH].pockpos then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tOHeads[nContOH].pockpos,4)
|
|
end
|
|
if DGD.tOHeads[nContOH].pocklength then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tOHeads[nContOH].pocklength,4)
|
|
end
|
|
if DGD.tOHeads[nContOH].pocket_offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tOHeads[nContOH].pocket_offset,4)
|
|
end
|
|
if DGD.tOHeads[nContOH].armpos then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tOHeads[nContOH].armpos,4)
|
|
end
|
|
if DGD.tOHeads[nContOH].armlength then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tOHeads[nContOH].armlength,4)
|
|
end
|
|
if DGD.tOHeads[nContOH].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tOHeads[nContOH].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContOH = nContOH + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tOHeads == 0 then -- se non ho trovato over head
|
|
DoorOutLog( EgtDoorsMsg[526], 0)
|
|
end
|
|
|
|
-- Lettura dati strike ( non inserisce stike che stonno su frame top e bottom)
|
|
if not DGD.sFrame or DGD.sFrame == 'L' or DGD.sFrame == 'LE' or DGD.nTypePz == 5 or DGD.nTypePz == 6 then
|
|
if GetStrikes() then
|
|
if DGD.tStrikes then
|
|
local nContSt = 1
|
|
while nContSt <= #DGD.tStrikes do
|
|
sOutLogMsg = ' DGD.tStrikes.Id='..EgtNumToString(nContSt,0)..' '..
|
|
DGD.tStrikes[nContSt].template
|
|
if DGD.tStrikes[nContSt].position then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tStrikes[nContSt].position,4)
|
|
end
|
|
if DGD.tStrikes[nContSt].back_set then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tStrikes[nContSt].back_set,4)
|
|
end
|
|
if DGD.tStrikes[nContSt].offset then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. EgtNumToString(DGD.tStrikes[nContSt].offset,4)
|
|
end
|
|
if DGD.tStrikes[nContSt].other_door then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tStrikes[nContSt].other_door
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContSt = nContSt + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tStrikes == 0 then -- se non ho trovato strike
|
|
DoorOutLog( EgtDoorsMsg[535], 0)
|
|
end
|
|
|
|
-- Lettura dati groove
|
|
if not DGD.sFrame then
|
|
if GetGrooves() then
|
|
if DGD.tGrooves then
|
|
local nContGr = 1
|
|
while nContGr <= #DGD.tGrooves do
|
|
sOutLogMsg = ' DGD.tGrooves.Id='..EgtNumToString(nContGr,0)..' '..
|
|
DGD.tGrooves[nContGr].template
|
|
if DGD.tGrooves[nContGr].type then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tGrooves[nContGr].type
|
|
end
|
|
if DGD.tGrooves[nContGr].width then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].width,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].depth then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].depth,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].fst then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].fst,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].hst then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].hst,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].lst then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].lst,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].groove_offset then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tGrooves[nContGr].groove_offset,4)
|
|
end
|
|
if DGD.tGrooves[nContGr].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tGrooves[nContGr].side
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContGr = nContGr + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tGrooves == 0 then -- se non ho trovato groove
|
|
DoorOutLog( EgtDoorsMsg[536], 0)
|
|
end
|
|
|
|
-- Lettura dati rabbet
|
|
-- if not DGD.sFrame then
|
|
if GetRabbets() then
|
|
if DGD.tRabbets then
|
|
local nContRb = 1
|
|
while nContRb <= #DGD.tRabbets do
|
|
sOutLogMsg = ' DGD.tRabbets.Id='..EgtNumToString(nContRb,0)..' '..
|
|
DGD.tRabbets[nContRb].template
|
|
if DGD.tRabbets[nContRb].side then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tRabbets[nContRb].side
|
|
end
|
|
if DGD.tRabbets[nContRb].width then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tRabbets[nContRb].width,4)
|
|
end
|
|
if DGD.tRabbets[nContRb].depth then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tRabbets[nContRb].depth,4)
|
|
end
|
|
if DGD.tRabbets[nContRb].oppo then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tRabbets[nContRb].oppo,4)
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContRb = nContRb + 1
|
|
end
|
|
end
|
|
end
|
|
-- end
|
|
|
|
if #DGD.tRabbets == 0 then -- se non ho trovato rabbet
|
|
DoorOutLog( EgtDoorsMsg[537], 0)
|
|
end
|
|
|
|
-- Lettura dati Face Decoration
|
|
if not DGD.sFrame then
|
|
if GetDecorations() then
|
|
if DGD.tDecorations then
|
|
local nContDc = 1
|
|
while nContDc <= #DGD.tDecorations do
|
|
sOutLogMsg = ' DGD.tDecorations.Id='..EgtNumToString(nContDc,0)..' '..
|
|
DGD.tDecorations[nContDc].template
|
|
if DGD.tDecorations[nContDc].type then
|
|
sOutLogMsg = sOutLogMsg..' '..DGD.tDecorations[nContDc].type
|
|
end
|
|
if DGD.tDecorations[nContDc].depth then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tDecorations[nContDc].depth,4)
|
|
end
|
|
if DGD.tDecorations[nContDc].dft then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tDecorations[nContDc].dft,4)
|
|
end
|
|
if DGD.tDecorations[nContDc].dfb then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tDecorations[nContDc].dfb,4)
|
|
end
|
|
if DGD.tDecorations[nContDc].dfl then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tDecorations[nContDc].dfl,4)
|
|
end
|
|
if DGD.tDecorations[nContDc].dfh then
|
|
sOutLogMsg = sOutLogMsg..' '..EgtNumToString(DGD.tDecorations[nContDc].dfh,4)
|
|
end
|
|
if DGD.tDecorations[nContDc].face then
|
|
sOutLogMsg = sOutLogMsg .. ' ' .. DGD.tDecorations[nContDc].face
|
|
end
|
|
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
nContDc = nContDc + 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if #DGD.tDecorations == 0 then -- se non ho trovato serrature
|
|
DoorOutLog( EgtDoorsMsg[645], 0)
|
|
end
|
|
|
|
-- lettura nuovo gruppo options
|
|
if GetOptions() then
|
|
sOutLogMsg = ' DGD.tOptions=' .. table.concat( DGD.tOptions, ',')
|
|
DoorOutLog( sOutLogMsg, 0)
|
|
end
|
|
|
|
-- se a questo punto il ddf non termina o non ha il separatore di pezzo '---'
|
|
-- c'è un errore nel ddf appena letto
|
|
if not CheckKeyFromLine( '---') and not CheckKeyFromLine( '...') and not EndOfFile() then
|
|
DoorOutLog( string.format( EgtDoorsMsg[604], GetLineNumber()), 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. string.format( EgtDoorsMsg[604], GetLineNumber())
|
|
DGD.ERR = 9
|
|
bWriteErr = false
|
|
break
|
|
end
|
|
|
|
-------------------------------------------
|
|
-------------------------------------------
|
|
-- faccio la verifica sulla Mtable
|
|
-------------------------------------------
|
|
-------------------------------------------
|
|
|
|
sMTable = sMTableOri
|
|
|
|
-- per risalire al nome file della tabella, aggiungo eventuale nome materiale
|
|
-- tranne se il nome è wood
|
|
if DGD.Material and #DGD.Material > 0 and string.lower(DGD.Material) ~= 'wood' then
|
|
sMTable = sMTable .. '_' .. DGD.Material
|
|
end
|
|
|
|
bLocFoundMTable = VerifyMtable()
|
|
|
|
-- percorsi dei file pezzo locale
|
|
sTxtOkFile = sFileDir .. DGD.sCode .. '.tok'
|
|
sErrFile = sFileDir .. DGD.sCode .. '.txt'
|
|
sCncFile = sFileDir .. DGD.sCode .. '.cnc'
|
|
sNgeFile = sFileDir .. DGD.sCode .. '.nge'
|
|
sOriPrbFile = sFileDir .. 'data.dat'
|
|
sPrbFile = sFileDir .. DGD.sCode .. '.dat'
|
|
|
|
-- Rimozione vecchi file log, nge e cnc e tok
|
|
EgtEraseFile( sErrFile)
|
|
EgtEraseFile( sTxtOkFile)
|
|
EgtEraseFile( sNgeFile)
|
|
EgtEraseFile( sCncFile)
|
|
|
|
-- creo pezzo porta
|
|
if DGD.ERR <= 0 then
|
|
|
|
nCountPieces = nCountPieces + 1
|
|
|
|
-- leggo il file probe (se c'è il flag di ri-calcolo porta da file probe)
|
|
local bReadFileDat = LoadDataProbeFile( sOriPrbFile, sPrbFile)
|
|
|
|
if bReadFileDat then
|
|
|
|
-- Controllo che la versione del file .prb non coincide con il settaggio presente nel file CurrDoorsCustomData
|
|
if DGD.PROBE == 2 and ( not tProbeDoor.OPM or not DGC.Pms or ( tProbeDoor.OPM and DGC.Pms and tProbeDoor.OPM ~= DGC.Pms)) then
|
|
local sMessageErr = string.format( EgtDoorsMsg[659], sPrbFile) -- file dat non trovato
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 26
|
|
else
|
|
|
|
-- Creazione della porta
|
|
bLocFoundMTable = DoorCreation()
|
|
|
|
EgtSaveFile( sNgeFile)
|
|
DoorOutLog( ' *** Door creation completed ***', 0)
|
|
|
|
-- se prima porta
|
|
if nTypePiece == 1 then
|
|
sFirstDoor = sNgeFile
|
|
elseif nTypePiece == 2 then
|
|
sSecondDoor = sNgeFile
|
|
elseif nTypePiece == 3 then
|
|
sFrameSx = sNgeFile
|
|
elseif nTypePiece == 4 then
|
|
sFrameDx = sNgeFile
|
|
elseif nTypePiece == 5 then
|
|
sFrameTop = sNgeFile
|
|
elseif nTypePiece == 6 then
|
|
sFrameBot = sNgeFile
|
|
end
|
|
end
|
|
else
|
|
local sMessageErr = string.format( EgtDoorsMsg[631], sPrbFile) -- file dat non trovato
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 12
|
|
end
|
|
end
|
|
|
|
-- Scrivo il risultato su file apposito
|
|
WriteErrFile( sErrFile)
|
|
DoorOutLog( ' Err=' .. tostring( DGD.ERR) .. '\n', 1)
|
|
bWriteErr = true
|
|
else -- se non trovata descrizione ddf
|
|
sPrvKeyLine = '---'
|
|
end
|
|
|
|
-- se trovato separatore altro pezzo
|
|
if KeyFromLine( '---') then
|
|
if sNgeFile then
|
|
DoorOutLog( ' *** End piece file : ' .. sNgeFile ..' ***\n', 0)
|
|
sNgeFile = nil
|
|
end
|
|
DoorOutLog( ' *** Next piece into parsing file : ' .. DGD.FILE ..' ***\n', 0)
|
|
sPrvKeyLine = '---'
|
|
else
|
|
if sNgeFile then
|
|
DoorOutLog( ' *** End piece file : ' .. sNgeFile ..' ***', 0)
|
|
end
|
|
end
|
|
end -- end while
|
|
|
|
-- se il file txt dell'errore non ancora scritto, assegno le variabili di errore degli assemblati
|
|
if not bWriteErr then
|
|
if DGD.EGR == 0 then
|
|
DGD.EGR = DGD.ERR
|
|
end
|
|
if DGD.ERM and string.len(DGD.ERM) > 0 then
|
|
if DGD.EGM then
|
|
DGD.EGM = DGD.EGM .. '\n' .. DGD.ERM
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Scrivo il risultato su file apposito
|
|
WriteErrFileAsmbl( sErrFileM)
|
|
|
|
if not bWriteErr then
|
|
DoorOutLog( ' Err=' .. tostring( DGD.ERR) .. '\n', 1)
|
|
end
|
|
|
|
-- Chiusura file DDF
|
|
if bOpenDdf then
|
|
CloseFile()
|
|
end
|
|
|
|
return bLocFoundMTable
|
|
end
|
|
|
|
-----------------------------------------------------------------
|
|
-- *** Main function ***
|
|
-----------------------------------------------------------------
|
|
local function Doors()
|
|
|
|
-- Reset librerie per evitare l'errore in caso riparto da una situazione di errore dello script
|
|
ResetDoorsLibs()
|
|
|
|
-- Reset dati globali
|
|
ResetDoorsGlobDataAssembly()
|
|
ResetDoorsGlobData()
|
|
-- Reset dati custom
|
|
ResetDoorsCustomData()
|
|
|
|
local sMessageErr
|
|
-- debug per abilitare le quote nell'EgtCam5
|
|
-- DGD.MachEn = 0
|
|
|
|
-- per evitare problemi nel caso che nel nome file o nella cartella sia presente 'ddf'
|
|
-- separo path nome ed estensione e poi successivamente concateno direttamente l'estensione
|
|
sFileDir, sFileName, sFileExt = EgtSplitPath( DGD.FILE)
|
|
sErrFileM = sFileDir .. sFileName .. '.txt'
|
|
sLogFile = sFileDir .. sFileName .. '.log'
|
|
sTxtOkFile = sFileDir .. sFileName .. '.tok'
|
|
|
|
-- Rimozione vecchi file log, nge e cnc
|
|
EgtEraseFile( sLogFile)
|
|
EgtEraseFile( sErrFileM)
|
|
EgtEraseFile( sTxtOkFile)
|
|
|
|
-- creo nuovo file log
|
|
OpenLogFile(sLogFile, 'w')
|
|
|
|
-- variabili per gestione file MTable
|
|
local sIniFilePath = EgtGetIniFile() -- percorso del file ini dell'EgtCam5
|
|
sMTable = EgtGetStringFromIni( 'Doors', 'CurrMTable', '', sIniFilePath)
|
|
sMTableOri = sMTable
|
|
|
|
local tMTable
|
|
local tMachineOptions
|
|
local bFoundMTable
|
|
-- local M
|
|
|
|
-- resetto contatore pezzi e il tipo pezzi
|
|
nCountPieces = 0
|
|
nTypePiece = 0
|
|
|
|
--[[
|
|
|
|
-- questo è un codice ipotetico
|
|
-- la tabella attualmente non viene passata dal file batch
|
|
|
|
-- verifico se c'è il nome tabella passato da batch
|
|
-- if DGD.NCGEN and DGD.NTB and string.len(DGD.NTB) > 0 then
|
|
-- sMTable = DGD.NTB
|
|
-- bFoundMTable = true
|
|
-- else
|
|
|
|
-- verifico se esiste il nome file
|
|
if sMTable and string.len(sMTable) > 0 then
|
|
bFoundMTable = true
|
|
end
|
|
-- end
|
|
|
|
-- se nome MTable presente
|
|
if bFoundMTable and DGD.MachEn > 0 then
|
|
|
|
-- verifico se esiste il file
|
|
sMTablePath = sBaseDir..'MTables\\'..sMTable..'.mtl'
|
|
|
|
if EgtExistsFile(sMTablePath) then
|
|
|
|
sMTablePath = sBaseDir..'MTables\\'
|
|
M = require( sMTable)
|
|
|
|
if M then
|
|
tMachineData = M.MMachineData
|
|
if not tMachineData then
|
|
sMessageErr = string.format( EgtDoorsMsg[489], sMTable) -- dati macchina non validi
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 25
|
|
WriteErrFile( sErrFileM)
|
|
bFoundMTable = false
|
|
end
|
|
else
|
|
sMessageErr = string.format( EgtDoorsMsg[490], sMTable) -- tabella non trovata
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 24
|
|
WriteErrFile( sErrFileM)
|
|
bFoundMTable = false
|
|
end
|
|
else
|
|
sMessageErr = string.format( EgtDoorsMsg[487], sMTablePath) -- non c'è il file della tabella
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 23
|
|
WriteErrFile( sErrFileM)
|
|
bFoundMTable = false
|
|
end
|
|
elseif DGD.MachEn > 0 then
|
|
sMessageErr = string.format( EgtDoorsMsg[487], sMTable) -- il nome del file della tabella non è valido
|
|
DoorOutLog( sMessageErr, 0)
|
|
DGD.ERM = DGD.ERM .. '\n' .. sMessageErr
|
|
DGD.ERR = 22
|
|
WriteErrFile( sErrFileM)
|
|
end
|
|
]]--
|
|
|
|
-- if ( bFoundMTable and DGD.MachEn > 0) or DGD.MachEn == 0 then
|
|
if DGD.MachEn >= 0 then
|
|
|
|
-- Segnalo inizio interpretazione file
|
|
DoorOutLog( ' *** Start parsing file : ' .. DGD.FILE ..' ***', 0)
|
|
|
|
-- controllo variabile che dovrebbe provenire dal prod
|
|
if not DGD.PROBE then DGD.PROBE = 0 end
|
|
-- controllo variabile che dovrebbe provenire dal CurrDoorsCustomData
|
|
if not DGC.NPM then DGC.NPM = 0 end
|
|
|
|
-- se DGD.NPM = 1 ma settata nuova interpretazione, forzo il parametro DGC.Pms = 1
|
|
if DGC.NPM > 0 then
|
|
DGC.Pms = 1
|
|
-- se DGD.NPM = 2 forzo il parametro DGC.PROBE = 1
|
|
if DGC.NPM == 2 then
|
|
DGD.PROBE = 1
|
|
end
|
|
end
|
|
|
|
-- controllo variabile che dovrebbe provenire dal CurrDoorsCustomData
|
|
if not DGC.Pms then DGC.Pms = 0 end
|
|
|
|
-- Lettura file DDF e creazione geometria porta
|
|
bFoundMTable = ReadAndParseDdfAndMakeDoors()
|
|
|
|
if bFoundMTable then
|
|
|
|
-- se non è lanciato dal batch e ci sono più pezzi li carico in un unico progetto
|
|
if nCountPieces > 1 and DGD.ERR <= 0 then
|
|
|
|
EgtNewFile()
|
|
DGD.PZ = EgtGroup( GDB_ID.ROOT)
|
|
EgtSetName( DGD.PZ, sFileName)
|
|
EgtSetCurrPartLayer( DGD.PZ, GDB_ID.NULL)
|
|
local nIdDummyPart = EgtGetFirstPart()
|
|
local nIdFrameSx, nIdDoor1, nIdDoor2, nIdFrameDx, nIdFrameTop, nIdFrameBot
|
|
local dOffsLeft = 0
|
|
|
|
if sFirstDoor and EgtInsertFile( sFirstDoor) then
|
|
-- non muovo la prima porta
|
|
nIdDoor1 = EgtGetLastPart()
|
|
EgtSetInfo( nIdDoor1, 'Assembly', 'first')
|
|
EgtSetInfo( nIdDoor1, 'MoveedTo', {0,0,0})
|
|
local dWidthPiece = EgtGetInfo( nIdDoor1, 'W', 'd')
|
|
dOffsLeft = dWidthPiece
|
|
-- setto nota modalità probe
|
|
EgtSetInfo( nIdDoor1, 'ProbeMode', DGD.PROBE)
|
|
-- setto nota postprocessor probe mode setting
|
|
EgtSetInfo( nIdDoor1, 'PostProbeSet', DGC.Pms)
|
|
EgtSetInfo( nIdDoor1, 'NewProbeMean', DGC.NPM)
|
|
end
|
|
|
|
if sSecondDoor and EgtInsertFile( sSecondDoor) then
|
|
-- rototraslazione del pezzo
|
|
nIdDoor2 = EgtGetLastPart()
|
|
EgtSetInfo( nIdDoor2, 'Assembly', 'second')
|
|
local dWidthPiece = EgtGetInfo( nIdDoor2, 'W', 'd')
|
|
local dThickPiece = EgtGetInfo( nIdDoor2, 'T', 'd')
|
|
if dOffsLeft > 0 then
|
|
dOffsLeft = dOffsLeft + 10
|
|
end
|
|
|
|
EgtMove( nIdDoor2, Point3d( dOffsLeft,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdDoor2, 'MoveedTo', {dOffsLeft,0,0})
|
|
-- setto nota modalità probe
|
|
EgtSetInfo( nIdDoor2, 'ProbeMode', DGD.PROBE)
|
|
-- setto nota postprocessor probe mode setting
|
|
EgtSetInfo( nIdDoor2, 'PostProbeSet', DGC.Pms)
|
|
EgtSetInfo( nIdDoor2, 'NewProbeMean', DGC.NPM)
|
|
-- aggiorno offset per eventuale prossimo pezzo
|
|
dOffsLeft = dOffsLeft + dWidthPiece
|
|
end
|
|
|
|
if sFrameSx and EgtInsertFile( sFrameSx) then
|
|
-- rototraslazione del pezzo
|
|
nIdFrameSx = EgtGetLastPart()
|
|
EgtSetInfo( nIdFrameSx, 'Assembly', 'framesx')
|
|
local dWidthPiece = EgtGetInfo( nIdFrameSx, 'W', 'd')
|
|
local dThickPiece = EgtGetInfo( nIdFrameSx, 'T', 'd')
|
|
EgtMove( nIdFrameSx, Point3d(-( dWidthPiece + dThickPiece),0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameSx, 'MoveedTo', {-( dWidthPiece + dThickPiece),0,0})
|
|
end
|
|
|
|
if sFrameDx and EgtInsertFile( sFrameDx) then
|
|
-- rototraslazione del pezzo
|
|
nIdFrameDx = EgtGetLastPart()
|
|
EgtSetInfo( nIdFrameDx, 'Assembly', 'framedx')
|
|
local dWidthPiece = EgtGetInfo( nIdFrameDx, 'W', 'd')
|
|
local dThickPiece = EgtGetInfo( nIdFrameDx, 'T', 'd')
|
|
if dOffsLeft > 0 then
|
|
EgtMove( nIdFrameDx, Point3d(( dOffsLeft + dThickPiece),0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameDx, 'MoveedTo', {( dOffsLeft + dThickPiece),0,0})
|
|
else
|
|
EgtMove( nIdFrameDx, Point3d( dThickPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameDx, 'MoveedTo', {dThickPiece,0,0})
|
|
end
|
|
dOffsLeft = dOffsLeft + dWidthPiece + dThickPiece
|
|
end
|
|
|
|
if sFrameTop and EgtInsertFile( sFrameTop) then
|
|
-- rototraslazione del pezzo
|
|
nIdFrameTop = EgtGetLastPart()
|
|
EgtSetInfo( nIdFrameTop, 'Assembly', 'frametop')
|
|
local dWidthPiece = EgtGetInfo( nIdFrameTop, 'W', 'd')
|
|
local dThickPiece = EgtGetInfo( nIdFrameTop, 'T', 'd')
|
|
if dOffsLeft > 0 then
|
|
EgtMove( nIdFrameTop, Point3d(( dOffsLeft + dThickPiece),0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameTop, 'MoveedTo', {( dOffsLeft + dThickPiece),0,0})
|
|
else
|
|
EgtMove( nIdFrameTop, Point3d( dThickPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameTop, 'MoveedTo', {dThickPiece,0,0})
|
|
end
|
|
dOffsLeft = dOffsLeft + dWidthPiece + dThickPiece
|
|
end
|
|
|
|
if sFrameBot and EgtInsertFile( sFrameBot) then
|
|
-- rototraslazione del pezzo
|
|
nIdFrameBot = EgtGetLastPart()
|
|
EgtSetInfo( nIdFrameBot, 'Assembly', 'framebot')
|
|
local dWidthPiece = EgtGetInfo( nIdFrameBot, 'W', 'd')
|
|
local dThickPiece = EgtGetInfo( nIdFrameBot, 'T', 'd')
|
|
if dOffsLeft > 0 then
|
|
EgtMove( nIdFrameBot, Point3d(( dOffsLeft + dThickPiece),0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameBot, 'MoveedTo', {( dOffsLeft + dThickPiece),0,0})
|
|
else
|
|
EgtMove( nIdFrameBot, Point3d( dThickPiece,0,0) - ORIG(), GDB_RT.GRID)
|
|
EgtSetInfo( nIdFrameBot, 'MoveedTo', {dThickPiece,0,0})
|
|
end
|
|
end
|
|
|
|
if nIdFrameSx or nIdDoor1 or nIdDoor2 or nIdFrameDx or nIdFrameBot then
|
|
EgtErase(nIdDummyPart)
|
|
end
|
|
|
|
-- setto la griglia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
|
|
sNgeFile = sFileDir .. sFileName .. '.nge'
|
|
EgtSaveFile( sNgeFile)
|
|
elseif nCountPieces == 1 and DGD.ERR <= 0 then
|
|
|
|
if sFrameSx then
|
|
local nIdPiece = EgtGetLastPart()
|
|
EgtSetInfo( nIdPiece, 'Assembly', 'framesx')
|
|
EgtSetInfo( nIdPiece, 'MoveedTo', {0,0,0})
|
|
elseif sFrameDx then
|
|
local nIdPiece = EgtGetLastPart()
|
|
EgtSetInfo( nIdPiece, 'Assembly', 'framedx')
|
|
EgtSetInfo( nIdPiece, 'MoveedTo', {0,0,0})
|
|
elseif sFrameTop then
|
|
local nIdPiece = EgtGetLastPart()
|
|
EgtSetInfo( nIdPiece, 'Assembly', 'frametop')
|
|
EgtSetInfo( nIdPiece, 'MoveedTo', {0,0,0})
|
|
elseif sFrameBot then
|
|
local nIdPiece = EgtGetLastPart()
|
|
EgtSetInfo( nIdPiece, 'Assembly', 'framebot')
|
|
EgtSetInfo( nIdPiece, 'MoveedTo', {0,0,0})
|
|
end
|
|
|
|
-- setto nota modalità probe
|
|
local nIdPiece = EgtGetLastPart()
|
|
EgtSetInfo( nIdPiece, 'ProbeMode', DGD.PROBE)
|
|
-- setto nota postprocessor probe mode setting
|
|
EgtSetInfo( nIdPiece, 'PostProbeSet', DGC.Pms)
|
|
EgtSetInfo( nIdPiece, 'NewProbeMean', DGC.NPM)
|
|
|
|
-- setto la griglia top
|
|
EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP))
|
|
|
|
sNgeFile = sFileDir .. sFileName .. '.nge'
|
|
EgtSaveFile( sNgeFile)
|
|
end
|
|
|
|
-- Se richiesta generazione lavorazioni da file batch e non ci sono stati errori
|
|
if DGD.NCGEN and DGD.ERR <= 0 then
|
|
|
|
if not dofile( sBaseDir..'Machining.lua') then -- se machining va male
|
|
if string.len(DGD.EMC) > 0 then
|
|
DoorOutLog( DGD.EMC, 0)
|
|
else
|
|
DoorOutLog( EgtDoorsMsg[455], 0)
|
|
end
|
|
DGD.ERM = DGD.ERM .. '\n' .. EgtDoorsMsg[455]
|
|
if DGD.ERR <= 0 then
|
|
DGD.ERR = 20
|
|
end
|
|
DoorOutLog( ' Err=' .. tostring( DGD.ERR) .. '\n', 1)
|
|
else
|
|
DoorOutLog( ' ' .. EgtDoorsMsg[498], 0)
|
|
EgtOutText( EgtDoorsMsg[498])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- chiudo file log
|
|
CloseLogFile()
|
|
|
|
-- Reset librerie
|
|
ResetDoorsLibs()
|
|
package.loaded.EgtDoorsBase = nil
|
|
|
|
if DGD.EGR and DGD.EGR ~= 0 and DGD.ERR ~= DGD.EGR then
|
|
DGD.ERR = DGD.EGR
|
|
elseif DGD.EGR and DGD.EGR ~= 0 then
|
|
DGD.ERR = DGD.EGR
|
|
end
|
|
|
|
DGC = nil
|
|
return DGD.ERR
|
|
|
|
end
|
|
DGD.Doors = Doors
|
|
|
|
return {}
|
|
|