diff --git a/LuaLibs/WMachiningLib.lua b/LuaLibs/WMachiningLib.lua index e492b59..c042091 100644 --- a/LuaLibs/WMachiningLib.lua +++ b/LuaLibs/WMachiningLib.lua @@ -199,5 +199,55 @@ function WMachiningLib.AddMachining( Proc, sName, sMachining) return nMchId, sFinalName end +--------------------------------------------------------------------- +local function IsToolDoubleOk( sToolMasterName, sToolDoubleName) + local bIsToolDoubleOk = false + -- dimensioni utensile master + EgtTdbSetCurrTool( sToolMasterName) + local bIsBlade = ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) & MCH_TF.SAWBLADE ~= 0) or false + local dTMaxMat = EgtIf( bIsBlade, EgtTdbGetCurrToolParam( MCH_TP.THICK), EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)) + local dTMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMat, EgtTdbGetCurrToolMaxDepth()) + local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + local dTDiamTh = EgtTdbGetCurrToolThDiam() or 0 + local bTipFeed = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) > 0 + local dTMaxDepthOnSide = EgtIf( bIsBlade, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), min( EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDEDEPTH', 'd') or 999, 0.5 * ( dTDiam - dTDiamTh))) + -- dimensioni utensile double + EgtTdbSetCurrTool( sToolDoubleName) + local bIsBladeDouble = ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) & MCH_TF.SAWBLADE ~= 0) or false + local dTMaxMatDouble = EgtIf( bIsBladeDouble, EgtTdbGetCurrToolParam( MCH_TP.THICK), EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)) + local dTMaxDepthDouble = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMatDouble, EgtTdbGetCurrToolMaxDepth()) + local dTDiamDouble = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + local dTDiamThDouble = EgtTdbGetCurrToolThDiam() or 0 + local bTipFeedDouble = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) > 0 + local dTMaxDepthOnSideDouble = EgtIf( bIsBladeDouble, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), min( EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDEDEPTH', 'd') or 999, 0.5 * ( dTDiamDouble - dTDiamThDouble))) + -- controllo che siano uguali + bIsToolDoubleOk = ( bIsBlade == bIsBladeDouble) and + ( dTMaxMatDouble > dTMaxMat - 100 * GEO.EPS_SMALL) and + ( dTMaxDepthDouble > dTMaxDepth - 100 * GEO.EPS_SMALL) and + ( abs( dTDiam - dTDiamDouble) < 100 * GEO.EPS_SMALL) and + ( abs( dTDiamTh - dTDiamThDouble) < 100 * GEO.EPS_SMALL) and + ( bTipFeed == bTipFeedDouble) and + ( abs( dTMaxDepthOnSide - dTMaxDepthOnSideDouble) < GEO.EPS_SMALL) and + EgtTdbGetCurrToolParam( MCH_TP.ACTIVE) + return bIsToolDoubleOk +end + +--------------------------------------------------------------------- +function WMachiningLib.IsMachiningOkForDouble( sMachining) + local bDoubleOk = false + if sMachining and EgtMdbSetCurrMachining( sMachining) then + -- recupero l'utensile della lavorazione + local sToolMasterName = EgtMdbGetCurrMachiningParam( MCH_MP.TOOL) + if EgtTdbSetCurrTool( sToolMasterName or '') then + -- cerco eventuale utensile in doppio + local sToolDoubleName = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'DOUBLE', 's') + if sToolDoubleName and EgtTdbSetCurrTool( sToolDoubleName) then + bDoubleOk = IsToolDoubleOk( sToolMasterName, sToolDoubleName) + end + end + end + return bDoubleOk +end + ------------------------------------------------------------------------------------------------------------- return WMachiningLib diff --git a/LuaLibs/WProcessLapJoint.lua b/LuaLibs/WProcessLapJoint.lua index 380f8a5..5061573 100644 --- a/LuaLibs/WProcessLapJoint.lua +++ b/LuaLibs/WProcessLapJoint.lua @@ -735,56 +735,6 @@ local function MakeLocalSurf( ptP1, ptP2, ptP3, nAddGrpId) return nidFace end ---------------------------------------------------------------------- -local function IsToolDoubleOk( sToolMasterName, sToolDoubleName) - local bIsToolDoubleOk = false - -- dimensioni utensile master - EgtTdbSetCurrTool( sToolMasterName) - local bIsBlade = ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) & MCH_TF.SAWBLADE ~= 0) or false - local dTMaxMat = EgtIf( bIsBlade, EgtTdbGetCurrToolParam( MCH_TP.THICK), EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)) - local dTMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMat, EgtTdbGetCurrToolMaxDepth()) - local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) - local dTDiamTh = EgtTdbGetCurrToolThDiam() or 0 - local bTipFeed = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) > 0 - local dTMaxDepthOnSide = EgtIf( bIsBlade, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), min( EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDEDEPTH', 'd') or 999, 0.5 * ( dTDiam - dTDiamTh))) - -- dimensioni utensile double - EgtTdbSetCurrTool( sToolDoubleName) - local bIsBladeDouble = ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) & MCH_TF.SAWBLADE ~= 0) or false - local dTMaxMatDouble = EgtIf( bIsBladeDouble, EgtTdbGetCurrToolParam( MCH_TP.THICK), EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)) - local dTMaxDepthDouble = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, dTMaxMatDouble, EgtTdbGetCurrToolMaxDepth()) - local dTDiamDouble = EgtTdbGetCurrToolParam( MCH_TP.DIAM) - local dTDiamThDouble = EgtTdbGetCurrToolThDiam() or 0 - local bTipFeedDouble = EgtTdbGetCurrToolParam( MCH_TP.TIPFEED) > 0 - local dTMaxDepthOnSideDouble = EgtIf( bIsBladeDouble, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), min( EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDEDEPTH', 'd') or 999, 0.5 * ( dTDiamDouble - dTDiamThDouble))) - -- controllo che siano uguali - bIsToolDoubleOk = ( bIsBlade == bIsBladeDouble) and - ( dTMaxMatDouble > dTMaxMat - 100 * GEO.EPS_SMALL) and - ( dTMaxDepthDouble > dTMaxDepth - 100 * GEO.EPS_SMALL) and - ( abs( dTDiam - dTDiamDouble) < 100 * GEO.EPS_SMALL) and - ( abs( dTDiamTh - dTDiamThDouble) < 100 * GEO.EPS_SMALL) and - ( bTipFeed == bTipFeedDouble) and - ( abs( dTMaxDepthOnSide - dTMaxDepthOnSideDouble) < GEO.EPS_SMALL) and - EgtTdbGetCurrToolParam( MCH_TP.ACTIVE) - return bIsToolDoubleOk -end - ---------------------------------------------------------------------- -local function IsMachiningOkForDouble( sMachining) - local bDoubleOk = false - if sMachining and EgtMdbSetCurrMachining( sMachining) then - -- recupero l'utensile della lavorazione - local sToolMasterName = EgtMdbGetCurrMachiningParam( MCH_MP.TOOL) - if EgtTdbSetCurrTool( sToolMasterName or '') then - -- cerco eventuale utensile in doppio - local sToolDoubleName = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'DOUBLE', 's') - if sToolDoubleName and EgtTdbSetCurrTool( sToolDoubleName) then - bDoubleOk = IsToolDoubleOk( sToolMasterName, sToolDoubleName) - end - end - end - return bDoubleOk -end - --------------------------------------------------------------------- local function AddMillCornerMachining( nPartId, nNewProc, nFacInd, tFacAdj, nTypeConeCut, nAddGrpId, dToolDiam, dThick, sMilling, dOffsAng, dDepthMach, @@ -1387,7 +1337,7 @@ local function MakeByMill( Proc, nFacet, nOthFac, nRawId, b3Raw, dSideDist) if Proc.Double and Proc.Double == 2 then local sMillingBackup = sMilling sMilling = WM.FindMilling( 'Side', nil, nil, nil, nil, nil, nil, nil, 'H1') - if not IsMachiningOkForDouble( sMilling) then + if not WL.IsMachiningOkForDouble( sMilling) then Proc.Double = 0 sMilling = sMillingBackup end @@ -1505,7 +1455,7 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d if Proc.Double and Proc.Double == 2 then local sMillOnSideBackup = sMilling sMilling = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, nil, 'H1') - if not IsMachiningOkForDouble( sMilling) then + if not WL.IsMachiningOkForDouble( sMilling) then Proc.Double = 0 sMilling = sMillOnSideBackup end @@ -2223,6 +2173,8 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d end --------------------------------------------------------------------- +-- trova la migliore lavorazione tasca in base a diametro utensile, elevazione, doppio e eventuale interferenza di parti vicine +-- se necessario forza la tasca a chiusa local function VerifyPocket( Proc, dMaxDiameter, dElev, nRawId, dH, dV) local dStartDiameter = dMaxDiameter if Proc.AffectedFaces.Front then @@ -2257,7 +2209,7 @@ local function VerifyPocket( Proc, dMaxDiameter, dElev, nRawId, dH, dV) if Proc.Double and Proc.Double == 2 then local sPocketingBackup = sPocketing sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1') - if not IsMachiningOkForDouble( sPocketing) then + if not WL.IsMachiningOkForDouble( sPocketing) then Proc.Double = 0 sPocketing = sPocketingBackup end @@ -2294,7 +2246,7 @@ local function VerifyPocket( Proc, dMaxDiameter, dElev, nRawId, dH, dV) if Proc.Double and Proc.Double == 2 then local sPocketingBackup = sPocketing sPocketing = WM.FindPocketing( 'Pocket', dMaxDiameter, EgtIf( bUseDElevToFindPocketing, dElev, nil), nil, 'H1') - if not IsMachiningOkForDouble( sPocketing) then + if not WL.IsMachiningOkForDouble( sPocketing) then Proc.Double = 0 sPocketing = sPocketingBackup end @@ -2302,7 +2254,7 @@ local function VerifyPocket( Proc, dMaxDiameter, dElev, nRawId, dH, dV) end -- recupero dati utensile - if EgtMdbSetCurrMachining( sPocketing) then + if sPocketing and EgtMdbSetCurrMachining( sPocketing) then sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam @@ -2545,7 +2497,7 @@ local function MakeTwoFaces( Proc, nRawId, b3Raw) if Proc.Double and Proc.Double == 2 then local sMillOnSideBackup = sMillOnSide sMillOnSide = WM.FindMilling( 'SideMill', nil, nil, nil, nil, dMaxThick, nil, dMinSideElev, 'H1') - if IsMachiningOkForDouble( sMillOnSide) then + if WL.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup @@ -2801,7 +2753,7 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw) if Proc.Double and Proc.Double == 2 then local sMillOnSideBackup = sMillOnSide sMillOnSide = WM.FindMilling( 'SideMill', nil, nil, nil, nil, min( dH, dV), nil, dSideElev, 'H1') - if IsMachiningOkForDouble( sMillOnSide) then + if WL.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup @@ -2863,7 +2815,7 @@ local function MakeMoreFaces( Proc, nRawId, b3Raw) if Proc.Double and Proc.Double == 2 then local sMillOnSideBackup = sMillOnSide sMillOnSide = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV), nil, dSideElevMultiplier * dSideElev, 'H1') - if IsMachiningOkForDouble( sMillOnSide) then + if WL.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup diff --git a/LuaLibs/WallExec.lua b/LuaLibs/WallExec.lua index c1f3c1e..f64fc38 100644 --- a/LuaLibs/WallExec.lua +++ b/LuaLibs/WallExec.lua @@ -928,6 +928,7 @@ function WallExec.ProcessFeatures() -- LAVORAZIONI IN DOPPIO - QUI INSERIRE: -- VERIFICA E UPDATE NOTE PER LAVORAZIONI IN CUI SI CONTROLLA SE I PERCORSI SONO SPECCHIATI ------- + -- setto quali sono le lavorazioni da disattivare perchè specchiate di lavorazioni in doppio local vProcToDisable = {} for i = 1, #vProc do @@ -949,6 +950,7 @@ function WallExec.ProcessFeatures() end end end + -- cancello le operazioni legate a lavorazioni specchiate local nOperId = EgtGetNextOperation( EgtGetPhaseDisposition( 1)) while nOperId do @@ -968,6 +970,17 @@ function WallExec.ProcessFeatures() nOperId = EgtGetNextOperation( nOperId) end end + +-- -- verifico le fresature da specchiare +-- local nClId = EgtGetFirstNameInGroup( nOperId, 'CL') +-- local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) +-- local vtTool = EgtGetInfo( nPathId, 'EXTR', 'v') +-- local ptMin = EgtGetInfo( nClId, 'MMIN', 'p') +-- local ptMax = EgtGetInfo( nClId, 'MMAX', 'p') +-- local b3Operation = BBox3d( ptMin, ptMax) +-- local sMachining = EgtGetMachiningParam( MCH_MP.NAME, 's') + + -- se macchina pareti if not WD.BEAM_MACHINE then -- riordino le lavorazioni tra tutti i pezzi @@ -979,7 +992,7 @@ function WallExec.ProcessFeatures() local nGetPriorityFromBtl = WD.BTL_PRIORITY or 0 if nGetPriorityFromBtl > 0 then local vPriority = {} - local nOperId = EgtGetNextOperation( PrevMch) + nOperId = EgtGetNextOperation( PrevMch) local nCurrentPriorityId = 1 while nOperId do local nPriority = EgtGetInfo( nOperId or GDB_ID.NULL, 'PRIORITY', 'i')