Merge branch 'develop' into SOLO_DEMO

This commit is contained in:
andrea.villa
2025-10-23 12:57:23 +02:00
64 changed files with 509 additions and 760 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

+18 -16
View File
@@ -69,17 +69,23 @@ local function GetStrategies_Essetre( Proc)
local Strategies = {}
---------------------------------------------------------------------
-- Feature : Cut (1-340)
-- Feature : Cut (1-10)
if ID.IsHeadCut( Proc) then
Strategies = { { sStrategyId = 'HEADCUT'}}
---------------------------------------------------------------------
-- Feature : Cut (2-350)
-- Feature : Cut (2-10)
elseif ID.IsTailCut( Proc) then
Strategies = { { sStrategyId = 'TAILCUT'}}
---------------------------------------------------------------------
-- Feature : Cut (1-10)
elseif ID.IsCut( Proc) then
Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}}
if Proc.Topology.sName == 'Cut-1-Through' or Proc.Topology.sName == 'Bevel-1-Through' then
Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}}
elseif Proc.Topology.sName == 'HeadCut' then
Strategies = { { sStrategyId = 'HEADCUT'}}
elseif Proc.Topology.sName == 'TailCut' then
Strategies = { { sStrategyId = 'TAILCUT'}}
end
---------------------------------------------------------------------
-- Feature : Longitudinal Cut (0-10)
elseif ID.IsLongitudinalCut( Proc) then
@@ -138,7 +144,7 @@ local function GetStrategies_Essetre( Proc)
---------------------------------------------------------------------
-- Feature : Birds Mouth (0-20)
elseif ID.IsBirdsMouth( Proc) then
Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0010'}}
Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}, { sStrategyId = 'STR0010'}}
---------------------------------------------------------------------
-- Feature : Hip or Valley Rafter Notch (0-25)
elseif ID.IsHipValleyRafterNotch( Proc) then
@@ -434,21 +440,17 @@ end
local function GetParameters_Essetre( Proc, sStrategyIdToGet)
local Parameters = {}
--###---###---###---###---###---###---###---###---###---###---###---###---###--
-- Feature : HeadCut (1-340)
-- Feature : HeadCut
if ID.IsHeadCut( Proc) then
-- Per Essetre non esiste il taglio di testa, quindi si leggono le variabili Q sul processing che coincide con il taglio di testa
if sStrategyIdToGet == 'HEADCUT' then
-- eventuali informazioni da recuperare sulla feature sostituita
if Proc.SlaveProcIndexes then
local idSlaveProc = PROCESSINGS[Proc.nIndexPartInParts].Rotation[Proc.nCurrentRotation][Proc.SlaveProcIndexes[1]].id
local dDepthChamfer = EgtGetInfo( idSlaveProc or GDB_ID.NULL, 'Q06', 'd') or 0
table.insert( Parameters, { sName = 'dDepthChamfer', sValue = dDepthChamfer, sType = 'd'})
local dCuttingStrategy = EgtGetInfo( idSlaveProc or GDB_ID.NULL, 'Q05', 'd') or 0
local bForceChainSaw = dCuttingStrategy > 0
table.insert( Parameters, { sName = 'bForceChainSaw', sValue = bForceChainSaw, sType = 'b'})
local bFinishWithMill = dCuttingStrategy == 2
table.insert( Parameters, { sName = 'bFinishWithMill', sValue = bFinishWithMill, sType = 'b'})
end
local dDepthChamfer = EgtGetInfo( Proc.id or GDB_ID.NULL, 'Q06', 'd') or 0
table.insert( Parameters, { sName = 'dDepthChamfer', sValue = dDepthChamfer, sType = 'd'})
local dCuttingStrategy = EgtGetInfo( Proc.id or GDB_ID.NULL, 'Q05', 'd') or 0
local bForceChainSaw = dCuttingStrategy > 0
table.insert( Parameters, { sName = 'bForceChainSaw', sValue = bForceChainSaw, sType = 'b'})
local bFinishWithMill = dCuttingStrategy == 2
table.insert( Parameters, { sName = 'bFinishWithMill', sValue = bFinishWithMill, sType = 'b'})
end
--###---###---###---###---###---###---###---###---###---###---###---###---###--
-- Feature : Cut (1-10)
+20 -48
View File
@@ -586,24 +586,6 @@ local function GetFeatureForcedStrategy( Proc)
return nil
end
-------------------------------------------------------------------------------------------------------------
local function AdjustPrcGrp( Proc, bPartInCombiIsInverted)
local nNewPrc = { nPrc = Proc.nPrc, nGrp = Proc.nGrp}
-- se pezzo invertito
if bPartInCombiIsInverted then
-- il taglio di testa diventa taglio di coda
if ID.IsHeadCut( Proc) then
_, nNewPrc.nPrc, nNewPrc.nGrp = ID.IsTailCut( Proc)
-- il taglio di coda diventa taglio di testa
elseif ID.IsTailCut( Proc) then
_, nNewPrc.nPrc, nNewPrc.nGrp = ID.IsHeadCut( Proc)
end
end
return nNewPrc.nPrc, nNewPrc.nGrp
end
-------------------------------------------------------------------------------------------------------------
local function CollectFeatures( Part, dRotIndex)
-- recupero le feature
@@ -632,8 +614,6 @@ local function CollectFeatures( Part, dRotIndex)
Proc.idFeature = EgtGetInfo( Proc.id, 'PRID', 's') or Proc.id
Proc.nGrp = nGrp
Proc.nPrc = nPrc
-- aggiorno info feature in caso di pezzo invertito
Proc.nPrc, Proc.nGrp = AdjustPrcGrp( Proc, dRotIndex > 4)
Proc.nFlg = 1
Proc.nFct = EgtSurfTmFacetCount( ProcId) or 0
Proc.idCut = EgtGetInfo( EgtGetParent( EgtGetParent( ProcId)), 'CUTID', 'i') or 0
@@ -788,25 +768,23 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
local ProcB = vProcSingleRot[j]
-- non si controlla la feature con se stessa o se feature disabilitata
if i ~= j and ProcB.nFlg ~= 0 then
-- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di testa
if ID.IsHeadCut( Proc) and ProcB.Topology.sFamily == 'Cut' and
AreSameVectorApprox( ProcB.Faces[1].vtN, X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMax():getX()) < 10 * GEO.EPS_SMALL then
if not Proc.SlaveProcIndexes then
Proc.SlaveProcIndexes = {}
end
table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i
ProcB.nFlg = 0
-- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di testa
if ID.IsHeadCut( Proc) and ( ID.IsHeadCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then
if not Proc.SlaveProcIndexes then
Proc.SlaveProcIndexes = {}
end
table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i
ProcB.nFlg = 0
end
-- verifico se il taglio può essere saltato perchè è nella stessa posizione del taglio di coda
if ID.IsTailCut( Proc) and ProcB.Topology.sFamily == 'Cut' and
AreSameVectorApprox( ProcB.Faces[1].vtN, -X_AX()) and abs( ProcB.Faces[1].ptCenter:getX() - Part.b3Part:getMin():getX()) < 10 * GEO.EPS_SMALL then
if not Proc.SlaveProcIndexes then
Proc.SlaveProcIndexes = {}
end
table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i
ProcB.nFlg = 0
-- verifico se il taglio aggiunto manualmente può essere saltato perchè nella stessa posizione c'è un altro taglio di coda
if ID.IsTailCut( Proc) and ( ID.IsTailCut( ProcB) and EgtGetInfo( ProcB.id, 'HEAD_ADD_CUT', 'i') == 1) then
if not Proc.SlaveProcIndexes then
Proc.SlaveProcIndexes = {}
end
table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i
ProcB.nFlg = 0
end
-- verifico se feature tipo LapJoint è attraversata da almeno un foro
if ( Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Groove' or ID.IsMortise( Proc)) and
@@ -947,10 +925,10 @@ local function CalculateStrategies( vProcSingleRot, Part)
-- si leggono allora eventuali parametri di default scritti come info sulla feature
if Proc.AvailableStrategies.bIsBasicStrategy then
-- si recuperano eventuali parametri custom
for i = 1, #Proc.AvailableStrategies do
for j = 1, #Proc.AvailableStrategies do
-- essendo una strategia basic, la lista dei parametri custom dovrebbe essere sempre vuota. Si leggono ora
if not Proc.AvailableStrategies[i].ParameterList then
Proc.AvailableStrategies[i].ParameterList = BCS.GetParametersFromBasicCustomerStrategies( Proc, Proc.AvailableStrategies[i].sStrategyId)
if not Proc.AvailableStrategies[j].ParameterList then
Proc.AvailableStrategies[j].ParameterList = BCS.GetParametersFromBasicCustomerStrategies( Proc, Proc.AvailableStrategies[j].sStrategyId)
end
end
-- si riprocessano le strategie dopo che sono stati letti i parametri
@@ -970,7 +948,7 @@ local function CalculateStrategies( vProcSingleRot, Part)
-- TODO da capire se dare un tempo molto alto oppure se dare errore perchè non deve mai capitare. Per ora si setta tempo alto
-- se tempo non calcolato, si setta un tempo molto alto, 99 minuti
if not Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine then
if not Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine or Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine == 0 then
Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine = 99
end
@@ -1438,12 +1416,6 @@ local function GetCombinationListFromMatrix( ProcessingsOnPart, PartInfo)
local BestCombination = {}
local CombinationsList = { dAllCombinationsTotalTime = 0}
--
-- scrittura nel log della matrice delle rotazioni
--if EgtGetDebugLevel() >= 3 then
-- Logs.WriteMatrixLog( ProcessingsOnPart, PartInfo)
--end
-- calcolo per tutte le combinazioni disponibili precedentemente verificate
for i = 1, #PartInfo.CombinationList do
local bRot90, bRot180
+5 -5
View File
@@ -33,9 +33,9 @@ function BeamLib.AddPartStartFace( PartId, b3Solid)
return false, sErr
end
-- applico gli opportuni attributi di feature
EgtSetName( nStmId, 'StartCut')
EgtSetInfo( nStmId, 'HEAD_ADD_CUT', 1)
EgtSetInfo( nStmId, 'GRP', 1)
EgtSetInfo( nStmId, 'PRC', 340)
EgtSetInfo( nStmId, 'PRC', 10) -- ex 340
return true
end
@@ -58,9 +58,9 @@ function BeamLib.AddPartEndFace( PartId, b3Solid)
return false, sErr
end
-- applico gli opportuni attributi di feature
EgtSetName( nStmId, 'EndCut')
EgtSetInfo( nStmId, 'HEAD_ADD_CUT', 1)
EgtSetInfo( nStmId, 'GRP', 2)
EgtSetInfo( nStmId, 'PRC', 350)
EgtSetInfo( nStmId, 'PRC', 10) -- ex 350
return true
end
@@ -518,7 +518,7 @@ function BeamLib.LoadCustomParametersInStrategy( Proc, Part, CustomParameters, D
for i = 1, #DefaultStrategyParamList.ParameterList do
local xParameterValue = nil
-- se strategia forzata, leggo eventuali parametri nelle info
if CustomParameters and CustomParameters.bForcedStrategy then
if CustomParameters and CustomParameters.bForcedStrategy and DefaultStrategyParamList.ParameterList[i].sNameNge then
local sParameterToRead = DefaultStrategyParamList.sStrategyId .. '_' .. DefaultStrategyParamList.ParameterList[i].sNameNge
local sForcedParameterForProc = EgtGetInfo( Proc.id, sParameterToRead, 's')
-- se ho trovato il valore, lo sovrascrivo al default
+4 -2
View File
@@ -355,7 +355,9 @@ local function GetBottomFaces( Proc)
or Proc.Topology.sFamily == 'Pocket'
or Proc.Topology.sFamily == 'Bevel'
or Proc.Topology.sFamily == 'DoubleBevel'
or Proc.Topology.sFamily == 'Cut') then
or Proc.Topology.sFamily == 'Cut'
or Proc.Topology.sFamily == 'HeadCut'
or Proc.Topology.sFamily == 'TailCut') then
error( 'GetBottomFace : Topology not implemented')
end
@@ -657,7 +659,7 @@ function FaceData.GetMainFaces( Proc, Part)
-- CASO 1 : Feature tipo LapJoint
if Proc.Topology.sFamily == 'Rabbet' or Proc.Topology.sFamily == 'VGroove' or Proc.Topology.sFamily == 'Groove' or
Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Bevel' or
Proc.Topology.sFamily == 'DoubleBevel' or Proc.Topology.sFamily == 'Cut' then
Proc.Topology.sFamily == 'DoubleBevel' or Proc.Topology.sFamily == 'Cut' or Proc.Topology.sFamily == 'HeadCut' or Proc.Topology.sFamily == 'TailCut' then
if ( Proc.Topology.bIsThrough and Proc.Topology.bAllRightAngles and Proc.nFct < 5)
or ( Proc.nFct == 1) or Proc.Topology.sName == 'Bevel-2-Blind' then
+29 -17
View File
@@ -53,13 +53,8 @@ end
---------------------------------------------------------------------
-- recupero topologia della feature
function FeatureLib.NeedTopologyFeature( Proc, Part)
-- feature Egalware con calcolo topologia SEMPRE da geometria
if ID.IsHeadCut( Proc) then -- (1-340)
return true
elseif ID.IsTailCut( Proc) then -- (2-350)
return true
-- feature BTL con calcolo topologia SEMPRE da geometria
elseif ID.IsCut( Proc) then -- (1-10)
if ID.IsCut( Proc) then -- (1-10)
return true
elseif ID.IsLongitudinalCut( Proc) then -- (0-10)
return true
@@ -178,7 +173,16 @@ function FeatureLib.ClassifyTopology( Proc, Part)
local sFamily
local bIsThrough
if Proc.nFct == 1 and ( bIsFeatureCuttingEntireSection or bIsFeatureCuttingEntireLength) then
-- caso speciale taglio di testa
if Proc.nFct == 1 and AreSameVectorApprox( Proc.Faces[1].vtN, X_AX()) and abs( Proc.Faces[1].ptCenter:getX() - Part.b3Part:getMax():getX()) < 10 * GEO.EPS_SMALL then
sFamily = 'HeadCut'
bIsThrough = true
-- caso speciale taglio di coda
elseif Proc.nFct == 1 and AreSameVectorApprox( Proc.Faces[1].vtN, -X_AX()) and abs( Proc.Faces[1].ptCenter:getX() - Part.b3Part:getMin():getX()) < 10 * GEO.EPS_SMALL then
sFamily = 'TailCut'
bIsThrough = true
elseif Proc.nFct == 1 and ( bIsFeatureCuttingEntireSection or bIsFeatureCuttingEntireLength) then
sFamily = 'Cut'
bIsThrough = true
elseif Proc.nFct == 1 then
@@ -229,7 +233,12 @@ function FeatureLib.ClassifyTopology( Proc, Part)
FeatureTopology.sFamily = sFamily
FeatureTopology.bIsThrough = bIsThrough
FeatureTopology.bAllRightAngles = bAllRightAngles
FeatureTopology.sName = GetTopologyName( sFamily, Proc.nFct, bIsThrough)
-- caso speciale taglio testa e coda
if FeatureTopology.sFamily == 'HeadCut' or FeatureTopology.sFamily == 'TailCut' then
FeatureTopology.sName = FeatureTopology.sFamily
else
FeatureTopology.sName = GetTopologyName( sFamily, Proc.nFct, bIsThrough)
end
FeatureTopology.AdjacencyMatrix = vAdj
-- feature che necessita di essere catalogata, ma non si capisce come
else
@@ -697,6 +706,7 @@ function FeatureLib.CalculateStrategiesCompositeRating( AvailableStrategies, sMa
if AvailableStrategies[n].Result and AvailableStrategies[n].Result.dQuality and AvailableStrategies[n].Result.dCompletionIndex and AvailableStrategies[n].Result.dTimeToMachine then
-- il tempo è pesato sul totale delle strategie, e riportato nell'intervallo 1-5, dove 5 è il tempo migliore (il più basso)
local dIndexWeightTimeToMachine = 5 - ( 4 * ( EgtClamp( AvailableStrategies[n].Result.dTimeToMachine / AvailableStrategies.dAllStrategiesTotalTime, 0, 1)))
AvailableStrategies[n].Result.dTimeIndex = dIndexWeightTimeToMachine
-- si calcolano gli indici pesati in base alla configurazione utente. Possibili parametri di configurazione:
local dQuality, dCompletion, dTime, dCoeffQuality, dCoeffCompletion, dCoeffTime
@@ -940,15 +950,17 @@ function FeatureLib.CalculateFeatureNotClampableLengths( Proc, Part)
dOffs = min( dOffs, BeamData.VICE_MAXH - BeamData.VICE_MINH)
end
dNotClampableLengthTail = dOffs
elseif Proc.b3Box:getCenter():getX() > Part.b3Part:getCenter():getX() then
local dOffs = Part.b3Part:getMax():getX() - Proc.b3Box:getMin():getX()
local dDist = Part.b3Part:getMax():getX() - Proc.b3Box:getMax():getX()
-- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse
if not bIsVertClamps and dDeltaZClamp > BeamData.VICE_MINH and BeamData.VICE_MAXH then
dOffs = min( dOffs, BeamData.VICE_MAXH - BeamData.VICE_MINH)
end
-- dDist serve??
dNotClampableLengthHead = dOffs
-- TODO il controllo sul punto centrale non è corretto, deve essere rivisto.
-- Si lascia qui commentato perchè era così anche in quello vecchio, quindi potrebbe essere che in qualche caso potesse funzionare
-- elseif Proc.b3Box:getCenter():getX() > Part.b3Part:getCenter():getX() then
-- local dOffs = Part.b3Part:getMax():getX() - Proc.b3Box:getMin():getX()
-- local dDist = Part.b3Part:getMax():getX() - Proc.b3Box:getMax():getX()
-- -- se pinze a 45° e pinza abbastanza materiale, compenso comunque, ma solo inclinazione morse
-- if not bIsVertClamps and dDeltaZClamp > BeamData.VICE_MINH and BeamData.VICE_MAXH then
-- dOffs = min( dOffs, BeamData.VICE_MAXH - BeamData.VICE_MINH)
-- end
-- -- dDist serve??
-- dNotClampableLengthHead = dOffs
end
end
end
+3 -9
View File
@@ -6,22 +6,16 @@
local Identity = {}
---------------------------------------------------------------------
------------------------ EGALWARE FEATURES ------------------------
------------------------ SPECIAL TOPOLOGY -------------------------
---------------------------------------------------------------------
-- Feature : Head Cut
function Identity.IsHeadCut( Proc)
local bIdentity = ( Proc.nGrp == 1 and Proc.nPrc == 340)
local idPrc = 340
local idGrp = 1
return bIdentity, idPrc, idGrp
return Identity.IsCut( Proc) and Proc.Topology.sName == 'HeadCut'
end
---------------------------------------------------------------------
-- Feature : Tail Cut
function Identity.IsTailCut( Proc)
local bIdentity = ( Proc.nGrp == 2 and Proc.nPrc == 350)
local idPrc = 350
local idGrp = 2
return bIdentity, idPrc, idGrp
return Identity.IsCut( Proc) and Proc.Topology.sName == 'TailCut'
end
---------------------------------------------------------------------
+25 -62
View File
@@ -22,7 +22,7 @@ function Logs.WriteFeaturesLog( ProcessingsOnPart, PartInfo)
EgtOutLog( ' === === === === === === === === === === === === === === === === === === === === === === === === === === ===')
EgtOutLog( ' === === === === === === === === FEATURES STRATEGIES PIECE INVERTED === === === === === === === === === ===')
end
EgtOutLog( ' Feature ID | BTL POSITION | 90 ROTATION | 180 ROTATION | 270 ROTATION |')
EgtOutLog( ' Feature ID | BTL POSITION | 90 ROTATION | 180 ROTATION | 270 ROTATION |')
EgtOutLog( '----------------------------------------------------------------------------------------------------------')
local nProcessingsNumber
@@ -69,36 +69,44 @@ function Logs.WriteFeaturesLog( ProcessingsOnPart, PartInfo)
if ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result then
-- leggo lo stato della strategia per aggiungere un suffisso
local sStatusStrategy = ' '
local sIndexes, sRating = '', ''
if not ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus or
ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus == 'Not-Applicable' then
sStatusStrategy = 'N'
elseif ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus == 'Completed' then
sStatusStrategy = 'C'
elseif ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus == 'Not-Completed' then
sStatusStrategy = 'P'
sRating = '----'
sIndexes = ' (C:---|Q:---|T:---)'
else
if ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus == 'Completed' then
sStatusStrategy = 'C'
elseif ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.sStatus == 'Not-Completed' then
sStatusStrategy = 'P'
end
sRating = EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dCompositeRating, -1)
sIndexes = ' (C:'.. EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dCompletionIndex, -1)..
'|Q:'.. EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dQuality, -1)..
'|T:'.. EgtNumToString( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dTimeIndex, -1)..')'
end
-- se c'è una chosen strategy, si aggiunge prefisso '*' per indicare nel log qual è la strategia che è stata scelta
local nIndexBestStrategy = ProcessingsOnPart.Rotation[nRotLog][ProcLog].nIndexBestStrategy or 0
local sLogLineProc = EgtIf( nIndexBestStrategy == nCountStrategies, '*', '') ..
tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].Result.dCompositeRating) ..' (' ..
local sLogLineProc = EgtIf( nIndexBestStrategy == nCountStrategies, '*', '') .. sRating .. sIndexes .. ' (' ..
tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].AvailableStrategies[nCountStrategies].sStrategyId) .. ')' ..
sStatusStrategy .. ' |'
while string.len( sLogLineProc) <= 20 do
sStatusStrategy .. ' |'
while string.len( sLogLineProc) <= 38 do
sLogLineProc = ' ' .. sLogLineProc
end
sLogLine = sLogLine .. sLogLineProc
else
sLogLine = sLogLine .. ' 0 (STR----)- |'
sLogLine = sLogLine .. ' 0 (STR----)- |'
end
else
sLogLine = sLogLine .. ' |'
sLogLine = sLogLine .. ' |'
end
-- rotazione non presa in considerazione
else
if nCountStrategies == 1 then
sLogLine = sLogLine .. ' ---------- |'
sLogLine = sLogLine .. ' ---------- |'
else
sLogLine = sLogLine .. ' |'
sLogLine = sLogLine .. ' |'
end
end
end
@@ -111,63 +119,18 @@ function Logs.WriteFeaturesLog( ProcessingsOnPart, PartInfo)
end
end
-------------------------------------------------------------------------------------------------------------
function Logs.WriteMatrixLog( ProcessingsOnPart, PartInfo)
EgtOutLog( ' === === === === === === === === === === ROTATION MATRIX === === === === === === === === === === === === ===')
EgtOutLog( ' Feature ID | BTL POSITION | 90 ROTATION | 180 ROTATION | 270 ROTATION |')
EgtOutLog( '----------------------------------------------------------------------------------------------------------')
local nProcessingsNumber
local nFirstAvailableRotation
-- ricerco prima rotazione effettivamente calcolata. In genere è sempre la prima
for i = 1, 4 do
if PartInfo.CombinationList.Rotations[i] == 1 then
nProcessingsNumber = #ProcessingsOnPart.Rotation[i]
nFirstAvailableRotation = i
break
end
end
for ProcLog = 1, nProcessingsNumber do
local sLogLine = ' ' .. tostring( ProcessingsOnPart.Rotation[nFirstAvailableRotation][ProcLog].id)
while string.len( sLogLine) <= 20 do
sLogLine = sLogLine .. ' '
end
sLogLine = sLogLine .. '|'
for nRotLog = 1, 4 do
if PartInfo.CombinationList.Rotations[nRotLog] == 1 then
if ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy then
local sStatusStrategy = EgtIf( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.Result.sStatus == 'Completed', 'C', 'P')
local sLogLineProc = tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.Result.dCompositeRating) ..
' (' .. tostring( ProcessingsOnPart.Rotation[nRotLog][ProcLog].ChosenStrategy.sStrategyId) .. ')' .. sStatusStrategy .. ' |'
while string.len( sLogLineProc) <= 20 do
sLogLineProc = ' ' .. sLogLineProc
end
sLogLine = sLogLine .. sLogLineProc
else
sLogLine = sLogLine .. ' 0 (STR----)- |'
end
else
sLogLine = sLogLine .. ' ---------- |'
end
end
EgtOutLog( sLogLine)
end
EgtOutLog( '----------------------------------------------------------------------------------------------------------')
end
-------------------------------------------------------------------------------------------------------------
function Logs.WriteCombinationLog( CombinationsList, BestCombination)
EgtOutLog( ' === === === === === === === === === === COMBINATIONS === === === === === === ')
EgtOutLog( ' COMBI (UNL) | RATING | COMPLETE | NO COMPL | NO EXEC | ROTATE |')
EgtOutLog( ' COMBI (UNL) POS | RATING | COMPLETE | NO COMPL | NO EXEC | ROTATE |')
EgtOutLog( '------------------------------------------------------------------------------')
for CombiLog = 1, #CombinationsList do
local sPartPosition = EgtIf( CombinationsList[CombiLog].bPartInCombiIsInverted, 'INV', 'ORI')
local sLogLine = ' ' .. CombinationsList[CombiLog].sBitIndexCombination .. ' (' .. CombinationsList[CombiLog].nUnloadPos .. ') ' .. sPartPosition .. ' |'
local sLogLine = ' ' .. CombinationsList[CombiLog].sBitIndexCombination .. ' (' .. CombinationsList[CombiLog].nUnloadPos .. ') ' .. sPartPosition .. ' |'
-- rating
local sOtherField = tostring( CombinationsList[CombiLog].dTotalRating) .. ' |'
while string.len( sOtherField) <= 11 do
local sOtherField = EgtNumToString( CombinationsList[CombiLog].dTotalRating, - 3) .. ' |'
while string.len( sOtherField) <= 15 do
sOtherField = ' ' .. sOtherField
end
sLogLine = sLogLine .. sOtherField
+10 -6
View File
@@ -238,8 +238,8 @@ local function GetIndexToolInAvailableToolList( AvailableToolList, sToolName)
return nIndex
end
end
-- se non trovato (dovrebbe essere impossibile dato che è già stato escluso dai controlli iniziali) ritorna un indice altissimo
return 9999
-- se non trovato
return nil
end
-------------------------------------------------------------------------------------------------------------
@@ -345,7 +345,8 @@ function MachiningLib.FindMill( Proc, ToolSearchParameters)
if dBestToolResidualDepth <= 0 and dCurrentResidualDepth <= 0 then
-- se è presente una lista di utensili disponibili, si prende quello che arriva primo in quella lista
if ToolSearchParameters.AvailableToolList and ToolSearchParameters.AvailableToolList.bRespectListOrder then
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) and
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[nBestToolIndex].sName) then
nBestToolIndex = i
dBestToolResidualDepth = dCurrentResidualDepth
@@ -449,7 +450,8 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
if dBestToolResidualDepth <= 10 * GEO.EPS_SMALL and dCurrentResidualDepth <= 10 * GEO.EPS_SMALL then
-- se è presente una lista di utensili disponibili, si prende quello che arriva primo in quella lista
if ToolSearchParameters.AvailableToolList and ToolSearchParameters.AvailableToolList.bRespectListOrder then
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) and
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[nBestToolIndex].sName) then
nBestToolIndex = i
dBestToolResidualDepth = dCurrentResidualDepth
@@ -560,7 +562,8 @@ function MachiningLib.FindDrill( Proc, ToolSearchParameters)
dBestToolResidualDepth = dCurrentResidualDepth
-- se è presente una lista di utensili disponibili, si prende quello che arriva primo in quella lista
elseif ToolSearchParameters.AvailableToolList and ToolSearchParameters.AvailableToolList.bRespectListOrder then
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) and
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[nBestToolIndex].sName) then
nBestToolIndex = i
dBestToolResidualDepth = dCurrentResidualDepth
@@ -660,7 +663,8 @@ function MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
if dBestToolResidualDepth <= 0 and dCurrentResidualDepth <= 0 then
-- se è presente una lista di utensili disponibili, si prende quello che arriva primo in quella lista
if ToolSearchParameters.AvailableToolList and ToolSearchParameters.AvailableToolList.bRespectListOrder then
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
if GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) and
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[i].sName) <
GetIndexToolInAvailableToolList( ToolSearchParameters.AvailableToolList, TOOLS[nBestToolIndex].sName) then
nBestToolIndex = i
dBestToolResidualDepth = dCurrentResidualDepth
+167 -21
View File
@@ -5,8 +5,21 @@
"nPrc": 10,
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
},
{ "sName": "Bevel-1-Through",
"sImage": "ConfigStrategy\\Bevel-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
},
{ "sName": "HeadCut",
"sImage": "ConfigStrategy\\HeadCut.png",
"StrategyList" : [ { "sStrategyId": "HEADCUT" } ]
},
{ "sName": "TailCut",
"sImage": "ConfigStrategy\\TailCut.png",
"StrategyList" : [ { "sStrategyId": "TAILCUT" } ]
}
]
},
@@ -16,6 +29,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Bevel-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
}
]
@@ -26,6 +40,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\DoubleCut.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
}
]
@@ -36,6 +51,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\RidgeValleyCut.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
}
]
@@ -46,6 +62,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
}
]
@@ -56,28 +73,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -87,28 +116,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -118,6 +159,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
}
]
@@ -128,21 +170,27 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "RafterNotch-5-Through",
"sImage": "",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
}
]
@@ -153,21 +201,27 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "RidgeLap-3-Through",
"sImage": "",
"StrategyList" : [ { "sStrategyId": "STR0012"} ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
@@ -178,28 +232,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -209,28 +275,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -240,6 +318,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "BlockHouse.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
}
]
@@ -250,28 +329,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -281,6 +372,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\FrenchRidgeLap.png",
"StrategyList" : [ ]
}
]
@@ -291,6 +383,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Chamfer.png",
"StrategyList" : [ ]
}
]
@@ -301,6 +394,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\BlockHouseHalfLap.png",
"StrategyList" : [ ]
}
]
@@ -311,6 +405,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\BlockHouseFront.png",
"StrategyList" : [ ]
}
]
@@ -321,28 +416,40 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
}
]
},
@@ -352,6 +459,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Drilling.png",
"StrategyList" : [ { "sStrategyId": "STR0011" }, { "sStrategyId": "STR0013" } ]
}
]
@@ -362,6 +470,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Tenon.png",
"StrategyList" : [ { "sStrategyId": "STR0006" } ]
}
]
@@ -372,36 +481,51 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
},
{ "sName": "Pocket-Round",
"sImage": "ConfigStrategy\\Pocket-Round.png",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
},
{ "sName": "Pocket-Round-Front",
"sImage": "ConfigStrategy\\MortiseFront.png",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
},
{ "sName": "Pocket-Round-Through",
"sImage": "",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
}
]
@@ -412,36 +536,51 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Pocket-5-Blind",
"sImage": "ConfigStrategy\\Pocket-5-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-4-Blind",
"sImage": "ConfigStrategy\\Groove-4-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Through",
"sImage": "ConfigStrategy\\Groove-3-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Tunnel-4-Through",
"sImage": "ConfigStrategy\\Tunnel-4-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0003" }, { "sStrategyId": "STR0004" } ]
},
{ "sName": "Groove-3-Blind",
"sImage": "ConfigStrategy\\Groove-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-3-Blind",
"sImage": "ConfigStrategy\\Bevel-3-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" } ]
},
{ "sName": "Bevel-2-Blind",
"sImage": "ConfigStrategy\\Bevel-2-Blind.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
},
{ "sName": "Rabbet-2-Through",
"sImage": "ConfigStrategy\\Rabbet-2-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ]
},
{ "sName": "Cut-1-Through",
"sImage": "ConfigStrategy\\Cut-1-Through.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" } ]
},
{ "sName": "Pocket-Round",
"sImage": "ConfigStrategy\\Pocket-Round.png",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
},
{ "sName": "Pocket-Round-Front",
"sImage": "ConfigStrategy\\MortiseFront.png",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
},
{ "sName": "Pocket-Round-Through",
"sImage": "",
"StrategyList" : [ { "sStrategyId": "STR0008" } ]
}
]
@@ -452,6 +591,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -462,6 +602,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -472,6 +613,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\DovetailTenon.png",
"StrategyList" : [ { "sStrategyId": "STR0001" } ]
}
]
@@ -482,6 +624,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\DovetailMortise.png",
"StrategyList" : [ { "sStrategyId": "STR0007" } ]
}
]
@@ -492,6 +635,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\DovetailMortiseFront.png",
"StrategyList" : [ { "sStrategyId": "STR0007" } ]
}
]
@@ -502,6 +646,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Text.png",
"StrategyList" : [ { "sStrategyId": "STR0014" }]
}
]
@@ -512,6 +657,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Text.png",
"StrategyList" : [ { "sStrategyId": "STR0014" }]
}
]
@@ -522,6 +668,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ScarfSimple.png",
"StrategyList" : [ ]
}
]
@@ -532,6 +679,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ScarfJoint.png",
"StrategyList" : [ ]
}
]
@@ -542,6 +690,7 @@
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\StepJoint.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0010"} ]
}
]
@@ -552,6 +701,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\StepJointNotch.png",
"StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0010"} ]
}
]
@@ -562,6 +712,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Planing.png",
"StrategyList" : [ ]
}
]
@@ -572,6 +723,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ProfileFront.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -582,6 +734,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ProfileHeadConcave.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -592,6 +745,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ProfileHeadConvex.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -602,6 +756,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ProfileHeadCambered.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -612,6 +767,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\RoundArch.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -622,6 +778,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\ProfileHead.png",
"StrategyList" : [ { "sStrategyId": "STR0015" } ]
}
]
@@ -632,6 +789,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -642,6 +800,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\TriangleCut.png",
"StrategyList" : [ ]
}
]
@@ -652,6 +811,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\TyroleanDovetail.png",
"StrategyList" : [ ]
}
]
@@ -662,6 +822,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "ConfigStrategy\\Dovetail.png",
"StrategyList" : [ ]
}
]
@@ -672,6 +833,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -682,6 +844,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -692,36 +855,18 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
},
{
"sName":"HeadCut",
"nPrc": 340,
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"StrategyList" : [ { "sStrategyId": "HEADCUT" } ]
}
]
},
{
"sName":"TailCut",
"nPrc": 350,
"nGrp": 1,
"TopologyList" : [
{ "sName": "Feature",
"StrategyList" : [ { "sStrategyId": "TAILCUT" } ]
}
]
},
{
"sName":"Variant",
"nPrc": 900,
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
@@ -732,6 +877,7 @@
"nGrp": 0,
"TopologyList" : [
{ "sName": "Feature",
"sImage": "",
"StrategyList" : [ ]
}
]
+16 -5
View File
@@ -1,7 +1,7 @@
[
{
"nGroup": "1",
"nGroup": "MACHINE",
"sName": "GEN_sPiecesLoadingPosition",
"sNameNge": "GEN_PIECES_LOADING",
"sValue": "BEST_POSITION",
@@ -31,7 +31,7 @@
]
},
{
"nGroup": "1",
"nGroup": "MACHINE",
"sName": "GEN_sPieceRotation",
"sNameNge": "GEN_PIECE_ROTATION",
"sValue": "IF_NECESSARY",
@@ -61,7 +61,7 @@
]
},
{
"nGroup": "1",
"nGroup": "MACHINE",
"sName": "GEN_sMachiningStrategy",
"sNameNge": "GEN_MACHINING_STRATEGY",
"sValue": "AUTO",
@@ -91,7 +91,18 @@
]
},
{
"nGroup": "2",
"nGroup": "MACHINING STRATEGY",
"sName": "GEN_bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "5"
},
{
"nGroup": "MACHINING STRATEGY",
"sName": "GEN_dMaxWasteLength",
"sNameNge": "GEN_MAX_WASTE_LENGTH",
"sValue": "300",
@@ -102,7 +113,7 @@
"sMinUserLevel": "5"
},
{
"nGroup": "2",
"nGroup": "MACHINING STRATEGY",
"sName": "GEN_dMaxWasteVolume",
"sNameNge": "GEN_MAX_WASTE_VOLUME",
"sValue": "6000000",
+5 -10
View File
@@ -22,16 +22,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bExecutePreCut",
"sNameNge": "EXEC_PRECUT",
@@ -61,6 +51,11 @@
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+20 -12
View File
@@ -32,6 +32,8 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters)
Strategy.Result = {}
Strategy.Machining = {}
Strategy.Result.sInfo = ''
local OptionalParameters = { bForceChainSaw = Strategy.Parameters.bForceChainSaw, bReduceBladePath = Strategy.Parameters.bReduceBladePath,
dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume }
local bAreAllMachiningsAdded = true
-- si setta che è taglio di coda
@@ -39,8 +41,8 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters)
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
if Strategy.Parameters.bExecutePreCut then
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetStrategy( Proc, Part, Strategy.Parameters)
-- se non faccio tagli PRECUT, imposto tabella Result direttamente. Non serve verificare che riesca a rimuovere il materiale extra
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetMachining( Proc, Part, OptionalParameters)
-- se non faccio tagli PRECUT, imposto tabella Result direttamente. Non serve verificare che riesca a rimuovere il materiale extra
if not Strategy.SplitStrategy or #Strategy.SplitStrategy == 0 then
Strategy.Result.sInfo = 'PreCut on head not possible'
end
@@ -55,8 +57,7 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters)
-- se devo applicare le lavorazioni
if bAddMachining then
-- forzo nome feature, potrebbe essere stata invertita con taglio di coda
-- si forza il nome della feature
EgtSetName( Proc.id, 'StartCut')
-- inserimento smussi su spigoli del taglio
@@ -65,17 +66,24 @@ function HEADCUT.Make( bAddMachining, Proc, Part, CustomParameters)
end
local MachiningsToAdd = {}
local bExecutePrecutOnly = false
local bExecutePrecutOnly = Part.dHeadOverMaterial < 20
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
if Strategy.Parameters.bExecutePreCut then
if Part.dHeadOverMaterial < 10 then
bExecutePrecutOnly = true
Strategy.dOffset = 0
else
Strategy.bIsPreCut = true
Strategy.dOffset = Part.dHeadOverMaterial
if Strategy.SplitStrategy and #Strategy.SplitStrategy > 0 then
for i = 1, #Strategy.SplitStrategy do
local TempList = {}
TempList = Strategy.SplitStrategy[i]
if bExecutePrecutOnly then
TempList.dLongitudinalOffset = 0
else
TempList.bIsPreCut = true
TempList.dLongitudinalOffset = Part.dHeadOverMaterial
end
table.insert( MachiningsToAdd, TempList)
end
end
MachiningsToAdd = SPLITCUT.Execute( Proc, Part, Strategy)
end
if not bExecutePrecutOnly then
+5 -10
View File
@@ -42,16 +42,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "sCuttingStrategy",
"sNameNge": "EXEC_TENON_SURF",
@@ -118,6 +108,11 @@
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+15 -21
View File
@@ -332,14 +332,12 @@ local function GetBestPocketingStrategy( Proc)
-- se la 3 completa tutto
elseif Machining[3].bIsApplicable and Machining[3].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then
Machining.sTypeMachining = 'Side1'
-- TODO setto non completo perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.sStatus = 'Not-Completed'
else
Strategy.Result.sStatus = 'Completed'
end
Strategy.Result.sStatus = 'Completed'
Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100)
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
-- si cambia qualità perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
end
Strategy.Result.dMRR = Machining[3].dMRR
if Proc.MainFaces.TunnelAddedFaces then
Machining[3].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP)
@@ -353,14 +351,12 @@ local function GetBestPocketingStrategy( Proc)
-- se la 4 completa tutto
elseif Machining[4].bIsApplicable and Machining[4].ToolInfo.dResidualDepth < 10 * GEO.EPS_SMALL then
Machining.sTypeMachining = 'Side2'
-- TODO setto non completo perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.sStatus = 'Not-Completed'
else
Strategy.Result.sStatus = 'Completed'
end
Strategy.Result.sStatus = 'Completed'
Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100)
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
-- si cambia qualità perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
end
Strategy.Result.dMRR = Machining[4].dMRR
if Proc.MainFaces.TunnelAddedFaces then
Machining[4].ToolInfo.dResidualDepth = -( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + BeamData.MILL_OVERLAP)
@@ -375,18 +371,16 @@ local function GetBestPocketingStrategy( Proc)
elseif Proc.MainFaces.TunnelAddedFaces and Machining[3].bIsApplicable and Machining[4].bIsApplicable and
Machining[3].ToolInfo.dResidualDepth + Machining[4].ToolInfo.dResidualDepth < (Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation * 2) + BeamData.MILL_OVERLAP then
Machining.sTypeMachining = 'Side1-Side2'
-- TODO setto non completo perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.sStatus = 'Not-Completed'
else
Strategy.Result.sStatus = 'Completed'
end
Strategy.Result.sStatus = 'Completed'
-- si suddivide l'extra lavorabile sulle due frese
local dExtraMachDepth = ( Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation * 2 - Machining[3].ToolInfo.dResidualDepth - Machining[4].ToolInfo.dResidualDepth - BeamData.MILL_OVERLAP) / 2
Machining[3].ToolInfo.dResidualDepth = Machining[3].ToolInfo.dResidualDepth - Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + dExtraMachDepth
Machining[4].ToolInfo.dResidualDepth = Machining[4].ToolInfo.dResidualDepth - Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Faces[1].dElevation + dExtraMachDepth
Strategy.Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100)
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
-- si cambia qualità perchè è rimasto il raggio sullo spigolo. E' giusto considerare non completo?
if Proc.Topology.sName == 'Groove-3-Through' or Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind' or Proc.Topology.sName == 'VGroove-2-Through' then
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
end
Strategy.Result.dMRR = ( Machining[3].dMRR + Machining[4].dMRR) / 2
Machining[1].bIsApplicable = false
Machining[2].bIsApplicable = false
+16 -31
View File
@@ -80,26 +80,6 @@
}
]
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Max waste length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Max waste volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bDisableDicing",
"sNameNge": "DISABLE_DICING",
@@ -113,23 +93,13 @@
{
"sName": "bAllowFastCuts",
"sNameNge": "ALLOW_FAST_CUTS",
"sValue": "true",
"sValue": "false",
"sDescriptionShort": "Prioritize machining speed over quality",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "true",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dStripWidth",
"sNameNge": "STRIP_WIDTH",
@@ -179,6 +149,21 @@
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+15 -30
View File
@@ -32,36 +32,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "sCuttingStrategy",
"sNameNge": "EXEC_TENON_SURF",
@@ -107,6 +77,21 @@
"sSubType": "MCH_TF.MILL",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+15 -30
View File
@@ -52,36 +52,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "sCuttingStrategy",
"sNameNge": "EXEC_MORTISE_SURF",
@@ -138,6 +108,21 @@
"sSubType": "MCH_TF.MILL",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+15 -30
View File
@@ -22,36 +22,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "sCuttingStrategy",
"sNameNge": "EXEC_TENON_SURF",
@@ -108,6 +78,21 @@
"sSubType": "MCH_TF.MILL",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+3
View File
@@ -82,6 +82,9 @@ local function GetDrillingStrategy( Proc, Part)
Strategy.Result.dMRR = MachiningLib.GetToolMRR( Machining[1].ToolInfo or Machining[2].ToolInfo)
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'FINE') -- se non completo, anche se fosse foro singolo, comunque non esce dall'altra parte, quindi non scheggia
end
else
local sMessage = 'Drillbit not found'
Strategy.Result = FeatureLib.GetStrategyResultNotApplicable( sMessage)
end
-- se lavorazione verticale
else
+15 -30
View File
@@ -41,36 +41,6 @@
}
]
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "sRidgelapStrategy",
"sNameNge": "RIDGELAP_STRATEGY",
@@ -119,6 +89,21 @@
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+6 -21
View File
@@ -119,33 +119,18 @@
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "true",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+1 -1
View File
@@ -26,7 +26,7 @@ local function GetEdgeToMachine( Proc, idFace, vtEdge)
local Edge
local dBestEdgeAngle = 999
for i = 1, #Proc.Faces[idFace].Edges do
local dAngle = abs( GetAngle( Proc.Faces[idFace].Edges[i].vtN, vtEdge))
local dAngle = abs( GetAngle( Proc.Faces[idFace].Edges[i].vtN, vtEdge) or 999)
if dAngle < dBestEdgeAngle then
dBestEdgeAngle = dAngle
Edge = Proc.Faces[idFace].Edges[i]
+15 -30
View File
@@ -22,36 +22,6 @@
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sNameNge": "MAX_WASTE_LENGTH",
"sValue": "300",
"sDescriptionShort": "Maximum Waste Length",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteVolume",
"sNameNge": "MAX_WASTE_VOLUME",
"sValue": "6000000",
"sDescriptionShort": "Maximum Waste Volume",
"sDescriptionLong": "",
"sType": "d",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bReduceBladePath",
"sNameNge": "REDUCE_BLADE_PATH",
"sValue": "false",
"sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "",
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "bExecutePreCut",
"sNameNge": "EXEC_PRECUT",
@@ -71,6 +41,21 @@
"sType": "b",
"sMessageId": " ",
"sMinUserLevel": "1"
},
{
"sName": "dMaxWasteLength",
"sSource": "GEN_dMaxWasteLength",
"sMinUserLevel": "5"
},
{
"sName": "dMaxWasteVolume",
"sSource": "GEN_dMaxWasteVolume",
"sMinUserLevel": "5"
},
{
"sName": "bReduceBladePath",
"sSource": "GEN_bReduceBladePath",
"sMinUserLevel": "5"
}
]
}
+47 -17
View File
@@ -32,7 +32,10 @@ function TAILCUT.Make( bAddMachining, Proc, Part, CustomParameters)
Strategy.Result = {}
Strategy.Machining = {}
Strategy.Result.sInfo = ''
local OptionalParameters = { bForceChainSaw = Strategy.Parameters.bForceChainSaw, bReduceBladePath = Strategy.Parameters.bReduceBladePath,
dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume }
local bAreAllMachiningsAdded = true
local bExecutePrecutOnly = false
-- si setta che è taglio di coda
Strategy.bIsTailCut = true
@@ -42,28 +45,36 @@ function TAILCUT.Make( bAddMachining, Proc, Part, CustomParameters)
-- se devo fare split perchè c'è un grezzo da scaricare o un altro pezzo
if Strategy.bSplit then
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetStrategy( Proc, Part, Strategy.Parameters)
OptionalParameters.dOffset = 0
OptionalParameters.bDisableDicing = true
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetMachining( Proc, Part, OptionalParameters)
-- se devo rimuovere tutto il restante
else
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
if Strategy.Parameters.bExecutePreCut then
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetStrategy( Proc, Part, Strategy.Parameters)
if Part.dRestLength < 20 then
bExecutePrecutOnly = true
OptionalParameters.dOffset = 0
else
Strategy.bIsPreCut = true
OptionalParameters.dOffset = Part.dRestLength
end
OptionalParameters.bDisableDicing = true
Strategy.SplitStrategy, Strategy.Result = SPLITCUT.GetMachining( Proc, Part, OptionalParameters)
-- se non faccio tagli PRECUT, imposto tabella Result direttamente. Non serve verificare che riesca a rimuovere il materiale extra
else
Strategy.Result.sStatus = 'Completed'
Strategy.Result.dCompletionIndex = 5
Strategy.Result.dMRR = 1
-- TODO di quale utensile si deve impostare la qualità qui?
-- si imposta qualità lama perchè verrà fatta BladeToWaste, probabilmente a cubetti
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE')
Strategy.Result.sInfo = 'Split not possible'
end
end
-- se devo applicare le lavorazioni
if bAddMachining then
-- forzo nome feature, potrebbe essere stata invertita con taglio di coda
-- si forza il nome della feature
EgtSetName( Proc.id, 'EndCut')
-- inserimento smussi su spigoli del taglio
@@ -74,25 +85,44 @@ function TAILCUT.Make( bAddMachining, Proc, Part, CustomParameters)
local MachiningsToAdd = {}
-- se devo fare split perchè c'è un grezzo da scaricare o un altro pezzo
if Strategy.bSplit then
Strategy.dOffset = 0
MachiningsToAdd = SPLITCUT.Execute( Proc, Part, Strategy)
if Strategy.SplitStrategy and #Strategy.SplitStrategy > 0 then
for i = 1, #Strategy.SplitStrategy do
local TempList = {}
TempList.Splitting = Strategy.SplitStrategy[i]
if i == #Strategy.SplitStrategy then
TempList.Splitting.sUserNotes = 'Split;'
TempList.AuxiliaryData = { bIsSplitOrCut = true}
else
TempList.Splitting.sUserNotes = 'Presplit;'
end
table.insert( MachiningsToAdd, TempList)
end
end
-- se devo rimuovere tutto il restante
else
local bExecutePrecutOnly = false
-- se abilitato, faccio tagli di PRECUT a zero (come SPLIT)
if Strategy.Parameters.bExecutePreCut then
if Part.dRestLength < 10 then
bExecutePrecutOnly = true
Strategy.dOffset = 0
else
Strategy.bIsPreCut = true
Strategy.dOffset = Part.dRestLength
if Strategy.SplitStrategy and #Strategy.SplitStrategy > 0 then
for i = 1, #Strategy.SplitStrategy do
local TempList = {}
TempList.Splitting = Strategy.SplitStrategy[i]
TempList.Splitting.dLongitudinalOffset = OptionalParameters.dOffset
if bExecutePrecutOnly then
if i == #Strategy.SplitStrategy then
TempList.Splitting.sUserNotes = 'Cut;'
TempList.AuxiliaryData = { bIsSplitOrCut = true}
else
TempList.Splitting.sUserNotes = 'Precut;'
end
end
table.insert( MachiningsToAdd, TempList)
end
end
MachiningsToAdd = SPLITCUT.Execute( Proc, Part, Strategy)
end
if not bExecutePrecutOnly then
local OptionalParameters = {}
OptionalParameters = {}
-- eventuale grezzo custom per dicing (grezzo attuale + grezzo di coda)
local nNextRawId = EgtGetNextRawPart( Part.idRaw)
-4
View File
@@ -149,10 +149,6 @@ STR0015 = Profilo arcuato (Head Cambered Profile)
251,0,Feature,
; Feature : Aperture
252,0,Feature,
; Feature : HEADCUT
340,0,Feature,HEADCUT
; Feature : TAILCUT
350,0,Feature,TAILCUT
; Feature : Variant
900,0,Feature,
; Feature Decor
+1 -1
View File
@@ -907,7 +907,7 @@ local function CutWithDicing( Proc, Part, OptionalParameters)
Result.dCompletionPercentage = 100
Result.dQuality = FeatureLib.GetStrategyQuality( TOOLS[nToolIndex].sFamily)
Result.dTimeToMachineOriginal = FeatureLib.GetStrategyTimeToMachine( Machinings)
Result.dTimeToMachine = Result.dTimeToMachineOriginal * 1.3
Result.dTimeToMachine = Result.dTimeToMachineOriginal * 2
Result.dMRR = ( FeatureInfo.dFeatureVolume / Result.dTimeToMachine) / pow( 10, 6)
else
Result = FeatureLib.GetStrategyResultNotApplicable()
+1 -1
View File
@@ -499,7 +499,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
-- se lavorazione aperta sulla coda, eventuali aggiustamenti
-- TODO valutare se fare funzione a parte
local bIsTruncatingCutOnTail = Proc.Topology and Proc.Topology.sName == 'Cut-1-Through' and Proc.AffectedFaces.bLeft
local bIsTruncatingCutOnTail = Proc.Topology and ( Proc.Topology.sName == 'Cut-1-Through' or Proc.Topology.sName == 'TailCut') and Proc.AffectedFaces.bLeft
if bIsTruncatingCutOnTail then
Cutting.sStage = 'AfterTail'
elseif Proc.AffectedFaces.bLeft and ( EdgeToMachine.sType == 'Bottom' or ( Cutting.vtToolDirection:getX() < 0.707)) then
+17 -290
View File
@@ -8,11 +8,9 @@ local SPLITCUT = {}
require( 'EgtBase')
-- Carico i dati globali
local BeamData = require( 'BeamData')
local FeatureLib = require( 'FeatureLib')
local MachiningLib = require( 'MachiningLib')
-- strategie di base
local FaceByBlade = require('FACEBYBLADE')
local BladeToWaste = require('BLADETOWASTE')
EgtOutLog( ' SPLITCUT started', 1)
@@ -20,153 +18,25 @@ EgtOutLog( ' SPLITCUT started', 1)
---------------------- FUNZIONI DI SPLIT ------------------------------------------
-----------------------------------------------------------------------------------
function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters)
local Machining = {}
function SPLITCUT.GetMachining( Proc, Part, ParametersFromStrategy)
local Machining = { sTypeMachining = 'None'}
local Result = {}
-- sTypeMachining = BladeSideSingle\ BladeSideDouble\ BladeHorizontalSingle\ BladeHorizontalDouble\ ChainSawHorizontal\ ChainSawSideSingle\ ChainSawSideDouble\ ChainSawPlusBlade\ Mill\ None
Machining.sTypeMachining = 'None'
local Splitting = {}
-- imposto parametri di ricerca utensile in base a topologia
local ToolSearchParameters = {}
ToolSearchParameters.vtN = Proc.Faces[1].vtN
-- sTypeMachining = Blade\ ChainSawHorizontal\ ChainSawSideSingle\ ChainSawSideDouble\ ChainSawPlusBlade\ Mill\ None
-- ===== RICERCA UTENSILE =====
-- cerco lama sopra
Splitting.bIsApplicable = false
ToolSearchParameters.bAllowTopHead = true
ToolSearchParameters.bAllowBottomHead = false
Splitting.ToolInfo = {}
Splitting.ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters)
if Splitting.ToolInfo.nToolIndex then
Splitting.bIsApplicable = true
local ParametersMRR = {}
ParametersMRR.nToolIndex = Splitting.ToolInfo.nToolIndex
Splitting.dMRR = MachiningLib.GetToolMRR( ParametersMRR)
end
table.insert( Machining, Splitting)
-- cerco lama sotto
Splitting = {}
Splitting.bIsApplicable = false
ToolSearchParameters.bAllowTopHead = false
ToolSearchParameters.bAllowBottomHead = true
Splitting.ToolInfo = {}
Splitting.ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters)
if Splitting.ToolInfo.nToolIndex then
Splitting.bIsApplicable = true
local ParametersMRR = {}
ParametersMRR.nToolIndex = Splitting.ToolInfo.nToolIndex
Splitting.dMRR = MachiningLib.GetToolMRR( ParametersMRR)
end
table.insert( Machining, Splitting)
-- cerco motosega
Splitting = {}
Splitting.bIsApplicable = false
table.insert( Machining, Splitting)
-- cerco fresa
Splitting = {}
Splitting.bIsApplicable = false
table.insert( Machining, Splitting)
-- ===== SCELTA LAVORAZIONI =====
-- forzature da parametri
if OptionalParameters.bForceChainSaw then
Machining[1].bIsApplicable = false
Machining[2].bIsApplicable = false
end
-- setto valori di default. Impossibile che taglio di separazione sia incompleto
Result.sStatus = 'Completed'
Result.dCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100)
Result.dMRR = 1
-- correzioni sul massimo materiale lama, considerando ingombri vari
local dMaxMatBladeSideSingle
local dMaxMatBladeSideDouble
local dMaxMatBladeHorizontalSingle
local dMaxMatBladeHorizontalDouble
if Machining[1].bIsApplicable then
local dMaxMat = TOOLS[Machining[1].ToolInfo.nToolIndex].dMaxMaterial
local dRadius = TOOLS[Machining[1].ToolInfo.nToolIndex].dDiameter / 2
local sHead = TOOLS[Machining[1].ToolInfo.nToolIndex].sHead
-- se taglio di fianco disponibile, si controlla il massimo materiale reale. Per pezzi alti, bisogna controllare anche l'ingombro asse Z nelle 4 direzioni.
if Part.dHeight < BeamData.MIN_DIM_HBEAM then
dMaxMat = min( dMaxMat, BeamData.MAX_DIM_HTCUT)
dMaxMatBladeSideSingle = dMaxMat
dMaxMatBladeSideDouble = dMaxMat * 2
else
if BeamData.GetMaxMatReductionBladeCut then
dMaxMatBladeSideSingle = min( max( dRadius - BeamData.GetMaxMatReductionBladeCut( sHead, Y_AX()), dRadius - BeamData.GetMaxMatReductionBladeCut( sHead, -Y_AX())),
TOOLS[Machining[1].ToolInfo.nToolIndex].dMaxMaterial)
dMaxMatBladeSideDouble = dRadius - BeamData.GetMaxMatReductionBladeCut( sHead, Y_AX()) + dRadius - BeamData.GetMaxMatReductionBladeCut( sHead, -Y_AX())
else
dMaxMatBladeSideSingle = abs( BeamData.MAX_DIM_HTCUT_HBEAM)
dMaxMatBladeSideDouble = abs( BeamData.MAX_DIM_HTCUT_HBEAM) * 2
end
-- se forza utilizzo motosega
if ParametersFromStrategy.bForceChainSaw then
-- ChainSawHorizontal (motosega)
-- ChainSawSideSingle (motosega)
-- ChainSawSideDouble (motosega)
else
-- Blade
Machining, Result = BladeToWaste.Make( Proc, Part, ParametersFromStrategy)
if Machining and #Machining > 0 then
Machining.sTypeMachining = 'Blade'
end
-- se taglio orizzontale
if BeamData.GetMaxMatReductionBladeCut then
dMaxMatBladeHorizontalSingle = min( TOOLS[Machining[1].ToolInfo.nToolIndex].dMaxMaterial, dRadius - BeamData.GetMaxMatReductionBladeCut( TOOLS[Machining[1].ToolInfo.nToolIndex].sHead, -Z_AX()))
else
dMaxMatBladeHorizontalSingle = TOOLS[Machining[1].ToolInfo.nToolIndex].dMaxMaterial
end
end
if Machining[2].bIsApplicable then
if BeamData.GetMaxMatReductionBladeCut then
local dRadius = TOOLS[Machining[2].ToolInfo.nToolIndex].dDiameter / 2
dMaxMatBladeHorizontalDouble = min( TOOLS[Machining[2].ToolInfo.nToolIndex].dMaxMaterial, dRadius - BeamData.GetMaxMatReductionBladeCut( TOOLS[Machining[2].ToolInfo.nToolIndex].sHead, Z_AX()))
else
dMaxMatBladeHorizontalDouble = TOOLS[Machining[2].ToolInfo.nToolIndex].dMaxMaterial
end
end
-- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos)
-- BladeSideSingle (taglio di lama singolo di fianco)
if Machining[1].bIsApplicable and ( dMaxMatBladeSideSingle - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then
Result.dQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE')
Machining.sTypeMachining = 'BladeSideSingle'
Machining[2].bIsApplicable = false
Machining[3].bIsApplicable = false
Machining[4].bIsApplicable = false
return Machining, Result
-- TODO considerare di tagliare con il massimo materiale possibile per non salire troppo in Z (macchine tipo PF), oppure non scendere troppo (tipo Kairos)
-- BladeSideDouble (taglio di lama doppio di fianco)
elseif Machining[1].bIsApplicable and ( dMaxMatBladeSideDouble - BeamData.CUT_EXTRA) > Part.dWidth + 10 * GEO.EPS_SMALL then
Result.dQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE')
Result.dMRR = Result.dMRR/2
Machining.sTypeMachining = 'BladeSideDouble'
Machining[2].bIsApplicable = false
Machining[3].bIsApplicable = false
Machining[4].bIsApplicable = false
return Machining, Result
-- BladeHorizontalSingle (taglio di lama singolo orizzontale)
elseif Machining[1].bIsApplicable and ( dMaxMatBladeHorizontalSingle - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then
Result.dQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE')
Machining.sTypeMachining = 'BladeHorizontalSingle'
Machining[2].bIsApplicable = false
Machining[3].bIsApplicable = false
Machining[4].bIsApplicable = false
return Machining, Result
-- BladeHorizontalDouble (taglio di lama doppio orizzontale)
elseif Machining[1].bIsApplicable and Machining[2].bIsApplicable and
( dMaxMatBladeHorizontalSingle + dMaxMatBladeHorizontalDouble - BeamData.CUT_EXTRA) > Part.dHeight + 10 * GEO.EPS_SMALL then
Result.dQuality = FeatureLib.GetStrategyQuality( 'SAWBLADE')
Result.dMRR = Result.dMRR/2
Machining.sTypeMachining = 'BladeHorizontalDouble'
Machining[1].ToolInfo.dMaxMatBladeFromTop = dMaxMatBladeHorizontalSingle
Machining[2].ToolInfo.dMaxMatBladeFromDown = dMaxMatBladeHorizontalDouble
Machining[3].bIsApplicable = false
Machining[4].bIsApplicable = false
return Machining, Result
-- TODO : casi con motosega da completare
-- ChainSawHorizontal (motosega)
-- ChainSawSideSingle (motosega)
-- ChainSawSideDouble (motosega)
-- ChainSawPlusBlade (motosega più lama orizzontale)
-- Mill (svuotatura)
-- TODO : casi con motosega da completare
-- ChainSawPlusBlade (motosega più lama orizzontale)
-- Mill (svuotatura)
end
-- se non ho trovato neanche una lavorazione completa, non posso separare
@@ -177,148 +47,5 @@ function SPLITCUT.GetStrategy( Proc, Part, OptionalParameters)
return Machining, Result
end
-------------------------------------------------------------------------------------------------------------
function SPLITCUT.GetEdgeToMachine( Proc, vtEdge)
local Edge
for i = 1, #Proc.Faces[1].Edges do
if AreSameVectorApprox( Proc.Faces[1].Edges[i].vtN, vtEdge) then
Edge = Proc.Faces[1].Edges[i]
end
end
return Edge
end
-----------------------------------------------------------------------------------
function SPLITCUT.Execute( Proc, Part, Strategy)
local Machinings = {}
-- applico le lavorazioni
--------------------------------------------------------------------------------
if Strategy.SplitStrategy.sTypeMachining == 'BladeSideSingle' then
local Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
local OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;')
Machining.AuxiliaryData.bIsSplitOrCut = true
end
OptionalParameters.dRadialStepSpan = 0
local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, -Y_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'BladeSideDouble' then
local Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
local OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex
-- Taglio lato frontale
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Presplit;', 'Precut;')
end
OptionalParameters.dRadialStepSpan = 0
local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, -Y_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
-- Taglio lato dietro
Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
OptionalParameters.dDepthToMachine = Part.dWidth / 2 + BeamData.CUT_EXTRA_MIN
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;')
Machining.AuxiliaryData.bIsSplitOrCut = true
end
OptionalParameters.dRadialStepSpan = 0
EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, Y_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'BladeHorizontalSingle' then
local Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
local OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
OptionalParameters.dDepthToMachine = Part.dHeight + BeamData.CUT_EXTRA
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;')
Machining.AuxiliaryData.bIsSplitOrCut = true
end
OptionalParameters.dRadialStepSpan = 0
local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, Z_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'BladeHorizontalDouble' then
-- Taglio lato frontale
local Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
local OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[1].ToolInfo.nToolIndex
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
local dExtraMaxMat = ( Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop + Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - Part.dHeight - BeamData.CUT_EXTRA_MIN) / 2
OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[1].ToolInfo.dMaxMatBladeFromTop - dExtraMaxMat
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Presplit;', 'Precut;')
end
OptionalParameters.dRadialStepSpan = 0
local EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, Z_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
-- Taglio lato dietro
Machining = {}
Machining.Splitting = {}
Machining.AuxiliaryData = {}
OptionalParameters = {}
OptionalParameters.nToolIndex = Strategy.SplitStrategy[2].ToolInfo.nToolIndex
OptionalParameters.dLongitudinalOffset = Strategy.dOffset or 0
OptionalParameters.dDepthToMachine = Strategy.SplitStrategy[2].ToolInfo.dMaxMatBladeFromDown - dExtraMaxMat
if Strategy.bIsTailCut and not Strategy.bIsPreCut then
OptionalParameters.sUserNotes = EgtIf( Strategy.bSplit, 'Split;', 'Cut;')
Machining.AuxiliaryData.bIsSplitOrCut = true
end
OptionalParameters.dRadialStepSpan = 0
EdgeToMachine = SPLITCUT.GetEdgeToMachine( Proc, -Z_AX())
Machining.Splitting = FaceByBlade.Make( Proc, Part, Proc.Faces[1], EdgeToMachine, OptionalParameters)
table.insert( Machinings, Machining)
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'ChainSawHorizontal' then
; -- TODO
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'ChainSawSideSingle' then
; -- TODO
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'ChainSawSideDouble' then
; -- TODO
----------------------------------------------------------------------------------
elseif Strategy.SplitStrategy.sTypeMachining == 'ChainSawPlusBlade' then
; -- TODO
----------------------------------------------------------------------------------
end
return Machinings
end
-------------------------------------------------------------------------------------------------------------
return SPLITCUT