diff --git a/LuaLibs/BeamLib.lua b/LuaLibs/BeamLib.lua index a4bc803..83fba71 100644 --- a/LuaLibs/BeamLib.lua +++ b/LuaLibs/BeamLib.lua @@ -764,7 +764,7 @@ function BeamLib.LoadCustomParametersInStrategy( Proc, Part, CustomParameters, D if DefaultStrategyParamList.ParameterList[i].sType == 'b' then UpdatedParameters[DefaultStrategyParamList.ParameterList[i].sName] = xParameterValue == 'true' or xParameterValue == '1' or xParameterValue == true elseif DefaultStrategyParamList.ParameterList[i].sType == 'd' then - if #DefaultStrategyParamList.ParameterList[i].sValue > 0 then + if #DefaultStrategyParamList.ParameterList[i].sValue > 0 or #xParameterValue > 0 then UpdatedParameters[DefaultStrategyParamList.ParameterList[i].sName] = tonumber( xParameterValue) -- stringa vuota equivale a non passare alcun valore (deciderà la strategia) else diff --git a/LuaLibs/LeadInOutLib.lua b/LuaLibs/LeadInOutLib.lua index 4f22484..d9f9d86 100644 --- a/LuaLibs/LeadInOutLib.lua +++ b/LuaLibs/LeadInOutLib.lua @@ -93,7 +93,7 @@ end ------------------------------------------------------------------------------------------------------------- -local function GetToolAddLength( dToolDiameter, dDepthToMachine) +function LeadInOutLib.GetToolAddLength( dToolDiameter, dDepthToMachine) local dCheckDepth = min( dToolDiameter / 2, dDepthToMachine) local dToolAddLength = sqrt( dCheckDepth * dToolDiameter - dCheckDepth * dCheckDepth) @@ -119,7 +119,7 @@ function LeadInOutLib.CalculateLeadInOut( sLeadInOutType, Parameters, OptionalPa local bIsEndClosed = not Edge.bIsEndOpen -- accorciamento per lati chiusi - LeadInOut.dToolAddLength = GetToolAddLength( Tool.dDiameter, dDepthToMachine) + LeadInOut.dToolAddLength = LeadInOutLib.GetToolAddLength( Tool.dDiameter, dDepthToMachine) LeadInOut.dExtraAddLengthStart, LeadInOut.dExtraAddLengthEnd = GetExtraAddLengthInclinedSides( Face, Edge) -- allungamento per faccia singola (aperta in tutte le direzioni) LeadInOut.dAddedLengthOpenFace = BeamData.CUT_EXTRA diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 39388b5..7ba2dbf 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -209,6 +209,9 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part) Machinings[nCurrentMachiningIndex].nFeatureSegment = j Machinings[nCurrentMachiningIndex].dLengthToMachine = Machinings[nCurrentMachiningIndex].dEdgeLength + Machinings[nCurrentMachiningIndex].LeadIn.dStartAddLength + Machinings[nCurrentMachiningIndex].LeadOut.dEndAddLength Machinings[nCurrentMachiningIndex].dTimeToMachine = MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machinings[nCurrentMachiningIndex], Part) + Machinings[nCurrentMachiningIndex].bIsFirstSegment = ( j == 1) + Machinings[nCurrentMachiningIndex].bIsLastSegment = ( j == nParts) + Machinings[nCurrentMachiningIndex].bIsMachiningSplitted = true end -- anche le lavorazioni non splittate necessitano del segmento assegnato else diff --git a/Messages/EgalTechEng.txt b/Messages/EgalTechEng.txt index eeed5ec..f120cb4 100644 --- a/Messages/EgalTechEng.txt +++ b/Messages/EgalTechEng.txt @@ -319,4 +319,8 @@ 1000316=Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length 1000317=Finish with mill 1000318=Use a mill to finish the surface if split with chain saw +1000319=Allow multiple short strips +1000320=Allow multiple short strips +1000321=Length limit to drop the waste +1000322=If Cutting Strategy is set on AUTO, up to this length the software drop the waste, otherwise it'll keep attached // ----- End ----- diff --git a/Messages/EgalTechIta.txt b/Messages/EgalTechIta.txt index 033c206..019221a 100644 --- a/Messages/EgalTechIta.txt +++ b/Messages/EgalTechIta.txt @@ -319,4 +319,8 @@ 1000316=Autocam applicherà una lavorazione sullo zero teorico per evitare collisioni se la lunghezza teorica del pezzo non corrisponde alla lunghezza reale 1000317=Finisci con la fresa 1000318=Utilizza una fresa per rifinire la superficie se tagliata con la sega a catena +1000319=Permettere codoli multipli +1000320=Permettere codoli multipli +1000321=Lunghezza limite fino alla quale lo scarto viene staccato +1000322=Se la strategia di taglio è impostata su AUTO, fino a questa lunghezza il software stacca gli scarti, altrimenti li mantiene attaccati // ----- End ----- diff --git a/Messages/EgalTechNld.txt b/Messages/EgalTechNld.txt index 864071e..fbc9e18 100644 --- a/Messages/EgalTechNld.txt +++ b/Messages/EgalTechNld.txt @@ -319,4 +319,8 @@ 1000316=Autocam past een bewerking toe op het theoretische nulpunt om botsingen te voorkomen als de theoretische lengte niet overeenkomt met de werkelijke lengte 1000317=Afwerken met frees 1000318=Gebruik een frees om het oppervlak na te bewerken als dit met de kettingzaag is gespleten +1000319=Sta meerdere korte verbindingsstrips toe +1000320=Sta meerdere korte verbindingsstrips toe +1000321=Maximale lengte voor het uitwerpen van het reststuk +1000322=Als de snijstrategie op AUTO staat, wordt het reststuk tot deze maximale lengte automatisch uitgeworpen; bij grotere lengtes blijft het reststuk aan het werkstuk bevestigd. // ----- End ----- \ No newline at end of file diff --git a/Strategies/AvailableStrategyList.json b/Strategies/AvailableStrategyList.json index 1799793..53c9ac1 100644 --- a/Strategies/AvailableStrategyList.json +++ b/Strategies/AvailableStrategyList.json @@ -108,6 +108,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -151,6 +155,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -196,6 +204,10 @@ { "sName": "Rabbet-2-Through", "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] + }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-2-Through.png", + "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] } ] }, @@ -224,6 +236,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -271,6 +287,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -314,6 +334,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -368,6 +392,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -455,6 +483,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -520,6 +552,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] @@ -575,6 +611,10 @@ "sImage": "ConfigStrategy\\Rabbet-2-Through.png", "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010"} ] }, + { "sName": "VGroove-2-Through", + "sImage": "ConfigStrategy\\VGroove-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" } ] diff --git a/Strategies/Standard/STR0005/STR0005.json b/Strategies/Standard/STR0005/STR0005.json index ad1cf38..0a67b40 100644 --- a/Strategies/Standard/STR0005/STR0005.json +++ b/Strategies/Standard/STR0005/STR0005.json @@ -100,6 +100,18 @@ } ] }, + { + "sName": "dLengthLimitToDropWaste", + "sNameNge": "LEN_DROP_WASTE", + "sValue": "", + "sDescriptionShort": "Length limit to drop the waste", + "sDescriptionLong": "If Cutting Strategy is set on AUTO, up to this length the software drop the waste, otherwise it'll keep attached", + "idDescriptionShortMsg": 1000321, + "idDescriptionLongMsg": 1000322, + "sType": "d", + "sMessageId": " ", + "sMinUserLevel": "1" + }, { "sName": "bDisableDicing", "sNameNge": "DISABLE_DICING", @@ -136,6 +148,18 @@ "sMessageId": " ", "sMinUserLevel": "1" }, + { + "sName": "bAllowPerpendicularStrip", + "sNameNge": "ALLOW_PERPENDICULAR_STRIP", + "sValue": "false", + "sDescriptionShort": "Allow multiple short strips", + "sDescriptionLong": "Allow multiple short strips", + "idDescriptionShortMsg": 1000319, + "idDescriptionLongMsg": 1000320, + "sType": "b", + "sMessageId": " ", + "sMinUserLevel": "1" + }, { "sName": "bFinishWithMill", "sNameNge": "ALLOW_FINISH_MILL", diff --git a/Strategies/Standard/STR0005/STR0005.lua b/Strategies/Standard/STR0005/STR0005.lua index 62b0764..f4e9128 100644 --- a/Strategies/Standard/STR0005/STR0005.lua +++ b/Strategies/Standard/STR0005/STR0005.lua @@ -100,8 +100,8 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) -- considerazioni necessarie a determinare se lavorare con codolo oppure no local bKeepWasteAttached = ( Strategy.Parameters.sCuttingStrategy == 'KEEP_WASTE_ATTACHED') local bDropWaste = ( Strategy.Parameters.sCuttingStrategy == 'DROP_WASTE') - local bFeatureHindersClamping = MachiningLib.IsFeatureHinderingClamping( Proc, Part) + local dLengthLimitToDropWaste = Strategy.Parameters.dLengthLimitToDropWaste local bIsFeatureLong = FeatureLib.IsMachiningLong( Proc.b3Box:getDimX(), Part, { dMaxSegmentLength = BeamData.LONGCUT_ENDLEN}) local bIsTwoFacesCommonEdgeTooLong = ( ( Proc.Topology and ( Proc.Topology.sName == 'Rabbet-2-Through' or Proc.Topology.sName == 'Bevel-2-Blind')) and IsTwoFacesCommonEdgeTooLong( Proc, Part)) @@ -109,10 +109,16 @@ function STR0005.Make( bAddMachining, Proc, Part, CustomParameters) -- lavorazione con codolo if ( Proc.nFct > 2 and bIsFeatureLong) or ( bFeatureHindersClamping and not bDropWaste) + or ( dLengthLimitToDropWaste and Proc.b3Box:getDimX() > dLengthLimitToDropWaste) or bKeepWasteAttached then local BladeKeepWasteResult - local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = Strategy.Parameters.dStripWidth, bForced = bKeepWasteAttached} + local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, + dStripWidth = Strategy.Parameters.dStripWidth, + bAllowPerpendicularStrip = Strategy.Parameters.bAllowPerpendicularStrip, + bFinishWithMill = Strategy.Parameters.bFinishWithMill, + bForced = bKeepWasteAttached + } AuxiliaryData.bIgnoreNotClampableLength = true Blade.Result, BladeKeepWasteResult = BladeKeepWaste.Make( Proc, Part, OptionalParameters) dTimeToMachine = BladeKeepWasteResult.dTimeToMachine diff --git a/Strategies/Standard/STR0012/STR0012.json b/Strategies/Standard/STR0012/STR0012.json index ea028a1..cdc0023 100644 --- a/Strategies/Standard/STR0012/STR0012.json +++ b/Strategies/Standard/STR0012/STR0012.json @@ -51,6 +51,18 @@ } ] }, + { + "sName": "dLengthLimitToDropWaste", + "sNameNge": "LEN_DROP_WASTE", + "sValue": "", + "sDescriptionShort": "Length limit to drop the waste", + "sDescriptionLong": "If Cutting Strategy is set on AUTO, up to this length the software drop the waste, otherwise it'll keep attached", + "idDescriptionShortMsg": 1000321, + "idDescriptionLongMsg": 1000322, + "sType": "d", + "sMessageId": " ", + "sMinUserLevel": "1" + }, { "sName": "sCanDamageNextPiece", "sNameNge": "DAMAGE_NEXT_PIECE", @@ -125,6 +137,30 @@ } ] }, + { + "sName": "dStripWidth", + "sNameNge": "STRIP_WIDTH", + "sValue": "5", + "sDescriptionShort": "Strip width", + "sDescriptionLong": "In case the waste is still kept attached, this is the wigth dimension of the strip", + "idDescriptionShortMsg": 1000129, + "idDescriptionLongMsg": 1000130, + "sType": "d", + "sMessageId": " ", + "sMinUserLevel": "1" + }, + { + "sName": "bAllowPerpendicularStrip", + "sNameNge": "ALLOW_PERPENDICULAR_STRIP", + "sValue": "false", + "sDescriptionShort": "Allow multiple short strips", + "sDescriptionLong": "Allow multiple short strips", + "idDescriptionShortMsg": 1000319, + "idDescriptionLongMsg": 1000320, + "sType": "b", + "sMessageId": " ", + "sMinUserLevel": "1" + }, { "sName": "dMaxWasteLength", "sSource": "GEN_dMaxWasteLength", diff --git a/Strategies/Standard/STR0012/STR0012.lua b/Strategies/Standard/STR0012/STR0012.lua index d570df3..b500026 100644 --- a/Strategies/Standard/STR0012/STR0012.lua +++ b/Strategies/Standard/STR0012/STR0012.lua @@ -95,13 +95,17 @@ function STR0012.Make( bAddMachining, Proc, Part, CustomParameters) local bKeepWasteAttached = ( Strategy.Parameters.sCuttingStrategy == 'KEEP_WASTE_ATTACHED') local bDropWaste = ( Strategy.Parameters.sCuttingStrategy == 'DROP_WASTE') local bFeatureHindersClamping = MachiningLib.IsFeatureHinderingClamping( NewProc, Part) + local dLengthLimitToDropWaste = Strategy.Parameters.dLengthLimitToDropWaste -- lavorazione con codolo if ( bFeatureHindersClamping and not bDropWaste) + or ( dLengthLimitToDropWaste and Proc.b3Box:getDimX() > dLengthLimitToDropWaste) or bKeepWasteAttached then local BladeKeepWasteResult - local OptionalParameters = { dExtendAfterTail = dExtendAfterTail, dStripWidth = 5, bFinishWithMill = false} + local OptionalParameters = { bAllowPerpendicularStrip = Strategy.Parameters.bAllowPerpendicularStrip, + dStripWidth = Strategy.Parameters.dStripWidth, + dExtendAfterTail = dExtendAfterTail, bFinishWithMill = false} AuxiliaryData.bIgnoreNotClampableLength = true TwoFaces.Result, BladeKeepWasteResult = BladeKeepWaste.Make( NewProc, Part, OptionalParameters) dTimeToMachine = BladeKeepWasteResult.dTimeToMachine @@ -113,10 +117,10 @@ function STR0012.Make( bAddMachining, Proc, Part, CustomParameters) else local BladeToWasteResult local OptionalParameters = { dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume, - dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, - bSaveAddedGeometries = bAddMachining, - dExtendAfterTail = dExtendAfterTail, - bReduceBladePath = Strategy.Parameters.bReduceBladePath + dMaxWasteLength = Strategy.Parameters.dMaxWasteLength, + bSaveAddedGeometries = bAddMachining, + dExtendAfterTail = dExtendAfterTail, + bReduceBladePath = Strategy.Parameters.bReduceBladePath } AuxiliaryData.bIgnoreNotClampableLength = false TwoFaces.Result, BladeToWasteResult = BladeToWaste.Make( NewProc, Part, OptionalParameters) diff --git a/StrategyLibs/BLADEKEEPWASTE.lua b/StrategyLibs/BLADEKEEPWASTE.lua index 566a094..4faf166 100644 --- a/StrategyLibs/BLADEKEEPWASTE.lua +++ b/StrategyLibs/BLADEKEEPWASTE.lua @@ -11,7 +11,8 @@ require( 'EgtBase') local FeatureLib = require( 'FeatureLib') local FaceData = require( 'FaceData') local MachiningLib = require( 'MachiningLib') -local BeamLib = require('BeamLib') +local BeamLib = require( 'BeamLib') +local BeamData = require( 'BeamDataNew') -- strategie di base local FaceByBlade = require('FACEBYBLADE') local FaceByMill = require( 'FACEBYMILL') @@ -146,10 +147,12 @@ local function MakeBottomFace( Proc, Part, BottomFace, EdgeToMachine, Parameters local dExtendAfterTail = Parameters.dExtendAfterTail local nToolIndex = Parameters.nToolIndex local dStripWidth = Parameters.dStripWidth + local bAllowPerpendicularStrip = Parameters.bAllowPerpendicularStrip local OtherBottomFace = Parameters.OtherBottomFace local dDepthToMachine = EdgeToMachine.dElevation / 2 - dStripWidth / 2 - local OptionalParametersFaceByBlade1 = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex} + local OptionalParametersFaceByBlade1 = { dDepthToMachine = dDepthToMachine, bIsSplitFeature = bIsSplitFeature, + dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex} local EdgeToMachineOpposite = BeamLib.FindEdgeBestOrientedAsDirection( BottomFace.Edges, -EdgeToMachine.vtN) -- primo lato @@ -175,7 +178,13 @@ local function MakeBottomFace( Proc, Part, BottomFace, EdgeToMachine, Parameters if OtherBottomFace and ( EdgeToMachine.idAdjacentFace == OtherBottomFace.id) then dStripWidth = TOOLS[Cutting2.nToolIndex].dThickness + 2 * dStripWidth end - dDepthToMachine = min( TOOLS[Cutting2.nToolIndex].dMaxMaterial, EdgeToMachine.dElevation - dStripWidth) + -- se richiesto, si calcola il codolo verticale + if bAllowPerpendicularStrip and FeatureLib.IsMachiningLong( Cutting1.dEdgeLength, Part) then + dDepthToMachine = TOOLS[Cutting2.nToolIndex].dMaxMaterial - 10 + else + dDepthToMachine = min( TOOLS[Cutting2.nToolIndex].dMaxMaterial, EdgeToMachine.dElevation - dStripWidth) + end + OptionalParametersFaceByBlade2.dDepthToMachine = dDepthToMachine Cutting2 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade2) @@ -189,7 +198,13 @@ local function MakeBottomFace( Proc, Part, BottomFace, EdgeToMachine, Parameters if OtherBottomFace and ( EdgeToMachine.idAdjacentFace == OtherBottomFace.id) then dStripWidth = TOOLS[Cutting1.nToolIndex].dThickness + 2 * dStripWidth end - dDepthToMachine = min( TOOLS[Cutting1.nToolIndex].dMaxMaterial, EdgeToMachine.dElevation - dStripWidth) + -- se richiesto, si calcola il codolo verticale + if bAllowPerpendicularStrip and FeatureLib.IsMachiningLong( Cutting2.dEdgeLength, Part) then + dDepthToMachine = TOOLS[Cutting1.nToolIndex].dMaxMaterial - 10 + else + dDepthToMachine = min( TOOLS[Cutting1.nToolIndex].dMaxMaterial, EdgeToMachine.dElevation - dStripWidth) + end + OptionalParametersFaceByBlade1.dDepthToMachine = dDepthToMachine Cutting1 = FaceByBlade.Make( Proc, Part, BottomFace, EdgeToMachine, OptionalParametersFaceByBlade1) @@ -250,6 +265,7 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) local bFinishWithMill = ( OptionalParameters.bFinishWithMill ~= false) local dMillingOffsetFromSide = OptionalParameters.dMillingOffsetFromSide or 1 local dStripWidth = OptionalParameters.dStripWidth or 5 + local bAllowPerpendicularStrip = ( OptionalParameters.bAllowPerpendicularStrip and ( Part.b3Raw:getMin():getZ() + BeamData.VICE_MINH > Proc.b3Box:getMin():getZ() - 10 * GEO.EPS_SMALL)) or false local bForced = OptionalParameters.bForced or false -- volume della feature @@ -296,6 +312,7 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) dExtendAfterTail = dExtendAfterTail, nToolIndex = nToolIndex, dStripWidth = dStripWidth, + bAllowPerpendicularStrip = bAllowPerpendicularStrip, OtherBottomFace = BottomFace2 } local Cuttings1 = MakeBottomFace( Proc, Part, BottomFace1, BottomEdgeToMachine1, Parameters1) @@ -427,6 +444,37 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters) Machinings = MachiningLib.GetSplitMachinings( Machinings, FeatureSplittingPoints, Part) end + -- se codoli perpendicolari, si accorciano LeadIn/LeadOut + if bAllowPerpendicularStrip then + for j = 1, #Machinings do + if Machinings[j].bIsMachiningSplitted then + -- se primo spezzone + if Machinings[j].bIsFirstSegment then + if MachiningLib.StartsLeftSide( Machinings[j]) then + Machinings[j].LeadIn.dStartAddLength = Machinings[j].LeadIn.dStartAddLength - Machinings[j].dToolMarkLength - dStripWidth + Machinings[j].LeadOut.dEndAddLength = Machinings[j].LeadOut.dEndAddLength - dStripWidth + else + Machinings[j].LeadOut.dEndAddLength = Machinings[j].LeadOut.dEndAddLength - Machinings[j].dToolMarkLength - dStripWidth + Machinings[j].LeadIn.dStartAddLength = Machinings[j].LeadIn.dStartAddLength - dStripWidth + end + -- se ultimo spezzone + elseif Machinings[j].bIsLastSegment then + if MachiningLib.StartsLeftSide( Machinings[j]) then + Machinings[j].LeadOut.dEndAddLength = Machinings[j].LeadOut.dEndAddLength - Machinings[j].dToolMarkLength - dStripWidth + Machinings[j].LeadIn.dStartAddLength = Machinings[j].LeadIn.dStartAddLength - dStripWidth + else + Machinings[j].LeadIn.dStartAddLength = Machinings[j].LeadIn.dStartAddLength - Machinings[j].dToolMarkLength - dStripWidth + Machinings[j].LeadOut.dEndAddLength = Machinings[j].LeadOut.dEndAddLength - dStripWidth + end + -- se spezzoni centrali + else + Machinings[j].LeadIn.dStartAddLength = Machinings[j].LeadIn.dStartAddLength - Machinings[j].dToolMarkLength - dStripWidth + Machinings[j].LeadOut.dEndAddLength = Machinings[j].LeadOut.dEndAddLength - Machinings[j].dToolMarkLength - dStripWidth + end + end + end + end + -- ordinamento table.sort( Machinings, SortMachiningsBySegment) diff --git a/StrategyLibs/FACEBYBLADE.lua b/StrategyLibs/FACEBYBLADE.lua index ae32c79..0d62633 100644 --- a/StrategyLibs/FACEBYBLADE.lua +++ b/StrategyLibs/FACEBYBLADE.lua @@ -583,6 +583,8 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar Cutting.dToolMarkLength = abs( Cutting.LeadIn.dStartAddLength) elseif Cutting.bIsEndClosed then Cutting.dToolMarkLength = abs( Cutting.LeadOut.dEndAddLength) + else + Cutting.dToolMarkLength = LeadInOutLib.GetToolAddLength( TOOLS[Cutting.nToolIndex].dDiameter, dDepthToMachine) end -- area lavorata Cutting.dAreaToMachine = min( EdgeToMachine.dElevation, Cutting.dDepthToMachine) * ( min( Cutting.dEdgeLength, Cutting.dLengthToMachine + 2 * Cutting.dToolMarkLength))