diff --git a/LuaLibs/WProcessLapJoint.lua b/LuaLibs/WProcessLapJoint.lua index 5061573..5fa38d1 100644 --- a/LuaLibs/WProcessLapJoint.lua +++ b/LuaLibs/WProcessLapJoint.lua @@ -1337,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 WL.IsMachiningOkForDouble( sMilling) then + if not WM.IsMachiningOkForDouble( sMilling) then Proc.Double = 0 sMilling = sMillingBackup end @@ -1455,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 WL.IsMachiningOkForDouble( sMilling) then + if not WM.IsMachiningOkForDouble( sMilling) then Proc.Double = 0 sMilling = sMillOnSideBackup end @@ -2209,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 WL.IsMachiningOkForDouble( sPocketing) then + if not WM.IsMachiningOkForDouble( sPocketing) then Proc.Double = 0 sPocketing = sPocketingBackup end @@ -2246,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 WL.IsMachiningOkForDouble( sPocketing) then + if not WM.IsMachiningOkForDouble( sPocketing) then Proc.Double = 0 sPocketing = sPocketingBackup end @@ -2305,7 +2305,7 @@ local function MakeByPocketing( Proc, nFacet, nRawId, b3Raw, bCheckQPar) elseif Proc.Fct >= 4 then dDiam = min( dDiam, WD.MAXDIAM_POCK_CORNER or 1000) end - + -- cerco lavorazione adatta e recupero i dati utensile local sPocketing, bForceClosedPocket, sTuuid, dMillDiam, dMaxDepth, dThDiam = VerifyPocket( Proc, dDiam, dElev, nRawId, dH, dV) if not sPocketing then local sErr = 'Error : pocketing not found in library' @@ -2497,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 WL.IsMachiningOkForDouble( sMillOnSide) then + if WM.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup @@ -2753,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 WL.IsMachiningOkForDouble( sMillOnSide) then + if WM.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup @@ -2815,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 WL.IsMachiningOkForDouble( sMillOnSide) then + if WM.IsMachiningOkForDouble( sMillOnSide) then bDoubleMillOnSide = true else sMillOnSide = sMillOnSideBackup diff --git a/LuaLibs/WallExec.lua b/LuaLibs/WallExec.lua index f64fc38..3e45b29 100644 --- a/LuaLibs/WallExec.lua +++ b/LuaLibs/WallExec.lua @@ -670,6 +670,7 @@ end -- Controlla in vProc la presenza di feature da lavorare in doppio e, se trovate, ne setta i parametri local function SetMirroredFeatures( vProc, b3Raw) + -- interasse minimo local dMinimumDistanceMirroredFeatures = 780 local vPockets = {} local vDrillings = {} @@ -760,8 +761,7 @@ local function SetMirroredFeatures( vProc, b3Raw) Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' and Proc.AffectedFaces.Top and Proc.AffectedFaces.Right and ProcMirror.AffectedFaces.Top and ProcMirror.AffectedFaces.Right or Proc.TopologyLongName == 'Tunnel-Blind-RightAngles-Parallel-5' and Proc.AffectedFaces.Top and ProcMirror.AffectedFaces.Top -- box delle stesse dimensioni - local bIsMirrorFeatureSameDimension = false - bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and + local bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) -- box allineati in X @@ -822,8 +822,7 @@ local function SetMirroredFeatures( vProc, b3Raw) -- feature non disattivata e diversa da nCurrentDrilling local bIsMirrorIdOk = ( Proc.Id ~= ProcMirror.Id and ProcMirror.Flg ~= 0) -- box delle stesse dimensioni - local bIsMirrorFeatureSameDimension = false - bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and + local bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) and abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < ( WD.DOUBLE_HEAD_DRILLING_TOLERANCE or 0.1) -- box allineati in X @@ -862,6 +861,82 @@ local function SetMirroredFeatures( vProc, b3Raw) end end +------------------------------------------------------------------------------------------------------------- +-- verifico e imposto le fresature da specchiare +local function SetMirroredOperations() + -- interasse minimo + local dMinimumDistanceMirroredOperations = 780 + local nOperIdMaster = EgtGetNextOperation( EgtGetPhaseDisposition( 1)) + while nOperIdMaster do + EgtSetCurrMachining( nOperIdMaster) + local nClId = EgtGetFirstNameInGroup( nOperIdMaster, 'CL') + local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) + -- vettore direzione utensile lavorazione master + local vtTool = EgtGetInfo( nPathId, 'EXTR', 'v') + local ptMin = EgtGetInfo( nClId, 'MMIN', 'p') + local ptMax = EgtGetInfo( nClId, 'MMAX', 'p') + -- box percorso lavorazione master + local b3Operation = BBox3d( ptMin, ptMax) + local sMachining = EgtGetMachiningParam( MCH_MP.NAME, 's') + -- lavorazione master adatta alla specchiatura + local bIsMachiningOk = ( EgtGetMachiningParam( MCH_MP.TYPE) == MCH_OY.MILLING) and EgtGetOperationMode( nOperIdMaster) and WM.IsMachiningOkForDouble( sMachining) + local nOperIdMirror = EgtGetNextOperation( EgtGetPhaseDisposition( 1)) + if bIsMachiningOk then + while nOperIdMirror do + EgtSetCurrMachining( nOperIdMirror) + local nClIdMirror = EgtGetFirstNameInGroup( nOperIdMirror, 'CL') + local nPathIdMirror = EgtGetFirstInGroup( nClIdMirror or GDB_ID.NULL) + -- vettore direzione utensile lavorazione mirror + local vtToolMirror = EgtGetInfo( nPathIdMirror, 'EXTR', 'v') + local ptMinMirror = EgtGetInfo( nClIdMirror, 'MMIN', 'p') + local ptMaxMirror = EgtGetInfo( nClIdMirror, 'MMAX', 'p') + -- box percorso lavorazione mirror + local b3OperationMirror = BBox3d( ptMinMirror, ptMaxMirror) + -- lavorazione mirror adatta alla specchiatura + local bIsMirrorMachiningOk = ( EgtGetMachiningParam( MCH_MP.TYPE) == MCH_OY.MILLING) and EgtGetOperationMode( nOperIdMirror) and nOperIdMaster ~= nOperIdMirror + -- lavorazione master più a sinistra + local bIsMirrorSideOk = ( b3OperationMirror:getCenter():getY() - b3Operation:getCenter():getY()) > ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) + -- box delle stesse dimensioni + local bIsMirrorOperationSameDimension = abs( b3Operation:getDimX() - b3OperationMirror:getDimX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and + abs( b3Operation:getDimY() - b3OperationMirror:getDimY()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and + abs( b3Operation:getDimZ() - b3OperationMirror:getDimZ()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) + -- box allineati in X + local bIsMirrorBoxXAligned = abs( b3Operation:getCenter():getX() - b3OperationMirror:getCenter():getX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) and + abs( b3Operation:getCenter():getX() - b3OperationMirror:getCenter():getX()) < ( WD.DOUBLE_HEAD_POCKET_TOLERANCE or 0.5) + -- box che non si intersecano + local bIsNotMirrorBoxOverlapping = not OverlapsXY( b3Operation, b3OperationMirror) + -- distanza minima tra le feature + local dYMinDistance = max( b3Operation:getMin():getY(), b3OperationMirror:getMin():getY()) - min( b3Operation:getMax():getY(), b3OperationMirror:getMax():getY()) + local bIsMirrorOperationDistanceOk = dYMinDistance > dMinimumDistanceMirroredOperations + 10 * GEO.EPS_SMALL + -- vettori utensile specchiati + vtTool:mirror( Y_AX()) + local bIsMirrorVectorOk = AreSameVectorApprox( vtTool, vtToolMirror) + -- se condizioni corrette, scrivo le note e cancello la specchiata + if bIsMirrorMachiningOk and bIsMirrorSideOk and bIsMirrorOperationSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping and bIsMirrorOperationDistanceOk and bIsMirrorVectorOk then + -- calcolo asse di specchiatura + local dYMirrorAx + local b3Tab = EgtGetTableArea() + local ptOnMirrorAx = ( b3Operation:getCenter() + b3OperationMirror:getCenter()) / 2 + dYMirrorAx = ptOnMirrorAx:getY() - b3Tab:getMin():getY() + EgtSetCurrMachining( nOperIdMaster) + -- leggo note esistenti + local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + -- aggiungo note per doppio + sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', 2) + sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', dYMirrorAx) + -- scrivo le note della lavorazione + EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) + -- cancello l'operazione specchiata + EgtRemoveOperation( nOperIdMirror) + break + end + nOperIdMirror = EgtGetNextOperation( nOperIdMirror) + end + end + nOperIdMaster = EgtGetNextOperation( nOperIdMaster) + end +end + ------------------------------------------------------------------------------------------------------------- function WallExec.ProcessFeatures() -- errori e stato @@ -962,7 +1037,7 @@ function WallExec.ProcessFeatures() local ProcId = vProcToDisable[i] if nOperationProcId == ProcId then nOperId = EgtGetNextOperation( nOperId) - EgtRemoveOperation(nCurrentOperId) + EgtRemoveOperation( nCurrentOperId) break end end @@ -971,15 +1046,7 @@ function WallExec.ProcessFeatures() 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') - + SetMirroredOperations() -- se macchina pareti if not WD.BEAM_MACHINE then