Compare commits
21 Commits
2.6g2
...
Ticket#1964
| Author | SHA1 | Date | |
|---|---|---|---|
| 5047d5b652 | |||
| 7f9b880ff7 | |||
| 7e457a22b0 | |||
| 3c080e2b1a | |||
| 9d3edbfb54 | |||
| adf465c5e2 | |||
| 23f695fd56 | |||
| 52f347def1 | |||
| 028688b88a | |||
| cde5b137ae | |||
| d0cf5887d3 | |||
| afc4c6aaff | |||
| caa1875309 | |||
| 2e2c2188ce | |||
| 0acd75bece | |||
| db691cefe4 | |||
| d0ecd175c2 | |||
| 7e6d4189ef | |||
| abbc200504 | |||
| 9e4597b739 | |||
| d84d146701 |
+1
-1
@@ -461,7 +461,7 @@ else
|
||||
-- Passo in modalità lavora
|
||||
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
||||
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
||||
if bToRecalc then
|
||||
if bToRecalc or BEAM.FLAG == 3 or BEAM.FLAG == 4 then
|
||||
EgtOutLog( ' +++ Recalculating all dispositions and machinings >>>')
|
||||
EgtImportSetup()
|
||||
EgtApplyAllMachinings()
|
||||
|
||||
+1
-1
@@ -562,7 +562,7 @@ else
|
||||
-- Passo in modalità lavora
|
||||
EgtSetCurrMachGroup( EgtGetLastMachGroup())
|
||||
-- Se necessario eseguo aggiornamento con setup corrente e ricalcolo delle lavorazioni
|
||||
if bToRecalc then
|
||||
if bToRecalc or BEAM.FLAG == 3 or BEAM.FLAG == 4 then
|
||||
EgtOutLog( ' +++ Recalculating all dispositions and machinings >>>')
|
||||
EgtImportSetup()
|
||||
EgtApplyAllMachinings()
|
||||
|
||||
+34
-9
@@ -1275,6 +1275,7 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
||||
local bOk = true
|
||||
local sErr = ''
|
||||
local nNewPhase = -1
|
||||
local AddedIds
|
||||
EgtOutLog( ' * Process ' .. tostring( Proc.Id) .. ' *', 1)
|
||||
-- se intestatura ( 1-340-X )
|
||||
if Hcut.Identify( Proc) then
|
||||
@@ -1300,7 +1301,7 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
||||
elseif Long2Cut.Identify( Proc) then
|
||||
-- se due facce longitudinali, eseguo doppio taglio longitudinale
|
||||
if Long2Cut.GetLongFacesCount( Proc) == 2 then
|
||||
bOk, sErr = Long2Cut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
bOk, sErr, _, AddedIds = Long2Cut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
-- altrimenti eseguo singolo taglio longitudinale
|
||||
else
|
||||
bOk, sErr = LongCut.Make( Proc, nPhase, nRawId, nPartId)
|
||||
@@ -1318,7 +1319,7 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
||||
-- o se rivestimento ( 3/4-034-X) o se mezzolegno chalet ( 4-037-X) o se tasca ( 4-039-X) o se taglio triangolato ( 4-120-X)
|
||||
elseif LapJoint.Identify( Proc) then
|
||||
-- esecuzione mezzo-legno o scanalatura
|
||||
bOk, sErr = LapJoint.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
||||
bOk, sErr, _, AddedIds = LapJoint.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH)
|
||||
-- se smusso ( 3/4-036-X)
|
||||
elseif Chamfer.Identify( Proc) then
|
||||
-- esecuzione smusso
|
||||
@@ -1423,7 +1424,7 @@ local function AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bN
|
||||
EgtOutLog( sErr)
|
||||
bOk = false
|
||||
end
|
||||
return bOk, sErr, ( nNewPhase or -1)
|
||||
return bOk, sErr, ( nNewPhase or -1), AddedIds
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -2096,7 +2097,8 @@ function BeamExec.ProcessFeatures()
|
||||
-- flag feature precedente in doppio
|
||||
local nPrevDouble = 0
|
||||
-- inserisco le lavorazioni da lavorare ribaltate
|
||||
for i = 1, #vProc do
|
||||
local i = 1
|
||||
while i <= #vProc do
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.Flg ~= 0 and Proc.Down then
|
||||
@@ -2107,7 +2109,13 @@ function BeamExec.ProcessFeatures()
|
||||
Proc.DistanceToNextPart = BL.GetDistanceToNextPart( nRawId, nPhase)
|
||||
Proc.PrevDouble = nPrevDouble
|
||||
nPrevDouble = Proc.Double
|
||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bNeedHCut, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||
local bOk, sMsg, nNewPhase, AddedIds = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, bNeedHCut, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||
-- lavorazioni da fare dopo separazione
|
||||
if AddedIds and #AddedIds > 0 then
|
||||
for j = 1, #AddedIds do
|
||||
table.insert( vProc, AddedIds[j])
|
||||
end
|
||||
end
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-2, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||
@@ -2137,6 +2145,7 @@ function BeamExec.ProcessFeatures()
|
||||
EgtSetInfo( nDispId, 'ROT', -2)
|
||||
end
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
-- se separazione non ancora effettuata, aggiungo nuova fase con le travi in posizione standard
|
||||
if not bSplitRot then
|
||||
@@ -2178,7 +2187,8 @@ function BeamExec.ProcessFeatures()
|
||||
local nPrevDouble = 0
|
||||
-- inserisco le lavorazioni da lavorare ruotate
|
||||
local nSideMchOk = 0
|
||||
for i = 1, #vProc do
|
||||
local i = 1
|
||||
while i <= #vProc do
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.Flg ~= 0 and Proc.Side then
|
||||
@@ -2189,7 +2199,13 @@ function BeamExec.ProcessFeatures()
|
||||
Proc.DistanceToNextPart = BL.GetDistanceToNextPart( nRawId, nPhase)
|
||||
Proc.PrevDouble = nPrevDouble
|
||||
nPrevDouble = Proc.Double
|
||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, bPreMove, vtMove, dCurrOvmT)
|
||||
local bOk, sMsg, nNewPhase, AddedIds = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, bPreMove, vtMove, dCurrOvmT)
|
||||
-- lavorazioni da fare dopo separazione
|
||||
if AddedIds and #AddedIds > 0 then
|
||||
for j = 1, #AddedIds do
|
||||
table.insert( vProc, AddedIds[j])
|
||||
end
|
||||
end
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=-1, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||
@@ -2222,6 +2238,7 @@ function BeamExec.ProcessFeatures()
|
||||
EgtSetInfo( nDispId, 'ROT', -1)
|
||||
end
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
-- se non sono state inserite lavorazioni di fianco, elimino la fase perchè inutile e dannosa
|
||||
if nSideMchOk == 0 then
|
||||
@@ -2248,7 +2265,8 @@ function BeamExec.ProcessFeatures()
|
||||
-- flag feature precedente in doppio
|
||||
local nPrevDouble = 0
|
||||
-- inserisco le lavorazioni non ribaltate della trave
|
||||
for i = 1, #vProc do
|
||||
local i = 1
|
||||
while i <= #vProc do
|
||||
-- creo la lavorazione
|
||||
local Proc = vProc[i]
|
||||
if Proc.Flg ~= 0 and ( not ( Proc.Down or Proc.Side) or BD.DOWN_HEAD or BD.TURN) then
|
||||
@@ -2259,7 +2277,13 @@ function BeamExec.ProcessFeatures()
|
||||
Proc.DistanceToNextPart = BL.GetDistanceToNextPart( nRawId, nPhase)
|
||||
Proc.PrevDouble = nPrevDouble
|
||||
nPrevDouble = Proc.Double
|
||||
local bOk, sMsg, nNewPhase = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||
local bOk, sMsg, nNewPhase, AddedIds = AddFeatureMachining( Proc, nPhase, nRawId, nPartId, dCurrOvmH, false, b3Raw, nOrd, sDownOrSideOrStd, nil, nil, dCurrOvmT)
|
||||
-- lavorazioni da fare dopo separazione
|
||||
if AddedIds and #AddedIds > 0 then
|
||||
for j = 1, #AddedIds do
|
||||
table.insert( vProc, AddedIds[j])
|
||||
end
|
||||
end
|
||||
if not bOk then
|
||||
nTotErr = nTotErr + 1
|
||||
table.insert( Stats, {Err=1, Msg=sMsg, Rot=0, CutId=Proc.CutId, TaskId=Proc.TaskId})
|
||||
@@ -2287,6 +2311,7 @@ function BeamExec.ProcessFeatures()
|
||||
EgtSetInfo( nDispId, 'ORD', nOrd)
|
||||
end
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
EgtOutLog( ' *** End AddMachinings ***', 1)
|
||||
-- passo al grezzo successivo
|
||||
|
||||
+8
-1
@@ -734,7 +734,9 @@ end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function BeamLib.GetNzLimDownUp( b3Raw, vtN, vtOrtho)
|
||||
if BD.C_SIMM then
|
||||
if BD.GetNzLimDownUp then
|
||||
return BD.GetNzLimDownUp( b3Raw, vtN, vtOrtho)
|
||||
elseif BD.C_SIMM then
|
||||
return -0.484
|
||||
elseif BD.TURN then
|
||||
return -2
|
||||
@@ -1186,6 +1188,11 @@ end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function BeamLib.GetFacetsInfo( Proc, b3Raw)
|
||||
|
||||
if Proc.Fct > 20 then
|
||||
return nil
|
||||
end
|
||||
|
||||
local Face = {}
|
||||
local b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( Proc.PartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD)
|
||||
local vAdj
|
||||
|
||||
+10
-2
@@ -542,7 +542,11 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
||||
local dVzLimDwnUp = dNzLimDwnUp
|
||||
if j ~= 1 then
|
||||
vtNewOrthoO = -vtOrthoO
|
||||
if not BD.C_SIMM and not BD.TURN and abs( vtN:getY()) > 0.05 then dVzLimDwnUp = -0.708 end
|
||||
if BD.GetNzLimDownUp then
|
||||
dVzLimDwnUp = BD.GetNzLimDownUp( b3Raw, vtN, V_NULL(), true)
|
||||
elseif not BD.C_SIMM and not BD.TURN and abs( vtN:getY()) > 0.05 then
|
||||
dVzLimDwnUp = -0.708
|
||||
end
|
||||
end
|
||||
local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtNewOrthoO, dVzLimDwnUp, BD.CUT_EXTRA, BD.CUT_SIC, 0, 0, 0, nil, b3Raw)
|
||||
if not bOk then return bOk, sErr end
|
||||
@@ -566,7 +570,11 @@ local function MakeFromTop( sCutting, Proc, nPhase, nRawId, nPartId, dOvmHead, b
|
||||
end
|
||||
end
|
||||
local dVzLimDwnUp = dNzLimDwnUp
|
||||
if not BD.C_SIMM and not BD.TURN and vtN:getZ() > 0.707 then dVzLimDwnUp = -0.708 end
|
||||
if BD.GetNzLimDownUp then
|
||||
dVzLimDwnUp = BD.GetNzLimDownUp( b3Raw, vtN, V_NULL(), true)
|
||||
elseif not BD.C_SIMM and not BD.TURN and vtN:getZ() > 0.707 then
|
||||
dVzLimDwnUp = -0.708
|
||||
end
|
||||
local bOk, sErr = Fbs.MakeOne( vCuts[i][j], 0, sCutting, dSawDiam, vtOrthoO, dVzLimDwnUp, dExtraCut, BD.CUT_SIC, 0, 0, 0, sNotes, b3Raw)
|
||||
if not bOk then return bOk, sErr end
|
||||
end
|
||||
|
||||
+90
-54
@@ -141,6 +141,9 @@ local Q_SIDE_ROUGH_TOOL = '' -- i
|
||||
local Q_ANTISPLINT_TYPE = '' -- i
|
||||
local Q_BLADE_ON_ALONG_FACE = '' -- i
|
||||
local Q_MAX_ELEVATION = '' -- d
|
||||
local Q_SAW_PLUS_CHAIN = '' -- i
|
||||
local Q_FORCE_CHAINSAW = '' -- i
|
||||
|
||||
|
||||
-- variabile smussi
|
||||
local bMadeChamfer
|
||||
@@ -182,6 +185,7 @@ local function AssignQIdent( Proc)
|
||||
Q_MAX_ELEVATION = 'Q10'
|
||||
Q_STAIRCASE = ''
|
||||
Q_SAW_PLUS_CHAIN = 'Q11'
|
||||
Q_FORCE_CHAINSAW = 'Q12'
|
||||
|
||||
if ( Proc.Grp == 3 or Proc.Grp == 4) and Proc.Prc == 16 then
|
||||
Q_FORCE_BLADE = 'Q01' -- i
|
||||
@@ -5106,22 +5110,29 @@ function SawPlusChain.ApplyMachining( Machining, b3Raw)
|
||||
local nErr
|
||||
nErr, sErr = EgtGetLastMachMgrError()
|
||||
-- se mortasatura e l'errore è compatibile (Axes values not calculable) si prova con l'altra configurazione dell'asse bloccato
|
||||
-- TODO valutare se c'è modo di capire preventivamente la configurazione dell'asse bloccato e quindi rimuovere questa parte di codice
|
||||
if Machining.Type == MCH_OY.MORTISING and nErr == 2507 then
|
||||
if Machining.BlockedAxis.Orientation == 'perpendicular' then
|
||||
Machining.BlockedAxis.Orientation = 'parallel'
|
||||
else
|
||||
Machining.BlockedAxis.Orientation = 'perpendicular'
|
||||
if Machining.Type == MCH_OY.MORTISING then
|
||||
-- se errore "Axes values not calculable" si prova con l'altra configurazione dell'asse bloccato
|
||||
if nErr == 2507 then
|
||||
if Machining.BlockedAxis.Orientation == 'perpendicular' then
|
||||
Machining.BlockedAxis.Orientation = 'parallel'
|
||||
else
|
||||
Machining.BlockedAxis.Orientation = 'perpendicular'
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.BlockedAxis.VtN, Machining.BlockedAxis.VtOut))
|
||||
if Machining.SuggestedAngles.Index == 1 then
|
||||
Machining.SuggestedAngles.Index = 2
|
||||
else
|
||||
Machining.SuggestedAngles.Index = 1
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( Machining.SuggestedAngles.VtN, Machining.SuggestedAngles.VtOrtho, Machining.SuggestedAngles.Index))
|
||||
sErr = ''
|
||||
bIsApplyOk = ML.ApplyMachining( true, false)
|
||||
-- se errore "Outstroke" e permesso ToolInvert provo ad invertire il lato di lavorazione
|
||||
elseif Machining.AllowToolInvert and nErr == 2508 then
|
||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, not Machining.ToolInvert)
|
||||
sErr = ''
|
||||
bIsApplyOk = ML.ApplyMachining( true, false)
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BL.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.BlockedAxis.VtN, Machining.BlockedAxis.VtOut))
|
||||
if Machining.SuggestedAngles.Index == 1 then
|
||||
Machining.SuggestedAngles.Index = 2
|
||||
else
|
||||
Machining.SuggestedAngles.Index = 1
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BL.GetChainSawInitAngs( Machining.SuggestedAngles.VtN, Machining.SuggestedAngles.VtOrtho, Machining.SuggestedAngles.Index))
|
||||
sErr = ''
|
||||
bIsApplyOk = ML.ApplyMachining( true, false)
|
||||
end
|
||||
if not bIsApplyOk then
|
||||
nErr, sErr = EgtGetLastMachMgrError()
|
||||
@@ -5178,18 +5189,16 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
|
||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - saw blade not found'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
return Cutting
|
||||
end
|
||||
Cutting.Type = MCH_OY.MILLING
|
||||
Cutting.Tool = SawPlusChain.GetToolFromMachining( Cutting.Name)
|
||||
|
||||
-- verifica dimensioni tasca compatibili
|
||||
-- verifica dimensioni tasca e direzione compatibili
|
||||
-- se tasca meno spessa della lama la strategia non è applicabile
|
||||
if Cutting.Tool.Thickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - pocket too narrow for saw blade thickness'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
return Cutting
|
||||
end
|
||||
if #( Proc.MainFaces.SideFaces) > 1 then
|
||||
-- se tasca più stretta della lama la strategia non è applicabile
|
||||
@@ -5197,9 +5206,13 @@ function SawPlusChain.Saw.CalculateMachiningParameters( Proc, FaceToMachine, Edg
|
||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - pocket too narrow for saw blade diameter'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
return Cutting
|
||||
end
|
||||
end
|
||||
if EdgeToMachine.ToolDirection:getZ() < BD.NZ_MINA then
|
||||
Cutting.CanApply = false
|
||||
Cutting.Message = 'Feature '.. Proc.FeatureId .. ' : skipped sawblade from bottom'
|
||||
EgtOutLog( Cutting.Message)
|
||||
end
|
||||
|
||||
-- parametri della lavorazione
|
||||
-- inizio e fine aperti o chiusi
|
||||
@@ -5330,6 +5343,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine
|
||||
Mortising.CanApply = true
|
||||
Mortising.Message = ''
|
||||
Mortising.ProcId = Proc.Id
|
||||
Mortising.AllowToolInvert = false
|
||||
local bNeedToMachineOtherSide = false
|
||||
local dTestCornerRadius = 43
|
||||
-- OneSide | OneSideAndExtend | BothSides | BothSidesAndExtend
|
||||
@@ -5373,18 +5387,21 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine
|
||||
Mortising.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - chainsaw not found'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
return Mortising
|
||||
end
|
||||
Mortising.Type = MCH_OY.MORTISING
|
||||
Mortising.Tool = SawPlusChain.GetToolFromMachining( Mortising.Name)
|
||||
|
||||
-- in caso di tunnel da un lato permetto eventuale inversione lato di lavoro in caso di errori di applicazione (es: Outstroke)
|
||||
if Proc.Topology == 'Tunnel' and sMortisingType == 'OneSide' or sMortisingType == 'OneSideAndExtend' then
|
||||
Mortising.AllowToolInvert = true
|
||||
end
|
||||
|
||||
-- verifica dimensioni tasca compatibili
|
||||
-- se tasca meno spessa della sega a catena la strategia non è applicabile
|
||||
if Mortising.Tool.Thickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Mortising.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - pocket too narrow for chainsaw thickness'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
return Mortising
|
||||
end
|
||||
if #( Proc.MainFaces.SideFaces) > 1 then
|
||||
-- se tasca più stretta della sega a catena la strategia non è applicabile
|
||||
@@ -5392,9 +5409,13 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine
|
||||
Mortising.Message = 'Feature '.. Proc.FeatureId .. ' : strategy ' .. SawPlusChain.Name .. ' not applicable - pocket too narrow for chainsaw width'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
return Mortising
|
||||
end
|
||||
end
|
||||
if EdgeToMachine.ToolDirection:getZ() < - 10 * GEO.EPS_ANG_SMALL then
|
||||
Mortising.CanApply = false
|
||||
Mortising.Message = 'Feature '.. Proc.FeatureId .. ' : skipped chainsaw from bottom'
|
||||
EgtOutLog( Mortising.Message)
|
||||
end
|
||||
|
||||
-- parametri della lavorazione
|
||||
-- inizio e fine aperti o chiusi
|
||||
@@ -5458,7 +5479,7 @@ function SawPlusChain.Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine
|
||||
Mortising.SuggestedAngles = {}
|
||||
Mortising.SuggestedAngles.Index = 1
|
||||
Mortising.SuggestedAngles.VtN = FaceToMachine.VtN
|
||||
Mortising.SuggestedAngles.VtOrthO = EdgeToMachine.ToolDirection
|
||||
Mortising.SuggestedAngles.VtOrtho = EdgeToMachine.ToolDirection
|
||||
-- approccio e retrazione
|
||||
Mortising.LeadIn, Mortising.LeadOut = SawPlusChain.CalculateLeadInOut( Mortising, EdgeToMachine)
|
||||
-- eventuale step verticale
|
||||
@@ -5551,9 +5572,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
local bIsCuttingOk = false
|
||||
if Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
|
||||
end
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
end
|
||||
end
|
||||
local dBottomDepthToMachine = Cutting.RadialOffset
|
||||
-- lato opposto del tunnel
|
||||
@@ -5562,9 +5583,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsCuttingOk = false
|
||||
if Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
|
||||
end
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
end
|
||||
end
|
||||
else
|
||||
-- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
||||
@@ -5575,9 +5596,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsCuttingOk = false
|
||||
if Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
|
||||
end
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
end
|
||||
end
|
||||
end
|
||||
-- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione
|
||||
@@ -5586,9 +5607,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsCuttingOk = false
|
||||
if Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = SawPlusChain.Saw.ApplyAllSteps( Cutting, b3Raw)
|
||||
end
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
if not bIsCuttingOk then
|
||||
return bIsCuttingOk, Cutting.Message
|
||||
end
|
||||
end
|
||||
end
|
||||
-- la lama è arrivata sul fondo e tasca passante, non servono ulteriori lavorazioni
|
||||
@@ -5622,9 +5643,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsMortisingOk = false
|
||||
if Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = SawPlusChain.Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
end
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
end
|
||||
end
|
||||
else
|
||||
-- se la sega a catena non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
||||
@@ -5635,9 +5656,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsMortisingOk = false
|
||||
if Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = SawPlusChain.Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
end
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
end
|
||||
end
|
||||
end
|
||||
-- eventuale lavorazione di sega a catena - lato della tasca in cui finisce la lavorazione
|
||||
@@ -5646,9 +5667,9 @@ function SawPlusChain.Make( bOnlySaw, Proc, nRawId)
|
||||
bIsMortisingOk = false
|
||||
if Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = SawPlusChain.Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
end
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
if not bIsMortisingOk then
|
||||
return bIsMortisingOk, Mortising.Message
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -5731,17 +5752,27 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
||||
if nChamfer < 0 then
|
||||
return false, sErrCham
|
||||
end
|
||||
-- eventuale forzatura sega a catena
|
||||
local bForceChainsaw = ( EgtGetInfo( Proc.Id, Q_FORCE_CHAINSAW, 'i') or 0) > 0
|
||||
-- se è un tunnel provo a vedere se è possibile lavorarlo con la svuotatura o con la sega catena
|
||||
if bClosedOrthoFaces then
|
||||
local bTryWithBlades = true
|
||||
local dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace
|
||||
-- forzata sega a catena
|
||||
if bForceChainsaw then
|
||||
-- ottengo le dimensioni del tunnel
|
||||
dDimMin, dDimMax, dDepth, vtOrtho, nLundIdFace = BL.GetTunnelDimension( Proc, nPartId)
|
||||
-- lavoro fessura con svuotature (singola o doppia contrapposta)
|
||||
local sMyMchFind = 'Pocket'
|
||||
local nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
||||
else
|
||||
local sMyMchFind = 'Pocket'
|
||||
local nOk, sErr
|
||||
nOk, sErr, dDimMin, dDimMax, dDepth, vtOrtho,
|
||||
nLundIdFace = MakeByPockets( Proc, nPhase, nRawId, nPartId, nChamfer, dDepthCham, nAddGrpId, sMyMchFind, false, b3Solid, bClosedOrthoFaces)
|
||||
if nOk < 0 then
|
||||
return false, sErr
|
||||
elseif nOk > 0 then
|
||||
bTryWithBlades = false
|
||||
if nOk < 0 then
|
||||
return false, sErr
|
||||
elseif nOk > 0 then
|
||||
bTryWithBlades = false
|
||||
end
|
||||
end
|
||||
-- Se la svuotatura precedente non è stata fatta e chamfer non è mutuamente esclusivo provo con la sega-catena
|
||||
if bTryWithBlades and nChamfer < 2 then
|
||||
@@ -6232,6 +6263,10 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
||||
if bForceSideMill then
|
||||
sPocketing = nil
|
||||
end
|
||||
-- se forzata sega a catena
|
||||
if bForceChainsaw then
|
||||
sPocketing = nil
|
||||
end
|
||||
-- leggo parametro Q
|
||||
local nQAntisplintResult = EgtGetInfo( Proc.Id, Q_ANTISPLINT_TYPE, 'i') or 0
|
||||
-- se lavorazione fresa come lama disabilito eventuale antischeggia
|
||||
@@ -6453,8 +6488,9 @@ local function MakeMoreFaces( Proc, nPhase, nRawId, nPartId, dOvmHead, bSinglePa
|
||||
sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2)
|
||||
end
|
||||
end
|
||||
-- in tutti gli altri casi lancio la MakeByPockets (lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo)
|
||||
else
|
||||
-- in tutti gli altri casi, a meno che non sia forzata sega a catena, lancio la MakeByPockets
|
||||
-- lavorazione singola o doppia contrapposta, fondo della tasca una faccia fittizia perpendicolare al lato lungo
|
||||
elseif not bForceChainsaw then
|
||||
-- se 2 facce setto i parametri corretti per la MakeByPockets
|
||||
if bForceSideMill and Proc.Fct == 2 then
|
||||
bIs3Faces = false
|
||||
@@ -7210,13 +7246,13 @@ function ProcessLapJoint.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
|
||||
-- leggo i parametri Q per utilizzare la fresa di fianco e/o lama
|
||||
local nUseSideTool = EgtGetInfo( Proc.Id, Q_SIDE_ROUGH_TOOL, 'i') or 0
|
||||
local bUseBlade = EgtGetInfo( Proc.Id, Q_ANTISPLINT_TYPE, 'i') == 1
|
||||
local bOk, sMyWarn = Long2Cut.Make( Proc, nPhase, nRawId, nPartId, bUseBlade, nUseSideTool)
|
||||
local bOk, sMyWarn, _, AddedIds = Long2Cut.Make( Proc, nPhase, nRawId, nPartId, bUseBlade, nUseSideTool)
|
||||
-- se non sono riuscito a farlo di lama, riprovo con la fresa
|
||||
if not bOk and bUseBlade then
|
||||
bUseBlade = false
|
||||
return Long2Cut.Make( Proc, nPhase, nRawId, nPartId, bUseBlade, nUseSideTool)
|
||||
else
|
||||
return bOk, sMyWarn
|
||||
return bOk, sMyWarn, nil, AddedIds
|
||||
end
|
||||
-- prima faccia terminale
|
||||
elseif b3Fac1:getDimX() < 1 and abs( vtN2:getX()) < GEO.EPS_SMALL then
|
||||
|
||||
@@ -1391,7 +1391,7 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId, bCustUseBlade, nCus
|
||||
-- aggiungo geometria
|
||||
EgtSetMachiningGeometry( {{ Proc.Id, 0}})
|
||||
-- inverto se utensile antiorario per garantire senso di percorrenza migliore
|
||||
local bInvert = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) < 0
|
||||
local bInvert = EgtMdbGetCurrMachiningParam( MCH_MP.SPEED) > 0
|
||||
-- setto workside e eventuale inversione
|
||||
if bInvert then
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT)
|
||||
|
||||
@@ -37,6 +37,7 @@ EgtOutLog( ' ProcessLongDoubleCut started', 1)
|
||||
-- Dati
|
||||
local BD = require( 'BeamData')
|
||||
local ML = require( 'MachiningLib')
|
||||
local Topology = require( 'FeatureTopology')
|
||||
|
||||
local dLimMinPiece = BD.LEN_SHORT_PART or 1000
|
||||
|
||||
@@ -324,6 +325,9 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
local nFaceLimit, tFaceLong, ptC, vtN = IdentifyFaces( Proc)
|
||||
local dLen = Proc.Box:getDimX()
|
||||
|
||||
-- inizializzazione tabella con eventuali lavorazioni create a posteriori da ritornare al chiamante
|
||||
local AddedIds = {}
|
||||
|
||||
-- recupero lunghezza grezzo totale da info sulla macchinata
|
||||
local dBarLen = EgtGetInfo( EgtGetCurrMachGroup(), 'BARLEN', 'd')
|
||||
local dOvmHead = b3Raw:getMax():getX() - b3Solid:getMax():getX()
|
||||
@@ -945,18 +949,6 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
end
|
||||
-- altrimenti concavo
|
||||
else
|
||||
-- se effettivamente un taglio longitudinale e lama non taglia completamente, limito la lavorazione. Altrimenti esco.
|
||||
for k = 1, #vOrd do
|
||||
if vWidth[vOrd[k]] + BD.CUT_SIC > dMaxDepth then
|
||||
if not( ProcessLong2Cut.Identify( Proc)) then
|
||||
return false
|
||||
else
|
||||
local sWarn2 = 'Warning in ' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. ' : elevation (' .. EgtNumToString( vWidth[vOrd[k]], 1) .. ') bigger than max saw depth (' .. EgtNumToString( dMaxDepth, 1) .. ')'
|
||||
if not sWarn then sWarn = '' end
|
||||
sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- si percorrono i lati alto e basso della faccia
|
||||
for i = 1, nC do
|
||||
-- Posizione braccio portatesta
|
||||
@@ -986,6 +978,22 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
-- se effettivamente un taglio longitudinale e lama non taglia completamente, limito la lavorazione. Altrimenti esco.
|
||||
local dCheckDepth = 0
|
||||
if bCanUseBlade then
|
||||
dCheckDepth = dMaxDepth
|
||||
elseif bCanUseUnderBlade then
|
||||
dCheckDepth = dMaxDepthDn
|
||||
end
|
||||
if vWidth[vOrd[j]] + 100 * GEO.EPS_SMALL > dCheckDepth then
|
||||
if not( ProcessLong2Cut.Identify( Proc)) then
|
||||
return false
|
||||
else
|
||||
local sWarn2 = 'Warning in ' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. ' : elevation (' .. EgtNumToString( vWidth[vOrd[j]], 1) .. ') bigger than max saw depth (' .. EgtNumToString( dCheckDepth, 1) .. ')'
|
||||
if not sWarn then sWarn = '' end
|
||||
sWarn = EgtIf( #sWarn > 0, sWarn .. '\n' .. sWarn2, sWarn2)
|
||||
end
|
||||
end
|
||||
-- se lama da sotto verifico se la componente Y della profondità di taglio supera la capacità della lama
|
||||
if nSide <= 0 and bCanUseUnderBlade then
|
||||
if ( vWidth[vOrd[j]] / 2) > dMaxDepthDn then
|
||||
@@ -999,7 +1007,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
local dLioPerp
|
||||
|
||||
if j == 1 then -- il primo taglio lo faccio completo se angolo interno maggiore di 90
|
||||
local dMinOffsBigFace = max( vWidth[vOrd[j]] - dMaxDepth, 0)
|
||||
local dMinOffsBigFace = max( vWidth[vOrd[j]] - dCheckDepth, 0)
|
||||
-- se la faccia è più grande del massimo materiale lama, allora limito lavorazione
|
||||
if dMinOffsBigFace > 0 then
|
||||
dOffset = dMinOffsBigFace
|
||||
@@ -1011,7 +1019,7 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
end
|
||||
dLioPerp = vWidth[vOrd[j]] + BD.CUT_SIC
|
||||
else -- il secondo ridotto della distanza minima e della componente spessore della lama
|
||||
local dMinOffsBigFace = max( vWidth[vOrd[j]] - dMaxDepth, 0)
|
||||
local dMinOffsBigFace = max( vWidth[vOrd[j]] - dCheckDepth, 0)
|
||||
-- se la faccia è più grande del massimo materiale lama, allora limito lavorazione
|
||||
if dMinOffsBigFace > 0 then
|
||||
dOffset = dMinOffsBigFace
|
||||
@@ -1269,6 +1277,11 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
end
|
||||
end
|
||||
end
|
||||
if Proc.bMoveAfterSplit then
|
||||
nC = 1
|
||||
dStartDist = Proc.Box:getDimX() - ( dToolDiam / 2 + 5)
|
||||
dEndDist = - ( dToolDiam / 2 + 5)
|
||||
end
|
||||
if nIni == 2 then
|
||||
dStartDist, dEndDist = dEndDist, dStartDist
|
||||
dStartAccDist, dEndAccDist = dEndAccDist, dStartAccDist
|
||||
@@ -1380,6 +1393,19 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
end
|
||||
end
|
||||
end
|
||||
if not Proc.MoveAfterSplit and not bEndFixed and not bConvex then
|
||||
-- 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
|
||||
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}
|
||||
Topology.Classify( AddProc, b3Raw)
|
||||
table.insert( AddedIds, AddProc)
|
||||
end
|
||||
|
||||
-- altrimenti lavorazione di fianco : Long2CutSide o Long2CutDown
|
||||
else
|
||||
@@ -1822,8 +1848,8 @@ function ProcessLong2Cut.Make( Proc, nPhase, nRawId, nPartId, bForcedBladeMaster
|
||||
end
|
||||
end
|
||||
|
||||
return true, sWarn
|
||||
end
|
||||
return true, sWarn, nil, AddedIds
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
return ProcessLong2Cut
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
-- 2022/08/09 Ora se la feature ha meno di due facce viene richiamata la normale Cut.
|
||||
-- 2022/11/09 Aggiunta gestione parametro Q04 per forzare utilizzo fresa di lato e lavorare come FreeContour.
|
||||
-- 2023/02/14 Gestite le rotazioni di 90 deg nell'aggiornamento del grezzo.
|
||||
-- 2024/08/05 Se assimilabile ad un taglio (1 faccia) si considerare area non pinzabile testa/coda
|
||||
|
||||
-- Tabella per definizione modulo
|
||||
local ProcessSimpleScarf = {}
|
||||
@@ -148,7 +149,7 @@ function ProcessSimpleScarf.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, dOvmT
|
||||
-- se ci sono meno di due facce si riduce a una normale Cut
|
||||
local nFacetCnt = EgtSurfTmFacetCount( Proc.Id)
|
||||
if nFacetCnt < 2 then
|
||||
local bOk, sErr = Cut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, nil, nil, nil, nil, nil, dOvmTail)
|
||||
local bOk, sErr = Cut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, nil, nil, nil, nil, nil, dOvmTail, true)
|
||||
return bOk, sErr
|
||||
end
|
||||
-- dati delle facce
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
==== Beam Update Log ====
|
||||
|
||||
Versione 2.6g4 (2024/07/19)
|
||||
- Modif : in BatchProcess e BatchProcessNew si forza ricalcolo ogni volta che si è in situazione di CHECK o CHECK + GENERATE
|
||||
|
||||
Versione 2.6g3 (07/07/2024)
|
||||
- Added : aggiunta possibilità di funzione GetNzLimDownUp specifica per ogni macchina
|
||||
- Modif : anche nel taglio a cubetti si chiama GetNzLimDownUp di macchina, se presente, per decidere limite orientamento lama verso il basso
|
||||
- Modif : in BeamExec inserito controllo massimo numero di facce per lanciare GetFacetsInfo
|
||||
- Fixed : in LapJoint corretto typo in nome variabile che provocava mancata impostazione asse bloccato
|
||||
|
||||
Versione 2.6g2 (04/07/2024)
|
||||
- Modif : le lavorazioni BlockHaus, se vicine alla coda, vengono spostate dopo il taglio di separazione
|
||||
|
||||
+1
-1
@@ -2,5 +2,5 @@
|
||||
-- Gestione della versione di Beam
|
||||
|
||||
NAME = 'Beam'
|
||||
VERSION = '2.6g2'
|
||||
VERSION = '2.6g4'
|
||||
MIN_EXE = '2.6e2'
|
||||
|
||||
Reference in New Issue
Block a user