From 48c26500a48fb468cd21ecec534891afd8d00937 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Wed, 22 May 2024 09:18:22 +0200 Subject: [PATCH] - inizio implementazione gestione hardware --- .vscode/settings.json | 3 +- Profiles/Main.lua | 6 +- Profiles/WinConst.lua | 1 + Profiles/WinLib/WinCalculate.lua | 120 +++++++++++++++++++++++++++++++ Profiles/WinLib/WinCreate.lua | 4 ++ 5 files changed, 132 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index dbcac14..c453f18 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -103,7 +103,8 @@ "EgtOutText", "EgtPause", "EgtRelocate", - "WDG" + "WDG", + "EgtSplitString" ], "Lua.diagnostics.disable": [ "empty-block" diff --git a/Profiles/Main.lua b/Profiles/Main.lua index 9a0f1c9..49af335 100644 --- a/Profiles/Main.lua +++ b/Profiles/Main.lua @@ -648,12 +648,16 @@ local nFillId = WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS) -- local nCurrOutlineId = EgtGetFirstNameInGroup( nOutlineLayerId, WIN_SPLIT) -- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId) +-- aggiungo ferramenta +WinCreate.AddHardware( nFrameId, '000544') + -- imposto se calcolare i solidi o meno WinCalculate.SetCalcSolid( true) -- -- creo i pezzi WinCalculate.CreatePartFromArea( nFrameId) - +WinCalculate.AddSplitDowelToParts( nFrameId) +WinCalculate.AddHardware( nFrameId) -- -- creo tabella per salvataggio -- local sSaveFilePath = 'c:\\Temp\\WindowTest1.txt' diff --git a/Profiles/WinConst.lua b/Profiles/WinConst.lua index e04c8ec..c8e95f1 100644 --- a/Profiles/WinConst.lua +++ b/Profiles/WinConst.lua @@ -233,5 +233,6 @@ WIN_DWL_BOTTOMHORIZONTALSPLITPARAEND = 'BottomHorizontalSplitParaEnd' WIN_DWL_HORIZONTALSPLITPERPSTART = 'HorizontalSplitPerpStart' WIN_DWL_HORIZONTALSPLITPERPEND = 'HorizontalSplitPerpEnd' +WIN_HDW_FAVOURITE = 'HdwFavourite' --------------------------------------------------------------------- return WinConst diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index fd4bfe9..95a20b0 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -2074,5 +2074,125 @@ function WinCalculate.AssembleFrame() --EgtChangeGroupFrame( nRightPartId, frRight) end + +local function SearchSash( nAreaId, SashList) + -- verifico il tipo + local nAreaType = EgtGetInfo( nAreaId, WIN_AREATYPE, 'i') + if nAreaType == WIN_AREATYPES.SASH then + -- calcolo il Box + local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE) + local b3Outline = EgtGetBBox( nOutlineLayerId, GDB_BB.STANDARD) + table.insert( SashList, { nAreaId = nAreaId, ptCener = b3Outline:getCenter()}) + end + -- verifico se ci sono sotto-aree + local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREA .. '*') + while nChildAreaId do + -- lancio costruzione pezzi di quell'area + SearchSash( nChildAreaId, SashList) + nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREA .. '*') + end +end + +-- funzione che aggiunge l'hardware +function WinCalculate.AddHardware( nFrameId) + local nFavourite = EgtGetInfo( nFrameId, WIN_HDW_FAVOURITE) + local sInputFile = 'a:\\InputBatch\\Input.txt' + local sAGBOutputFile = 'C:\\AGB3000NG\\OutputBatch\\Output.txt' + local sAGBOutputLavFile = 'C:\\AGB3000NG\\OutputBatch\\OutputLav.txt' + local sOutputFile = 'a:\\OutputBatch\\Output.txt' + local sOutputLavFile = 'a:\\OutputBatch\\OutputLav.txt' + -- Apro file Input in scrittura + local fhInput = io.open( sInputFile, 'w') + if not fhInput then + EgtOutLog( 'Error opening file ' .. sInputFile) + return false + end + + local sText = 'OUTPUTKIT=' .. sAGBOutputFile .. '\n' .. + 'S_NAME=' .. nFavourite .. '\n' .. + 'RECORDID=15A' .. '\n' .. + 'HBB=' .. tostring( 1500) .. '\n' .. + 'LBB=' .. tostring( 900) .. '\n' .. + 'FINESTRAPORTAFINESTRA=Finestra' .. '\n' .. + 'Q=1' .. '\n' .. + 'MANOSERRAMENTO=Dx' .. '\n' .. + 'CNCOUTPUT=' .. sAGBOutputLavFile .. '\n' .. + 'RUN' + + -- Scrittura nuova linea + fhInput:write( sText .. '\n') + + -- Chiudo file CNC + fhInput:close() + + -- attendo scrittura output + local nWait = 0 + while not EgtExistsFile( sOutputFile) and nWait < 20 do + nWait = nWait + 1 + EgtPause( 500) + end + + EgtPause( 500) + + -- cerco ed indicizzo ante del serramento + local SashList = {} + SearchSash( nFrameId, SashList) + -- ordino per X e Y + local function compareXY(a,b) + if abs( a.X - b.X) < GEO.EPS_SMALL then + return a.Y < b.Y + else + return a.X < b.X + end + end + table.sort(SashList, compareXY) + + -- Apro file Output in scrittura + local fhOutput = io.open( sOutputLavFile, 'r') + if not fhOutput then + EgtOutLog( 'Error opening file ' .. sOutputLavFile) + return false + end + local sOutputLine = fhOutput:lines('l') + for sMach in fhOutput:lines('l') do + local MachParams = EgtSplitString( sMach, ';') + local sPart = MachParams[3] + local nSashIndex = MachParams[4] + local sSashPart = MachParams[5] + local dPosX = MachParams[6] + local dPosY = MachParams[7] + local dPosZ = MachParams[8] + local sMacro = MachParams[9] + local sSide = MachParams[21] -- FT1, FT2, FT3, FA1, FA2, FA3 + local sOrigin = MachParams[24] -- AB, BC, CD, DA + + local nSashId = SashList[nSashIndex].nAreaId + local nOutlineLayerId = EgtGetFirstNameInGroup( nSashId, WIN_OUTLINE) + local vOutlineIds = EgtGetAllInGroup( nOutlineLayerId) + local nA = string.byte('A') + local nSashPart = string.byte(sSashPart) + local nOutlineId = vOutlineIds[#vOutlineIds - (nSashPart - nA)] + local nPartId = GDB_ID.NULL + if sPart == 'TELAIO' then + local nSashBaseOutlineId = EgtGetInfo( nOutlineId, WIN_COPY, 'i') + local nSouId = EgtGetInfo( nOutlineId, WIN_SOU, 'i') + local nSouAreaId = EgtGetParent( EgtGetParent( nSouId)) + local nSouAreaType = EgtGetInfo( nSouAreaId, WIN_AREATYPE, 'i') + while nSouAreaType ~= WIN_AREATYPES.FRAME do + nSouId = EgtGetInfo( nSouId, WIN_SOU, 'i') + nSouAreaId = EgtGetParent( EgtGetParent( nSouId)) + nSouAreaType = EgtGetInfo( nSouAreaId, WIN_AREATYPE, 'i') + end + local nFrameOutlineId = EgtGetInfo( nSouId, WIN_COPY, 'i') + nPartId = EgtGetInfo( nFrameOutlineId, WIN_REF_PART, 'i') + elseif sPart == 'ANTA' then + nPartId = EgtGetInfo( nOutlineId, WIN_REF_PART, 'i') + end + + + + end +end + --------------------------------------------------------------------- return WinCalculate diff --git a/Profiles/WinLib/WinCreate.lua b/Profiles/WinLib/WinCreate.lua index 271d11a..5c83c49 100644 --- a/Profiles/WinLib/WinCreate.lua +++ b/Profiles/WinLib/WinCreate.lua @@ -482,5 +482,9 @@ function WinCreate.AddBottomRail( nAreaId) end end +function WinCreate.AddHardware( nFrameId, sFavourite) + EgtSetInfo( nFrameId, WIN_HDW_FAVOURITE, sFavourite ) +end + --------------------------------------------------------------------- return WinCreate