- in FaceData GetSideFaces allineata alle altre e piccole modifiche a GetLongFaces
- in BeamLib riportata la funzione GetNearestOrthoOpposite da automatismo vecchio - in MachiningLib piccole modifiche - in STR0003 corpose modifiche, in particolare allineamento con standard nomenclatura
This commit is contained in:
@@ -175,6 +175,41 @@ function BeamLib.GetAffectedFaces( Proc)
|
||||
return vtFacesAffected
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function BeamLib.GetNearestOrthoOpposite( vtRef, vtNorm)
|
||||
-- se definita anche la normale alla faccia, elimino la parte di vtRef parallela a questa
|
||||
local vtMyRef = Vector3d( vtRef)
|
||||
if vtNorm then
|
||||
vtMyRef = vtMyRef - ( vtMyRef * vtNorm) * vtNorm
|
||||
vtMyRef:normalize()
|
||||
end
|
||||
-- se prevalente una componente orizzontale (con piccolissimo vantaggio)
|
||||
if abs( vtMyRef:getX()) > 0.91 * abs( vtMyRef:getZ()) or abs( vtMyRef:getY()) > 0.91 * abs( vtMyRef:getZ()) then
|
||||
-- se prevale la componente destra/sinistra
|
||||
if abs( vtMyRef:getX()) > 0.95 * abs( vtMyRef:getY()) then
|
||||
if vtMyRef:getX() > -GEO.EPS_SMALL then
|
||||
return MCH_MILL_FU.ORTHO_LEFT
|
||||
else
|
||||
return MCH_MILL_FU.ORTHO_RIGHT
|
||||
end
|
||||
else
|
||||
if vtMyRef:getY() > -GEO.EPS_SMALL then
|
||||
return MCH_MILL_FU.ORTHO_FRONT
|
||||
else
|
||||
return MCH_MILL_FU.ORTHO_BACK
|
||||
end
|
||||
end
|
||||
-- altrimenti prevale la verticale
|
||||
else
|
||||
if vtMyRef:getZ() > -GEO.EPS_SMALL then
|
||||
return MCH_MILL_FU.ORTHO_DOWN
|
||||
else
|
||||
return MCH_MILL_FU.ORTHO_TOP
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione per determinare se la faccia ha lati molto corti (trascurabili) ed è quindi approssimabile ad una 3 facce
|
||||
function BeamLib.Is3EdgesApprox( Proc, idFace, nAddGrpId)
|
||||
|
||||
+25
-41
@@ -293,8 +293,8 @@ local function GetLongFaces( Proc, MainFaces)
|
||||
|
||||
local BottomFace = MainFaces.BottomFace or GetBottomFace( Proc)
|
||||
|
||||
local nFirstLongFaceId = GDB_ID.NULL
|
||||
local nSecondLongFaceId = GDB_ID.NULL
|
||||
local idFirstLongFace = GDB_ID.NULL
|
||||
local idSecondLongFace = GDB_ID.NULL
|
||||
if not BottomFace then
|
||||
local FacesSortedByGreatestArea = {}
|
||||
for i = 1, Proc.nFct do
|
||||
@@ -303,22 +303,22 @@ local function GetLongFaces( Proc, MainFaces)
|
||||
FacesSortedByGreatestArea[i].dArea = Proc.Faces[i].dArea
|
||||
end
|
||||
table.sort( FacesSortedByGreatestArea, function (a, b) return a.dArea > b.dArea end)
|
||||
nFirstLongFaceId = FacesSortedByGreatestArea[1].id
|
||||
local FacesNotAdjacent = GetNotAdjacentFaces( Proc, nFirstLongFaceId)
|
||||
nSecondLongFaceId = FacesNotAdjacent[1].id
|
||||
idFirstLongFace = FacesSortedByGreatestArea[1].id
|
||||
local FacesNotAdjacent = GetNotAdjacentFaces( Proc, idFirstLongFace)
|
||||
idSecondLongFace = FacesNotAdjacent[1].id
|
||||
else
|
||||
if not BottomFace.MainEdges.LongEdges[1].bIsOpen then
|
||||
nFirstLongFaceId = BottomFace.MainEdges.LongEdges[1].idAdjacentFace
|
||||
idFirstLongFace = BottomFace.MainEdges.LongEdges[1].idAdjacentFace
|
||||
end
|
||||
if not BottomFace.MainEdges.LongEdges[2].bIsOpen then
|
||||
nSecondLongFaceId = BottomFace.MainEdges.LongEdges[2].idAdjacentFace
|
||||
idSecondLongFace = BottomFace.MainEdges.LongEdges[2].idAdjacentFace
|
||||
end
|
||||
end
|
||||
if nFirstLongFaceId > -1 then
|
||||
LongFaces[1] = Proc.Faces[nFirstLongFaceId + 1]
|
||||
if idFirstLongFace > -1 then
|
||||
table.insert( LongFaces, Proc.Faces[idFirstLongFace + 1])
|
||||
end
|
||||
if nSecondLongFaceId > -1 then
|
||||
LongFaces[2] = Proc.Faces[nSecondLongFaceId + 1]
|
||||
if idSecondLongFace > -1 then
|
||||
table.insert( LongFaces, Proc.Faces[idSecondLongFace + 1])
|
||||
end
|
||||
|
||||
for i = 1, #LongFaces do
|
||||
@@ -381,39 +381,23 @@ local function GetSideFaces( Proc, MainFaces)
|
||||
error( 'GetSideFaces : Topology not implemented')
|
||||
end
|
||||
|
||||
-- TODO da sistemare come Bottom e Long
|
||||
local LongFaces = MainFaces.LongFaces or GetLongFaces( Proc, MainFaces)
|
||||
|
||||
local idBottomFace = GDB_ID.NULL
|
||||
if Proc.Topology.sFamily ~= 'Tunnel' then
|
||||
if MainFaces.BottomFace then
|
||||
idBottomFace = MainFaces.BottomFace.id
|
||||
else
|
||||
local BottomFace = GetBottomFace( Proc)
|
||||
idBottomFace = BottomFace.id or idBottomFace
|
||||
end
|
||||
local idFirstSideFace = GDB_ID.NULL
|
||||
local idSecondSideFace = GDB_ID.NULL
|
||||
if not LongFaces[1].MainEdges.SideEdges[1].bIsOpen then
|
||||
idFirstSideFace = LongFaces[1].MainEdges.SideEdges[1].idAdjacentFace
|
||||
end
|
||||
|
||||
local LongFaces = {}
|
||||
if MainFaces.LongFaces then
|
||||
LongFaces = MainFaces.LongFaces
|
||||
else
|
||||
LongFaces = GetLongFaces( Proc, MainFaces)
|
||||
if not LongFaces[1].MainEdges.SideEdges[2].bIsOpen then
|
||||
idSecondSideFace = LongFaces[1].MainEdges.SideEdges[2].idAdjacentFace
|
||||
end
|
||||
|
||||
for i = 1, Proc.nFct do
|
||||
if not idBottomFace or i ~= ( idBottomFace + 1) then
|
||||
local bIsSideFace = true
|
||||
for j = 1, #LongFaces do
|
||||
if Proc.Faces[i].id == LongFaces[j].id then
|
||||
bIsSideFace = false
|
||||
break
|
||||
end
|
||||
end
|
||||
if bIsSideFace then
|
||||
table.insert( SideFaces, Proc.Faces[i])
|
||||
SideFaces[#SideFaces].Type = 'Side'
|
||||
end
|
||||
end
|
||||
if idFirstSideFace > -1 then
|
||||
table.insert( SideFaces, Proc.Faces[idFirstSideFace + 1])
|
||||
SideFaces[#SideFaces].Type = 'Side'
|
||||
end
|
||||
if idSecondSideFace > -1 then
|
||||
table.insert( SideFaces, Proc.Faces[idSecondSideFace + 1])
|
||||
SideFaces[#SideFaces].Type = 'Side'
|
||||
end
|
||||
|
||||
-- TODO aggiungere anche informazioni Edges??
|
||||
|
||||
+13
-10
@@ -64,10 +64,10 @@ local function GetToolEntryAngle( Proc, vtTool)
|
||||
function MachiningLib.GetMachiningSteps( dMachiningDepth, dStep)
|
||||
|
||||
local MachiningSteps = {}
|
||||
MachiningSteps.StepLength = 0
|
||||
MachiningSteps.Count = ceil( ( dMachiningDepth - 10 * GEO.EPS_SMALL) / dStep)
|
||||
if MachiningSteps.Count > 1 then
|
||||
MachiningSteps.StepLength = ( dMachiningDepth - dStep) / ( MachiningSteps.Count - 1)
|
||||
MachiningSteps.dStepLength = 0
|
||||
MachiningSteps.nCount = ceil( ( dMachiningDepth - 10 * GEO.EPS_SMALL) / dStep)
|
||||
if MachiningSteps.nCount > 1 then
|
||||
MachiningSteps.dStepLength = ( dMachiningDepth - dStep) / ( MachiningSteps.nCount - 1)
|
||||
end
|
||||
|
||||
return MachiningSteps
|
||||
@@ -175,10 +175,15 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
|
||||
for i = 1, #TOOLS do
|
||||
local bIsToolCompatible = true
|
||||
|
||||
-- TODO non va bene - da sistemare!!!!!
|
||||
if TOOLS[i].sFamily ~= 'SAWBLADE' then
|
||||
bIsToolCompatible = false
|
||||
end
|
||||
|
||||
if ToolSearchParameters.bAllowTopHead and not ToolSearchParameters.bAllowBottomHead then
|
||||
bIsToolCompatible = TOOLS[i].bIsTopHead
|
||||
bIsToolCompatible = TOOLS[i].SetupInfo.bIsTopHead
|
||||
elseif ToolSearchParameters.bAllowBottomHead and not ToolSearchParameters.bAllowTopHead then
|
||||
bIsToolCompatible = TOOLS[i].bIsBottomHead
|
||||
bIsToolCompatible = TOOLS[i].SetupInfo.bIsBottomHead
|
||||
end
|
||||
|
||||
if bIsToolCompatible then
|
||||
@@ -201,7 +206,6 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- funzione per cercare utensile tipo SEGA A CATENA con certe caratteristiche
|
||||
-- TODO da completare
|
||||
-- TODO implementare sorting in base a sSortingCriterion
|
||||
function MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
local ToolInfo = {}
|
||||
|
||||
@@ -222,7 +226,6 @@ function MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
-- parametri opzionali
|
||||
ToolSearchParameters.dElevation = ToolSearchParameters.dElevation or 0
|
||||
ToolSearchParameters.bExtendWithCornerRadius = ToolSearchParameters.bExtendWithCornerRadius or false
|
||||
ToolSearchParameters.sSortingCriterion = ToolSearchParameters.sSortingCriterion or 'Standard'
|
||||
|
||||
local nBestToolIndex
|
||||
local dBestToolResidualDepth = 0
|
||||
@@ -230,9 +233,9 @@ function MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
local bIsToolCompatible = true
|
||||
|
||||
if ToolSearchParameters.bAllowTopHead and not ToolSearchParameters.bAllowBottomHead then
|
||||
bIsToolCompatible = TOOLS[i].bIsTopHead
|
||||
bIsToolCompatible = TOOLS[i].SetupInfo.bIsTopHead
|
||||
elseif ToolSearchParameters.bAllowBottomHead and not ToolSearchParameters.bAllowTopHead then
|
||||
bIsToolCompatible = TOOLS[i].bIsBottomHead
|
||||
bIsToolCompatible = TOOLS[i].SetupInfo.bIsBottomHead
|
||||
end
|
||||
|
||||
-- TODO nei confronti tra valori gestire tolleranze
|
||||
|
||||
+228
-232
@@ -20,10 +20,10 @@ local Chainsaw = {}
|
||||
|
||||
|
||||
local function IsTopologyOk( Proc)
|
||||
if Proc.TopologyLongName == 'Pocket-Blind-RightAngles-Parallel-5' or
|
||||
Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' or
|
||||
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' or
|
||||
Proc.TopologyLongName == 'Tunnel-Through-RightAngles-Parallel-4' then
|
||||
if Proc.Topology.sName == 'Pocket-5-Blind' or
|
||||
Proc.Topology.sName == 'Groove-3-Through' or
|
||||
Proc.Topology.sName == 'Groove-4-Blind' or
|
||||
Proc.Topology.sName == 'Tunnel-4-Through' then
|
||||
|
||||
return true
|
||||
else
|
||||
@@ -31,6 +31,7 @@ local function IsTopologyOk( Proc)
|
||||
end
|
||||
end
|
||||
|
||||
-- TODO da eliminare
|
||||
function GetToolFromMachining( sMachiningName)
|
||||
local Tool = {}
|
||||
if EgtMdbSetCurrMachining( sMachiningName) then
|
||||
@@ -67,16 +68,16 @@ local function CalculateLeadInOut( Machining, EdgeToMachine)
|
||||
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
|
||||
|
||||
-- si determina l'eventuale riduzione da applicare in caso di inizio o fine chiusi
|
||||
local bIsMortising = ( Machining.Type == MCH_OY.MORTISING)
|
||||
local bIsMortising = ( Machining.nType == MCH_OY.MORTISING)
|
||||
local dAddLengthToReduce = 0
|
||||
if bIsMortising then
|
||||
dAddLengthToReduce = Machining.Tool.Diameter / 2
|
||||
dAddLengthToReduce = TOOLS[Machining.nToolIndex].dDiameter / 2
|
||||
else
|
||||
dAddLengthToReduce = sqrt( Machining.Depth * Machining.Tool.Diameter - Machining.Depth * Machining.Depth)
|
||||
dAddLengthToReduce = sqrt( Machining.dDepthToMachine * TOOLS[Machining.nToolIndex].dDiameter - Machining.dDepthToMachine * Machining.dDepthToMachine)
|
||||
end
|
||||
|
||||
if Machining.Invert then
|
||||
Machining.IsStartClosed, Machining.IsEndClosed = Machining.IsEndClosed, Machining.IsStartClosed
|
||||
if Machining.bInvert then
|
||||
Machining.bIsStartClosed, Machining.bIsEndClosed = Machining.bIsEndClosed, Machining.bIsStartClosed
|
||||
end
|
||||
|
||||
local LeadIn = {}
|
||||
@@ -88,9 +89,9 @@ local function CalculateLeadInOut( Machining, EdgeToMachine)
|
||||
LeadOut.Type = MCH_MILL_LI.LINEAR
|
||||
LeadIn.TangentDistance = 0
|
||||
LeadOut.TangentDistance = 0
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
LeadIn.PerpDistance = EdgeToMachine.Elevation + BeamData.CUT_SIC
|
||||
LeadOut.PerpDistance = EdgeToMachine.Elevation + BeamData.CUT_SIC
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
LeadIn.PerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC
|
||||
LeadOut.PerpDistance = EdgeToMachine.dElevation + BeamData.CUT_SIC
|
||||
else
|
||||
LeadIn.PerpDistance = BeamData.CUT_SIC
|
||||
LeadOut.PerpDistance = BeamData.CUT_SIC
|
||||
@@ -99,28 +100,28 @@ local function CalculateLeadInOut( Machining, EdgeToMachine)
|
||||
LeadOut.Elevation = 0
|
||||
LeadIn.CompLength = 0
|
||||
LeadOut.CompLength = 0
|
||||
if Machining.IsStartClosed and Machining.IsEndClosed then
|
||||
if Machining.bIsStartClosed and Machining.bIsEndClosed then
|
||||
LeadIn.StartAddLength = -dAddLengthToReduce
|
||||
LeadOut.EndAddLength = -dAddLengthToReduce
|
||||
elseif Machining.IsStartClosed then
|
||||
elseif Machining.bIsStartClosed then
|
||||
LeadIn.StartAddLength = -dAddLengthToReduce
|
||||
-- eventuale correzione per accorciamento maggiore di larghezza tasca
|
||||
LeadOut.EndAddLength = max( -LeadIn.StartAddLength - EdgeToMachine.Length + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
|
||||
elseif Machining.IsEndClosed then
|
||||
LeadOut.EndAddLength = max( -LeadIn.StartAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
|
||||
elseif Machining.bIsEndClosed then
|
||||
LeadOut.EndAddLength = -dAddLengthToReduce
|
||||
-- eventuale correzione per accorciamento maggiore di larghezza tasca
|
||||
LeadIn.StartAddLength = max( -LeadOut.EndAddLength - EdgeToMachine.Length + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
|
||||
LeadIn.StartAddLength = max( -LeadOut.EndAddLength - EdgeToMachine.dLength + 10 * BeamData.CUT_EXTRA, BeamData.CUT_EXTRA)
|
||||
else
|
||||
LeadIn.StartAddLength = BeamData.CUT_EXTRA
|
||||
LeadOut.EndAddLength = BeamData.CUT_EXTRA
|
||||
end
|
||||
else
|
||||
if Machining.IsStartClosed then
|
||||
if Machining.bIsStartClosed then
|
||||
LeadIn.StartAddLength = -dAddLengthToReduce
|
||||
else
|
||||
LeadIn.StartAddLength = BeamData.CUT_EXTRA
|
||||
end
|
||||
if Machining.IsEndClosed then
|
||||
if Machining.bIsEndClosed then
|
||||
LeadOut.EndAddLength = -dAddLengthToReduce
|
||||
else
|
||||
LeadOut.EndAddLength = BeamData.CUT_EXTRA
|
||||
@@ -133,9 +134,9 @@ end
|
||||
|
||||
local function AddNewMachining( Machining, b3Raw)
|
||||
local sErr = ''
|
||||
local nOperationId = EgtAddMachining( Machining.OperationName, Machining.Name)
|
||||
local nOperationId = EgtAddMachining( Machining.sOperationName, Machining.Nsame)
|
||||
if not nOperationId then
|
||||
sErr = 'Error adding machining ' .. Machining.OperationName .. '-' .. Machining.Name
|
||||
sErr = 'Error adding machining ' .. Machining.sOperationName .. '-' .. Machining.sName
|
||||
EgtOutLog( sErr)
|
||||
return false, sErr
|
||||
end
|
||||
@@ -143,43 +144,43 @@ local function AddNewMachining( Machining, b3Raw)
|
||||
-- impostazione parametri lavorazione
|
||||
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
EgtSetMachiningGeometry( Machining.Geometry)
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, Machining.Faceuse)
|
||||
EgtSetMachiningParam( MCH_MP.SCC, Machining.SCC)
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, Machining.Invert)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, Machining.Workside)
|
||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, Machining.ToolInvert)
|
||||
EgtSetMachiningParam( MCH_MP.OFFSR, Machining.RadialOffset)
|
||||
EgtSetMachiningParam( MCH_MP.OFFSL, Machining.LongitudinalOffset)
|
||||
EgtSetMachiningParam( MCH_MP.FACEUSE, Machining.nFaceuse)
|
||||
EgtSetMachiningParam( MCH_MP.SCC, Machining.nSCC)
|
||||
EgtSetMachiningParam( MCH_MP.INVERT, Machining.bInvert)
|
||||
EgtSetMachiningParam( MCH_MP.WORKSIDE, Machining.nWorkside)
|
||||
EgtSetMachiningParam( MCH_MP.TOOLINVERT, Machining.bToolInvert)
|
||||
EgtSetMachiningParam( MCH_MP.OFFSR, Machining.dRadialOffset)
|
||||
EgtSetMachiningParam( MCH_MP.OFFSL, Machining.dLongitudinalOffset)
|
||||
if Machining.Type ~= MCH_OY.MORTISING then
|
||||
EgtSetMachiningParam( MCH_MP.LEADINTYPE, Machining.LeadIn.Type)
|
||||
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, Machining.LeadOut.Type)
|
||||
EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.TangentDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.TangentDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.PerpDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.PerpDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LIELEV, Machining.LeadIn.Elevation)
|
||||
EgtSetMachiningParam( MCH_MP.LOELEV, Machining.LeadOut.Elevation)
|
||||
EgtSetMachiningParam( MCH_MP.LICOMPLEN, Machining.LeadIn.CompLength)
|
||||
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, Machining.LeadOut.CompLength)
|
||||
EgtSetMachiningParam( MCH_MP.LEADINTYPE, Machining.LeadIn.nType)
|
||||
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, Machining.LeadOut.nType)
|
||||
EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.dTangentDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.dTangentDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.dPerpDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.dPerpDistance)
|
||||
EgtSetMachiningParam( MCH_MP.LIELEV, Machining.LeadIn.dElevation)
|
||||
EgtSetMachiningParam( MCH_MP.LOELEV, Machining.LeadOut.dElevation)
|
||||
EgtSetMachiningParam( MCH_MP.LICOMPLEN, Machining.LeadIn.dCompLength)
|
||||
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, Machining.LeadOut.dCompLength)
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, Machining.LeadIn.StartAddLength)
|
||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.EndAddLength)
|
||||
EgtSetMachiningParam( MCH_MP.STARTADDLEN, Machining.LeadIn.dStartAddLength)
|
||||
EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.dEndAddLength)
|
||||
if Machining.Steps then
|
||||
if Machining.Steps.StepType then
|
||||
EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.Steps.StepType)
|
||||
if Machining.Steps.nStepType then
|
||||
EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.Steps.nStepType)
|
||||
end
|
||||
if Machining.Steps.StepLength then
|
||||
EgtSetMachiningParam( MCH_MP.STEP, Machining.Steps.StepLength)
|
||||
if Machining.Steps.dStepLength then
|
||||
EgtSetMachiningParam( MCH_MP.STEP, Machining.Steps.dStepLength)
|
||||
end
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BeamLib.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.BlockedAxis.VtN, Machining.BlockedAxis.VtOut))
|
||||
if Machining.Type == MCH_OY.MORTISING then
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BeamLib.GetChainSawInitAngs( Machining.SuggestedAngles.VtN, Machining.SuggestedAngles.VtOrtho, Machining.SuggestedAngles.Index))
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BeamLib.GetBlockedAxis( Machining.sName, Machining.BlockedAxis.sOrientation, b3Raw, Machining.BlockedAxis.vtN, Machining.BlockedAxis.vtOut))
|
||||
if Machining.nType == MCH_OY.MORTISING then
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BeamLib.GetChainSawInitAngs( Machining.SuggestedAngles.vtN, Machining.SuggestedAngles.vtOrtho, Machining.SuggestedAngles.nIndex))
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.OVERL, Machining.Overlap)
|
||||
EgtSetMachiningParam( MCH_MP.STARTPOS, max( Machining.StartSafetyLength, EgtGetMachiningParam( MCH_MP.STARTPOS)))
|
||||
if Machining.MaxElev then
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.MaxElev)
|
||||
EgtSetMachiningParam( MCH_MP.OVERL, Machining.dOverlap)
|
||||
EgtSetMachiningParam( MCH_MP.STARTPOS, max( Machining.dStartSafetyLength, EgtGetMachiningParam( MCH_MP.STARTPOS)))
|
||||
if Machining.dMaxElev then
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.dMaxElev)
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||
|
||||
@@ -189,19 +190,19 @@ local function AddNewMachining( Machining, b3Raw)
|
||||
nErr, sErr = EgtGetLastMachMgrError()
|
||||
-- se mortasatura e l'errore è compatibile (Axes values not calculable) si prova con l'altra configurazione dell'asse bloccato
|
||||
-- TODO valutare se c'è modo di capire preventivamente la configurazione dell'asse bloccato e quindi rimuovere questa parte di codice
|
||||
if Machining.Type == MCH_OY.MORTISING and nErr == 2507 then
|
||||
if Machining.BlockedAxis.Orientation == 'perpendicular' then
|
||||
Machining.BlockedAxis.Orientation = 'parallel'
|
||||
if Machining.nType == MCH_OY.MORTISING and nErr == 2507 then
|
||||
if Machining.BlockedAxis.sOrientation == 'perpendicular' then
|
||||
Machining.BlockedAxis.sOrientation = 'parallel'
|
||||
else
|
||||
Machining.BlockedAxis.Orientation = 'perpendicular'
|
||||
Machining.BlockedAxis.sOrientation = 'perpendicular'
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BeamLib.GetBlockedAxis( Machining.Name, Machining.BlockedAxis.Orientation, b3Raw, Machining.BlockedAxis.VtN, Machining.BlockedAxis.VtOut))
|
||||
if Machining.SuggestedAngles.Index == 1 then
|
||||
Machining.SuggestedAngles.Index = 2
|
||||
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, BeamLib.GetBlockedAxis( Machining.sName, Machining.BlockedAxis.sOrientation, b3Raw, Machining.BlockedAxis.vtN, Machining.BlockedAxis.vtOut))
|
||||
if Machining.SuggestedAngles.nIndex == 1 then
|
||||
Machining.SuggestedAngles.nIndex = 2
|
||||
else
|
||||
Machining.SuggestedAngles.Index = 1
|
||||
Machining.SuggestedAngles.nIndex = 1
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BeamLib.GetChainSawInitAngs( Machining.SuggestedAngles.VtN, Machining.SuggestedAngles.VtOrtho, Machining.SuggestedAngles.Index))
|
||||
EgtSetMachiningParam( MCH_MP.INITANGS, BeamLib.GetChainSawInitAngs( Machining.SuggestedAngles.vtN, Machining.SuggestedAngles.vtOrtho, Machining.SuggestedAngles.nIndex))
|
||||
sErr = ''
|
||||
bIsApplyOk = EgtApplyMachining( true, false)
|
||||
end
|
||||
@@ -239,153 +240,149 @@ end
|
||||
|
||||
function Blade.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine)
|
||||
local Cutting = {}
|
||||
Cutting.CanApply = true
|
||||
Cutting.Message = ''
|
||||
Cutting.ProcId = Proc.id
|
||||
Cutting.bCanApply = true
|
||||
Cutting.sMessage = ''
|
||||
Cutting.idProc = Proc.id
|
||||
|
||||
local dPocketHeight = 0
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
dPocketHeight = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Height
|
||||
if Proc.Topology.sFamily == 'Tunnel' then
|
||||
dPocketHeight = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.dHeight
|
||||
else
|
||||
if FaceToMachine.Type == 'Long' then
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.Edges.SideEdges[1].Length
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.MainEdges.SideEdges[1].dLength
|
||||
elseif FaceToMachine.Type == 'Side' then
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.Edges.LongEdges[1].Length
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.MainEdges.LongEdges[1].dLength
|
||||
end
|
||||
end
|
||||
|
||||
-- ricerca utensile
|
||||
local ToolSearchParameters = {}
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.Elevation)
|
||||
ToolSearchParameters.vtToolDirection = EdgeToMachine.ToolDirection
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.dElevation)
|
||||
ToolSearchParameters.vtToolDirection = EdgeToMachine.vtToolDirection
|
||||
ToolSearchParameters.bAllowTopHead = true
|
||||
ToolSearchParameters.bAllowBottomHead = false
|
||||
ToolSearchParameters.bForceLongcutBlade = Strategy.Parameters.bForceLongcutBlade
|
||||
local ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters)
|
||||
if not ToolInfo.nToolIndex then
|
||||
ToolSearchParameters.dElevation = 0
|
||||
ToolInfo = MachiningLib.FindBlade( Proc, ToolSearchParameters)
|
||||
end
|
||||
if not Cutting.Name then
|
||||
Cutting.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - saw blade not found'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
Cutting.nToolIndex = ToolInfo.nToolIndex
|
||||
Cutting.nType = MCH_OY.MILLING
|
||||
if not TOOLS[Cutting.nToolIndex].sName then
|
||||
Cutting.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - saw blade not found'
|
||||
Cutting.bCanApply = false
|
||||
EgtOutLog( Cutting.sMessage)
|
||||
return Cutting
|
||||
end
|
||||
Cutting.nToolIndex = ToolInfo.nToolIndex
|
||||
Cutting.Type = MCH_OY.MILLING
|
||||
|
||||
-- verifica dimensioni tasca compatibili
|
||||
-- se tasca meno spessa della lama la strategia non è applicabile
|
||||
if Cutting.TOOLS[Cutting.nToolIndex].dThickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Cutting.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for saw blade thickness'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
if TOOLS[Cutting.nToolIndex].dThickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Cutting.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for saw blade thickness'
|
||||
Cutting.bCanApply = false
|
||||
EgtOutLog( Cutting.sMessage)
|
||||
return Cutting
|
||||
end
|
||||
if #( Proc.MainFaces.SideFaces) > 1 then
|
||||
-- se tasca più stretta della lama la strategia non è applicabile
|
||||
if Cutting.TOOLS[Cutting.nToolIndex].dDiameter > EdgeToMachine.Length + 10 * GEO.EPS_SMALL then
|
||||
Cutting.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for saw blade diameter'
|
||||
Cutting.CanApply = false
|
||||
EgtOutLog( Cutting.Message)
|
||||
if TOOLS[Cutting.nToolIndex].dDiameter > EdgeToMachine.dLength + 10 * GEO.EPS_SMALL then
|
||||
Cutting.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for saw blade diameter'
|
||||
Cutting.bCanApply = false
|
||||
EgtOutLog( Cutting.sMessage)
|
||||
return Cutting
|
||||
end
|
||||
end
|
||||
|
||||
-- parametri della lavorazione
|
||||
-- inizio e fine aperti o chiusi
|
||||
Cutting.IsStartClosed = not EdgeToMachine.IsStartOpen
|
||||
Cutting.IsEndClosed = not EdgeToMachine.IsEndOpen
|
||||
Cutting.bIsStartClosed = not EdgeToMachine.bIsStartOpen
|
||||
Cutting.bIsEndClosed = not EdgeToMachine.bIsEndOpen
|
||||
-- lato di lavoro e inversioni
|
||||
if Cutting.TOOLS[Cutting.nToolIndex].bIsCCW then
|
||||
Cutting.Workside = MCH_MILL_WS.RIGHT
|
||||
Cutting.Invert = true
|
||||
if TOOLS[Cutting.nToolIndex].bIsCCW then
|
||||
Cutting.nWorkside = MCH_MILL_WS.RIGHT
|
||||
Cutting.bInvert = true
|
||||
else
|
||||
Cutting.Workside = MCH_MILL_WS.LEFT
|
||||
Cutting.Invert = false
|
||||
Cutting.nWorkside = MCH_MILL_WS.LEFT
|
||||
Cutting.bInvert = false
|
||||
end
|
||||
if EdgeToMachine.Elevation < -10 * GEO.EPS_SMALL then
|
||||
Cutting.Invert = not Cutting.Invert
|
||||
if EdgeToMachine.dElevation < -10 * GEO.EPS_SMALL then
|
||||
Cutting.bInvert = not Cutting.bInvert
|
||||
end
|
||||
-- TODO gestire lama da sotto e lama downUp
|
||||
if FaceToMachine.VtN:getZ() < - 10 * GEO.EPS_SMALL then
|
||||
Cutting.ToolInvert = true
|
||||
Cutting.Invert = not Cutting.Invert
|
||||
if FaceToMachine.vtN:getZ() < - 10 * GEO.EPS_SMALL then
|
||||
Cutting.bToolInvert = true
|
||||
Cutting.bInvert = not Cutting.bInvert
|
||||
else
|
||||
Cutting.ToolInvert = false
|
||||
Cutting.bToolInvert = false
|
||||
end
|
||||
-- profondità e offset radiale
|
||||
if Cutting.TOOLS[Cutting.nToolIndex].dMaxDepth > abs( EdgeToMachine.Elevation) - 10 * GEO.EPS_SMALL then
|
||||
if TOOLS[Cutting.nToolIndex].dMaxDepth > abs( EdgeToMachine.dElevation) - 10 * GEO.EPS_SMALL then
|
||||
-- TODO la depth dovrebbe essere quella del machining
|
||||
Cutting.Depth = abs( EdgeToMachine.Elevation)
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
Cutting.RadialOffset = 0
|
||||
Cutting.dDepthToMachine = abs( EdgeToMachine.dElevation)
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
Cutting.dRadialOffset = 0
|
||||
else
|
||||
Cutting.RadialOffset = EdgeToMachine.Elevation
|
||||
Cutting.dRadialOffset = EdgeToMachine.dElevation
|
||||
end
|
||||
else
|
||||
Cutting.Depth = Cutting.TOOLS[Cutting.nToolIndex].MaxDepth - 1
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
Cutting.RadialOffset = EdgeToMachine.Elevation - Cutting.Depth
|
||||
Cutting.dDepthToMachine = TOOLS[Cutting.nToolIndex].MaxDepth - 1
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
Cutting.dRadialOffset = EdgeToMachine.dElevation - Cutting.dDepthToMachine
|
||||
else
|
||||
Cutting.RadialOffset = -Cutting.Depth
|
||||
Cutting.dRadialOffset = -Cutting.dDepthToMachine
|
||||
end
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL and Strategy.Parameters.bApplyOnlyBlade then
|
||||
Cutting.Message = 'Feature '.. Proc.idFeature .. ' : sawblade elevation (' .. EgtNumToString( EdgeToMachine.Elevation, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Cutting.Depth, 1) .. ')'
|
||||
EgtOutLog( Cutting.Message)
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL and Strategy.Parameters.bApplyOnlyBlade then
|
||||
Cutting.sMessage = 'Feature '.. Proc.idFeature .. ' : sawblade elevation (' .. EgtNumToString( EdgeToMachine.dElevation, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Cutting.dDepthToMachine, 1) .. ')'
|
||||
EgtOutLog( Cutting.sMessage)
|
||||
end
|
||||
end
|
||||
-- step verticale e offset longitudinale
|
||||
Cutting.Steps = MachiningLib.GetMachiningSteps( dPocketHeight, Cutting.TOOLS[Cutting.nToolIndex].dThickness)
|
||||
Cutting.Steps = MachiningLib.GetMachiningSteps( dPocketHeight, TOOLS[Cutting.nToolIndex].dThickness)
|
||||
Cutting.Steps.StepType = MCH_MILL_ST.ONEWAY
|
||||
Cutting.MaxElev = Cutting.Steps.StepLength * Cutting.Steps.Count - 10 * GEO.EPS_SMALL
|
||||
if Cutting.ToolInvert and Cutting.Steps.Count > 1 then
|
||||
Cutting.LongitudinalOffset = - dPocketHeight
|
||||
Cutting.dMaxElev = Cutting.Steps.dStepLength * Cutting.Steps.nCount - 10 * GEO.EPS_SMALL
|
||||
if Cutting.bToolInvert and Cutting.Steps.nCount > 1 then
|
||||
Cutting.dLongitudinalOffset = - dPocketHeight
|
||||
else
|
||||
Cutting.LongitudinalOffset = 0
|
||||
Cutting.dLongitudinalOffset = 0
|
||||
end
|
||||
-- distanza di sicurezza
|
||||
Cutting.StartSafetyLength = 10
|
||||
Cutting.dStartSafetyLength = 10
|
||||
-- overlap
|
||||
Cutting.Overlap = 0
|
||||
Cutting.dOverlap = 0
|
||||
-- faceuse
|
||||
if EdgeToMachine.Elevation > - 10 * GEO.EPS_SMALL then
|
||||
Cutting.Faceuse = BeamLib.GetNearestOrthoOpposite( EdgeToMachine.ToolDirection)
|
||||
if EdgeToMachine.dElevation > - 10 * GEO.EPS_SMALL then
|
||||
Cutting.nFaceuse = BeamLib.GetNearestOrthoOpposite( EdgeToMachine.vtToolDirection)
|
||||
else
|
||||
Cutting.Faceuse = BeamLib.GetNearestOrthoOpposite( -EdgeToMachine.ToolDirection)
|
||||
Cutting.nFaceuse = BeamLib.GetNearestOrthoOpposite( -EdgeToMachine.vtToolDirection)
|
||||
end
|
||||
-- SCC
|
||||
Cutting.SCC = Blade.GetSCC( EdgeToMachine.ToolDirection)
|
||||
Cutting.nSCC = Blade.GetSCC( EdgeToMachine.vtToolDirection)
|
||||
-- asse bloccato
|
||||
Cutting.BlockedAxis = {}
|
||||
Cutting.BlockedAxis.Orientation = 'perpendicular'
|
||||
Cutting.BlockedAxis.VtN = FaceToMachine.VtN
|
||||
Cutting.BlockedAxis.VtOut = EgtIf( FaceToMachine.VtN:getX() > 0, X_AX(), -X_AX())
|
||||
Cutting.BlockedAxis.sOrientation = 'perpendicular'
|
||||
Cutting.BlockedAxis.vtN = FaceToMachine.vtN
|
||||
Cutting.BlockedAxis.vtOut = EgtIf( FaceToMachine.vtN:getX() > 0, X_AX(), -X_AX())
|
||||
-- approccio e retrazione
|
||||
Cutting.LeadIn, Cutting.LeadOut = CalculateLeadInOut( Cutting, EdgeToMachine)
|
||||
-- eventuale step orizzontale
|
||||
Cutting.HorizontalSteps = {}
|
||||
if Cutting.TOOLS[Cutting.nToolIndex].dSideStep then
|
||||
Cutting.HorizontalSteps = MachiningLib.GetMachiningSteps( Cutting.Depth, Cutting.TOOLS[Cutting.nToolIndex].dSideStep)
|
||||
if TOOLS[Cutting.nToolIndex].dSideStep then
|
||||
Cutting.HorizontalSteps = MachiningLib.GetMachiningSteps( Cutting.dDepthToMachine, TOOLS[Cutting.nToolIndex].dSideStep)
|
||||
else
|
||||
Cutting.HorizontalSteps.Count = 1
|
||||
Cutting.HorizontalSteps.StepLength = 0
|
||||
Cutting.HorizontalSteps.nCount = 1
|
||||
Cutting.HorizontalSteps.dStepLength = 0
|
||||
end
|
||||
-- geometria
|
||||
Cutting.Geometry = {{Proc.id, FaceToMachine.id}}
|
||||
-- nome operazione
|
||||
Cutting.OperationName = 'Cut_' .. ( EgtGetName( Cutting.ProcId) or tostring( Cutting.ProcId)) .. '_' .. tostring( FaceToMachine.id + 1)
|
||||
Cutting.sOperationName = 'Cut_' .. ( EgtGetName( Cutting.idProc) or tostring( Cutting.idProc)) .. '_' .. tostring( FaceToMachine.id + 1)
|
||||
|
||||
-- eventuale avviso di danneggiamento pezzo successivo
|
||||
-- TODO da sostituire con check se si riesce a separare e il grezzo dietro è lungo a sufficienza
|
||||
local dOffsideLength = max( Cutting.LeadIn.StartAddLength, Cutting.LeadOut.EndAddLength) + Cutting.TOOLS[Cutting.nToolIndex].dDiameter / 2 + 10 * GEO.EPS_SMALL
|
||||
local dOffsideLength = max( Cutting.LeadIn.dStartAddLength, Cutting.LeadOut.dEndAddLength) + TOOLS[Cutting.nToolIndex].dDiameter / 2 + 10 * GEO.EPS_SMALL
|
||||
if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and ( Proc.DistanceToNextPart < dOffsideLength) then
|
||||
local sDamageNextPieceMessage = 'Feature '.. Proc.idFeature .. ' : sawblade can damage next piece.'
|
||||
if #Cutting.Message > 0 then
|
||||
Cutting.Message = Cutting.Message .. '\n' .. sDamageNextPieceMessage
|
||||
if #Cutting.sMessage > 0 then
|
||||
Cutting.sMessage = Cutting.sMessage .. '\n' .. sDamageNextPieceMessage
|
||||
else
|
||||
Cutting.Message = sDamageNextPieceMessage
|
||||
Cutting.sMessage = sDamageNextPieceMessage
|
||||
end
|
||||
EgtOutLog( sDamageNextPieceMessage)
|
||||
end
|
||||
@@ -398,14 +395,14 @@ function Blade.AddMachiningAllSteps( Cutting, b3Raw)
|
||||
local bIsCuttingOk = false
|
||||
local sCuttingApplyMessage = ''
|
||||
|
||||
local dOriginalRadialOffset = Cutting.RadialOffset
|
||||
local dOriginalLeadInPerpDistance = Cutting.LeadIn.PerpDistance
|
||||
local dOriginalLeadOutPerpDistance = Cutting.LeadOut.PerpDistance
|
||||
for i = Cutting.HorizontalSteps.Count, 1, -1 do
|
||||
Cutting.RadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.StepLength * ( i - 1)
|
||||
local dOriginalRadialOffset = Cutting.dRadialOffset
|
||||
local dOriginalLeadInPerpDistance = Cutting.LeadIn.dPerpDistance
|
||||
local dOriginalLeadOutPerpDistance = Cutting.LeadOut.dPerpDistance
|
||||
for i = Cutting.HorizontalSteps.nCount, 1, -1 do
|
||||
Cutting.dRadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.dStepLength * ( i - 1)
|
||||
-- update distanza perpendicolare attacco per contemplare l'offset applicato
|
||||
Cutting.LeadIn.PerpDistance = dOriginalLeadInPerpDistance - Cutting.RadialOffset
|
||||
Cutting.LeadOut.PerpDistance = dOriginalLeadOutPerpDistance - Cutting.RadialOffset
|
||||
Cutting.LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - Cutting.dRadialOffset
|
||||
Cutting.LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - Cutting.dRadialOffset
|
||||
-- applicazione lavorazione
|
||||
bIsCuttingOk, sCuttingApplyMessage = AddNewMachining( Cutting, b3Raw)
|
||||
-- update messaggi
|
||||
@@ -420,52 +417,52 @@ end
|
||||
|
||||
function Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachine)
|
||||
local Mortising = {}
|
||||
Mortising.CanApply = true
|
||||
Mortising.Message = ''
|
||||
Mortising.ProcId = Proc.id
|
||||
Mortising.bCanApply = true
|
||||
Mortising.sMessage = ''
|
||||
Mortising.idProc = Proc.id
|
||||
local bNeedToMachineOtherSide = false
|
||||
-- OneSide | OneSideAndExtend | BothSides | BothSidesAndExtend
|
||||
local sMortisingType
|
||||
|
||||
local dPocketHeight = 0
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
dPocketHeight = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.Height
|
||||
if Proc.Topology.sFamily == 'Tunnel' then
|
||||
dPocketHeight = Proc.MainFaces.TunnelAddedFaces.MiddleFaceTm.dHeight
|
||||
else
|
||||
if FaceToMachine.Type == 'Long' then
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.Edges.SideEdges[1].Length
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.MainEdges.SideEdges[1].dLength
|
||||
elseif FaceToMachine.Type == 'Side' then
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.Edges.LongEdges[1].Length
|
||||
dPocketHeight = Proc.MainFaces.BottomFace.MainEdges.LongEdges[1].dLength
|
||||
end
|
||||
end
|
||||
|
||||
-- ricerca utensile
|
||||
local ToolSearchParameters = {}
|
||||
local ToolInfo = {}
|
||||
ToolSearchParameters.vtToolDirection = EdgeToMachine.ToolDirection
|
||||
ToolSearchParameters.vtToolDirection = EdgeToMachine.vtToolDirection
|
||||
ToolSearchParameters.bAllowTopHead = true
|
||||
ToolSearchParameters.bAllowBottomHead = false
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
if Proc.Topology.sFamily == 'Tunnel' then
|
||||
sMortisingType = 'OneSideAndExtend'
|
||||
ToolSearchParameters.bExtendWithCornerRadius = true
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.Elevation) + BeamData.CUT_EXTRA
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.dElevation) + BeamData.CUT_EXTRA
|
||||
ToolInfo = MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
if not TOOLS[ToolInfo.nToolIndex].sName then
|
||||
if ToolInfo.dResidualDepth > 10 * GEO.EPS_SMALL then
|
||||
sMortisingType = 'BothSidesAndExtend'
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.Elevation) / 2 + BeamData.CUT_EXTRA_MIN
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.dElevation) / 2 + BeamData.CUT_EXTRA_MIN
|
||||
ToolInfo = MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
end
|
||||
elseif EdgeToMachine.Type == 'Side' and #( Proc.MainFaces.SideFaces) == 0 then
|
||||
elseif EdgeToMachine.sType == 'Side' and #( Proc.MainFaces.SideFaces) == 0 then
|
||||
sMortisingType = 'BothSidesAndExtend'
|
||||
ToolSearchParameters.bExtendWithCornerRadius = true
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.Elevation) / 2 + BeamData.CUT_EXTRA_MIN
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.dElevation) / 2 + BeamData.CUT_EXTRA_MIN
|
||||
ToolInfo = MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
else
|
||||
sMortisingType = 'OneSide'
|
||||
ToolSearchParameters.bExtendWithCornerRadius = false
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.Elevation) + BeamData.CUT_EXTRA
|
||||
ToolSearchParameters.dElevation = abs( EdgeToMachine.dElevation) + BeamData.CUT_EXTRA
|
||||
ToolInfo = MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
end
|
||||
if not TOOLS[ToolInfo.nToolIndex].sName then
|
||||
if ToolInfo.dResidualDepth > 10 * GEO.EPS_SMALL then
|
||||
if sMortisingType == 'BothSidesAndExtend' then
|
||||
sMortisingType = 'BothSides'
|
||||
elseif sMortisingType == 'OneSideAndExtend' then
|
||||
@@ -473,116 +470,115 @@ function Chainsaw.CalculateMachiningParameters( Proc, FaceToMachine, EdgeToMachi
|
||||
end
|
||||
ToolSearchParameters.bExtendWithCornerRadius = false
|
||||
ToolSearchParameters.dElevation = nil
|
||||
ToolSearchParameters.sSortingCriterion = 'Longest'
|
||||
ToolInfo = MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
|
||||
end
|
||||
if not TOOLS[ToolInfo.nToolIndex].sName then
|
||||
Mortising.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - chainsaw not found'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
Mortising.nToolIndex = ToolInfo.nToolIndex
|
||||
Mortising.nType = MCH_OY.MORTISING
|
||||
if not TOOLS[Mortising.nToolIndex].sName then
|
||||
Mortising.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - chainsaw not found'
|
||||
Mortising.bCanApply = false
|
||||
EgtOutLog( Mortising.sMessage)
|
||||
return Mortising, false
|
||||
end
|
||||
Mortising.nToolIndex = ToolInfo.nToolIndex
|
||||
Mortising.Type = MCH_OY.MORTISING
|
||||
|
||||
-- verifica dimensioni tasca compatibili
|
||||
-- se tasca meno spessa della sega a catena la strategia non è applicabile
|
||||
if Mortising.TOOLS[Mortising.nToolIndex].dThickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Mortising.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for chainsaw thickness'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
if TOOLS[Mortising.nToolIndex].dThickness > dPocketHeight + 10 * GEO.EPS_SMALL then
|
||||
Mortising.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for chainsaw thickness'
|
||||
Mortising.bCanApply = false
|
||||
EgtOutLog( Mortising.sMessage)
|
||||
return Mortising, false
|
||||
end
|
||||
if #( Proc.MainFaces.SideFaces) > 1 then
|
||||
-- se tasca più stretta della sega a catena la strategia non è applicabile
|
||||
if Mortising.TOOLS[Mortising.nToolIndex].dWidth > EdgeToMachine.Length + 10 * GEO.EPS_SMALL then
|
||||
Mortising.Message = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for chainsaw width'
|
||||
Mortising.CanApply = false
|
||||
EgtOutLog( Mortising.Message)
|
||||
if TOOLS[Mortising.nToolIndex].dWidth > EdgeToMachine.dLength + 10 * GEO.EPS_SMALL then
|
||||
Mortising.sMessage = 'Feature '.. Proc.idFeature .. ' : strategy ' .. Strategy.sName .. ' not applicable - pocket too narrow for chainsaw width'
|
||||
Mortising.bCanApply = false
|
||||
EgtOutLog( Mortising.sMessage)
|
||||
return Mortising, false
|
||||
end
|
||||
end
|
||||
|
||||
-- parametri della lavorazione
|
||||
-- inizio e fine aperti o chiusi
|
||||
Mortising.IsStartClosed = not EdgeToMachine.IsStartOpen
|
||||
Mortising.IsEndClosed = not EdgeToMachine.IsEndOpen
|
||||
Mortising.bIsStartClosed = not EdgeToMachine.bIsStartOpen
|
||||
Mortising.bIsEndClosed = not EdgeToMachine.bIsEndOpen
|
||||
-- lato di lavoro e inversioni
|
||||
Mortising.Invert = false
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.Workside = MCH_MILL_WS.RIGHT
|
||||
Mortising.ToolInvert = false
|
||||
Mortising.bInvert = false
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.nWorkside = MCH_MILL_WS.RIGHT
|
||||
Mortising.bToolInvert = false
|
||||
else
|
||||
Mortising.Workside = MCH_MILL_WS.LEFT
|
||||
Mortising.ToolInvert = true
|
||||
Mortising.nWorkside = MCH_MILL_WS.LEFT
|
||||
Mortising.bToolInvert = true
|
||||
end
|
||||
-- profondità e offset longitudinale
|
||||
if sMortisingType == 'OneSide' then
|
||||
Mortising.Depth = abs( EdgeToMachine.Elevation)
|
||||
Mortising.dDepthToMachine = abs( EdgeToMachine.dElevation)
|
||||
elseif sMortisingType == 'OneSideAndExtend' then
|
||||
Mortising.Depth = abs( EdgeToMachine.Elevation) + Mortising.TOOLS[Mortising.nToolIndex].dCornerRadius + BeamData.CUT_EXTRA_MIN
|
||||
Mortising.dDepthToMachine = abs( EdgeToMachine.dElevation) + TOOLS[Mortising.nToolIndex].dCornerRadius + BeamData.CUT_EXTRA_MIN
|
||||
elseif sMortisingType == 'BothSides' then
|
||||
Mortising.Depth = abs( EdgeToMachine.Elevation) / 2
|
||||
Mortising.dDepthToMachine = abs( EdgeToMachine.dElevation) / 2
|
||||
bNeedToMachineOtherSide = true
|
||||
elseif sMortisingType == 'BothSidesAndExtend' then
|
||||
Mortising.Depth = abs( EdgeToMachine.Elevation) / 2 + Mortising.TOOLS[Mortising.nToolIndex].dCornerRadius + BeamData.CUT_EXTRA_MIN
|
||||
Mortising.dDepthToMachine = abs( EdgeToMachine.dElevation) / 2 + TOOLS[Mortising.nToolIndex].dCornerRadius + BeamData.CUT_EXTRA_MIN
|
||||
bNeedToMachineOtherSide = true
|
||||
end
|
||||
if Mortising.TOOLS[Mortising.nToolIndex].dMaxMat > Mortising.Depth - 10 * GEO.EPS_SMALL then
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.LongitudinalOffset = 0
|
||||
if TOOLS[Mortising.nToolIndex].dMaxMat > Mortising.dDepthToMachine - 10 * GEO.EPS_SMALL then
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.dLongitudinalOffset = 0
|
||||
else
|
||||
Mortising.LongitudinalOffset = abs( EdgeToMachine.Elevation) - Mortising.Depth
|
||||
Mortising.dLongitudinalOffset = abs( EdgeToMachine.dElevation) - Mortising.dDepthToMachine
|
||||
end
|
||||
else
|
||||
Mortising.Depth = Mortising.TOOLS[Mortising.nToolIndex].dMaxMat - 1
|
||||
if EdgeToMachine.Elevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.LongitudinalOffset = EdgeToMachine.Elevation - Mortising.Depth
|
||||
Mortising.dDepthToMachine = TOOLS[Mortising.nToolIndex].dMaxMat - 1
|
||||
if EdgeToMachine.dElevation > -10 * GEO.EPS_SMALL then
|
||||
Mortising.dLongitudinalOffset = EdgeToMachine.dElevation - Mortising.dDepthToMachine
|
||||
else
|
||||
Mortising.LongitudinalOffset = 0
|
||||
Mortising.dLongitudinalOffset = 0
|
||||
end
|
||||
Mortising.Message = 'Feature '.. Proc.idFeature .. ' : chainsaw elevation (' .. EgtNumToString( EdgeToMachine.Elevation, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Mortising.Depth, 1) .. ')'
|
||||
EgtOutLog( Mortising.Message)
|
||||
Mortising.sMessage = 'Feature '.. Proc.idFeature .. ' : chainsaw elevation (' .. EgtNumToString( EdgeToMachine.dElevation, 1) .. ') bigger than max tool depth (' .. EgtNumToString( Mortising.dDepthToMachine, 1) .. ')'
|
||||
EgtOutLog( Mortising.sMessage)
|
||||
end
|
||||
-- offset radiale
|
||||
Mortising.RadialOffset = 0
|
||||
Mortising.dRadialOffset = 0
|
||||
-- distanza di sicurezza
|
||||
Mortising.StartSafetyLength = EdgeToMachine.Elevation
|
||||
Mortising.dStartSafetyLength = EdgeToMachine.dElevation
|
||||
-- overlap
|
||||
Mortising.Overlap = 0
|
||||
Mortising.dOverlap = 0
|
||||
-- faceuse
|
||||
if EdgeToMachine.Elevation > - 10 * GEO.EPS_SMALL then
|
||||
Mortising.Faceuse = BeamLib.GetNearestParalOpposite( EdgeToMachine.ToolDirection)
|
||||
if EdgeToMachine.dElevation > - 10 * GEO.EPS_SMALL then
|
||||
Mortising.nFaceuse = BeamLib.GetNearestParalOpposite( EdgeToMachine.vtToolDirection)
|
||||
else
|
||||
Mortising.Faceuse = BeamLib.GetNearestParalOpposite( -EdgeToMachine.ToolDirection)
|
||||
Mortising.nFaceuse = BeamLib.GetNearestParalOpposite( -EdgeToMachine.vtToolDirection)
|
||||
end
|
||||
-- SCC
|
||||
Mortising.SCC = MCH_SCC.NONE
|
||||
-- asse bloccato e angoli suggeriti
|
||||
Mortising.BlockedAxis = {}
|
||||
Mortising.BlockedAxis.Orientation = 'perpendicular'
|
||||
Mortising.BlockedAxis.VtN = FaceToMachine.VtN
|
||||
Mortising.BlockedAxis.sOrientation = 'perpendicular'
|
||||
Mortising.BlockedAxis.vtN = FaceToMachine.vtN
|
||||
Mortising.SuggestedAngles = {}
|
||||
Mortising.SuggestedAngles.Index = 1
|
||||
Mortising.SuggestedAngles.VtN = FaceToMachine.VtN
|
||||
Mortising.SuggestedAngles.VtOrthO = EdgeToMachine.ToolDirection
|
||||
Mortising.SuggestedAngles.nIndex = 1
|
||||
Mortising.SuggestedAngles.vtN = FaceToMachine.vtN
|
||||
Mortising.SuggestedAngles.vtOrthO = EdgeToMachine.vtToolDirection
|
||||
-- approccio e retrazione
|
||||
Mortising.LeadIn, Mortising.LeadOut = CalculateLeadInOut( Mortising, EdgeToMachine)
|
||||
-- eventuale step verticale
|
||||
Mortising.VerticalSteps = MachiningLib.GetMachiningSteps( dPocketHeight, Mortising.TOOLS[Mortising.nToolIndex].dThickness)
|
||||
Mortising.VerticalSteps = MachiningLib.GetMachiningSteps( dPocketHeight, TOOLS[Mortising.nToolIndex].dThickness)
|
||||
-- geometria
|
||||
Mortising.Geometry = {{Proc.id, FaceToMachine.id}}
|
||||
-- nome operazione
|
||||
Mortising.OperationName = 'Chainsaw_' .. ( EgtGetName( Mortising.ProcId) or tostring( Mortising.ProcId)) .. '_' .. tostring( FaceToMachine.id + 1)
|
||||
Mortising.sOperationName = 'Chainsaw_' .. ( EgtGetName( Mortising.idProc) or tostring( Mortising.idProc)) .. '_' .. tostring( FaceToMachine.id + 1)
|
||||
|
||||
-- eventuale avviso di danneggiamento pezzo successivo
|
||||
local dOffsideLength = max( Mortising.LeadIn.StartAddLength, Mortising.LeadOut.EndAddLength) + Mortising.TOOLS[Mortising.nToolIndex].dWidth / 2 + 10 * GEO.EPS_SMALL
|
||||
local dOffsideLength = max( Mortising.LeadIn.dStartAddLength, Mortising.LeadOut.dEndAddLength) + TOOLS[Mortising.nToolIndex].dWidth / 2 + 10 * GEO.EPS_SMALL
|
||||
if ( not Proc.Tail or Proc.AdvTail) and Proc.AffectedFaces.Left and ( Proc.DistanceToNextPart < dOffsideLength) then
|
||||
local sDamageNextPieceMessage = 'Feature '.. Proc.idFeature .. ' : chainsaw can damage next piece.'
|
||||
if #Mortising.Message > 0 then
|
||||
Mortising.Message = Mortising.Message .. '\n' .. sDamageNextPieceMessage
|
||||
if #Mortising.sMessage > 0 then
|
||||
Mortising.sMessage = Mortising.sMessage .. '\n' .. sDamageNextPieceMessage
|
||||
else
|
||||
Mortising.Message = sDamageNextPieceMessage
|
||||
Mortising.sMessage = sDamageNextPieceMessage
|
||||
end
|
||||
EgtOutLog( sDamageNextPieceMessage)
|
||||
end
|
||||
@@ -595,14 +591,14 @@ function Chainsaw.AddMachiningAllSteps( Mortising, b3Raw)
|
||||
local bIsMortisingOk = false
|
||||
local sMortisingApplyMessage = ''
|
||||
|
||||
local dOriginalRadialOffsetMortising = Mortising.RadialOffset
|
||||
for i = Mortising.VerticalSteps.Count, 1, -1 do
|
||||
Mortising.RadialOffset = dOriginalRadialOffsetMortising + Mortising.VerticalSteps.StepLength * ( i - 1)
|
||||
local dOriginalRadialOffsetMortising = Mortising.dRadialOffset
|
||||
for i = Mortising.VerticalSteps.nCount, 1, -1 do
|
||||
Mortising.dRadialOffset = dOriginalRadialOffsetMortising + Mortising.VerticalSteps.dStepLength * ( i - 1)
|
||||
-- applicazione lavorazione
|
||||
bIsMortisingOk, sMortisingApplyMessage = AddNewMachining( Mortising, b3Raw)
|
||||
-- update messaggi
|
||||
if sMortisingApplyMessage and #sMortisingApplyMessage > 0 then
|
||||
Mortising.Message = Mortising.Message .. '\n' .. 'Apply : ' .. sMortisingApplyMessage
|
||||
Mortising.sMessage = Mortising.sMessage .. '\n' .. 'Apply : ' .. sMortisingApplyMessage
|
||||
end
|
||||
end
|
||||
|
||||
@@ -648,10 +644,10 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
-- lama
|
||||
-- lavorazione di lama - fondo della tasca o fino a massimo materiale se tunnel
|
||||
local Cutting = {}
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[1])
|
||||
if Proc.Topology.sFamily == 'Tunnel' then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1])
|
||||
else
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.BottomEdge)
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge)
|
||||
end
|
||||
local bIsCuttingOk = false
|
||||
if bAddMachining and Cutting.CanApply then
|
||||
@@ -662,8 +658,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
end
|
||||
local dBottomDepthToMachine = Cutting.RadialOffset
|
||||
-- lato opposto del tunnel
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[2])
|
||||
if Proc.Topology.sFamily == 'Tunnel' then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2])
|
||||
bIsCuttingOk = false
|
||||
if bAddMachining and Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = Blade.ApplyAllSteps( Cutting, b3Raw)
|
||||
@@ -675,8 +671,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
-- se la lama non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
||||
if Cutting.RadialOffset > 10 * GEO.EPS_SMALL then
|
||||
-- eventuale lavorazione di lama - lato della tasca da cui inizia la lavorazione
|
||||
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge)
|
||||
if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.IsStartOpen then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1])
|
||||
bIsCuttingOk = false
|
||||
if bAddMachining and Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = Blade.ApplyAllSteps( Cutting, b3Raw)
|
||||
@@ -686,8 +682,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
end
|
||||
end
|
||||
-- eventuale lavorazione di lama - lato della tasca in cui finisce la lavorazione
|
||||
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsEndOpen then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.EndEdge)
|
||||
if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.IsEndOpen then
|
||||
Cutting = Blade.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces, Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[2])
|
||||
bIsCuttingOk = false
|
||||
if bAddMachining and Cutting.CanApply then
|
||||
bIsCuttingOk, Cutting.Message = Blade.ApplyAllSteps( Cutting, b3Raw)
|
||||
@@ -711,9 +707,9 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
local Mortising = {}
|
||||
local bNeedToMachineOtherSide = false
|
||||
if Proc.Topology == 'Tunnel' then
|
||||
Mortising, bNeedToMachineOtherSide = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[1])
|
||||
Mortising, bNeedToMachineOtherSide = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[1])
|
||||
else
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.BottomEdge)
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge)
|
||||
-- si lavora solo quanto non lavorato dalla lama
|
||||
Mortising.MaxElev = dBottomDepthToMachine + BeamData.CUT_EXTRA
|
||||
end
|
||||
@@ -723,7 +719,7 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
end
|
||||
-- lato opposto del tunnel
|
||||
if Proc.Topology == 'Tunnel' and bNeedToMachineOtherSide then
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.OppositeEdges[2])
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.OppositeEdges[2])
|
||||
bIsMortisingOk = false
|
||||
if bAddMachining and Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
@@ -735,8 +731,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
-- se la sega a catena non è arrivata sul fondo e c'è almeno un lato aperto va lavorato
|
||||
if Mortising.LongitudinalOffset > 10 * GEO.EPS_SMALL then
|
||||
-- eventuale lavorazione di sega a catena - lato della tasca da cui inizia la lavorazione
|
||||
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsStartOpen then
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.StartEdge)
|
||||
if Proc.MainFaces.LongFaces[1].MainEdges.BottomEdge.IsStartOpen then
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].MainEdges.SideEdges[1])
|
||||
bIsMortisingOk = false
|
||||
if bAddMachining and Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
@@ -746,8 +742,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
|
||||
end
|
||||
end
|
||||
-- eventuale lavorazione di sega a catena - lato della tasca in cui finisce la lavorazione
|
||||
if Proc.MainFaces.LongFace.Edges.BottomEdge.IsEndOpen then
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFace, Proc.MainFaces.LongFace.Edges.SideEdges.EndEdge)
|
||||
if Proc.MainFaces.LongFace[1].MainEdges.BottomEdge.IsEndOpen then
|
||||
Mortising = Chainsaw.CalculateMachiningParameters( Proc, Proc.MainFaces.LongFaces[1], Proc.MainFaces.LongFaces[1].Edges.SideEdges[2])
|
||||
bIsMortisingOk = false
|
||||
if bAddMachining and Mortising.CanApply then
|
||||
bIsMortisingOk, Mortising.Message = Chainsaw.ApplyAllSteps( Mortising, b3Raw)
|
||||
|
||||
Reference in New Issue
Block a user