From dbd9e4ac01821a670174c47f169afb657c693523 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Thu, 30 May 2024 09:15:32 +0200 Subject: [PATCH] - aggiunto passaggio dimensioni a calcolo ferramenta - creazione origini per ferramenta - gestione lavorazione asola e vite --- .vscode/settings.json | 6 +- Profiles/Main.lua | 2 +- Profiles/Profilo78 - Offset.nge | Bin 21163 -> 21248 bytes Profiles/WinConst.lua | 6 + Profiles/WinLib/WinCalculate.lua | 305 ++++++++++++++++++++++++++++--- 5 files changed, 289 insertions(+), 30 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c453f18..a4b88aa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -104,7 +104,11 @@ "EgtPause", "EgtRelocate", "WDG", - "EgtSplitString" + "EgtSplitString", + "EgtFrame", + "EgtReplaceString", + "EgtCircle", + "EgtArc2PV" ], "Lua.diagnostics.disable": [ "empty-block" diff --git a/Profiles/Main.lua b/Profiles/Main.lua index 49af335..545bfba 100644 --- a/Profiles/Main.lua +++ b/Profiles/Main.lua @@ -649,7 +649,7 @@ local nFillId = WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS) -- WinLib.CreatePartFromOutline( nFrameLayerId, nCurrOutlineId) -- aggiungo ferramenta -WinCreate.AddHardware( nFrameId, '000544') +WinCreate.AddHardware( nFrameId, '000545') -- imposto se calcolare i solidi o meno WinCalculate.SetCalcSolid( true) diff --git a/Profiles/Profilo78 - Offset.nge b/Profiles/Profilo78 - Offset.nge index 3f71d8fa0aa9397e4008790da570ec3c8577d5f4..46c2b8d2274a717dfe3fe664eee646c0eb087e49 100644 GIT binary patch literal 21248 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 Ov;Pl|Qaa!`!T|sn|7j%v diff --git a/Profiles/WinConst.lua b/Profiles/WinConst.lua index 10d32fb..6a76ddd 100644 --- a/Profiles/WinConst.lua +++ b/Profiles/WinConst.lua @@ -195,6 +195,10 @@ WIN_OVERLAP = 'Overlap' WIN_DELTA = 'Delta' WIN_FILLOVERLAP = 'FillOverlap' WIN_FILLDELTA = 'FillDelta' +WIN_GAPDELTA = 'GapDelta' +WIN_GAPDELTAZ = 'GapDeltaZ' +WIN_GAPDELTAIN = 'GapDeltaIn' +WIN_GAPDELTAOUT = 'GapDeltaOut' WIN_MAINGUIDE = 'MainGuide' WIN_STARTGUIDE = 'StartGuide' @@ -234,6 +238,8 @@ WIN_DWL_BOTTOMHORIZONTALSPLITPARAEND = 'BottomHorizontalSplitParaEnd' WIN_DWL_HORIZONTALSPLITPERPSTART = 'HorizontalSplitPerpStart' WIN_DWL_HORIZONTALSPLITPERPEND = 'HorizontalSplitPerpEnd' +WIN_HARDWARE = 'Hardware' WIN_HDW_FAVOURITE = 'HdwFavourite' +WIN_HDW_FRAME = 'HdwFrame' --------------------------------------------------------------------- return WinConst diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index a3470bf..0196c9d 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -2025,11 +2025,130 @@ end local function SearchSash( nAreaId, SashList) -- verifico il tipo local nAreaType = EgtGetInfo( nAreaId, WIN_AREATYPE, 'i') + --if nAreaType == WIN_AREATYPES.FRAME then 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()}) + -- recupero punti di origine + local nSashFrameLayerId = EgtGroup( nAreaId) + EgtSetName( nSashFrameLayerId, WIN_HDW_FRAME) + local vOutlineCopy = {} + local nOutlineOffsetLayerId = EgtGroup( nAreaId) + local nOutlineId = EgtGetFirstInGroup( nOutlineLayerId) + while nOutlineId do + local sProfileType = EgtGetInfo( nOutlineId, WIN_PROFILETYPE) + local nProfileId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE, 'i') + local nSashProfileId = EgtGetFirstNameInGroup( nProfileId, WIN_SASH, 'i') + local nSashProfileTypeId = EgtGetFirstNameInGroup( nSashProfileId, sProfileType, 'i') + local dGapDelta = EgtGetInfo( nSashProfileTypeId, WIN_GAPDELTA, 'd') + local dGapDeltaZ = EgtGetInfo( nSashProfileTypeId, WIN_GAPDELTAZ, 'd') + local nOutlineCopyId = EgtCopy( nOutlineId, nOutlineOffsetLayerId) + EgtSetInfo( nOutlineCopyId, 'ORIG', nOutlineId) + EgtSetInfo( nOutlineCopyId, WIN_GAPDELTAZ, dGapDeltaZ) + local nSectionFrameId = EgtGetFirstNameInGroup( nSashProfileTypeId, WIN_SECTIONFRAME) + local frSectionFrame = EgtFR( nSectionFrameId) + local nSashProfileRefId = EgtGetFirstNameInGroup( nSashProfileTypeId, WIN_REF) + local b3SashProfileType = EgtGetBBoxRef( nSashProfileRefId, GDB_BB.STANDARD, frSectionFrame) + EgtSetInfo( nOutlineCopyId, WIN_GAPDELTAZ .. 2, b3SashProfileType:getDimY()) + EgtOffsetCurve( nOutlineCopyId, - dGapDelta) + table.insert( vOutlineCopy, nOutlineCopyId) + nOutlineId = EgtGetNext( nOutlineId) + end + local tSash = { nAreaId = nAreaId, ptCenter = b3Outline:getCenter()} + local tFrame = {} + local nA_FA1Id = GDB_ID.NULL + local nB_FA1Id = GDB_ID.NULL + local nC_FA1Id = GDB_ID.NULL + local nD_FA1Id = GDB_ID.NULL + for nIndex = 1, #vOutlineCopy do + local nNext = EgtIf( nIndex < #vOutlineCopy, nIndex + 1, 1) + local ptOrig = EgtIP( vOutlineCopy[nIndex], vOutlineCopy[nNext], ORIG()) + local dParam = EgtCurveParamAtPoint( vOutlineCopy[nIndex], ptOrig) + EgtTrimCurveEndAtParam( vOutlineCopy[nIndex], dParam) + dParam = EgtCurveParamAtPoint( vOutlineCopy[nNext], ptOrig) + EgtTrimCurveStartAtParam( vOutlineCopy[nNext], dParam) + local sOrigName = string.char(string.byte('A') + #vOutlineCopy - nIndex) + tSash[sOrigName] = ptOrig + local vtDir = EgtEV( vOutlineCopy[nIndex]) + local nFA1Id = EgtFrame( nSashFrameLayerId, Frame3d( ptOrig, - vtDir, vtDir ^ Z_AX() , Z_AX())) + EgtSetName( nFA1Id, sOrigName .. '.FA1') + local vtIn = Vector3d( vtDir) + vtIn:rotate( Z_AX(), -90) + local dGapDeltaZ = EgtGetInfo( vOutlineCopy[nIndex], WIN_GAPDELTAZ, 'd') + local nFA2Id = EgtFrame( nSashFrameLayerId, Frame3d( ptOrig - dGapDeltaZ * Z_AX(), - vtDir, vtDir ^ vtIn , vtIn)) + EgtSetName( nFA2Id, sOrigName .. '.FA2') + local dGapDeltaZ2 = EgtGetInfo( vOutlineCopy[nIndex], WIN_GAPDELTAZ .. 2, 'd') + local nFA3Id = EgtFrame( nSashFrameLayerId, Frame3d( ptOrig - dGapDeltaZ2 * Z_AX(), - vtDir, vtDir ^ -Z_AX() , -Z_AX())) + EgtSetName( nFA3Id, sOrigName .. '.FA3') + if sOrigName == 'A' then + nA_FA1Id = nFA1Id + elseif sOrigName == 'B' then + nB_FA1Id = nFA1Id + elseif sOrigName == 'C' then + nC_FA1Id = nFA1Id + elseif sOrigName == 'D' then + nD_FA1Id = nFA1Id + end + -- ricavo posizione sul telaio + local nOrigOutlineId = EgtGetInfo( vOutlineCopy[nIndex], 'ORIG', 'i') + local nBaseOutlineId = EgtGetInfo( nOrigOutlineId, WIN_COPY, 'i') + local nSouId = EgtGetInfo( nBaseOutlineId, 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 + if EgtGetName( nSouId) ~= WIN_SPLIT then + local nFrameFrameLayerId = EgtGetFirstNameInGroup( nSouAreaId, WIN_HDW_FRAME) + if not nFrameFrameLayerId then + nFrameFrameLayerId = EgtGroup( nSouAreaId) + EgtSetName( nFrameFrameLayerId, WIN_HDW_FRAME) + end + -- ricavo aria lato telaio + local sProfileType = EgtGetInfo( nSouId, WIN_PROFILETYPE) + local nProfileId = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE, 'i') + local nFrameProfileId = EgtGetFirstNameInGroup( nProfileId, WIN_FRAME, 'i') + local nFrameProfileTypeId = EgtGetFirstNameInGroup( nFrameProfileId, sProfileType, 'i') + local dGapDeltaOut = EgtGetInfo( nFrameProfileTypeId, WIN_GAPDELTAOUT, 'd') + local dFrameGapDeltaZ = EgtGetInfo( nFrameProfileTypeId, WIN_GAPDELTAZ, 'd') + local nOutlineOutId = EgtCopy( nSouId, nOutlineOffsetLayerId) + EgtSetName( nOutlineOutId, 'Frame') + EgtOffsetCurve( nOutlineOutId, - dGapDeltaOut) + -- prendo la proiezione + _, ptOrig = EgtPointCurveDist( ptOrig, nOutlineOutId) + -- recupero DeltaZ2 + local nSectionFrameId = EgtGetFirstNameInGroup( nFrameProfileTypeId, WIN_SECTIONFRAME) + local frSectionFrame = EgtFR( nSectionFrameId) + local nFrameProfileRefId = EgtGetFirstNameInGroup( nFrameProfileTypeId, WIN_REF) + local b3SashProfileType = EgtGetBBoxRef( nFrameProfileRefId, GDB_BB.STANDARD, frSectionFrame) + local nFT1Id = EgtFrame( nFrameFrameLayerId, Frame3d( ptOrig - dFrameGapDeltaZ * Z_AX(), - vtDir, vtDir ^ Z_AX() , Z_AX())) + EgtSetName( nFT1Id, sOrigName .. '.FT1') + table.insert( tFrame, nFT1Id) + local vtFrameIn = Vector3d( vtDir) + vtFrameIn:rotate( Z_AX(), 90) + local nFT2Id = EgtFrame( nFrameFrameLayerId, Frame3d( ptOrig - dFrameGapDeltaZ * Z_AX(), - vtDir, vtDir ^ vtFrameIn , vtFrameIn)) + EgtSetName( nFT2Id, sOrigName .. '.FT2') + table.insert( tFrame, nFT2Id) + local dGapDeltaZ2 = b3SashProfileType:getDimY() + local nFT3Id = EgtFrame( nFrameFrameLayerId, Frame3d( ptOrig - dGapDeltaZ2 * Z_AX(), - vtDir, vtDir ^ -Z_AX() , -Z_AX())) + EgtSetName( nFT3Id, sOrigName .. '.FT3') + table.insert( tFrame, nFT3Id) + end + end + tSash.Frame = tFrame + tSash.LHeight = ( EgtSP( nB_FA1Id) - EgtSP( nA_FA1Id)):getY() + tSash.RHeight = ( EgtSP( nC_FA1Id) - EgtSP( nD_FA1Id)):getY() + tSash.TWidth = ( EgtSP( nC_FA1Id) - EgtSP( nB_FA1Id)):getX() + tSash.BWidth = ( EgtSP( nD_FA1Id) - EgtSP( nA_FA1Id)):getX() + if EgtGetType( vOutlineCopy[3]) == GDB_TY.CRV_ARC then + tSash.BCLength = EgtCurveLength( vOutlineCopy[3]) + tSash.BCArrow = EgtMP( vOutlineCopy[3]) - (( EgtEP( vOutlineCopy[3]) - EgtSP( vOutlineCopy[3])) / 2) + end + EgtErase( nOutlineOffsetLayerId) + table.insert( SashList, tSash) end -- verifico se ci sono sotto-aree local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREA .. '*') @@ -2042,12 +2161,37 @@ end -- funzione che aggiunge l'hardware function WinCalculate.AddHardware( nFrameId) + -- cerco ed indicizzo ante del serramento + local SashList = {} + SearchSash( nFrameId, SashList) + -- ordino per X e Y + local function compareXY(a,b) + if abs( a.ptCenter:getX() - b.ptCenter:getX()) < GEO.EPS_SMALL then + return a.ptCenter:getY() < b.ptCenter:getY() + else + return a.ptCenter:getX() < b.ptCenter:getX() + end + end + table.sort(SashList, compareXY) + + -- correggo nomi Frame del telaio + for nIndex = 1, #SashList do + for nFrameIndex = 1, #SashList[nIndex].Frame do + local nFrameId = SashList[nIndex].Frame[nFrameIndex] + local sName = EgtGetName( nFrameId) + EgtSetName( nFrameId, nIndex .. '.' .. sName) + end + end + + -- recupero preferito della ferramenta 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' + -- creo file di richiesta ferramenta + local sNow = os.date( '_%Y_%m_%d_%H_%M_%S', os.time()) + local sInputFile = 'a:\\InputBatch\\Input' .. sNow .. '.txt' + local sAGBOutputFile = 'C:\\AGB3000NG\\OutputBatch\\Output' .. sNow .. '.txt' + local sAGBOutputLavFile = 'C:\\AGB3000NG\\OutputBatch\\OutputLav' .. sNow .. '.txt' + local sOutputFile = 'a:\\OutputBatch\\Output' .. sNow .. '.txt' + local sOutputLavFile = 'a:\\OutputBatch\\OutputLav' .. sNow .. '.txt' -- Apro file Input in scrittura local fhInput = io.open( sInputFile, 'w') if not fhInput then @@ -2057,10 +2201,41 @@ function WinCalculate.AddHardware( nFrameId) local sText = 'OUTPUTKIT=' .. sAGBOutputFile .. '\n' .. 'S_NAME=' .. nFavourite .. '\n' .. - 'RECORDID=15A' .. '\n' .. - 'HBB=' .. tostring( 1500) .. '\n' .. - 'LBB=' .. tostring( 900) .. '\n' .. - 'FINESTRAPORTAFINESTRA=Finestra' .. '\n' .. + 'RECORDID=15A' .. '\n' + + if #SashList >= 1 and SashList[1].LHeight == SashList[1].RHeight then + sText = sText .. 'HBB=' .. tostring( SashList[1].LHeight) .. '\n' + else + for nSashIndex = 1, #SashList do + if nSashIndex == 1 then + sText = sText .. 'HBB_sx=' .. tostring( SashList[nSashIndex].LHeight) .. '\n' + else + sText = sText .. 'HBB_' .. tostring(nSashIndex - 1) .. 'B=' .. tostring( SashList[nSashIndex].LHeight) .. '\n' + end + if nSashIndex == #SashList then + sText = sText .. 'HBB_dx=' .. tostring( SashList[nSashIndex].RHeight) .. '\n' + else + sText = sText .. 'HBB_' .. tostring(nSashIndex) .. '=' .. tostring( SashList[nSashIndex].RHeight) .. '\n' + end + end + end + + if #SashList == 1 then + sText = sText .. 'LBB=' .. tostring( SashList[1].BWidth) .. '\n' + else + for nSashIndex = 1, #SashList do + sText = sText .. 'LBB' .. nSashIndex .. '=' .. tostring( SashList[nSashIndex].BWidth) .. '\n' + if SashList[nSashIndex].BCLength then + sText = sText .. 'LBBA' .. nSashIndex .. '=' .. tostring( SashList[nSashIndex].BCLength) .. '\n' + end + if SashList[nSashIndex].BCArrow then + sText = sText .. 'FRECCIA_' .. nSashIndex .. '=' .. tostring( SashList[nSashIndex].BCArrow) .. '\n' + end + end + + end + + sText = sText .. 'FINESTRAPORTAFINESTRA=Finestra' .. '\n' .. 'Q=1' .. '\n' .. 'MANOSERRAMENTO=Dx' .. '\n' .. 'CNCOUTPUT=' .. sAGBOutputLavFile .. '\n' .. @@ -2081,20 +2256,7 @@ function WinCalculate.AddHardware( nFrameId) 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 + -- Apro file Output in lettura local fhOutput = io.open( sOutputLavFile, 'r') if not fhOutput then EgtOutLog( 'Error opening file ' .. sOutputLavFile) @@ -2118,8 +2280,10 @@ function WinCalculate.AddHardware( nFrameId) local vOutlineIds = EgtGetAllInGroup( nOutlineLayerId) local nA = string.byte('A') local nSashPart = string.byte(sSashPart) - local nOutlineId = vOutlineIds[#vOutlineIds - (nSashPart - nA)] + local nOutlineIndex = #vOutlineIds - (nSashPart - nA) + local nOutlineId = vOutlineIds[nOutlineIndex] local nPartId = GDB_ID.NULL + local frHdwFrame if sPart == 'TELAIO' then local nSashBaseOutlineId = EgtGetInfo( nOutlineId, WIN_COPY, 'i') local nSouId = EgtGetInfo( nSashBaseOutlineId, WIN_SOU, 'i') @@ -2132,13 +2296,98 @@ function WinCalculate.AddHardware( nFrameId) end local nFrameOutlineId = EgtGetInfo( nSouId, WIN_COPY, 'i') nPartId = EgtGetInfo( nFrameOutlineId, WIN_REF_PART, 'i') + local nHdwFrameLayerId = EgtGetFirstNameInGroup( nSouAreaId, WIN_HDW_FRAME) + local nHdwFrameId = EgtGetFirstNameInGroup( nHdwFrameLayerId, nSashIndex .. '.' .. sSashPart .. '.' .. sSide) + frHdwFrame = EgtFR( nHdwFrameId) elseif sPart == 'ANTA' then nPartId = EgtGetInfo( nOutlineId, WIN_REF_PART, 'i') + local nHdwFrameLayerId = EgtGetFirstNameInGroup( nSashId, WIN_HDW_FRAME) + local nHdwFrameId = EgtGetFirstNameInGroup( nHdwFrameLayerId, sSashPart .. '.' .. sSide) + frHdwFrame = EgtFR( nHdwFrameId) end - - - + local vMacro = EgtSplitString( sMacro, '_') + local nPartHdwLayerId = EgtGetFirstNameInGroup( nPartId, WIN_HARDWARE) + if not nPartHdwLayerId then + nPartHdwLayerId = EgtGroup( nPartId) + EgtSetName( nPartHdwLayerId, WIN_HARDWARE) + end + local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) + local nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) + local nExtrCopyId = EgtCopy( nMainExtrusionId, nSolidLayerId) + if vMacro[1] == 'FRESATA' then + elseif vMacro[1] == 'ASOLA' then + local ptCenter = Point3d( dPosX, dPosY, dPosZ) + local dLength = tonumber(vMacro[2]) + local dWidth = tonumber(vMacro[3]) + local dHeight = tonumber(vMacro[4]) + local nRSideId = EgtLine( nPartHdwLayerId, ptCenter - dLength / 2 * X_AX() - 0.1 * Y_AX(), ptCenter + dLength / 2 * X_AX() - 0.1 * Y_AX()) + local nTSideId = EgtLine( nPartHdwLayerId, EgtEP( nRSideId), EgtEP( nRSideId) + 0.1 * Y_AX()) + local vtEnd = EgtEV( nRSideId) + vtEnd:rotate( Z_AX(), 90) + local nTChamferId = EgtArc2PV( nPartHdwLayerId, EgtEP( nTSideId), EgtEP( nTSideId) - dWidth * X_AX() + dWidth * Y_AX() , vtEnd) + local nLSideId = EgtLine( nPartHdwLayerId, EgtEP( nTChamferId), EgtEP( nTChamferId) - ( dLength - 2 * dWidth) * X_AX()) + vtEnd = EgtEV( nLSideId) + local nBChamferId = EgtArc2PV( nPartHdwLayerId, EgtEP( nLSideId), EgtEP( nLSideId) - dWidth * X_AX() - dWidth * Y_AX(), vtEnd) + local nBSideId = EgtLine( nPartHdwLayerId, EgtEP( nBChamferId), EgtSP( nRSideId)) + -- per lavorazione + local nMachPocketId = EgtCurveCompo( nPartHdwLayerId, { nTChamferId, nLSideId, nBChamferId}, false) + EgtModifyCurveExtrusion( nMachPocketId, Z_AX()) + EgtModifyCurveThickness( nMachPocketId, -dHeight) + EgtTransform( nMachPocketId, frHdwFrame) + -- per solido + local nSolidPocketOutlineId = EgtCurveCompo( nPartHdwLayerId, { nRSideId, nTSideId, nTChamferId, nLSideId, nBChamferId, nBSideId}) + EgtMove( nSolidPocketOutlineId, 0.01 * Z_AX()) + local nSolidPocketId = EgtSurfTmByRegionExtrusion( nPartHdwLayerId, nSolidPocketOutlineId, -( dHeight + 0.01) * Z_AX()) + EgtErase( nSolidPocketOutlineId) + EgtInvertSurf( nSolidPocketId) + EgtTransform( nSolidPocketId, frHdwFrame) + EgtSurfTmCut( nMainExtrusionId, nSolidPocketId, true, false) + EgtSurfTmCut( nSolidPocketId, nExtrCopyId, true, false) + elseif vMacro[1] == 'TASCA' then + elseif vMacro[1] == 'VITE' then + local dRadius = 1.5 + local dDepth = 2 + if vMacro[2] == 'CANALINO' then + dRadius = 2 + dDepth = 3 + elseif vMacro[2] == 'ANTA' then + dRadius = 2.5 + dDepth = 4 + end + local ptCenter = Point3d( dPosX, dPosY, dPosZ) + --ptCenter:toGlob(frHdwFrame) + local nHoleId = EgtCircle( nPartHdwLayerId, ptCenter, dRadius) + EgtModifyCurveExtrusion( nHoleId, Z_AX()) + EgtModifyCurveThickness( nHoleId, -dDepth) + EgtTransform( nHoleId, frHdwFrame) + elseif vMacro[1] == 'FORO' then + local ptCenter = Point3d( dPosX, dPosY, dPosZ) + local sDiameter = EgtReplaceString( vMacro[2], 'D', '') + local dRadius = tonumber(sDiameter) / 2 + local nHoleId = EgtCircle( nPartHdwLayerId, ptCenter, dRadius) + -- per lavorazione + EgtModifyCurveExtrusion( nHoleId, Z_AX()) + local dDepth = 25.0 + if #vMacro == 3 then + dDepth = tonumber( vMacro[3]) + end + EgtModifyCurveThickness( nHoleId, -dDepth) + EgtTransform( nHoleId, frHdwFrame) + -- per solido + local nSolidHoleOutlineId = EgtCircle( nPartHdwLayerId, ptCenter + 0.01 * Z_AX(), dRadius) + local nSolidHoleId = EgtSurfTmByRegionExtrusion( nPartHdwLayerId, nSolidHoleOutlineId, -( dDepth + 0.01) * Z_AX()) + EgtErase( nSolidHoleOutlineId) + EgtInvertSurf( nSolidHoleId) + EgtTransform( nSolidHoleId, frHdwFrame) + --EgtSurfTmCut( nMainExtrusionId, nSolidHoleId, true, false) + --EgtSurfTmCut( nSolidHoleId, nExtrCopyId, true, false) + end + EgtErase( nExtrCopyId) end + + -- Chiudo file Output in scrittura + fhOutput:close() + end ---------------------------------------------------------------------