Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 73c86bd35f | |||
| 0f536b07c4 | |||
| 3e01fb36b0 | |||
| 9480453e57 | |||
| 8e19e87d3f | |||
| 6a6dc27560 | |||
| 67bb55537e | |||
| 06adbb0b5d | |||
| 872a3ec899 | |||
| 5dae07e2aa | |||
| fc26a8ad4a | |||
| 04046787e3 | |||
| a12aaf86bc | |||
| 70d16909f5 | |||
| 5007cda21f | |||
| 76d03160c5 | |||
| 534302f48e | |||
| 60d73199e4 | |||
| 71a51e56e1 | |||
| bf9791ca9c | |||
| 249cb4eea5 | |||
| 46cda4d472 | |||
| 72b0e7f4a4 | |||
| 0e02959467 | |||
| b7837fe95c | |||
| d66eaf5322 | |||
| 05ecf76312 | |||
| 6e3a1ddc7a | |||
| df47691da1 | |||
| 8a2200e0de | |||
| 0136ccac19 | |||
| 7ee683aeb8 | |||
| e81d1aef66 | |||
| 5331466c4f | |||
| 7a972cccc8 | |||
| 2ed5af9661 | |||
| e25c24a33a | |||
| aeca298feb | |||
| a09565cfb7 | |||
| 862b375ee5 | |||
| a34147ce15 | |||
| cb3ad1d24c |
@@ -526,6 +526,12 @@ else
|
|||||||
end
|
end
|
||||||
-- Aggiorno eventuali dati ausiliari
|
-- Aggiorno eventuali dati ausiliari
|
||||||
UpdateAuxData( sBtmFile)
|
UpdateAuxData( sBtmFile)
|
||||||
|
|
||||||
|
-- Anche se non è da riprocessare, imposto nome file CN.
|
||||||
|
-- Se file TS7 importato da altro PC, 'BEAM.FILE' è cambiato da un PC all'altro. Di conseguenza si deve aggiornare nome file che si andrà a generare.
|
||||||
|
local _, sName, _ = EgtSplitPath( BEAM.FILE)
|
||||||
|
EgtSetInfo( EgtGetLastMachGroup(), 'NcName', sName .. '.cnc')
|
||||||
|
|
||||||
-- Passo in modalità lavora
|
-- Passo in modalità lavora
|
||||||
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
||||||
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ REM Compilazione 32 e 64 bit
|
|||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessText.lua -s LuaLibs\ProcessText.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessText.lua -s LuaLibs\ProcessText.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessTyroleanDovetail.lua -s LuaLibs\ProcessTyroleanDovetail.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessTyroleanDovetail.lua -s LuaLibs\ProcessTyroleanDovetail.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessVariant.lua -s LuaLibs\ProcessVariant.lua
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessVariant.lua -s LuaLibs\ProcessVariant.lua
|
||||||
|
\EgtProg\Dll32\luac54 -o bin\LuaLibs\ProcessProbing.lua -s LuaLibs\ProcessProbing.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\BatchProcess.lua -s BatchProcess.lua
|
\EgtProg\Dll32\luac54 -o bin\BatchProcess.lua -s BatchProcess.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\BatchProcessNew.lua -s BatchProcessNew.lua
|
\EgtProg\Dll32\luac54 -o bin\BatchProcessNew.lua -s BatchProcessNew.lua
|
||||||
\EgtProg\Dll32\luac54 -o bin\GetBeamData.lua -s GetBeamData.lua
|
\EgtProg\Dll32\luac54 -o bin\GetBeamData.lua -s GetBeamData.lua
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ _G.package.loaded.ProcessScarfJoint = nil
|
|||||||
_G.package.loaded.ProcessSimpleScarf = nil
|
_G.package.loaded.ProcessSimpleScarf = nil
|
||||||
_G.package.loaded.ProcessStepJoint = nil
|
_G.package.loaded.ProcessStepJoint = nil
|
||||||
_G.package.loaded.ProcessStepJointNotch = nil
|
_G.package.loaded.ProcessStepJointNotch = nil
|
||||||
|
_G.package.loaded.ProcessProbing = nil
|
||||||
_G.package.loaded.ProcessProfFront = nil
|
_G.package.loaded.ProcessProfFront = nil
|
||||||
_G.package.loaded.ProcessProfConcave = nil
|
_G.package.loaded.ProcessProfConcave = nil
|
||||||
_G.package.loaded.ProcessProfConvex = nil
|
_G.package.loaded.ProcessProfConvex = nil
|
||||||
|
|||||||
+34
-10
@@ -192,6 +192,27 @@ local function GetNameSolidFaceIncludingLine( b3Solid, ptP1Comp, ptP2Comp)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function AreSameOrOppositeDirApprox( vDir1, vDir2)
|
||||||
|
if abs( abs( vDir1) - abs( vDir2)) < 10 * GEO.EPS_SMALL then
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetEdgeToMachineFromVector( nSurfId, nFacet, vtOrthO)
|
||||||
|
local _, EdgesEgt = EgtSurfTmGetFacetOutlineInfo( nSurfId, nFacet, GDB_ID.ROOT)
|
||||||
|
|
||||||
|
for i = 1, #EdgesEgt do
|
||||||
|
if AreOppositeVectorApprox( EdgesEgt[i].Norm, vtOrthO) then
|
||||||
|
return ( i - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth, bSpecialTangentLeadInOut, bForceTangentLeadInOut, Par5Alternative)
|
function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDwnUp, dCutExtra, dCutSic, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw, bForceInvert, bMaximizeVerticalDepth, bSpecialTangentLeadInOut, bForceTangentLeadInOut, Par5Alternative)
|
||||||
-- se lama con asse parallelo alla faccia, passo alla apposita funzione
|
-- se lama con asse parallelo alla faccia, passo alla apposita funzione
|
||||||
@@ -233,11 +254,8 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
if not dVzLimDwnUp then dVzLimDwnUp = BL.GetNzLimDownUp( b3Raw, vtN, vtOrthO) end
|
||||||
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
local bDownHead = ( dVzLimDwnUp and dVzLimDwnUp < - 1.5)
|
||||||
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
local bDownUp = ( vtN:getZ() < dVzLimDwnUp)
|
||||||
-- Commentato perchè il vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile. Si passano le direzioni normali agli assi.
|
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT)
|
||||||
--local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, vtOrthO, GDB_ID.ROOT)
|
|
||||||
|
|
||||||
-- linea o bilinea di lavorazione
|
|
||||||
local ptP1, ptPm, ptP2, vtV1, vtV2, dLen, dWidth = EgtSurfTmFacetOppositeSide( nSurfId, nFacet, BL.GetVersRef( nOrthoOpposite), GDB_ID.ROOT)
|
|
||||||
|
|
||||||
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
if not dLen or dLen < 1.1 or not dWidth or dWidth < 1.1 then
|
||||||
local sWarn = 'Face ' .. string.format( '%d,%d', nSurfId, nFacet) .. ' skipped : too small'
|
local sWarn = 'Face ' .. string.format( '%d,%d', nSurfId, nFacet) .. ' skipped : too small'
|
||||||
@@ -551,9 +569,18 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
|
EgtSetMachiningGeometry( {{ nSurfId, nFacet}})
|
||||||
-- imposto uso faccia
|
-- imposto uso faccia
|
||||||
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
EgtSetMachiningParam( MCH_MP.FACEUSE, nFaceUse)
|
||||||
-- Commentato perchè il vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile.
|
-- vtFaceUse non funziona correttaemnte in caso che il lato da lavorare sia a 45°. Potrebbe ritornare una trilinea, non gestibile. Quindi si setta l'EDGE
|
||||||
-- local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';'
|
local nEdgeFaceUse = GetEdgeToMachineFromVector( nSurfId, nFacet, vtOrthO)
|
||||||
-- EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse)
|
if nEdgeFaceUse and ( AreSameOrOppositeDirApprox( vtOrthO:getX(), 0.707) or AreSameOrOppositeDirApprox( vtOrthO:getY(), 0.707) or AreSameOrOppositeDirApprox( vtOrthO:getZ(), 0.707)) then
|
||||||
|
local sNoteEdgeFaceUse = 'EdgesFaceUse=' .. EgtNumToString( nEdgeFaceUse) .. ';'
|
||||||
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteEdgeFaceUse)
|
||||||
|
else
|
||||||
|
local sNoteVtFaceUse = 'VtFaceUse=' .. EgtNumToString( vtOrthO:getX(),3) .. ',' .. EgtNumToString( vtOrthO:getY(),3) .. ',' .. EgtNumToString( vtOrthO:getZ(),3) .. ';'
|
||||||
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sNoteVtFaceUse)
|
||||||
|
-- imposto allungamenti iniziale e finale (in caso si utilizzi EDGE, non serve prolungare o accorciare)
|
||||||
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart)
|
||||||
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd)
|
||||||
|
end
|
||||||
-- imposto posizione braccio porta testa
|
-- imposto posizione braccio porta testa
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- imposto inversione e lato correzione
|
-- imposto inversione e lato correzione
|
||||||
@@ -572,9 +599,6 @@ function FacesBySaw.MakeOne( nSurfId, nFacet, sCutting, dSawDiam, Par5, dVzLimDw
|
|||||||
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
EgtSetMachiningParam( MCH_MP.LOTANG, dLoTang)
|
||||||
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
EgtSetMachiningParam( MCH_MP.LOPERP, dLoPerp)
|
||||||
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, dLoCompLength)
|
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, dLoCompLength)
|
||||||
-- imposto allungamenti iniziale e finale
|
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dAllStart - dAccStart)
|
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dAllEnd - dAccEnd)
|
|
||||||
-- imposto angolo 3° asse rot
|
-- imposto angolo 3° asse rot
|
||||||
local sBlockedAxis = EgtIf( bMaximizeVerticalDepth, 'parallel', 'perpendicular')
|
local sBlockedAxis = EgtIf( bMaximizeVerticalDepth, 'parallel', 'perpendicular')
|
||||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, sBlockedAxis, b3Raw, vtN, vtOrthO))
|
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( sCutting, sBlockedAxis, b3Raw, vtN, vtOrthO))
|
||||||
|
|||||||
+55
-35
@@ -25,11 +25,14 @@ EgtOutLog( ' MachiningLib started', 1)
|
|||||||
|
|
||||||
-- Dati
|
-- Dati
|
||||||
local BD = require( 'BeamData')
|
local BD = require( 'BeamData')
|
||||||
local Cuttings = require( 'CutData')
|
-- librerie lavorazioni caricate con pcall perchè potrebbero non esserci
|
||||||
local Millings = require( 'MillingData')
|
local Cuttings, Millings, Pocketings, Sawings, Drillings, Probing
|
||||||
local Pocketings = require( 'PocketingData')
|
if pcall( require, 'CutData') then Cuttings = require( 'CutData') end
|
||||||
local Sawings = require( 'SawingData')
|
if pcall( require, 'MillingData') then Millings = require( 'MillingData') end
|
||||||
local Drillings = require( 'DrillData')
|
if pcall( require, 'PocketingData') then Pocketings = require( 'PocketingData') end
|
||||||
|
if pcall( require, 'SawingData') then Sawings = require( 'SawingData') end
|
||||||
|
if pcall( require, 'DrillData') then Drillings = require( 'DrillData') end
|
||||||
|
if pcall( require, 'ProbingData') then Probing = require( 'ProbingData') end
|
||||||
|
|
||||||
-- tipo di teste macchina
|
-- tipo di teste macchina
|
||||||
local ONE_HEAD = 1 -- una testa (Fast, One, Turn1T)
|
local ONE_HEAD = 1 -- una testa (Fast, One, Turn1T)
|
||||||
@@ -184,18 +187,32 @@ end
|
|||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function GetMachinings( MachiningType, sType)
|
function GetMachinings( MachiningType, sType)
|
||||||
local Machinings
|
local Machinings = {}
|
||||||
-- leggo le lavorazioni disponibili
|
-- leggo le lavorazioni disponibili
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
Machinings = Drillings
|
if Drillings and type( Drillings) == "table" then
|
||||||
|
Machinings = Drillings
|
||||||
|
end
|
||||||
elseif MachiningType == MCH_MY.SAWING then
|
elseif MachiningType == MCH_MY.SAWING then
|
||||||
Machinings = Cuttings
|
if Cuttings and type( Cuttings) == "table" then
|
||||||
|
Machinings = Cuttings
|
||||||
|
end
|
||||||
elseif MachiningType == MCH_MY.MILLING then
|
elseif MachiningType == MCH_MY.MILLING then
|
||||||
Machinings = Millings
|
if Millings and type( Millings) == "table" then
|
||||||
|
Machinings = Millings
|
||||||
|
end
|
||||||
elseif MachiningType == MCH_MY.POCKETING then
|
elseif MachiningType == MCH_MY.POCKETING then
|
||||||
Machinings = Pocketings
|
if Pocketings and type( Pocketings) == "table" then
|
||||||
|
Machinings = Pocketings
|
||||||
|
end
|
||||||
elseif MachiningType == MCH_MY.MORTISING then
|
elseif MachiningType == MCH_MY.MORTISING then
|
||||||
Machinings = Sawings
|
if Sawings and type( Sawings) == "table" then
|
||||||
|
Machinings = Sawings
|
||||||
|
end
|
||||||
|
elseif MachiningType == MCH_MY.PROBING then
|
||||||
|
if Probing and type( Probing) == "table" then
|
||||||
|
Machinings = Probing
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- scrivo i parametri utensile nella lavorazione
|
-- scrivo i parametri utensile nella lavorazione
|
||||||
local validMachinings = {}
|
local validMachinings = {}
|
||||||
@@ -208,27 +225,30 @@ function GetMachinings( MachiningType, sType)
|
|||||||
if Machining.Tool.Name then
|
if Machining.Tool.Name then
|
||||||
if EgtTdbSetCurrTool( Machining.Tool.Name) then
|
if EgtTdbSetCurrTool( Machining.Tool.Name) then
|
||||||
table.insert( validMachinings, Machining)
|
table.insert( validMachinings, Machining)
|
||||||
if ( MachiningType == MCH_MY.MILLING) or ( MachiningType == MCH_MY.POCKETING) or ( MachiningType == MCH_MY.DRILLING and EgtStartsWith( sType, 'Pocket')) then
|
-- se non è tastatura, recupero dati utensile
|
||||||
Machining.Tool.MaxMat = EgtTdbGetCurrToolMaxDepth()
|
if MachiningType ~= MCH_MY.PROBING then
|
||||||
else
|
if ( MachiningType == MCH_MY.MILLING) or ( MachiningType == MCH_MY.POCKETING) or ( MachiningType == MCH_MY.DRILLING and EgtStartsWith( sType, 'Pocket')) then
|
||||||
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
Machining.Tool.MaxMat = EgtTdbGetCurrToolMaxDepth()
|
||||||
end
|
else
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
Machining.Tool.MaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||||
if EgtStartsWith( Machining.Type, 'Drill') then
|
|
||||||
Machining.SubType = 'Drill'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
|
||||||
Machining.SubType = 'AngleDrill'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'Pocket') then
|
|
||||||
Machining.SubType = 'DrillPocket'
|
|
||||||
elseif EgtStartsWith( Machining.Type, 'Predrill') then
|
|
||||||
Machining.SubType = 'Predrill'
|
|
||||||
end
|
end
|
||||||
|
if MachiningType == MCH_MY.DRILLING then
|
||||||
|
if EgtStartsWith( Machining.Type, 'Drill') then
|
||||||
|
Machining.SubType = 'Drill'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'AngleDrill') then
|
||||||
|
Machining.SubType = 'AngleDrill'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'Pocket') then
|
||||||
|
Machining.SubType = 'DrillPocket'
|
||||||
|
elseif EgtStartsWith( Machining.Type, 'Predrill') then
|
||||||
|
Machining.SubType = 'Predrill'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Machining.Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||||
|
Machining.Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||||
|
Machining.Tool.TotalLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||||
|
Machining.Tool.ToolHolderDiameter = EgtTdbGetCurrToolThDiam()
|
||||||
|
Machining.Tool.ToolHolderLength = EgtTdbGetCurrToolThLength() or 72
|
||||||
end
|
end
|
||||||
Machining.Tool.Diameter = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
|
||||||
Machining.Tool.Length = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
|
||||||
Machining.Tool.TotalLength = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
|
||||||
Machining.Tool.ToolHolderDiameter = EgtTdbGetCurrToolThDiam()
|
|
||||||
Machining.Tool.ToolHolderLength = EgtTdbGetCurrToolThLength() or 72
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -342,8 +362,8 @@ local function FindMachining( MachiningType, sType, Params, bTopHead, bDownHead,
|
|||||||
local ForStart = 1
|
local ForStart = 1
|
||||||
local ForEnd = #Machinings
|
local ForEnd = #Machinings
|
||||||
local ForStep = 1
|
local ForStep = 1
|
||||||
-- le forature vanno scorse dal diametro maggiore al minore
|
-- le forature vanno scorse dal diametro maggiore al minore, a meno che non sia stato passato un ordinamento specifico
|
||||||
if MachiningType == MCH_MY.DRILLING then
|
if MachiningType == MCH_MY.DRILLING and ( not sSortingCriterion or sSortingCriterion == '') then
|
||||||
ForStart = #Machinings
|
ForStart = #Machinings
|
||||||
ForEnd = 1
|
ForEnd = 1
|
||||||
ForStep = -1
|
ForStep = -1
|
||||||
@@ -455,7 +475,7 @@ function MachiningLib.FindCutting( sType, bTopHead, bDownHead, dDepth, sSortingC
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill)
|
function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExcludeH2, bAngleTransmission, bIsPredrill, bExcludeH3, sSortingCriterion)
|
||||||
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
local MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5, sTypeMach
|
||||||
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
-- se il foro è un predrill, cerco solo punte abilitate al Predrill
|
||||||
if bIsPredrill then
|
if bIsPredrill then
|
||||||
@@ -463,9 +483,9 @@ function MachiningLib.FindDrilling( dDiam, dDepth, bTopHead, bDownHead, bExclude
|
|||||||
else
|
else
|
||||||
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
sTypeMach = EgtIf( bAngleTransmission, 'Drill_AT', 'Drill')
|
||||||
end
|
end
|
||||||
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, sTypeMach, { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2)
|
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, sTypeMach, { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2, bExcludeH3, sSortingCriterion)
|
||||||
if ( not MachiningName or MachiningName == '') then
|
if ( not MachiningName or MachiningName == '') then
|
||||||
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Pocket_AT', 'Pocket'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead)
|
MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5 = FindMachining( MCH_MY.DRILLING, EgtIf( bAngleTransmission, 'Pocket_AT', 'Pocket'), { Diam = dDiam, Depth = dDepth}, bTopHead, bDownHead, bExcludeH2, bExcludeH3, sSortingCriterion)
|
||||||
end
|
end
|
||||||
if MachiningName and MachiningName ~= '' then
|
if MachiningName and MachiningName ~= '' then
|
||||||
return MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5
|
return MachiningName, MachiningType, Param1, Param2, Param3, Param4, Param5
|
||||||
|
|||||||
@@ -389,6 +389,25 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
-- primo gruppo di controlli con lunghezza utensile pari a metà foro se passante
|
||||||
-- recupero la lavorazione
|
-- recupero la lavorazione
|
||||||
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
local sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
||||||
|
|
||||||
|
if sDrilling then
|
||||||
|
-- Determino la faccia di inizio del foro e dati correlati
|
||||||
|
local nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
||||||
|
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
||||||
|
local TgA = CosB / sqrt( 1 - CosB * CosB)
|
||||||
|
local dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
||||||
|
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
||||||
|
if BD.C_SIMM and CosB > 0.866 then
|
||||||
|
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
||||||
|
end
|
||||||
|
local dMaxDepthOri = dMaxDepth
|
||||||
|
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
||||||
|
-- se utensile scelto non arriva in fondo, cerco il più lungo
|
||||||
|
if dMaxDepth < GEO.EPS_SMALL * 10 then
|
||||||
|
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, dCheckDepth, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill, nil, 'Longest')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if not sDrilling and dCheckDepth then
|
if not sDrilling and dCheckDepth then
|
||||||
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
sDrilling, sType, dMaxDepth, dMaxToolLength, dToolDiam, dDiamTh, dToolFreeLen = ML.FindDrilling( dDiam, 0, bDrillUp, bDrillDown, bExcludeH2, bDrillAngTrasm, Proc.IsPredrill)
|
||||||
if sDrilling then dCheckDepth = nil end
|
if sDrilling then dCheckDepth = nil end
|
||||||
@@ -496,15 +515,15 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Determino la faccia di inizio del foro e dati correlati
|
-- Determino la faccia di inizio del foro e dati correlati
|
||||||
local nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
nFac, CosB, vFaces = GetHoleStartData( ptCen, vtExtr, b3Solid)
|
||||||
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
-- Calcolo acciorciamento affondamento utile per evitare collisione portautensile con faccia
|
||||||
local TgA = CosB / sqrt( 1 - CosB * CosB)
|
TgA = CosB / sqrt( 1 - CosB * CosB)
|
||||||
local dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
dSubL = ( dDiamTh / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA
|
||||||
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
-- Per fori molto inclinati ( < 30 gradi) si usa la testa della macchina per l'accorciamento. Fast esclusa
|
||||||
if BD.C_SIMM and CosB > 0.866 then
|
if BD.C_SIMM and CosB > 0.866 then
|
||||||
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
dSubL = ( 190 / 2 + ( Proc.Diam - dToolDiam) / 2 + 4) * TgA - 116
|
||||||
end
|
end
|
||||||
local dMaxDepthOri = dMaxDepth
|
dMaxDepthOri = dMaxDepth
|
||||||
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
dMaxDepth = min( dMaxDepth, max( dToolFreeLen - dSubL, 0))
|
||||||
-- Verifico inclinazione foro nei limiti
|
-- Verifico inclinazione foro nei limiti
|
||||||
local bTryDrill = EgtIf( dMaxDepth > 0, ( CosB < BD.DRILL_VX_MAX), false)
|
local bTryDrill = EgtIf( dMaxDepth > 0, ( CosB < BD.DRILL_VX_MAX), false)
|
||||||
@@ -578,6 +597,8 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
|
|||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if bDrillAngTrasm then
|
if bDrillAngTrasm then
|
||||||
nSCC = MCH_SCC.ADIR_NEAR
|
nSCC = MCH_SCC.ADIR_NEAR
|
||||||
|
elseif BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
elseif not BD.C_SIMM and not BD.TURN then
|
elseif not BD.C_SIMM and not BD.TURN then
|
||||||
nSCC = MCH_SCC.ADIR_YM
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
if AreSameVectorApprox( vtExtr, Z_AX()) then
|
if AreSameVectorApprox( vtExtr, Z_AX()) then
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ local ProcessDtMortise = {}
|
|||||||
require( 'EgtBase')
|
require( 'EgtBase')
|
||||||
local BL = require( 'BeamLib')
|
local BL = require( 'BeamLib')
|
||||||
local Cut = require( 'ProcessCut')
|
local Cut = require( 'ProcessCut')
|
||||||
|
local Probe = require( 'ProcessProbing')
|
||||||
|
|
||||||
EgtOutLog( ' ProcessDtMortise started', 1)
|
EgtOutLog( ' ProcessDtMortise started', 1)
|
||||||
|
|
||||||
@@ -111,9 +112,6 @@ local function CalcTopPath( nProcId, AuxId, nAddGrpId, dAltMort, dSideAng, b3Sol
|
|||||||
EgtAddCurveCompoLineTg( NewAuxId, 100, false)
|
EgtAddCurveCompoLineTg( NewAuxId, 100, false)
|
||||||
EgtAddCurveCompoLineTg( NewAuxId, 100, true)
|
EgtAddCurveCompoLineTg( NewAuxId, 100, true)
|
||||||
EgtMergeCurvesInCurveCompo( NewAuxId)
|
EgtMergeCurvesInCurveCompo( NewAuxId)
|
||||||
-- eseguo traslazione e offset per portarla sul top
|
|
||||||
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dAltMort - 10 * GEO.EPS_SMALL)
|
|
||||||
EgtMove( NewAuxId, vtMove, GDB_RT.GLOB)
|
|
||||||
local dOffset = dAltMort * tan( dSideAng)
|
local dOffset = dAltMort * tan( dSideAng)
|
||||||
if not EgtOffsetCurve( NewAuxId, dOffset) then return end
|
if not EgtOffsetCurve( NewAuxId, dOffset) then return end
|
||||||
-- la limito entro la trave
|
-- la limito entro la trave
|
||||||
@@ -121,6 +119,9 @@ local function CalcTopPath( nProcId, AuxId, nAddGrpId, dAltMort, dSideAng, b3Sol
|
|||||||
local vtBoxDiag = b3Solid:getMax() - b3Solid:getMin()
|
local vtBoxDiag = b3Solid:getMax() - b3Solid:getMin()
|
||||||
local nCount
|
local nCount
|
||||||
NewAuxId, nCount = EgtTrimFlatCurveWithBox( NewAuxId, refBox, vtBoxDiag, true, true, GDB_RT.GLOB)
|
NewAuxId, nCount = EgtTrimFlatCurveWithBox( NewAuxId, refBox, vtBoxDiag, true, true, GDB_RT.GLOB)
|
||||||
|
-- eseguo traslazione e offset per portarla sul top
|
||||||
|
local vtMove = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) * ( dAltMort - 10 * GEO.EPS_SMALL)
|
||||||
|
EgtMove( NewAuxId, vtMove, GDB_RT.GLOB)
|
||||||
-- se divisa in più parti, le unisco congiungendole con segmenti
|
-- se divisa in più parti, le unisco congiungendole con segmenti
|
||||||
if nCount > 1 then
|
if nCount > 1 then
|
||||||
if EgtGetType( NewAuxId) ~= GDB_TY.CRV_COMPO then
|
if EgtGetType( NewAuxId) ~= GDB_TY.CRV_COMPO then
|
||||||
@@ -273,7 +274,9 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
local dToolDiam = 100
|
local dToolDiam = 100
|
||||||
local dMaxMat = 30
|
local dMaxMat = 30
|
||||||
local dSideAng = 0
|
local dSideAng = 0
|
||||||
|
local sHeadTool = 'H1'
|
||||||
local bCW = true
|
local bCW = true
|
||||||
|
local bMillOnAggregate = sMchExt == '_AT'
|
||||||
if EgtMdbSetCurrMachining( sMilling) then
|
if EgtMdbSetCurrMachining( sMilling) then
|
||||||
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID)
|
||||||
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then
|
||||||
@@ -281,6 +284,7 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
dToolDiam = max( dToolDiam, 10)
|
dToolDiam = max( dToolDiam, 10)
|
||||||
dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxMat
|
dMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT) or dMaxMat
|
||||||
dSideAng = EgtTdbGetCurrToolParam( MCH_TP.SIDEANG) or dSideAng
|
dSideAng = EgtTdbGetCurrToolParam( MCH_TP.SIDEANG) or dSideAng
|
||||||
|
sHeadTool = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||||
local dSpeed = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) or 0
|
local dSpeed = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) or 0
|
||||||
bCW = ( dSpeed >= 0)
|
bCW = ( dSpeed >= 0)
|
||||||
end
|
end
|
||||||
@@ -291,6 +295,11 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
EgtOutLog( sErr)
|
EgtOutLog( sErr)
|
||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- tastatura se richiesta
|
||||||
|
local Info = { vtProbe = vtExtr, ptProbe = ptBC, sType = 'DTMortise', sHead = sHeadTool}
|
||||||
|
local bProbeExecuted, sErr = Probe.Make( Proc, nPartId, Info)
|
||||||
|
|
||||||
-- se con tasca, la lavoro (mai in doppio)
|
-- se con tasca, la lavoro (mai in doppio)
|
||||||
if bPocket then
|
if bPocket then
|
||||||
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
-- recupero il contorno della tasca (seconda curva ausiliaria)
|
||||||
@@ -345,11 +354,20 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
end
|
end
|
||||||
-- eventuale calcolo SCC
|
-- eventuale calcolo SCC
|
||||||
local nSCC
|
local nSCC
|
||||||
if BD.TURN and not bPocket then
|
if BD.TURN then
|
||||||
if abs( vtAx:getY()) > abs( vtAx:getZ()) then
|
if not bPocket then
|
||||||
nSCC = EgtIf( vtAx:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
if abs( vtAx:getY()) > abs( vtAx:getZ()) then
|
||||||
else
|
nSCC = EgtIf( vtAx:getY() > 0, MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
|
||||||
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
else
|
||||||
|
nSCC = EgtIf( vtAx:getZ() > 0, MCH_SCC.ADIR_ZP, MCH_SCC.ADIR_ZM)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- se aggregato e rivolto verso Z-, si accede da lato aperto
|
||||||
|
elseif bMillOnAggregate and AreSameVectorApprox( vtExtr, -Z_AX()) then
|
||||||
|
if Proc.AffectedFaces.Back then
|
||||||
|
nSCC = MCH_SCC.ADIR_YP
|
||||||
|
elseif Proc.AffectedFaces.Front then
|
||||||
|
nSCC = MCH_SCC.ADIR_YM
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- flag di mirror precedente aggiornabile localmente
|
-- flag di mirror precedente aggiornabile localmente
|
||||||
@@ -512,7 +530,7 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- se necessario, imposto SCC
|
-- se necessario, imposto SCC
|
||||||
if nSCC then
|
if nSCC then
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
end
|
end
|
||||||
-- dichiaro massima elevazione e assenza sfridi per VMill
|
-- dichiaro massima elevazione e assenza sfridi per VMill
|
||||||
@@ -529,6 +547,10 @@ function ProcessDtMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- se c'è stata tastatura, si disattiva sull'ultima lavorazione
|
||||||
|
if bProbeExecuted and i == 1 then
|
||||||
|
sUserNotes = EgtSetValInNotes( sUserNotes, 'END-PROBE', true)
|
||||||
|
end
|
||||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||||
-- eseguo
|
-- eseguo
|
||||||
if not ML.ApplyMachining( true, false) then
|
if not ML.ApplyMachining( true, false) then
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ local function VerifyOrientation( Proc, vtN, b3Raw)
|
|||||||
-- se macchina Fast, pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -27deg
|
-- se macchina Fast, pezzo stretto e inclinazione laterale non eccessiva, accetto fino a -27deg
|
||||||
elseif ( not BD.C_SIMM) and abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1 then
|
elseif ( not BD.C_SIMM) and abs( vtN:getY()) < 0.5 and b3Raw:getDimY() < 150.1 then
|
||||||
return ( vtN:getZ() >= -0.454)
|
return ( vtN:getZ() >= -0.454)
|
||||||
-- altrimenti accetto fino a -21deg
|
-- altrimenti accetto fino a -23.5deg
|
||||||
else
|
else
|
||||||
return ( vtN:getZ() >= -0.359)
|
return ( vtN:getZ() >= -0.399)
|
||||||
end
|
end
|
||||||
-- se trave medio-bassa
|
-- se trave medio-bassa
|
||||||
elseif b3Raw:getDimZ() < 281 then
|
elseif b3Raw:getDimZ() < 281 then
|
||||||
@@ -70,8 +70,8 @@ local function VerifyOrientation( Proc, vtN, b3Raw)
|
|||||||
end
|
end
|
||||||
-- altrimenti
|
-- altrimenti
|
||||||
else
|
else
|
||||||
-- accetto fino a -5deg
|
-- accetto fino a -7deg
|
||||||
return ( vtN:getZ() >= -0.088)
|
return ( vtN:getZ() >= -0.122)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -471,7 +471,9 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if not BD.C_SIMM then
|
if BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
elseif not BD.C_SIMM then
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -539,7 +541,9 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if not BD.C_SIMM then
|
if BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
elseif not BD.C_SIMM then
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -695,7 +699,9 @@ local function MakeByMill( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
|
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if not BD.C_SIMM then
|
if BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
elseif not BD.C_SIMM then
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
@@ -826,7 +832,9 @@ local function MakeByPocket( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
EgtSetMachiningParam( MCH_MP.OFFSR, dExtra)
|
EgtSetMachiningParam( MCH_MP.OFFSR, dExtra)
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
local nSCC = MCH_SCC.NONE
|
local nSCC = MCH_SCC.NONE
|
||||||
if not BD.C_SIMM then
|
if BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
elseif not BD.C_SIMM then
|
||||||
if Proc.Head then
|
if Proc.Head then
|
||||||
nSCC = MCH_SCC.ADIR_XP
|
nSCC = MCH_SCC.ADIR_XP
|
||||||
elseif Proc.Tail then
|
elseif Proc.Tail then
|
||||||
|
|||||||
@@ -3478,7 +3478,7 @@ local function MakePocket( Proc, nPartId, b3Solid, ptPs, tvtN, nFaceRef, sMchFin
|
|||||||
sWarn = 'Warning on pocketing ' .. sName .. ': machining can damage next piece. Minimum distance needed : ' .. ( 1 + dDiamTool / 2) .. ' mm'
|
sWarn = 'Warning on pocketing ' .. sName .. ': machining can damage next piece. Minimum distance needed : ' .. ( 1 + dDiamTool / 2) .. ' mm'
|
||||||
EgtOutLog( sWarn)
|
EgtOutLog( sWarn)
|
||||||
end
|
end
|
||||||
if BD.TURN then
|
if BD.TURN and BD.TURN ~= 2 then
|
||||||
-- centro del pezzo
|
-- centro del pezzo
|
||||||
local ptCen = ORIG()
|
local ptCen = ORIG()
|
||||||
if b3Solid then ptCen = b3Solid:getCenter() end
|
if b3Solid then ptCen = b3Solid:getCenter() end
|
||||||
@@ -5848,10 +5848,11 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
|||||||
local sMyMchFind = 'Pocket'
|
local sMyMchFind = 'Pocket'
|
||||||
local nOk, sErr
|
local nOk, sErr
|
||||||
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
||||||
nLundIdFace = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces)
|
nLundIdFace, sErr = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces)
|
||||||
if nOk < 0 then
|
if nOk < 0 then
|
||||||
return false, sErr
|
return false, sErr
|
||||||
elseif nOk > 0 then
|
elseif nOk > 0 then
|
||||||
|
sWarn = sErr
|
||||||
bTryWithBlades = false
|
bTryWithBlades = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -6965,8 +6966,10 @@ local function MakeLongMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- superficie di fondo
|
-- superficie di fondo
|
||||||
nSurfBottomId = EgtSurfTmPlaneInBBox( nAddGrpId, ptMaxBox, vtOrtho, b3SolidExtended, GDB_ID.ROOT)
|
nSurfBottomId = EgtSurfTmPlaneInBBox( nAddGrpId, ptMaxBox, vtOrtho, b3SolidExtended, GDB_ID.ROOT)
|
||||||
-- calcolo di quanto allargare le superfici
|
-- calcolo di quanto allargare le superfici
|
||||||
local dWidth = EgtIf( Proc.AffectedFaces.Front, Proc.Box:getDimZ(), Proc.Box:getDimY())
|
if dAddLen == 0 then
|
||||||
dAddLen = min( dWidth, 100) / 2
|
local dWidth = EgtIf( Proc.AffectedFaces.Front, Proc.Box:getDimZ(), Proc.Box:getDimY())
|
||||||
|
dAddLen = min( dWidth, 100) / 2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- la divido in parti lungo X
|
-- la divido in parti lungo X
|
||||||
local vAddId = {}
|
local vAddId = {}
|
||||||
@@ -7360,7 +7363,7 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
-- se lunghezza richiede spezzatura
|
-- se lunghezza richiede spezzatura
|
||||||
if ( Proc.Box:getDimX() > BD.LONGCUT_MAXLEN) or
|
if ( Proc.Box:getDimX() > BD.LONGCUT_MAXLEN) or
|
||||||
( Proc.Box:getDimX() > 0.7 * b3Solid:getDimX() and Proc.Box:getDimX() > BD.LONGCUT_ENDLEN) or
|
( Proc.Box:getDimX() > 0.7 * b3Solid:getDimX() and Proc.Box:getDimX() > BD.LONGCUT_ENDLEN) or
|
||||||
( ( nForceUseBladeOnNotContinueFace and nForceUseBladeOnNotContinueFace > 0) and ( Proc.Box:getDimX() > BD.LEN_SHORT_PART or 1000)) then
|
( ( nForceUseBladeOnNotContinueFace and nForceUseBladeOnNotContinueFace > 0) and ( Proc.Box:getDimX() > ( BD.LEN_SHORT_PART or 1000))) then
|
||||||
-- una faccia
|
-- una faccia
|
||||||
if Proc.Fct == 1 then
|
if Proc.Fct == 1 then
|
||||||
if bUseBlade then
|
if bUseBlade then
|
||||||
@@ -7512,6 +7515,22 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
return MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, true)
|
return MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, true)
|
||||||
-- se ortogonali e non forzata lama, con fresa
|
-- se ortogonali e non forzata lama, con fresa
|
||||||
elseif not bUseBlade then
|
elseif not bUseBlade then
|
||||||
|
-- verifico se devo fare prima gli smussi
|
||||||
|
-- recupero gruppo per geometria addizionale
|
||||||
|
local nAddGrpId = BL.GetAddGroup( nPartId)
|
||||||
|
if not nAddGrpId then
|
||||||
|
local sErr = 'Error : missing AddGroup'
|
||||||
|
EgtOutLog( sErr)
|
||||||
|
return false, sErr
|
||||||
|
end
|
||||||
|
-- verifiche per smusso
|
||||||
|
local nChamfer, dDepthCham, sErrCham = EvaluateQParam( Proc)
|
||||||
|
-- se smusso da fare
|
||||||
|
if nChamfer > 0 then
|
||||||
|
local _, _, _, vtOrtho, _, nSurfInt = BL.GetTunnelDimension( Proc, nPartId)
|
||||||
|
local nOk, sErr = MakeChamfer( Proc, true, nAddGrpId, vtOrtho, b3Solid, nSurfInt, dDepthCham)
|
||||||
|
if nOk < 0 then return false, sErr end
|
||||||
|
end
|
||||||
-- se piccole
|
-- se piccole
|
||||||
if Proc.Box:getDimX() < MAX_MILL_LIN and ( Proc.Box:getDimZ() < MAX_MILL_LIN or Proc.Box:getDimY() < MAX_MILL_LIN) and bAdj and abs( dAng + 90) < 1 then
|
if Proc.Box:getDimX() < MAX_MILL_LIN and ( Proc.Box:getDimZ() < MAX_MILL_LIN or Proc.Box:getDimY() < MAX_MILL_LIN) and bAdj and abs( dAng + 90) < 1 then
|
||||||
return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHeadMill)
|
return MakeTwoFacesByMill( Proc, nPhase, nRawId, nPartId, bDownHeadMill)
|
||||||
|
|||||||
@@ -442,6 +442,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
local vWidth = {}
|
local vWidth = {}
|
||||||
_, _, vWidth[1] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[1])
|
_, _, vWidth[1] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[1])
|
||||||
_, _, vWidth[2] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[2])
|
_, _, vWidth[2] = BL.GetFaceHvRefDim( Proc.Id, tFaceLong[2])
|
||||||
|
local vElevation = { vWidth[2], vWidth[1]}
|
||||||
|
|
||||||
-- Se da sopra o ( da tutte i lati con testa da sotto) e taglio di lama e lunghezza facce maggiore del parametro lunghezza minima
|
-- Se da sopra o ( da tutte i lati con testa da sotto) e taglio di lama e lunghezza facce maggiore del parametro lunghezza minima
|
||||||
if ( bCanUseUnderBlade or bCanUseBlade) and bUseBlade and Proc.Box:getDimX() > dLimMinPiece - 1 then
|
if ( bCanUseUnderBlade or bCanUseBlade) and bUseBlade and Proc.Box:getDimX() > dLimMinPiece - 1 then
|
||||||
@@ -1311,6 +1312,9 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
if nSide == 1 or nSide == -1 then
|
if nSide == 1 or nSide == -1 then
|
||||||
local bFromYM = (( vtN[vOrd[i]]:getY() < 0 and bConvex) or ( vtN[vOrd[i]]:getY() > 0 and not bConvex))
|
local bFromYM = (( vtN[vOrd[i]]:getY() < 0 and bConvex) or ( vtN[vOrd[i]]:getY() > 0 and not bConvex))
|
||||||
nSCC = EgtIf( bFromYM, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
nSCC = EgtIf( bFromYM, MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
|
||||||
|
if BD.TURN == 2 and not bFromYM then
|
||||||
|
nSCC = EgtIf( nSide == -1, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
local bFromZM = (( vtN[vOrd[i]]:getZ() < 0 and bConvex) or ( vtN[vOrd[i]]:getZ() > 0 and not bConvex))
|
local bFromZM = (( vtN[vOrd[i]]:getZ() < 0 and bConvex) or ( vtN[vOrd[i]]:getZ() > 0 and not bConvex))
|
||||||
nSCC = EgtIf( bFromZM, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
nSCC = EgtIf( bFromZM, MCH_SCC.ADIR_ZM, MCH_SCC.ADIR_ZP)
|
||||||
@@ -1325,7 +1329,13 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
local dStep = 0
|
local dStep = 0
|
||||||
local dAgg = EgtIf( bConvex, 2 * BD.CUT_EXTRA, BD.CUT_EXTRA)
|
local dAgg = EgtIf( bConvex, 2 * BD.CUT_EXTRA, BD.CUT_EXTRA)
|
||||||
local dLargh = vWidth[vOrd[i]]
|
local dLargh = vWidth[vOrd[i]]
|
||||||
if not bSide and dLargh > 0.8 * dToolDiam then
|
-- controllo se lavorazione completa
|
||||||
|
local dMachDepth = vElevation[vOrd[i]]
|
||||||
|
if dMachDepth > dMaxDepth - 10 * GEO.EPS_ANG_SMALL then
|
||||||
|
sWarn = 'Warning : elevation bigger than max tool depth'
|
||||||
|
EgtOutLog( sWarn)
|
||||||
|
end
|
||||||
|
if not bSide and dLargh > 0.8 * dToolDiam then
|
||||||
nO = ceil( dLargh / ( 0.6 * dToolDiam))
|
nO = ceil( dLargh / ( 0.6 * dToolDiam))
|
||||||
if nO > 1 then
|
if nO > 1 then
|
||||||
dStep = dLargh / nO
|
dStep = dLargh / nO
|
||||||
@@ -1402,7 +1412,8 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
|||||||
return false, sErr
|
return false, sErr
|
||||||
end
|
end
|
||||||
local AddId = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
|
local AddId = EgtCopyGlob( Proc.Id, nAddGrpId) or GDB_ID.NULL
|
||||||
local AddProc = { Id = AddId, Grp = 0, Prc = 12, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg, PartId = Proc.PartId, bMoveAfterSplit = true}
|
local AddProc = { Id = AddId, Grp = 0, Prc = 12, Box = Proc.Box, Fct = Proc.Fct, Flg = Proc.Flg,
|
||||||
|
PartId = Proc.PartId, TaskId = Proc.TaskId, CutId = Proc.CutId, bMoveAfterSplit = true}
|
||||||
Topology.Classify( AddProc, b3Raw)
|
Topology.Classify( AddProc, b3Raw)
|
||||||
table.insert( AddedIds, AddProc)
|
table.insert( AddedIds, AddProc)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
-- ProcessSplit.lua by Egaltech s.r.l. 2025/06/20
|
||||||
|
-- Gestione tastatura
|
||||||
|
|
||||||
|
-- Tabella per definizione modulo
|
||||||
|
local ProcessProbing = {}
|
||||||
|
|
||||||
|
-- Include
|
||||||
|
require( 'EgtBase')
|
||||||
|
local BL = require( 'BeamLib')
|
||||||
|
|
||||||
|
-- Dati
|
||||||
|
local ML = require( 'MachiningLib')
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function GetProbingMachining( Machinings, sHead)
|
||||||
|
local sProbeMachining, sHeadTool
|
||||||
|
|
||||||
|
-- TODO questa associazione "testa utensile"-"testa tastatore" dovrebbe essere spostata nella macchina.
|
||||||
|
-- Non è detto che se testa utensile inizia con "H2" allora bisogna prendere lavorazione con "_H2"
|
||||||
|
|
||||||
|
-- se la testa utilizzata dalla lavorazione inizia con H2, dovrebbe essere la seconda testa
|
||||||
|
if EgtStartsWith( sHead, 'H2') then
|
||||||
|
sHeadTool = '_H2'
|
||||||
|
else
|
||||||
|
sHeadTool = '_H1'
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #Machinings do
|
||||||
|
if EgtEndsWith( Machinings[i].Name, sHeadTool) then
|
||||||
|
sProbeMachining = Machinings[i]
|
||||||
|
return sProbeMachining
|
||||||
|
end
|
||||||
|
end
|
||||||
|
sProbeMachining = Machinings[1]
|
||||||
|
return sProbeMachining
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
local function MoveProbePointToRawFaces( ptProbe, vtProbe, nPartId)
|
||||||
|
local b3BoxPart = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||||
|
-- si porta linea di tastatura su grezzo
|
||||||
|
if AreSameVectorApprox( vtProbe, Z_AX()) then
|
||||||
|
ptProbe[3] = b3BoxPart:getMax():getZ()
|
||||||
|
elseif AreSameVectorApprox( vtProbe, -Z_AX()) then
|
||||||
|
ptProbe[3] = b3BoxPart:getMin():getZ()
|
||||||
|
elseif AreSameVectorApprox( vtProbe, Y_AX()) then
|
||||||
|
ptProbe[2] = b3BoxPart:getMax():getY()
|
||||||
|
elseif AreSameVectorApprox( vtProbe, -Y_AX()) then
|
||||||
|
ptProbe[2] = b3BoxPart:getMin():getY()
|
||||||
|
end
|
||||||
|
return ptProbe
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-- Applicazione della lavorazione
|
||||||
|
function ProcessProbing.Make( Proc, nPartId, Info)
|
||||||
|
local bOk, sErr
|
||||||
|
|
||||||
|
-- per eseguire tastatura servono tutti i dati, altriemnti impossibile
|
||||||
|
if Info.vtProbe and Info.ptProbe and Info.sType then
|
||||||
|
Info.ptProbe = MoveProbePointToRawFaces( Info.ptProbe, Info.vtProbe, nPartId)
|
||||||
|
-- recupero gruppo per geometria addizionale
|
||||||
|
local nAddGrpId = BL.GetAddGroup( nPartId)
|
||||||
|
local nIdLine = EgtLinePVL( nAddGrpId, Info.ptProbe, Info.vtProbe, 10, GDB_RT.GLOB) -- TODO lunghezza da portare fuori come parametro
|
||||||
|
local Machinings = GetMachinings( MCH_MY.PROBING, Info.sType)
|
||||||
|
-- se c'è almeno una lavorazione, allora devo fare tastatura
|
||||||
|
if Machinings and #Machinings > 0 then
|
||||||
|
local sProbing = GetProbingMachining( Machinings, Info.sHead)
|
||||||
|
-- se c'è la linea e la lavorazione, applico
|
||||||
|
if sProbing and nIdLine then
|
||||||
|
local sName = 'DtMtProbe_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
|
||||||
|
local nMchFId = EgtAddMachining( sName, sProbing.Name)
|
||||||
|
-- si inverte la direzione della linea, deve essere entrante, oppostaa vettore estrusione
|
||||||
|
EgtInvertCurve( nIdLine)
|
||||||
|
-- aggiungo geometria
|
||||||
|
EgtSetMachiningGeometry( {{ nIdLine, -1}})
|
||||||
|
|
||||||
|
-- eseguo
|
||||||
|
if not ML.ApplyMachining( true, false) then
|
||||||
|
local _, sErr = EgtGetLastMachMgrError()
|
||||||
|
EgtSetOperationMode( nMchFId, false)
|
||||||
|
return false, sErr
|
||||||
|
else
|
||||||
|
bOk = true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
bOk = false
|
||||||
|
sErr = 'Error on probing'
|
||||||
|
end
|
||||||
|
-- altrimenti tastatura non richiesta, esco
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
bOk = false
|
||||||
|
sErr = 'Error on probing'
|
||||||
|
end
|
||||||
|
|
||||||
|
return bOk, sErr
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
return ProcessProbing
|
||||||
@@ -639,7 +639,13 @@ function ProcessProfCamb.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
|||||||
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
||||||
end
|
end
|
||||||
-- posizione braccio porta testa
|
-- posizione braccio porta testa
|
||||||
EgtSetMachiningParam( MCH_MP.SCC, EgtIf( bHead, MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM))
|
local nSCC = MCH_SCC.ADIR_NONE
|
||||||
|
if BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
else
|
||||||
|
nSCC = EgtIf( bHead, MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
|
||||||
|
end
|
||||||
|
EgtSetMachiningParam( MCH_MP.SCC, nSCC)
|
||||||
-- variabili per gestione direzione percorso e per gestione lavorazione di finitura opzionale
|
-- variabili per gestione direzione percorso e per gestione lavorazione di finitura opzionale
|
||||||
local ptSP, ptEp
|
local ptSP, ptEp
|
||||||
local bFinish
|
local bFinish
|
||||||
|
|||||||
@@ -239,6 +239,8 @@ function ProcessRoundArch.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
|||||||
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
||||||
nSCC = MCH_SCC.ADIR_YP
|
nSCC = MCH_SCC.ADIR_YP
|
||||||
end
|
end
|
||||||
|
elseif BD.TURN == 2 then
|
||||||
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
elseif BD.TURN then
|
elseif BD.TURN then
|
||||||
if vtN:getZ() > 0.707 then
|
if vtN:getZ() > 0.707 then
|
||||||
nSCC = MCH_SCC.ADIR_ZP
|
nSCC = MCH_SCC.ADIR_ZP
|
||||||
|
|||||||
@@ -196,27 +196,33 @@ local function ApplyDiceCut( vFaceOrd, nGoodFace1, nGoodFace4, nAddGrpId, b3Soli
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- controllo per eseguire solo un taglio ottimizzato
|
-- se non ho intersezione con la faccia tappo posso fare il taglio sul fianco
|
||||||
local bExecJustOneCut = false
|
if not nGoodFace1 or nGoodFace1 == 0 then
|
||||||
local dDiceFaceDim = GEO.INFINITO
|
-- controllo per eseguire solo un taglio ottimizzato
|
||||||
if ( i % 2) == 0 then
|
local bExecJustOneCut = false
|
||||||
for cont = 1, #vCuts[i] do
|
local dDiceFaceDim = GEO.INFINITO
|
||||||
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
if ( i % 2) == 0 then
|
||||||
-- se feature verso Z, si ammette anche lavorazione in doppio
|
for cont = 1, #vCuts[i] do
|
||||||
if AreSameVectorApprox( vtRef, Z_AX()) then
|
local _, dDiceFaceH, dDiceFaceV = BL.GetFaceHvRefDim( vCuts[i][cont], 0)
|
||||||
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
-- se feature verso Z, si ammette anche lavorazione in doppio
|
||||||
bExecJustOneCut = true
|
if AreSameVectorApprox( vtRef, Z_AX()) then
|
||||||
dDiceFaceDim = dDiceFaceH
|
if dMaxDepth * 2 > dDiceFaceH + BD.CUT_EXTRA then
|
||||||
break
|
bExecJustOneCut = true
|
||||||
end
|
dDiceFaceDim = dDiceFaceH
|
||||||
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
break
|
||||||
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
end
|
||||||
bExecJustOneCut = true
|
elseif AreSameVectorApprox( vtRef, Y_AX()) or AreSameVectorApprox( vtRef, -Y_AX()) then
|
||||||
dDiceFaceDim = dDiceFaceV
|
if dMaxDepth > dDiceFaceV + BD.CUT_EXTRA then
|
||||||
break
|
bExecJustOneCut = true
|
||||||
|
dDiceFaceDim = dDiceFaceV
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- se c'è intersezione non ci deve essere ExtraCut
|
||||||
|
else
|
||||||
|
dExtraCut = 0
|
||||||
end
|
end
|
||||||
-- se si può fare, faccio unico taglio parallelo
|
-- se si può fare, faccio unico taglio parallelo
|
||||||
if bExecJustOneCut then
|
if bExecJustOneCut then
|
||||||
@@ -522,10 +528,20 @@ function ProcessScarfJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmTa
|
|||||||
else
|
else
|
||||||
dDiamMax = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
dDiamMax = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
||||||
end
|
end
|
||||||
-- determino la distanza tra le due facce inclinate
|
-- determino la distanza tra le due facce inclinate per determinare elevazione
|
||||||
local dDistFaces
|
local dDistFaces
|
||||||
if vFaceOrd[4] ~= 0 then
|
if vFaceOrd[4] ~= 0 then
|
||||||
dDistFaces = abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]])
|
local nElevationFace1 = 0
|
||||||
|
-- controllo estensione faccia 1
|
||||||
|
if vFaceOrd[1] ~= 0 then
|
||||||
|
frMor, dL, dW = EgtSurfTmFacetMinAreaRectangle( Proc.Id, vFaceOrd[1]-1, GDB_ID.ROOT)
|
||||||
|
if abs(vtRef:getY()) > 0.866 then
|
||||||
|
nElevationFace1 = EgtIf( abs( frMor:getVersX():getZ()) < abs( frMor:getVersY():getY()), dL, dW)
|
||||||
|
else
|
||||||
|
nElevationFace1 = EgtIf( abs( frMor:getVersX():getY()) < abs( frMor:getVersY():getY()), dL, dW)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
dDistFaces = max( abs((ptC[vFaceOrd[2]]-ptC[vFaceOrd[4]])*vtN[vFaceOrd[2]]), nElevationFace1)
|
||||||
end
|
end
|
||||||
-- recupero la lavorazione. considerando l dimensione del lato e l'affondamento
|
-- recupero la lavorazione. considerando l dimensione del lato e l'affondamento
|
||||||
local sPocketing
|
local sPocketing
|
||||||
|
|||||||
@@ -374,7 +374,7 @@ local function MakeStandardCuts( Proc, b3Raw, nCuts, dOffsetBetweenCuts, TailCut
|
|||||||
local dCutExtra = 0
|
local dCutExtra = 0
|
||||||
local dAccStart = 0
|
local dAccStart = 0
|
||||||
local dAccEnd = 0
|
local dAccEnd = 0
|
||||||
if TailCutType.bBigSectionCut and BD.C_SIMM then
|
if TailCutType.bBigSectionCut and BD.C_SIMM and b3Raw:getDimZ() > BD.MIN_DIM_HBEAM + 10 * GEO.EPS_SMALL then
|
||||||
-- qui arrivano sezioni molto grandi su macchine tipo PF con materiale da asportare inferiore allo spessore lama
|
-- qui arrivano sezioni molto grandi su macchine tipo PF con materiale da asportare inferiore allo spessore lama
|
||||||
local dSawRad = Cutting1Data.dSawDiam / 2
|
local dSawRad = Cutting1Data.dSawDiam / 2
|
||||||
dCutExtra = - ( b3Raw:getDimY() - dSawRad)
|
dCutExtra = - ( b3Raw:getDimY() - dSawRad)
|
||||||
|
|||||||
@@ -132,7 +132,12 @@ local function MakePocket( Proc, nPartId, ptPs, vtN, nFaceRef, nDiffWidth, sMchF
|
|||||||
-- calcolo il diametro utensile
|
-- calcolo il diametro utensile
|
||||||
local dDiamTool
|
local dDiamTool
|
||||||
if nUseRoughTool == 1 then
|
if nUseRoughTool == 1 then
|
||||||
dDiamTool = max( 80, min( tBHx[nFaceRef][1], tBHx[nFaceRef][2]))
|
-- se feature passante prendo utensile più grande possibile
|
||||||
|
if ( Proc.AffectedFaces.Top and Proc.AffectedFaces.Bottom) or ( Proc.AffectedFaces.Front and Proc.AffectedFaces.Back) then
|
||||||
|
dDiamTool = nil
|
||||||
|
else
|
||||||
|
dDiamTool = max( 80, min( tBHx[nFaceRef][1], tBHx[nFaceRef][2]))
|
||||||
|
end
|
||||||
else
|
else
|
||||||
-- se non uso truciolatore prendo il valore dalle dimensioni minime delle facce
|
-- se non uso truciolatore prendo il valore dalle dimensioni minime delle facce
|
||||||
dDiamTool = min( tBHx[nFaceRef][1], tBHx[nFaceRef][2])
|
dDiamTool = min( tBHx[nFaceRef][1], tBHx[nFaceRef][2])
|
||||||
@@ -283,8 +288,8 @@ local function MachineByMill( Proc, nPhase, nRawId, nPartId, b3Solid, ptC, vtN,
|
|||||||
-- setto a 0 eventuali offset
|
-- setto a 0 eventuali offset
|
||||||
EgtSetMachiningParam( MCH_MP.OFFSR, 0)
|
EgtSetMachiningParam( MCH_MP.OFFSR, 0)
|
||||||
-- applico gli allungamenti o accorciamenti considerando che la lavorazione è invertita
|
-- applico gli allungamenti o accorciamenti considerando che la lavorazione è invertita
|
||||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, dTDiam / 2, - dTDiam / 2))
|
EgtSetMachiningParam( MCH_MP.STARTADDLEN, EgtIf( bOpenStart, dTDiam / 2 + 10, - dTDiam / 2))
|
||||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, dTDiam / 2, - dTDiam / 2))
|
EgtSetMachiningParam( MCH_MP.ENDADDLEN, EgtIf( bOpenEnd, dTDiam / 2 + 10, - dTDiam / 2))
|
||||||
-- attacchi e uscite lineari con parte tg nulla
|
-- attacchi e uscite lineari con parte tg nulla
|
||||||
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR)
|
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MCH_MILL_LI.LINEAR)
|
||||||
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
EgtSetMachiningParam( MCH_MP.LITANG, 0)
|
||||||
|
|||||||
@@ -1,5 +1,33 @@
|
|||||||
==== Beam Update Log ====
|
==== Beam Update Log ====
|
||||||
|
|
||||||
|
Versione 2.7f3 (19/06/2025)
|
||||||
|
- Modifx : in StepJointNotch corretta distanza attacco in/out
|
||||||
|
|
||||||
|
Versione 2.7f2 (18/06/2025)
|
||||||
|
- Modif : in LongDoubleCut aggiunto messaggio feature non completa se utensile non arriva sul fondo
|
||||||
|
- Modif : in StepJointNotch, se si forza truciolatore, si prende utensile più grande
|
||||||
|
- Fixed : in LapJoint, piccola correzione calcolo sovrapposizione trimesh per smuotatura
|
||||||
|
- Fixed : in LapJoint, per sovrapposizione in spezzatura, corretto caso tipo Tunnel
|
||||||
|
|
||||||
|
Versione 2.7f1 (03/06/2025)
|
||||||
|
- Modif : in tenone coda di rondine modificato angolo limite tenone per lavorazione in sottosquadro
|
||||||
|
- Modif : migliorie per lavorazioni su aggregato
|
||||||
|
|
||||||
|
Versione 2.7e2 (23/05/2025)
|
||||||
|
- Modif : in tagli di lama migliorie alla scelta del lato da lavorare
|
||||||
|
- Modif : in mortasa coda di rondine migliorati i percorsi
|
||||||
|
- Modif : in tenone coda di rondine migliorate le lavorazioni da sotto
|
||||||
|
- Fixed : in Scarf Joint correzione alla scelta faccia da lavorare
|
||||||
|
|
||||||
|
Versione 2.7e1 (05/05/2025)
|
||||||
|
- Fixed : in taglio di separazione si riduce percorso di taglio solo se il pezzo è effettivamente alto
|
||||||
|
- Fixed : in foratura corretto caso in cui non si sceglieva l'utensile più lungo disponibile
|
||||||
|
- Fixed : In BatchProcess (Ts7) corretta generazione in caso di progetto senza ricalcolo
|
||||||
|
- Modif : in LapJoint se tunnel verticale lavorato solo da sopra e l'utensile non arriva, si restituisce warning
|
||||||
|
|
||||||
|
Versione 2.7d3 (22/04/2025)
|
||||||
|
- Fixed : in LapJoint corretta gestione errata Q04
|
||||||
|
|
||||||
Versione 2.7d2 (17/04/2025)
|
Versione 2.7d2 (17/04/2025)
|
||||||
- Added : in scanalatura aggiunta Q03 per forzare fresa
|
- Added : in scanalatura aggiunta Q03 per forzare fresa
|
||||||
- Modif : in slot con lama + sega a catena abilitata lavorazione da sotto per macchine con testa sopra
|
- Modif : in slot con lama + sega a catena abilitata lavorazione da sotto per macchine con testa sopra
|
||||||
|
|||||||
+1
-1
@@ -2,5 +2,5 @@
|
|||||||
-- Gestione della versione di Beam
|
-- Gestione della versione di Beam
|
||||||
|
|
||||||
NAME = 'Beam'
|
NAME = 'Beam'
|
||||||
VERSION = '2.7d2'
|
VERSION = '2.7f3'
|
||||||
MIN_EXE = '2.6e5'
|
MIN_EXE = '2.6e5'
|
||||||
|
|||||||
Reference in New Issue
Block a user