diff --git a/Images/ConfigStrategy/Bevel-1-Through.png b/Images/ConfigStrategy/Bevel-1-Through.png new file mode 100644 index 0000000..7348cf3 Binary files /dev/null and b/Images/ConfigStrategy/Bevel-1-Through.png differ diff --git a/Images/ConfigStrategy/BlockHouse.png b/Images/ConfigStrategy/BlockHouse.png new file mode 100644 index 0000000..104910a Binary files /dev/null and b/Images/ConfigStrategy/BlockHouse.png differ diff --git a/Images/ConfigStrategy/BlockHouseFront.png b/Images/ConfigStrategy/BlockHouseFront.png new file mode 100644 index 0000000..268c92d Binary files /dev/null and b/Images/ConfigStrategy/BlockHouseFront.png differ diff --git a/Images/ConfigStrategy/BlockHouseHalfLap.png b/Images/ConfigStrategy/BlockHouseHalfLap.png new file mode 100644 index 0000000..9fb5ac5 Binary files /dev/null and b/Images/ConfigStrategy/BlockHouseHalfLap.png differ diff --git a/Images/ConfigStrategy/Chamfer.png b/Images/ConfigStrategy/Chamfer.png new file mode 100644 index 0000000..4d266f9 Binary files /dev/null and b/Images/ConfigStrategy/Chamfer.png differ diff --git a/Images/ConfigStrategy/Cut-1-Through.png b/Images/ConfigStrategy/Cut-1-Through.png new file mode 100644 index 0000000..e771d16 Binary files /dev/null and b/Images/ConfigStrategy/Cut-1-Through.png differ diff --git a/Images/ConfigStrategy/DoubleCut.png b/Images/ConfigStrategy/DoubleCut.png new file mode 100644 index 0000000..16a6213 Binary files /dev/null and b/Images/ConfigStrategy/DoubleCut.png differ diff --git a/Images/ConfigStrategy/Dovetail.png b/Images/ConfigStrategy/Dovetail.png new file mode 100644 index 0000000..93019cd Binary files /dev/null and b/Images/ConfigStrategy/Dovetail.png differ diff --git a/Images/ConfigStrategy/DovetailMortise.png b/Images/ConfigStrategy/DovetailMortise.png new file mode 100644 index 0000000..3cffb74 Binary files /dev/null and b/Images/ConfigStrategy/DovetailMortise.png differ diff --git a/Images/ConfigStrategy/DovetailMortiseFront.png b/Images/ConfigStrategy/DovetailMortiseFront.png new file mode 100644 index 0000000..e875df6 Binary files /dev/null and b/Images/ConfigStrategy/DovetailMortiseFront.png differ diff --git a/Images/ConfigStrategy/DovetailTenon.png b/Images/ConfigStrategy/DovetailTenon.png new file mode 100644 index 0000000..d63fe9e Binary files /dev/null and b/Images/ConfigStrategy/DovetailTenon.png differ diff --git a/Images/ConfigStrategy/Drilling.png b/Images/ConfigStrategy/Drilling.png new file mode 100644 index 0000000..6c07d93 Binary files /dev/null and b/Images/ConfigStrategy/Drilling.png differ diff --git a/Images/ConfigStrategy/FrenchRidgeLap.png b/Images/ConfigStrategy/FrenchRidgeLap.png new file mode 100644 index 0000000..330805d Binary files /dev/null and b/Images/ConfigStrategy/FrenchRidgeLap.png differ diff --git a/Images/ConfigStrategy/Groove-3-Through.png b/Images/ConfigStrategy/Groove-3-Through.png new file mode 100644 index 0000000..75cb94c Binary files /dev/null and b/Images/ConfigStrategy/Groove-3-Through.png differ diff --git a/Images/ConfigStrategy/HeadCut.png b/Images/ConfigStrategy/HeadCut.png new file mode 100644 index 0000000..fef0421 Binary files /dev/null and b/Images/ConfigStrategy/HeadCut.png differ diff --git a/Images/ConfigStrategy/MortiseFront.png b/Images/ConfigStrategy/MortiseFront.png new file mode 100644 index 0000000..031a131 Binary files /dev/null and b/Images/ConfigStrategy/MortiseFront.png differ diff --git a/Images/ConfigStrategy/Planing.png b/Images/ConfigStrategy/Planing.png new file mode 100644 index 0000000..913e8d1 Binary files /dev/null and b/Images/ConfigStrategy/Planing.png differ diff --git a/Images/ConfigStrategy/Pocket-5-Blind.png b/Images/ConfigStrategy/Pocket-5-Blind.png new file mode 100644 index 0000000..cd910f9 Binary files /dev/null and b/Images/ConfigStrategy/Pocket-5-Blind.png differ diff --git a/Images/ConfigStrategy/Pocket-Round.png b/Images/ConfigStrategy/Pocket-Round.png new file mode 100644 index 0000000..372be83 Binary files /dev/null and b/Images/ConfigStrategy/Pocket-Round.png differ diff --git a/Images/ConfigStrategy/ProfileFront.png b/Images/ConfigStrategy/ProfileFront.png new file mode 100644 index 0000000..8ef08dc Binary files /dev/null and b/Images/ConfigStrategy/ProfileFront.png differ diff --git a/Images/ConfigStrategy/ProfileHead.png b/Images/ConfigStrategy/ProfileHead.png new file mode 100644 index 0000000..2205b48 Binary files /dev/null and b/Images/ConfigStrategy/ProfileHead.png differ diff --git a/Images/ConfigStrategy/ProfileHeadCambered.png b/Images/ConfigStrategy/ProfileHeadCambered.png new file mode 100644 index 0000000..09ca2dc Binary files /dev/null and b/Images/ConfigStrategy/ProfileHeadCambered.png differ diff --git a/Images/ConfigStrategy/ProfileHeadConcave.png b/Images/ConfigStrategy/ProfileHeadConcave.png new file mode 100644 index 0000000..76b72ef Binary files /dev/null and b/Images/ConfigStrategy/ProfileHeadConcave.png differ diff --git a/Images/ConfigStrategy/ProfileHeadConvex.png b/Images/ConfigStrategy/ProfileHeadConvex.png new file mode 100644 index 0000000..f3e1458 Binary files /dev/null and b/Images/ConfigStrategy/ProfileHeadConvex.png differ diff --git a/Images/ConfigStrategy/Rabbet-2-Through.png b/Images/ConfigStrategy/Rabbet-2-Through.png new file mode 100644 index 0000000..c8792dd Binary files /dev/null and b/Images/ConfigStrategy/Rabbet-2-Through.png differ diff --git a/Images/ConfigStrategy/RidgeValleyCut.png b/Images/ConfigStrategy/RidgeValleyCut.png new file mode 100644 index 0000000..7efca38 Binary files /dev/null and b/Images/ConfigStrategy/RidgeValleyCut.png differ diff --git a/Images/ConfigStrategy/RoundArch.png b/Images/ConfigStrategy/RoundArch.png new file mode 100644 index 0000000..8488345 Binary files /dev/null and b/Images/ConfigStrategy/RoundArch.png differ diff --git a/Images/ConfigStrategy/ScarfJoint.png b/Images/ConfigStrategy/ScarfJoint.png new file mode 100644 index 0000000..8fe9259 Binary files /dev/null and b/Images/ConfigStrategy/ScarfJoint.png differ diff --git a/Images/ConfigStrategy/StepJoint.png b/Images/ConfigStrategy/StepJoint.png new file mode 100644 index 0000000..1ad8791 Binary files /dev/null and b/Images/ConfigStrategy/StepJoint.png differ diff --git a/Images/ConfigStrategy/StepJointNotch.png b/Images/ConfigStrategy/StepJointNotch.png new file mode 100644 index 0000000..32a5bd1 Binary files /dev/null and b/Images/ConfigStrategy/StepJointNotch.png differ diff --git a/Images/ConfigStrategy/TailCut.png b/Images/ConfigStrategy/TailCut.png new file mode 100644 index 0000000..66e576a Binary files /dev/null and b/Images/ConfigStrategy/TailCut.png differ diff --git a/Images/ConfigStrategy/Tenon.png b/Images/ConfigStrategy/Tenon.png new file mode 100644 index 0000000..f9024fd Binary files /dev/null and b/Images/ConfigStrategy/Tenon.png differ diff --git a/Images/ConfigStrategy/Text.png b/Images/ConfigStrategy/Text.png new file mode 100644 index 0000000..80edba0 Binary files /dev/null and b/Images/ConfigStrategy/Text.png differ diff --git a/Images/ConfigStrategy/TriangleCut.png b/Images/ConfigStrategy/TriangleCut.png new file mode 100644 index 0000000..1ad8791 Binary files /dev/null and b/Images/ConfigStrategy/TriangleCut.png differ diff --git a/Images/ConfigStrategy/Tunnel-4-Through.png b/Images/ConfigStrategy/Tunnel-4-Through.png new file mode 100644 index 0000000..aaa3609 Binary files /dev/null and b/Images/ConfigStrategy/Tunnel-4-Through.png differ diff --git a/Images/ConfigStrategy/TyroleanDovetail.png b/Images/ConfigStrategy/TyroleanDovetail.png new file mode 100644 index 0000000..b3d3e7c Binary files /dev/null and b/Images/ConfigStrategy/TyroleanDovetail.png differ diff --git a/LuaLibs/BasicCustomerStrategies.lua b/LuaLibs/BasicCustomerStrategies.lua index debcff6..c68aec4 100644 --- a/LuaLibs/BasicCustomerStrategies.lua +++ b/LuaLibs/BasicCustomerStrategies.lua @@ -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) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 5bb8f3c..8501abc 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -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 diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index f3686ba..d6a312d 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -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 diff --git a/LuaLibs/FaceData.lua b/LuaLibs/FaceData.lua index 3476b4e..37084a3 100644 --- a/LuaLibs/FaceData.lua +++ b/LuaLibs/FaceData.lua @@ -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 diff --git a/LuaLibs/FeatureLib.lua b/LuaLibs/FeatureLib.lua index e4fef6c..54c0855 100644 --- a/LuaLibs/FeatureLib.lua +++ b/LuaLibs/FeatureLib.lua @@ -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 diff --git a/LuaLibs/Identity.lua b/LuaLibs/Identity.lua index d77691e..94ce9c8 100644 --- a/LuaLibs/Identity.lua +++ b/LuaLibs/Identity.lua @@ -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 --------------------------------------------------------------------- diff --git a/LuaLibs/Logs.lua b/LuaLibs/Logs.lua index d62b07a..1f2c849 100644 --- a/LuaLibs/Logs.lua +++ b/LuaLibs/Logs.lua @@ -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 diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 0e32302..e584400 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -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 diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index e549f76..52198bb 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -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" : [ ] } ] diff --git a/Strategies/GeneralParameters.json b/Strategies/GeneralParameters.json index 3c8e942..eee8c9e 100644 --- a/Strategies/GeneralParameters.json +++ b/Strategies/GeneralParameters.json @@ -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", diff --git a/Strategies/Standard/HEADCUT/HEADCUT.json b/Strategies/Standard/HEADCUT/HEADCUT.json index ba26a06..1c49971 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.json +++ b/Strategies/Standard/HEADCUT/HEADCUT.json @@ -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" } ] } diff --git a/Strategies/Standard/HEADCUT/HEADCUT.lua b/Strategies/Standard/HEADCUT/HEADCUT.lua index a5905c8..3524c2c 100644 --- a/Strategies/Standard/HEADCUT/HEADCUT.lua +++ b/Strategies/Standard/HEADCUT/HEADCUT.lua @@ -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 diff --git a/Strategies/Standard/STR0001/STR0001.json b/Strategies/Standard/STR0001/STR0001.json index 961d191..29fe0c1 100644 --- a/Strategies/Standard/STR0001/STR0001.json +++ b/Strategies/Standard/STR0001/STR0001.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0002/STR0002.lua b/Strategies/Standard/STR0002/STR0002.lua index 51d18f0..d47f3a6 100644 --- a/Strategies/Standard/STR0002/STR0002.lua +++ b/Strategies/Standard/STR0002/STR0002.lua @@ -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 diff --git a/Strategies/Standard/STR0005/STR0005.json b/Strategies/Standard/STR0005/STR0005.json index 469542a..085d8d3 100644 --- a/Strategies/Standard/STR0005/STR0005.json +++ b/Strategies/Standard/STR0005/STR0005.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0006/STR0006.json b/Strategies/Standard/STR0006/STR0006.json index 49fe93d..ce22a37 100644 --- a/Strategies/Standard/STR0006/STR0006.json +++ b/Strategies/Standard/STR0006/STR0006.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0007/STR0007.json b/Strategies/Standard/STR0007/STR0007.json index 32b5f7c..a85faa6 100644 --- a/Strategies/Standard/STR0007/STR0007.json +++ b/Strategies/Standard/STR0007/STR0007.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0008/STR0008.json b/Strategies/Standard/STR0008/STR0008.json index 44beadd..22d8522 100644 --- a/Strategies/Standard/STR0008/STR0008.json +++ b/Strategies/Standard/STR0008/STR0008.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0011/STR0011.lua b/Strategies/Standard/STR0011/STR0011.lua index 310ad98..d845e23 100644 --- a/Strategies/Standard/STR0011/STR0011.lua +++ b/Strategies/Standard/STR0011/STR0011.lua @@ -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 diff --git a/Strategies/Standard/STR0012/STR0012.json b/Strategies/Standard/STR0012/STR0012.json index 944da26..8c0d083 100644 --- a/Strategies/Standard/STR0012/STR0012.json +++ b/Strategies/Standard/STR0012/STR0012.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0015/STR0015.json b/Strategies/Standard/STR0015/STR0015.json index 3e833fd..2fadde9 100644 --- a/Strategies/Standard/STR0015/STR0015.json +++ b/Strategies/Standard/STR0015/STR0015.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/STR0015/STR0015.lua b/Strategies/Standard/STR0015/STR0015.lua index 2f9432e..c53cff6 100644 --- a/Strategies/Standard/STR0015/STR0015.lua +++ b/Strategies/Standard/STR0015/STR0015.lua @@ -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] diff --git a/Strategies/Standard/TAILCUT/TAILCUT.json b/Strategies/Standard/TAILCUT/TAILCUT.json index fbf8ea4..24dfc4a 100644 --- a/Strategies/Standard/TAILCUT/TAILCUT.json +++ b/Strategies/Standard/TAILCUT/TAILCUT.json @@ -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" } ] } \ No newline at end of file diff --git a/Strategies/Standard/TAILCUT/TAILCUT.lua b/Strategies/Standard/TAILCUT/TAILCUT.lua index 8e5b241..7a911d7 100644 --- a/Strategies/Standard/TAILCUT/TAILCUT.lua +++ b/Strategies/Standard/TAILCUT/TAILCUT.lua @@ -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) diff --git a/Strategies/Strategies.ini b/Strategies/Strategies.ini index 4c6baa0..fac84cb 100644 --- a/Strategies/Strategies.ini +++ b/Strategies/Strategies.ini @@ -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 diff --git a/StrategyLibs/BLADETOWASTE.lua b/StrategyLibs/BLADETOWASTE.lua index 1b86485..7818ef4 100644 --- a/StrategyLibs/BLADETOWASTE.lua +++ b/StrategyLibs/BLADETOWASTE.lua @@ -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() diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index e7a1b18..fb791e6 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -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 diff --git a/StrategyLibs/SPLITCUT.lua b/StrategyLibs/SPLITCUT.lua index a0d65f2..5d8409e 100644 --- a/StrategyLibs/SPLITCUT.lua +++ b/StrategyLibs/SPLITCUT.lua @@ -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