ab283a3efa
- correzioni al polishing (oar si notifica che è un taglio diretto e si controlla meglio l'utensile) - varie migliorie nei tagli diretti.
1655 lines
75 KiB
VB.net
1655 lines
75 KiB
VB.net
Imports EgtUILib
|
|
|
|
Friend Module CamAuto
|
|
|
|
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
|
|
Friend Function AddMachinings(nPartId As Integer) As Boolean
|
|
Dim nWarn As Integer = 0
|
|
Return AddMachinings(nPartId, nWarn)
|
|
End Function
|
|
|
|
Friend Function AddMachinings(nPartId As Integer, ByRef nWarn As Integer) As Boolean
|
|
Dim bDripOk As Boolean = VerifyVacuumsForDrip(nPartId)
|
|
If Not bDripOk Then nWarn = 1
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams(bDripOk)
|
|
EgtLuaSetGlobIntVar("CAM.PARTID", nPartId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.Add")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(91017))
|
|
End If
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetOrderMachiningFlag()
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function UpdateSawing(nOperId As Integer, ByRef nNewOperation As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
EgtLuaSetGlobIntVar("CAM.OPERID", nOperId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.UpdateSawing")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaGetGlobIntVar("CAM.NEW_OPERATION", nNewOperation)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr <> 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
m_MainWindow.m_CurrentProjectPageUC.ClearMessage()
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function ChangePvColor(nOperId As Integer, colCut As Color3d)
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
EgtLuaSetGlobIntVar("CAM.OPERID", nOperId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaExecLine("CAM.ChangePvColor( " & nOperId.ToString & ",Color3d(" & colCut.R.ToString & "," & colCut.G.ToString & "," & colCut.B.ToString & "))")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr <> 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
m_MainWindow.m_CurrentProjectPageUC.ClearMessage()
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function AddWaterJetMachining(nOperId As Integer, ByRef nWarn As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
EgtLuaSetGlobIntVar("CAM.OPERID", nOperId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.AddWaterJet")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
m_MainWindow.m_CurrentProjectPageUC.ClearMessage()
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function AddWaterJetMachining(LocaList As List(Of Integer), ByRef nWarn As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
For i As Integer = 0 To LocaList.Count - 1
|
|
EgtLuaSetGlobIntVar("CAM.TAB_OPERID." & (i + 1).ToString, LocaList(i))
|
|
Next
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.AddWaterJets")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function EraseMachinings(nPartId As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
EgtLuaSetGlobIntVar("CAM.PARTID", nPartId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.Erase")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetOrderMachiningFlag()
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetProjectNcRestart()
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function InvertVerticalCut(nOperId As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
EgtLuaSetGlobIntVar("CAM.OPERID", nOperId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.InvertVerticalCut")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function InvertWaterjet(nOperId As Integer) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
EgtLuaSetGlobIntVar("CAM.OPERID", nOperId)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.InvertWaterjet")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function ResetAllMachinings() As Boolean
|
|
Dim nWarn As Integer = 0
|
|
Return ResetAllMachinings(nWarn)
|
|
End Function
|
|
|
|
' Ricalcola tutte le lavorazioni
|
|
Friend Function ResetAllMachinings(ByRef nWarn As Integer) As Boolean
|
|
' Cancello tutte le lavorazioni
|
|
EraseMachinings(GDB_ID.NULL)
|
|
' Se progetto con pezzi piani
|
|
Dim nPrjType As Integer = m_MainWindow.m_CurrentProjectPageUC.GetCurrentProjectType()
|
|
If nPrjType = CurrentProjectPageUC.PRJ_TYPE.FLATS Then
|
|
' Reinserisco tutte le lavorazioni piane
|
|
AddMachinings(GDB_ID.NULL, nWarn)
|
|
' Se altrimenti progetto con cornici
|
|
ElseIf nPrjType = CurrentProjectPageUC.PRJ_TYPE.FRAMES Then
|
|
' Reinserisco tutte le lavorazioni delle cornici
|
|
AddFrameMachinings(m_MainWindow.m_FrameCutPageUC.m_FrameMachiningUC.m_dStartTrim, m_MainWindow.m_FrameCutPageUC.m_FrameMachiningUC.m_dEndTrim)
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
' Elimina da ogni entità il nome della lavorazione asseganta
|
|
Friend Function RestoreDef_Machinig(Optional bOnlySideAng As Boolean = True)
|
|
Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted
|
|
Dim bApplySawingTilted As Boolean = m_MainWindow.m_CurrentMachine.bApplySawingTilted
|
|
' Controllo le geometrie dei pezzi in parcheggio
|
|
Dim nIdPart As Integer = EgtGetFirstPart()
|
|
While nIdPart <> GDB_ID.NULL
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
RestoreDefaultTiltedSawing(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng)
|
|
nIdPart = EgtGetNextPart(nIdPart)
|
|
End While
|
|
' Controllo le geometrie dei pezzi inseriti nei grezzi
|
|
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
|
|
nIdPart = EgtGetFirstPartInRawPart(nRawId)
|
|
While nIdPart <> GDB_ID.NULL
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
RestoreDefaultTiltedSawing(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng)
|
|
nIdLayerOutLoop = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP & ".orig")
|
|
If nIdLayerOutLoop <> GDB_ID.NULL Then
|
|
nEntId = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
RestoreDefaultTiltedSawing(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng)
|
|
End If
|
|
nIdPart = EgtGetNextPartInRawPart(nIdPart)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
' ripristina la lavorazone indicata di default per i tagli inclinati
|
|
Private Sub RestoreDefaultTiltedSawing(nEntId As Integer, sSawingTilted As String, bApply As Boolean, bOnlySideAng As Boolean)
|
|
While nEntId <> GDB_ID.NULL
|
|
Dim dOrigSideAng As Double = 0
|
|
EgtGetInfo(nEntId, INFO_ORIG_SIDE_ANGLE, dOrigSideAng)
|
|
' Se è un'entità con lavorazione inclinata
|
|
If Math.Abs( dOrigSideAng) > EPS_ANG_SMALL Then
|
|
' Se richiesta applicazione
|
|
If bApply Then
|
|
' Se non definita lavorazione specifica applico qualla standard
|
|
If String.IsNullOrEmpty(sSawingTilted) Then
|
|
EgtRemoveInfo(nEntId, DEF_MACHINING_TILTED)
|
|
' altrimenti applico quella specifica
|
|
Else
|
|
EgtSetInfo(nEntId, DEF_MACHINING_TILTED, sSawingTilted)
|
|
End If
|
|
' altrimenti rimuovo la lavorazione specifica (verrà poi applicata quella standard)
|
|
Else
|
|
EgtRemoveInfo(nEntId, DEF_MACHINING_TILTED)
|
|
End If
|
|
' altrimenti se richiesta modifica anche delle altre
|
|
ElseIf Not bOnlySideAng Then
|
|
Dim sInfo As String = String.Empty
|
|
EgtGetInfo(nEntId, DEF_MACHINING, sInfo)
|
|
' se esiste una lavorazione specificata allora la rimuovo
|
|
If Not String.IsNullOrEmpty(sInfo) Then
|
|
EgtRemoveInfo(nEntId, DEF_MACHINING)
|
|
End If
|
|
End If
|
|
nEntId = EgtGetNext(nEntId)
|
|
End While
|
|
End Sub
|
|
|
|
Friend Function ResetAllSplitCurv() As Boolean
|
|
Dim bOk As Boolean = True
|
|
Dim nIdPart As Integer = EgtGetFirstPart()
|
|
While nIdPart <> GDB_ID.NULL
|
|
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
|
|
Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, LAY_AUX_SPLIT_WJ)
|
|
EgtErase(IdAuxLayer)
|
|
' accedo al Layer OutLoop
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
While nIdMy <> GDB_ID.NULL
|
|
EgtRemoveInfo(nIdMy, INFO_JOINENTITY)
|
|
nIdMy = EgtGetNext(nIdMy)
|
|
End While
|
|
nIdPart = EgtGetNextPart(nIdPart)
|
|
End While
|
|
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
|
|
nIdPart = EgtGetFirstPartInRawPart(nRawId)
|
|
While nIdPart <> GDB_ID.NULL
|
|
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
|
|
Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, LAY_AUX_SPLIT_WJ)
|
|
EgtErase(IdAuxLayer)
|
|
' accedo al Layer OutLoop
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
While nIdMy <> GDB_ID.NULL
|
|
EgtRemoveInfo(nIdMy, INFO_JOINENTITY)
|
|
nIdMy = EgtGetNext(nIdMy)
|
|
End While
|
|
nIdPart = EgtGetNextPartInRawPart(nIdPart)
|
|
End While
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function ResetAllStartCurv() As Boolean
|
|
Dim bOk As Boolean = True
|
|
Dim nIdPart As Integer = EgtGetFirstPart()
|
|
While nIdPart <> GDB_ID.NULL
|
|
' accedo al Layer OutLoop
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
EgtRemoveInfo(nIdLayerOutLoop, INFO_START)
|
|
nIdPart = EgtGetNextPart(nIdPart)
|
|
End While
|
|
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
|
|
nIdPart = EgtGetFirstPartInRawPart(nRawId)
|
|
While nIdPart <> GDB_ID.NULL
|
|
' accedo al Layer OutLoop
|
|
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
|
|
EgtRemoveInfo(nIdLayerOutLoop, INFO_START)
|
|
nIdPart = EgtGetNextPartInRawPart(nIdPart)
|
|
End While
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function ResetAllBridges() As Boolean
|
|
Dim nBridgesGroupId As Integer = EgtGetFirstNameInGroup(EgtGetCurrMachGroup(), "Bridges")
|
|
Return EgtErase(nBridgesGroupId)
|
|
End Function
|
|
|
|
Friend Function ResetAllSplitCut() As Boolean
|
|
Dim PartList As New List(Of Integer)
|
|
' Ricerca nei grezzi dei pezzi (devono essere ricercati tra quelli presenti nei grezzi)
|
|
Dim bOk As Boolean = True
|
|
' Recupero il numero di fasi presenti nel progetto
|
|
Dim nPhaseCount As Integer = EgtGetPhaseCount()
|
|
For nPhase As Integer = 1 To nPhaseCount
|
|
EgtSetCurrPhase(nPhase)
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
Dim nParId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
If EgtVerifyRawPartPhase(nRawId, nPhase) Then
|
|
While nParId <> GDB_ID.NULL
|
|
Dim nNextParId As Integer = EgtGetNextPartInRawPart(nParId)
|
|
' verifico se il pezzo passato è un taglio di sepatazione (il nome deve contenere "SpliCut")
|
|
Dim sName As String = String.Empty
|
|
If EgtGetName(nParId, sName) AndAlso sName.Contains(NAME_SPLIT_CUT) Then
|
|
' Rimuovo il pezzo dal grezzo
|
|
If EgtRemovePartFromRawPart(nParId) Then
|
|
' Salvo l'indice del pezzo se non è stato già inserito
|
|
Dim nIndex As Integer = PartList.FirstOrDefault(Function(nId) nId = nParId)
|
|
If nIndex = 0 Then PartList.Add(nParId)
|
|
End If
|
|
End If
|
|
nParId = nNextParId
|
|
End While
|
|
End If
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
Next
|
|
' Reimposto la prima fase del progetto
|
|
EgtSetCurrPhase(1)
|
|
' Procedo ad eliminare il pezzo
|
|
For Each Item As Integer In PartList
|
|
bOk = bOk And EgtErase(Item)
|
|
Next
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function ResetAllRawPart() As Boolean
|
|
Dim nPhase As Integer = 1
|
|
Dim nOtherRaw As Integer = EgtGetFirstRawPart()
|
|
While nOtherRaw <> GDB_ID.NULL
|
|
' se il pezzo non appartiene alla prima fase allora viene eliminato
|
|
If Not EgtVerifyRawPartPhase(nOtherRaw, nPhase) Then
|
|
Dim NextRaw As Integer = EgtGetNextRawPart(nOtherRaw)
|
|
EgtRemoveRawPart(nOtherRaw)
|
|
nOtherRaw = NextRaw
|
|
Else
|
|
nOtherRaw = EgtGetNextRawPart(nOtherRaw)
|
|
End If
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
' verifico che il contorno passato non sia stato separato
|
|
Friend Function VerifyOutLoopIsClosed(nIdLayerOutLoop As Integer)
|
|
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
|
|
While nIdMy <> GDB_ID.NULL
|
|
Dim nValInfo As Integer = 1
|
|
If EgtGetInfo(nIdMy, INFO_JOINENTITY, nValInfo) Then
|
|
If nValInfo = 0 Then Return False
|
|
End If
|
|
EgtRemoveInfo(nIdMy, INFO_JOINENTITY)
|
|
nIdMy = EgtGetNext(nIdMy)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function RemoveFinalEmptyPhases() As Boolean
|
|
Dim nOpeId As Integer = EgtGetLastOperation()
|
|
While nOpeId <> GDB_ID.NULL
|
|
Dim nPrevOpeId As Integer = EgtGetPrevOperation(nOpeId)
|
|
If EgtGetOperationType(nOpeId) = MCH_OY.DISP AndAlso EgtIsOperationEmpty(nOpeId) Then
|
|
EgtRemoveLastPhase()
|
|
Else
|
|
Exit While
|
|
End If
|
|
nOpeId = nPrevOpeId
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function RemoveLastPhase() As Boolean
|
|
' Non posso eliminare la prima fase
|
|
Dim nLastPhase As Integer = EgtGetPhaseCount()
|
|
If nLastPhase = 1 Then Return False
|
|
' Sposto le lavorazioni in coda a quelle della fase precedente
|
|
Dim nDispId As Integer = EgtGetPhaseDisposition(nLastPhase)
|
|
Dim nMachId As Integer = EgtGetNextOperation(nDispId)
|
|
While nMachId <> GDB_ID.NULL
|
|
EgtChangeOperationPhase(nMachId, nLastPhase - 1)
|
|
nMachId = EgtGetNextOperation(nDispId)
|
|
End While
|
|
' Rimuovo l'ultima fase
|
|
Return EgtRemoveLastPhase()
|
|
End Function
|
|
|
|
Friend Function UpdateAllMachiningsToolpaths() As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.UpdateAllTp")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function SortAllMachinings() As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
SetLuaStandardCamParams()
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.Sort")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function SpecialApplyDisposition(nDispId As Integer, bRecalc As Boolean, Optional ResetOrderMachiningFlag As Boolean = True) As Boolean
|
|
EgtLuaCreateGlobTable("CAM")
|
|
EgtLuaSetGlobIntVar("CAM.DISPID", nDispId)
|
|
EgtLuaSetGlobBoolVar("CAM.RECALC", bRecalc)
|
|
Dim nErr As Integer = 999
|
|
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
|
|
bOk = bOk AndAlso EgtLuaGetGlobIntVar("CAM.ERR", nErr) AndAlso nErr = 0
|
|
bOk = bOk AndAlso EgtLuaCallFunction("CAM.SpecApplyDisp")
|
|
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
|
|
EgtLuaResetGlobVar("CAM")
|
|
If nErr > 0 Then
|
|
bOk = False
|
|
EgtOutLog("Error in CamAuto : " & nErr.ToString())
|
|
ElseIf nErr < 0 Then
|
|
EgtOutLog("Warning in CamAuto : " & nErr.ToString())
|
|
End If
|
|
If ResetOrderMachiningFlag Then
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetOrderMachiningFlag()
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function VerifyVacuumsForDrip(nPartId As Integer) As Boolean
|
|
' Se un pezzo
|
|
If nPartId <> GDB_ID.NULL Then
|
|
' Verifico contenga layer per lavorazioni da sotto con entità
|
|
If EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_DRIPCUT)) = 0 And
|
|
EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_UNDERDRILL)) = 0 Then
|
|
Return True
|
|
End If
|
|
' Se tutti i pezzi
|
|
Else
|
|
' Salvo fase attualmente corrente
|
|
Dim nOriPhase As Integer = EgtGetCurrPhase()
|
|
' Ciclo su tutti i pezzi presenti nei grezzi dell'ultima fase di lavorazione
|
|
EgtSetCurrPhase(EgtGetPhaseCount())
|
|
Dim bFound As Boolean = False
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
If EgtVerifyRawPartCurrPhase(nRawId) Then
|
|
Dim nMyPartId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
While nMyPartId <> GDB_ID.NULL
|
|
' se ci sono lavorazioni da sotto
|
|
If EgtGetGroupObjs(EgtGetFirstNameInGroup(nMyPartId, NAME_DRIPCUT)) > 0 Or
|
|
EgtGetGroupObjs(EgtGetFirstNameInGroup(nMyPartId, NAME_UNDERDRILL)) > 0 Then
|
|
bFound = True
|
|
End If
|
|
nMyPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
End If
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
' Ripristino fase corrente originale
|
|
EgtSetCurrPhase(nOriPhase)
|
|
' Se non trovate lavorazioni da sotto, esco
|
|
If Not bFound Then Return True
|
|
End If
|
|
' Verifico che il diametro della lama installata permetta l'utilizzo della ventosa
|
|
Dim dSawDiam As Double
|
|
If EgtTdbSetCurrTool(m_MainWindow.m_CurrentMachine.sCurrSaw) AndAlso
|
|
EgtTdbGetCurrToolParam(MCH_TP.DIAM, dSawDiam) Then
|
|
Return (dSawDiam <= m_MainWindow.m_CurrentMachine.dMaxSawDiamForVac)
|
|
End If
|
|
Return False
|
|
End Function
|
|
|
|
Friend Function UpdateVacuumsForDrip() As Boolean
|
|
Dim bOk As Boolean = True
|
|
' Salvo fase attualmente corrente
|
|
Dim nOriPhase As Integer = EgtGetCurrPhase()
|
|
' Carico le ventose
|
|
LoadVacuumCups()
|
|
' Box complessivo dei pezzi con tagli da sotto
|
|
Dim b3Tot As New BBox3d
|
|
' Ciclo su tutti i pezzi presenti nei grezzi dell'ultima fase di lavorazione
|
|
EgtSetCurrPhase(EgtGetPhaseCount())
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
If EgtVerifyRawPartCurrPhase(nRawId) Then
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
While nPartId <> GDB_ID.NULL
|
|
' reset eventuali vecchie informazioni
|
|
RemoveOneMoveInfo(nPartId)
|
|
' se ci sono lavorazioni da sotto nel pezzo si processa
|
|
If EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_DRIPCUT)) > 0 Or
|
|
EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_UNDERDRILL)) > 0 Then
|
|
Dim rmData As New RawMoveData
|
|
Dim b3Part As New BBox3d
|
|
If PutVacuumCupsOnPart(nPartId, rmData, b3Part) Then
|
|
SaveOneMoveInfo(nPartId, rmData)
|
|
b3Tot.Add(b3Part)
|
|
Else
|
|
bOk = False
|
|
EgtOutLog("Error on UpdateVacuumsForDrip in Part " & nPartId.ToString())
|
|
End If
|
|
End If
|
|
nPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
End If
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
' Scarico le ventose
|
|
RemoveVacuumCups()
|
|
' Salvo box complessivo
|
|
Dim nMarkId As Integer = m_MainWindow.m_CurrentProjectPageUC.AddProjectMark()
|
|
If b3Tot.IsEmpty Then
|
|
Return EgtRemoveInfo(nMarkId, INFO_DRIPBBOX)
|
|
Else
|
|
Return EgtSetInfo(nMarkId, INFO_DRIPBBOX, b3Tot)
|
|
End If
|
|
' Ripristino fase corrente originale
|
|
EgtSetCurrPhase(nOriPhase)
|
|
Return bOk
|
|
End Function
|
|
|
|
Friend Function DeactivateAllMachinings() As Boolean
|
|
Return EgtSetAllOperationsMode(False)
|
|
End Function
|
|
|
|
Friend Function ActivateAllMachinings() As Boolean
|
|
Return EgtSetAllOperationsMode(True)
|
|
End Function
|
|
|
|
Friend Function HideAllMachinings() As Boolean
|
|
Dim nId As Integer = EgtGetFirstOperation()
|
|
While nId <> GDB_ID.NULL
|
|
If EgtGetOperationType(nId) <> MCH_OY.DISP Then
|
|
EgtSetOperationStatus(nId, False)
|
|
End If
|
|
nId = EgtGetNextOperation(nId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function ShowAllCurrPhaseMachinings() As Boolean
|
|
' Parto dalla prima lavorazione successiva alla disposizione di fase
|
|
Dim nId As Integer = EgtGetPhaseDisposition(EgtGetCurrPhase())
|
|
nId = EgtGetNextOperation(nId)
|
|
' Finchè c'è una lavorazione
|
|
While nId <> GDB_ID.NULL
|
|
' Se disposizione sono alla fase successiva
|
|
If EgtGetOperationType(nId) = MCH_OY.DISP Then Exit While
|
|
' Se abilitata
|
|
If EgtGetOperationMode(nId) Then
|
|
EgtSetOperationStatus(nId, True)
|
|
End If
|
|
' Passo alla successiva
|
|
nId = EgtGetNextOperation(nId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function RemoveFinalHome() As Boolean
|
|
Dim nId As Integer = EgtGetLastActiveOperation()
|
|
Return EgtRemoveOperationHome(nId)
|
|
End Function
|
|
|
|
' Verifico che per tutte le lavorazioni sia attrezzato l'utensile
|
|
Friend Function VerifySetup(ByRef sMissingTools As String) As Boolean
|
|
Dim bOk As Boolean = True
|
|
Dim CurrMachine As CurrentMachine = m_MainWindow.m_CurrentMachine
|
|
sMissingTools = ""
|
|
Dim bIsMultiCut = (EgtGetHeadId("H101") <> GDB_ID.NULL)
|
|
Dim nId As Integer = EgtGetFirstOperation()
|
|
While nId <> GDB_ID.NULL
|
|
If IsValidMachining(nId) Then
|
|
Dim nType As Integer = MCH_OY.NONE
|
|
EgtGetMachiningParam(MCH_MP.TYPE, nType)
|
|
Dim sTuuid As String = String.Empty
|
|
EgtGetMachiningParam(MCH_MP.TUUID, sTuuid)
|
|
Dim sTool As String = String.Empty
|
|
EgtTdbGetToolFromUUID(sTuuid, sTool)
|
|
Dim nToolType As Integer = MCH_TY.NONE
|
|
if EgtTdbSetCurrTool( sTool) Then EgtTdbGetCurrToolParam( MCH_TP.TYPE, nToolType)
|
|
If String.IsNullOrWhiteSpace(sTool) Then
|
|
Dim sMchTool As String = ""
|
|
EgtGetMachiningParam(MCH_MP.TOOL, sMchTool)
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sMchTool) = -1 Then
|
|
sMissingTools = sMissingTools & sMchTool & ", "
|
|
End If
|
|
ElseIf nType = MCH_OY.SAWING Or nType = MCH_OY.SAWROUGHING Or nType = MCH_OY.SAWFINISHING Then
|
|
Dim sTool2 As String = String.Empty
|
|
If bIsMultiCut Then
|
|
' L'utensile sulla seconda testa ha lo stesso nome di quello sulla prima con suffisso "-2"
|
|
If sTool.Substring(sTool.Length() - 2) = "-2" Then
|
|
sTool = sTool.Remove(sTool.Length() - 2)
|
|
End If
|
|
sTool2 = sTool & "-2"
|
|
End If
|
|
If CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then
|
|
Dim bOnTC As Boolean = FindToolOnChanger( sTool)
|
|
If Not bOnTC Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
ElseIf String.Compare(sTool, CurrMachine.sCurrSaw) <> 0 AndAlso
|
|
(String.IsNullOrWhiteSpace(sTool2) OrElse String.Compare(sTool2, CurrMachine.sCurrSaw) <> 0) AndAlso
|
|
String.Compare(sTool, CurrMachine.sCurrDripSaw) <> 0 Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
ElseIf nType = MCH_OY.DRILLING Then
|
|
If String.Compare(sTool, CurrMachine.sCurrDrill) <> 0 And
|
|
String.Compare(sTool, CurrMachine.sCurrDripDrill) <> 0 And
|
|
Not FindToolOnChanger(sTool) Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
ElseIf nType = MCH_OY.MILLING Then
|
|
' Se lucidatura e frese manuali, non deve essere attrezzato l'utensile ausiliario
|
|
If nToolType = MCH_TY.MILL_POLISHING AndAlso
|
|
( CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Or
|
|
CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER) Then
|
|
If Not String.IsNullOrWhiteSpace(CurrMachine.sCurrDrill) OrElse
|
|
Not String.IsNullOrWhiteSpace(CurrMachine.sCurrMill) OrElse
|
|
Not String.IsNullOrWhiteSpace(CurrMachine.sCurrMillNoTip) Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
EgtOutLog("-->Remove Auxiliary Tool (Polishing needs None)")
|
|
End If
|
|
End If
|
|
' Verifico sia la fresa corrente, oppure sia attrezzato oppure la lama corrente
|
|
' Accetto comunque le mole per lucidatura (al momento non vengono attrezzate)
|
|
ElseIf String.Compare(sTool, CurrMachine.sCurrMill) <> 0 AndAlso
|
|
Not FindToolOnChanger(sTool) AndAlso
|
|
String.Compare(sTool, CurrMachine.sCurrSaw) <> 0 AndAlso
|
|
nToolType <> MCH_TY.MILL_POLISHING Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
ElseIf nType = MCH_OY.POCKETING Then
|
|
' Se lucidatura e frese manuali, non deve essere attrezzato l'utensile ausiliario
|
|
If nToolType = MCH_TY.MILL_POLISHING AndAlso
|
|
( CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Or
|
|
CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER) Then
|
|
If Not String.IsNullOrWhiteSpace(CurrMachine.sCurrDrill) OrElse
|
|
Not String.IsNullOrWhiteSpace(CurrMachine.sCurrMill) OrElse
|
|
Not String.IsNullOrWhiteSpace(CurrMachine.sCurrMillNoTip) Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
EgtOutLog("-->Remove Auxiliary Tool (Polishing needs None)")
|
|
End If
|
|
End If
|
|
' Verifico sia la mola da scasso corrente, oppure sia attrezzato
|
|
' Accetto comunque le mole per lucidatura (al momento non vengono attrezzate)
|
|
ElseIf String.Compare(sTool, CurrMachine.sCurrMillNoTip) <> 0 AndAlso
|
|
Not FindToolOnChanger(sTool) AndAlso
|
|
nToolType <> MCH_TY.MILL_POLISHING Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
ElseIf nType = MCH_OY.WATERJETTING Then
|
|
If String.Compare(sTool, CurrMachine.sCurrWaterJet) <> 0 And
|
|
Not FindToolOnChanger(sTool) Then
|
|
bOk = False
|
|
If sMissingTools.IndexOf(sTool) = -1 Then
|
|
sMissingTools = sMissingTools & sTool & ", "
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
nId = EgtGetNextOperation(nId)
|
|
End While
|
|
Dim index As Integer = sMissingTools.LastIndexOf(","c)
|
|
sMissingTools = If(index >= 0, sMissingTools.Remove(index, 1), sMissingTools)
|
|
Return bOk
|
|
End Function
|
|
|
|
Private Function FindToolOnChanger(sTool As String) As Boolean
|
|
' Ricerca nel cambia utensili automatico
|
|
For i As Integer = 0 To m_MainWindow.m_CurrentMachine.ToolChangerNbr() - 1
|
|
If String.Compare(sTool, m_MainWindow.m_CurrentMachine.ToolChanger(i).sTool) = 0 Then
|
|
Return True
|
|
End If
|
|
Next
|
|
' Ricerca nel cambia utensili manuale
|
|
For i As Integer = 0 To m_MainWindow.m_CurrentMachine.ManualToolChangerNbr() - 1
|
|
If String.Compare(sTool, m_MainWindow.m_CurrentMachine.ManualToolChanger(i).sTool) = 0 Then
|
|
Return True
|
|
End If
|
|
Next
|
|
' Non trovato
|
|
Return False
|
|
End Function
|
|
|
|
Friend Function CanChangeSaw() As Boolean
|
|
' Se non è TC anche per lama, non è possibile
|
|
If m_MainWindow.m_CurrentMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then
|
|
Return False
|
|
End If
|
|
' Se è nei TC manuali con posizione T0, non è possibile
|
|
For Each ToolPosition As ToolChangerPos In m_MainWindow.m_CurrentMachine.ManualToolChanger
|
|
If m_MainWindow.m_CurrentMachine.sCurrSaw = ToolPosition.sTool And ToolPosition.sName = "T0" Then
|
|
Return False
|
|
End If
|
|
Next
|
|
' Si può cambiare
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function CanChangeTool() As Boolean
|
|
' Se solo lama, non è possibile
|
|
If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAW Then
|
|
Return False
|
|
End If
|
|
' Se non è TC anche per lama, sempre possibile
|
|
If m_MainWindow.m_CurrentMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then
|
|
Return True
|
|
End If
|
|
' Altrimenti possibile solo se si può cambiare lama
|
|
Return CanChangeSaw()
|
|
End Function
|
|
|
|
Friend Function TestAllMachiningsForStrict() As Boolean
|
|
Dim bModified As Boolean = False
|
|
' Affondamento ridotto
|
|
Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile())
|
|
' Ciclo sulle lavorazioni
|
|
Dim nOperId As Integer = EgtGetFirstOperation()
|
|
Dim LocalListOperId As New List(Of Integer)
|
|
While nOperId <> GDB_ID.NULL
|
|
' verifico sia una lavorazione valida di taglio con lama
|
|
If IsValidMachining(nOperId) And EgtGetOperationType(nOperId) = MCH_OY.SAWING Then
|
|
' verifica interferenza
|
|
Dim nFlag As Integer = FMI_TYPE.NONE
|
|
If Not VerifyComposedMachining(nOperId, nFlag) Then
|
|
nFlag = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO
|
|
End If
|
|
' sistemazione lavorazione, se necessario
|
|
If AdjustMachining(nOperId, nFlag, dReducedDepth) Then
|
|
bModified = True
|
|
' se abilitato e attivo waterjet, lo aggiungo per completare il taglio
|
|
If m_MainWindow.m_CurrentMachine.WaterJettingActive Then
|
|
Dim nWarn As Integer = 0
|
|
LocalListOperId.Add(nOperId)
|
|
'AddWaterJetMachining(nOperId, nWarn)
|
|
End If
|
|
End If
|
|
End If
|
|
nOperId = EgtGetNextOperation(nOperId)
|
|
End While
|
|
If LocalListOperId.Count > 0 Then AddWaterJetMachining(LocalListOperId, 0)
|
|
Return bModified
|
|
End Function
|
|
|
|
Friend Function VerifyComposedMachining(nOperId As Integer, ByRef nFlag As Integer) As Boolean
|
|
' verifico sia una lavorazione
|
|
If Not EgtSetCurrMachining(nOperId) Then Return False
|
|
' determino eventuali lavorazioni inglobate
|
|
Dim vOthId As New List(Of Integer)
|
|
Dim sInfo As String = String.Empty
|
|
If EgtGetInfo(nOperId, INFO_MCH_OTHMID, sInfo) Then
|
|
Dim sItems() As String = sInfo.Split(",".ToCharArray)
|
|
For Each sId As String In sItems
|
|
Dim nId As Integer = 0
|
|
StringToInt(sId, nId)
|
|
If nId > 0 Then vOthId.Add(nId)
|
|
Next
|
|
End If
|
|
' layer di origine
|
|
Dim sLay As String = String.Empty
|
|
EgtGetInfo(nOperId, INFO_MCH_LAYER, sLay)
|
|
' verifica interferenza
|
|
nFlag = FMI_TYPE.NONE
|
|
If sLay = NAME_OUTLOOP Then
|
|
Dim nRes As Integer = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO
|
|
If Not EgtVerifyMachining(nOperId, nRes) Then Return False
|
|
nFlag = nFlag Or nRes
|
|
Dim nToolInt As Integer = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.LEADINTYPE, nToolInt)
|
|
If nToolInt = Int(MCH_SAW_LI.STRICT) Then
|
|
nFlag = nFlag Or FMI_TYPE.LI
|
|
End If
|
|
nToolInt = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.LEADOUTTYPE, nToolInt)
|
|
If nToolInt = Int(MCH_SAW_LO.STRICT) Then
|
|
nFlag = nFlag Or FMI_TYPE.LO
|
|
End If
|
|
For Each nId As Integer In vOthId
|
|
nRes = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO
|
|
If Not EgtVerifyMachining(nId, nRes) Then Return False
|
|
nFlag = nFlag Or nRes
|
|
Next
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function AdjustMachining(nOperId As Integer, nFlag As Integer, dReducedDepth As Double) As Boolean
|
|
Dim bModified As Boolean = False
|
|
' abilitazione
|
|
Dim bEnabled As Boolean = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF)
|
|
' restringo lavorazione abilitata ma con interferenza
|
|
If bEnabled And nFlag <> FMI_TYPE.NONE Then
|
|
Dim bStart As Boolean = ((nFlag And FMI_TYPE.LI) <> 0)
|
|
Dim bEnd As Boolean = ((nFlag And FMI_TYPE.LO) <> 0)
|
|
SetCutStrict(nOperId, bStart, bEnd)
|
|
' se risulta lavorazione vuota, provo a diminuire l'affondamento
|
|
If EgtIsMachiningEmpty() Then
|
|
ResetCutStrict(nOperId, bStart, bEnd)
|
|
SetCutDepth(nOperId, dReducedDepth)
|
|
' ripeto verifica
|
|
nFlag = FMI_TYPE.NONE
|
|
If Not VerifyComposedMachining(nOperId, nFlag) Then
|
|
nFlag = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO
|
|
End If
|
|
' se non superata la stringo
|
|
If nFlag <> FMI_TYPE.NONE Then
|
|
bStart = ((nFlag And FMI_TYPE.LI) <> 0)
|
|
bEnd = ((nFlag And FMI_TYPE.LO) <> 0)
|
|
SetCutStrict(nOperId, bStart, bEnd)
|
|
End If
|
|
End If
|
|
bModified = True
|
|
End If
|
|
Return bModified
|
|
End Function
|
|
|
|
Friend Function SetCutDepth(nMchId As Integer, dDepth As Double) As Boolean
|
|
' Imposto la lavorazione corrente
|
|
If Not EgtSetCurrMachining(nMchId) Then Return False
|
|
' Imposto l'affondamento
|
|
EgtSetMachiningParam(MCH_MP.DEPTH, dDepth)
|
|
' Ricalcolo il preview
|
|
UpdateMachiningPreview(nMchId, True)
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function SetCutStrict(nMchId As Integer, bStart As Boolean, bEnd As Boolean) As Boolean
|
|
' Recupero sicurezza su tagli
|
|
Dim dSafeLen As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 0, m_MainWindow.GetMachIniFile())
|
|
' Imposto la lavorazione corrente
|
|
If Not EgtSetCurrMachining(nMchId) Then Return False
|
|
Dim bModif As Boolean = False
|
|
' Se richiesto, restringo l'attacco
|
|
If bStart Then
|
|
' Recupero tipo attacco originale e lo salvo se non già fatto
|
|
Dim nOriLeadIn As Integer = MCH_SAW_LI.CENT
|
|
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nOriLeadIn)
|
|
If Not EgtExistsInfo(nMchId, INFO_MCH_ORILEADIN) Then
|
|
EgtSetInfo(nMchId, INFO_MCH_ORILEADIN, nOriLeadIn)
|
|
End If
|
|
' Se attacco cambiato, aggiorno e accorcio della sicurezza sui tagli
|
|
If nOriLeadIn <> MCH_SAW_LI.STRICT Then
|
|
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.STRICT)
|
|
Dim dUserAddLen As Double = 0
|
|
EgtGetInfo(nMchId, INFO_MCH_USER_SAL, dUserAddLen)
|
|
EgtRemoveInfo(nMchId, INFO_MCH_USER_SAL)
|
|
Dim dAddLen As Double = 0
|
|
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
|
|
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen - dUserAddLen - dSafeLen)
|
|
bModif = True
|
|
End If
|
|
End If
|
|
' Se richiesto, restringo l'uscita
|
|
If bEnd Then
|
|
' Recupero tipo uscita originale e lo salvo se non già fatto
|
|
Dim nOriLeadOut As Integer = MCH_SAW_LO.CENT
|
|
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nOriLeadOut)
|
|
If Not EgtExistsInfo(nMchId, INFO_MCH_ORILEADOUT) Then
|
|
EgtSetInfo(nMchId, INFO_MCH_ORILEADOUT, nOriLeadOut)
|
|
End If
|
|
' Se uscita cambiata, aggiorno e accorcio della sicurezza sui tagli
|
|
If nOriLeadOut <> MCH_SAW_LO.STRICT Then
|
|
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.STRICT)
|
|
Dim dUserAddLen As Double = 0
|
|
EgtGetInfo(nMchId, INFO_MCH_USER_EAL, dUserAddLen)
|
|
EgtRemoveInfo(nMchId, INFO_MCH_USER_EAL)
|
|
Dim dAddLen As Double = 0
|
|
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
|
|
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen - dUserAddLen - dSafeLen)
|
|
bModif = True
|
|
End If
|
|
End If
|
|
' Se modificato, ricalcolo il preview
|
|
If bModif Then
|
|
UpdateMachiningPreview(nMchId, True)
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function ResetCutStrict(nMchId As Integer, bStart As Boolean, bEnd As Boolean) As Boolean
|
|
' Recupero sicurezza su tagli
|
|
Dim dSafeLen As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 0, m_MainWindow.GetMachIniFile())
|
|
' Imposto la lavorazione corrente
|
|
If Not EgtSetCurrMachining(nMchId) Then Return False
|
|
Dim bModif As Boolean = False
|
|
' Se richiesto, ripristino l'attacco
|
|
If bStart Then
|
|
' Recupero tipo attacco originale
|
|
Dim nOriLeadIn As Integer = MCH_SAW_LI.CENT
|
|
EgtGetInfo(nMchId, INFO_MCH_ORILEADIN, nOriLeadIn)
|
|
Dim nCurrLeadIn As Integer = MCH_SAW_LI.CENT
|
|
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nCurrLeadIn)
|
|
' Se attacco cambiato, aggiorno e allungo della sicurezza sui tagli
|
|
If nOriLeadIn <> nCurrLeadIn Then
|
|
EgtSetMachiningParam(MCH_MP.LEADINTYPE, nOriLeadIn)
|
|
Dim dAddLen As Double = 0
|
|
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
|
|
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dSafeLen)
|
|
bModif = True
|
|
End If
|
|
End If
|
|
' Se richiesto, ripristino l'uscita
|
|
If bEnd Then
|
|
' Recupero tipo uscita originale
|
|
Dim nOriLeadOut As Integer = MCH_SAW_LO.CENT
|
|
EgtGetInfo(nMchId, INFO_MCH_ORILEADOUT, nOriLeadOut)
|
|
Dim nCurrLeadOut As Integer = MCH_SAW_LO.CENT
|
|
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nCurrLeadOut)
|
|
' Se uscita cambiata, aggiorno
|
|
If nOriLeadOut <> nCurrLeadOut Then
|
|
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, nOriLeadOut)
|
|
Dim dAddLen As Double = 0
|
|
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
|
|
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dSafeLen)
|
|
bModif = True
|
|
End If
|
|
End If
|
|
' Se modificato, ricalcolo il preview
|
|
If bModif Then
|
|
UpdateMachiningPreview(nMchId, True)
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function SetPause(nMchId As Integer) As Boolean
|
|
Return EgtSetInfo(nMchId, INFO_MCH_PAUSE, True)
|
|
End Function
|
|
|
|
Friend Function GetPause(nMchId As Integer) As Boolean
|
|
Dim bPause As Boolean = False
|
|
EgtGetInfo(nMchId, INFO_MCH_PAUSE, bPause)
|
|
Return bPause
|
|
End Function
|
|
|
|
Friend Function ResetPause(nMchId As Integer) As Boolean
|
|
Return EgtRemoveInfo(nMchId, INFO_MCH_PAUSE)
|
|
End Function
|
|
|
|
Friend Function SetEnableInvert(nEntId As Integer) As Boolean
|
|
Return EgtRemoveInfo(nEntId, INFO_ENABLE_INVERT)
|
|
End Function
|
|
|
|
Friend Function GetEnableInvert(nEntId As Integer) As Boolean
|
|
Dim bEnable As Boolean = True
|
|
EgtGetInfo(nEntId, INFO_ENABLE_INVERT, bEnable)
|
|
Return bEnable
|
|
End Function
|
|
|
|
Friend Function ResetEnableInvert(nEntId As Integer) As Boolean
|
|
Return EgtSetInfo(nEntId, INFO_ENABLE_INVERT, False)
|
|
End Function
|
|
|
|
Friend Function UpdateMachiningPreview(nMchId As Integer, bMoveOnPart As Boolean) As Boolean
|
|
' Imposto la lavorazione corrente
|
|
If Not EgtSetCurrMachining(nMchId) Then Return False
|
|
' Ricalcolo il preview
|
|
EgtPreviewMachining(True)
|
|
' Se non devo spostarlo nel pezzo, esco
|
|
If Not bMoveOnPart Then Return True
|
|
' Indice gruppo di preview nella lavorazione
|
|
Dim nMchPvId As Integer = EgtGetFirstNameInGroup(nMchId, NAME_PREVIEW)
|
|
' Indice gruppo di preview nel pezzo
|
|
Dim nPartPvId As Integer = GDB_ID.NULL
|
|
EgtGetInfo(nMchPvId, INFO_PV_ONPART_ID, nPartPvId)
|
|
' Svuoto il preview nel pezzo
|
|
EgtEmptyGroup(nPartPvId)
|
|
' Rimuovo anche il preview di lavorazioni inglobate
|
|
Dim sInfo As String = String.Empty
|
|
If EgtGetInfo(nMchId, INFO_MCH_OTHMID, sInfo) Then
|
|
Dim sItems() As String = sInfo.Split(",".ToCharArray)
|
|
For Each sId2 As String In sItems
|
|
' Indice gruppo di preview nella lavorazione
|
|
Dim nId2 As Integer = GDB_ID.NULL
|
|
StringToInt(sId2, nId2)
|
|
Dim nMchPvId2 As Integer = EgtGetFirstNameInGroup(nId2, NAME_PREVIEW)
|
|
' Indice gruppo di preview nel pezzo
|
|
Dim nPartPvId2 As Integer = GDB_ID.NULL
|
|
EgtGetInfo(nMchPvId2, INFO_PV_ONPART_ID, nPartPvId2)
|
|
' Svuoto il preview nel pezzo
|
|
EgtEmptyGroup(nPartPvId2)
|
|
Next
|
|
End If
|
|
' Lo sposto dalla lavorazione al pezzo
|
|
Dim nId As Integer = EgtGetFirstInGroup(nMchPvId)
|
|
|
|
If nId = GDB_ID.NULL Then Return False
|
|
|
|
While nId <> GDB_ID.NULL
|
|
EgtRelocateGlob(nId, nPartPvId)
|
|
nId = EgtGetFirstInGroup(nMchPvId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function RemoveMachiningPreview(nMchId As Integer) As Boolean
|
|
' Indice gruppo di preview nella lavorazione
|
|
Dim nMchPvId As Integer = EgtGetFirstNameInGroup(nMchId, NAME_PREVIEW)
|
|
' Lo svuoto
|
|
Return EgtEmptyGroup(nMchPvId)
|
|
End Function
|
|
|
|
Friend Function IsValidMachining(nOperId As Integer) As Boolean
|
|
' Deve essere una lavorazione
|
|
If Not EgtSetCurrMachining(nOperId) Then Return False
|
|
' Deve contenere qualcosa
|
|
If EgtIsMachiningEmpty() Then Return False
|
|
' Deve essere abilitata oppure disabilitata direttamente dall'utente
|
|
If Not (EgtGetOperationMode(nOperId) Or EgtExistsInfo(nOperId, INFO_MCH_USER_OFF)) Then Return False
|
|
' E' valida
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function IsExitPreCut(nOperId As Integer) As Boolean
|
|
' Deve essere una lavorazione
|
|
If Not EgtSetCurrMachining(nOperId) Then Return False
|
|
' Verifico presenza Info di PreCut
|
|
Return EgtExistsInfo(nOperId, INFO_MCH_EPC)
|
|
End Function
|
|
|
|
Friend Function RemoveAllExitPreCuts() As Boolean
|
|
Dim nOperId As Integer = EgtGetFirstOperation()
|
|
While nOperId <> GDB_ID.NULL
|
|
Dim nNextOperId As Integer = EgtGetNextOperation(nOperId)
|
|
If EgtGetType(nOperId) <> MCH_OY.DISP AndAlso EgtExistsInfo(nOperId, INFO_MCH_EPC) Then
|
|
EgtRemoveOperation(nOperId)
|
|
End If
|
|
nOperId = nNextOperId
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Private Function SetLuaStandardCamParams(Optional bDripOk As Boolean = True) As Boolean
|
|
Dim sMaterial As String = m_MainWindow.m_CurrentMachine.CurrMat.sName
|
|
Dim sSawMch As String = m_MainWindow.m_CurrentMachine.sCurrSawing
|
|
Dim sSawTiltedMch As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted
|
|
Dim sMillMch As String = m_MainWindow.m_CurrentMachine.sCurrMilling
|
|
Dim sDrillMch As String = m_MainWindow.m_CurrentMachine.sCurrDrilling
|
|
Dim sWaterJetMch As String = m_MainWindow.m_CurrentMachine.sCurrWaterJetting
|
|
Dim sWaterJetQual As String = m_MainWindow.m_CurrentMachine.sCurrWaterJettingQuality
|
|
Dim sPocketMch As String = m_MainWindow.m_CurrentMachine.sCurrPocketing
|
|
Dim sDripSawMch As String = If(bDripOk, m_MainWindow.m_CurrentMachine.sCurrDripSawing, "")
|
|
Dim sDripDrillMch As String = If(bDripOk, m_MainWindow.m_CurrentMachine.sCurrDripDrilling, "")
|
|
Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile())
|
|
Dim dHolesOffset As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OFFSET, 0, m_MainWindow.GetMachIniFile())
|
|
Dim dHolesOverlap As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OVERLAP, 0, m_MainWindow.GetMachIniFile())
|
|
Dim dCutSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 1, m_MainWindow.GetMachIniFile()), 10 * EPS_SMALL)
|
|
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, m_MainWindow.GetMachIniFile()), 10 * EPS_SMALL)
|
|
Dim bOneHoleIntCorner As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, 0, m_MainWindow.GetMachIniFile()) <> 0)
|
|
Dim bMillingOnCorners As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, 1, m_MainWindow.GetMachIniFile()) <> 0)
|
|
Dim bMillingOnSinks As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_MILLING_ON_SINKS, 0, m_MainWindow.GetMachIniFile()) <> 0)
|
|
Dim dMillingShort As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_MILLING_SHORTENING, 0, m_MainWindow.GetMachIniFile())
|
|
Dim bWaterjetOptimize As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_OPTIMIZE, 0, m_MainWindow.GetMachIniFile()) <> 0)
|
|
Dim bWaterjetOnSinks As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_ON_SINKS, 0, m_MainWindow.GetMachIniFile()) <> 0)
|
|
EgtLuaSetGlobStringVar("CAM.MATERIAL", sMaterial)
|
|
EgtLuaSetGlobStringVar("CAM.SAWMCH", sSawMch)
|
|
EgtLuaSetGlobStringVar("CAM.SAWTILTEDMCH", sSawTiltedMch)
|
|
EgtLuaSetGlobStringVar("CAM.MILLMCH", sMillMch)
|
|
EgtLuaSetGlobStringVar("CAM.DRILLMCH", sDrillMch)
|
|
EgtLuaSetGlobStringVar("CAM.POCKETMCH", sPocketMch)
|
|
EgtLuaSetGlobStringVar("CAM.WATERJETMCH", sWaterJetMch)
|
|
EgtLuaSetGlobStringVar("CAM.WATERJETQLTY", sWaterJetQual)
|
|
EgtLuaSetGlobStringVar("CAM.DRIPSAWMCH", sDripSawMch)
|
|
EgtLuaSetGlobStringVar("CAM.DRIPDRILLMCH", sDripDrillMch)
|
|
EgtLuaSetGlobNumVar("CAM.REDUCEDDEPTH", dReducedDepth)
|
|
EgtLuaSetGlobNumVar("CAM.HOLESOFFSET", dHolesOffset)
|
|
EgtLuaSetGlobNumVar("CAM.HOLESOVERLAP", dHolesOverlap)
|
|
EgtLuaSetGlobBoolVar("CAM.ONEHOLEINTCORNER", bOneHoleIntCorner)
|
|
EgtLuaSetGlobNumVar("CAM.CUTSAFETY", dCutSafety)
|
|
EgtLuaSetGlobNumVar("CAM.CORNERSAFETY", dCornerSafety)
|
|
EgtLuaSetGlobBoolVar("CAM.MILLINGONCORNERS", bMillingOnCorners)
|
|
EgtLuaSetGlobBoolVar("CAM.MILLINGONSINKS", bMillingOnSinks)
|
|
EgtLuaSetGlobNumVar("CAM.MILLINGSHORT", dMillingShort)
|
|
EgtLuaSetGlobBoolVar("CAM.WATERJETOPTIMIZE", bWaterjetOptimize)
|
|
EgtLuaSetGlobBoolVar("CAM.WATERJETONSINKS", bWaterjetOnSinks)
|
|
EgtLuaSetGlobNumVar("CAM.RAWHEIGHT", GetRawHeight())
|
|
EgtLuaSetGlobNumVar("CAM.REGROT", GetRegistrationRotation())
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function GetTableCount() As Integer
|
|
If EgtGetTableId(MAIN_TAB) = GDB_ID.NULL Then Return 0
|
|
If EgtGetTableId(SECOND_TAB) = GDB_ID.NULL Then Return 1
|
|
If EgtGetTableId(THIRD_TAB) = GDB_ID.NULL Then Return 2
|
|
If EgtGetTableId(FORTH_TAB) = GDB_ID.NULL Then Return 3
|
|
Return 4
|
|
End Function
|
|
|
|
Friend Function GetTableName(nInd As Integer) As String
|
|
If nInd = 1 Then Return MAIN_TAB
|
|
If nInd = 2 Then Return SECOND_TAB
|
|
If nInd = 3 Then Return THIRD_TAB
|
|
If nInd = 4 Then Return FORTH_TAB
|
|
Return ""
|
|
End Function
|
|
|
|
Friend Function GetCurrentTable() As Integer
|
|
Dim sTabName As String = MAIN_TAB
|
|
EgtGetTableName(sTabName)
|
|
If sTabName = FORTH_TAB Then
|
|
Return 4
|
|
ElseIf sTabName = THIRD_TAB Then
|
|
Return 3
|
|
ElseIf sTabName = SECOND_TAB Then
|
|
Return 2
|
|
Else
|
|
Return 1
|
|
End If
|
|
End Function
|
|
|
|
Friend Function GetCurrentRaw() As Integer
|
|
' Recupero il grezzo (primo con fase 1)
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL And Not EgtVerifyRawPartPhase(nRawId, 1)
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
Return nRawId
|
|
End Function
|
|
|
|
Friend Function GetRawBox(ByRef ptRawMin As Point3d, ByRef ptRawMax As Point3d) As Boolean
|
|
Return EgtGetRawPartBBox(GetCurrentRaw(), ptRawMin, ptRawMax)
|
|
End Function
|
|
|
|
Friend Function GetRawBox(ByRef b3RawBox As BBox3d) As Boolean
|
|
Return EgtGetRawPartBBox(GetCurrentRaw(), b3RawBox)
|
|
End Function
|
|
|
|
Friend Function GetRawCenter(ByRef ptCent As Point3d) As Boolean
|
|
Return EgtGetRawPartCenter(GetCurrentRaw(), ptCent)
|
|
End Function
|
|
|
|
Friend Function GetRawHeight() As Double
|
|
Dim ptRawMin, ptRawMax As Point3d
|
|
If GetRawBox(ptRawMin, ptRawMax) Then
|
|
Return (ptRawMax.z - ptRawMin.z)
|
|
Else
|
|
Return 0
|
|
End If
|
|
End Function
|
|
|
|
Friend Function SetRegistrationRotation(dRegRot As Double) As Boolean
|
|
Return EgtSetInfo(GetCurrentRaw(), INFO_REGROT, dRegRot)
|
|
End Function
|
|
|
|
Friend Function ResetRegistrationRotation() As Boolean
|
|
Return EgtRemoveInfo(GetCurrentRaw(), INFO_REGROT)
|
|
End Function
|
|
|
|
Friend Function GetRegistrationRotation() As Double
|
|
Dim dRegRot As Double = 0
|
|
EgtGetInfo(GetCurrentRaw(), INFO_REGROT, dRegRot)
|
|
Return dRegRot
|
|
End Function
|
|
|
|
Friend Function UpdateAllRawsZ(dDeltaZ As Double) As Boolean
|
|
For i As Integer = 1 To EgtGetPhaseCount()
|
|
EgtSetCurrPhase(i)
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
If EgtVerifyRawPartCurrPhase(nRawId) Then
|
|
EgtMoveRawPart(nRawId, New Vector3d(0, 0, dDeltaZ))
|
|
End If
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
Next
|
|
EgtSetCurrPhase(1)
|
|
HideAllMachinings()
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function IsMachiningInActiveRaw(nMchId As Integer) As Boolean
|
|
EgtSetCurrMachining(nMchId)
|
|
' Recupero la prima entità geometrica della lavorazione
|
|
Dim nId, nSub As Integer
|
|
If Not EgtGetMachiningGeometry(0, nId, nSub) Then Return False
|
|
' Recupero il pezzo di appartenenza
|
|
Dim nPartId = EgtGetParent(EgtGetParent(nId))
|
|
If nPartId = GDB_ID.NULL Then Return False
|
|
' Recupero la fase di appartenenza della lavorazione
|
|
Dim nPhase As Integer = EgtGetOperationPhase(nMchId)
|
|
' Verifico se il pezzo è nei grezzi della fase indicata
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
If EgtVerifyRawPartPhase(nRawId, nPhase) Then
|
|
Dim nPirId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
While nPirId <> GDB_ID.NULL
|
|
If nPartId = nPirId Then Return True
|
|
nPirId = EgtGetNextPartInRawPart(nPirId)
|
|
End While
|
|
End If
|
|
nRawId = EgtGetNextRawPart(nRawId)
|
|
End While
|
|
Return False
|
|
End Function
|
|
|
|
Friend Function AddFrameMachinings(dTrimStart As Double, dTrimEnd As Double) As Boolean
|
|
' Cancello tutte le lavorazioni
|
|
EgtRemoveAllOperations()
|
|
' Recupero il grezzo corrente
|
|
Dim nRawId As Integer = GetCurrentRaw()
|
|
If nRawId = GDB_ID.NULL Then Return False
|
|
' Se non ci sono pezzi, esco
|
|
If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True
|
|
' Aggiungo sgrossatura
|
|
If Not AddFrameSawRoughing(dTrimStart, dTrimEnd) Then Return False
|
|
' Aggiungo finitura
|
|
If Not AddFrameSawFinishing(dTrimStart, dTrimEnd) Then Return False
|
|
' Aggiungo spatolatura
|
|
If Not AddFrameSawSideFinishing(dTrimStart, dTrimEnd) Then Return False
|
|
' Aggiungo taglio singolo
|
|
If Not AddFrameSawSingle() Then Return False
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function AddFrameSawRoughing(dTrimStart As Double, dTrimEnd As Double) As Boolean
|
|
' Cancello la lavorazione di sgrossatura
|
|
Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWROU)
|
|
EgtRemoveOperation(nId)
|
|
' Recupero il grezzo corrente
|
|
Dim nRawId As Integer = GetCurrentRaw()
|
|
If nRawId = GDB_ID.NULL Then Return False
|
|
' Se non ci sono pezzi, esco
|
|
Dim nPart1Id As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
If nPart1Id = GDB_ID.NULL Then Return True
|
|
' Verifico se cornice curva
|
|
Dim nDir As Integer = 0
|
|
EgtGetInfo(nPart1Id, INFO_FRAME_DIR, nDir)
|
|
Dim bSwap As Boolean = (nDir = 0)
|
|
Dim bCurved As Boolean = (nDir >= 2)
|
|
' Recupero la lavorazione corrente di sgrossatura con lama
|
|
Dim sCurrSawRoughing = m_MainWindow.m_CurrentMachine.sCurrSawRoughing
|
|
If String.IsNullOrEmpty(sCurrSawRoughing) Then Return True
|
|
' Inserisco la lavorazione corrente
|
|
Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWROU, sCurrSawRoughing)
|
|
If nMchId = GDB_ID.NULL Then Return False
|
|
' La sposto all'inizio delle lavorazioni (subito dopo la disposizione)
|
|
Dim nDispId As Integer = EgtGetPhaseDisposition(1)
|
|
If Not EgtRelocate(nMchId, nDispId, GDB_POS.AFTER) Then
|
|
EgtErase(nMchId)
|
|
Return False
|
|
End If
|
|
' Recupero sezioni e prima guida dei pezzi nel grezzo
|
|
Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId)
|
|
Dim vId(nCount) As Integer
|
|
Dim nInd As Integer = 0
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE))
|
|
While nPartId <> GDB_ID.NULL
|
|
vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT))
|
|
nInd += 1
|
|
nPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
' Imposto la geometria
|
|
EgtSetMachiningGeometry(vId)
|
|
' Imposto trim iniziale e finale
|
|
EgtSetMachiningParam(MCH_MP.STARTADDLEN, If(bSwap, -dTrimEnd, -dTrimStart))
|
|
EgtSetMachiningParam(MCH_MP.ENDADDLEN, If(bSwap, -dTrimStart, -dTrimEnd))
|
|
' Se cornice curva, imposto SCC
|
|
If bCurved Then EgtSetMachiningParam(MCH_MP.SOLCHOICETYPE, MCH_SCC.ADIR_NEAR)
|
|
' Applico la lavorazione
|
|
Return EgtApplyMachining(False)
|
|
End Function
|
|
|
|
Friend Function AddFrameSawFinishing(dTrimStart As Double, dTrimEnd As Double) As Boolean
|
|
' Cancello la lavorazione di finitura
|
|
Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWFIN)
|
|
EgtRemoveOperation(nId)
|
|
' Recupero il grezzo corrente
|
|
Dim nRawId As Integer = GetCurrentRaw()
|
|
If nRawId = GDB_ID.NULL Then Return False
|
|
' Se non ci sono pezzi, esco
|
|
Dim nPart1Id As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
If nPart1Id = GDB_ID.NULL Then Return True
|
|
' Verifico se cornice curva
|
|
Dim nDir As Integer = 0
|
|
EgtGetInfo(nPart1Id, INFO_FRAME_DIR, nDir)
|
|
Dim bSwap As Boolean = (nDir = 0)
|
|
Dim bCurved As Boolean = (nDir >= 2)
|
|
' Recupero la lavorazione corrente di finitura con lama
|
|
Dim sCurrSawFinishing = m_MainWindow.m_CurrentMachine.sCurrSawFinishing
|
|
If String.IsNullOrEmpty(sCurrSawFinishing) Then Return True
|
|
' Inserisco la lavorazione corrente
|
|
Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWFIN, sCurrSawFinishing)
|
|
If nMchId = GDB_ID.NULL Then Return False
|
|
' La sposto prima di una eventuale spatolatura
|
|
Dim nSideFinId As Integer = EgtGetFirstOperation()
|
|
While nSideFinId <> GDB_ID.NULL
|
|
Dim sName As String = String.Empty
|
|
If EgtGetOperationName(nSideFinId, sName) AndAlso
|
|
String.Compare(sName, NAME_FRAME_SAWSIDEFIN, True) = 0 Then
|
|
Exit While
|
|
End If
|
|
nSideFinId = EgtGetNextOperation(nSideFinId)
|
|
End While
|
|
If nSideFinId <> GDB_ID.NULL Then
|
|
If Not EgtRelocate(nMchId, nSideFinId, GDB_POS.BEFORE) Then
|
|
EgtErase(nMchId)
|
|
Return False
|
|
End If
|
|
End If
|
|
' Recupero sezioni e prima guida dei pezzi nel grezzo
|
|
Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId)
|
|
Dim vId(nCount) As Integer
|
|
Dim nInd As Integer = 0
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE))
|
|
While nPartId <> GDB_ID.NULL
|
|
vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT))
|
|
nInd += 1
|
|
nPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
' Imposto la geometria
|
|
EgtSetMachiningGeometry(vId)
|
|
' Imposto trim iniziale e finale
|
|
EgtSetMachiningParam(MCH_MP.STARTADDLEN, If(bSwap, -dTrimEnd, -dTrimStart))
|
|
EgtSetMachiningParam(MCH_MP.ENDADDLEN, If(bSwap, -dTrimStart, -dTrimEnd))
|
|
' Se cornice curva, imposto SCC
|
|
If bCurved Then EgtSetMachiningParam(MCH_MP.SOLCHOICETYPE, MCH_SCC.ADIR_NEAR)
|
|
' Applico la lavorazione
|
|
Return EgtApplyMachining(False)
|
|
End Function
|
|
|
|
Friend Function AddFrameSawSideFinishing(dTrimStart As Double, dTrimEnd As Double) As Boolean
|
|
' Cancello la lavorazione di spatolatura
|
|
Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWSIDEFIN)
|
|
EgtRemoveOperation(nId)
|
|
' Recupero il grezzo corrente
|
|
Dim nRawId As Integer = GetCurrentRaw()
|
|
If nRawId = GDB_ID.NULL Then Return False
|
|
' Se non ci sono pezzi, esco
|
|
Dim nPart1Id As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
If nPart1Id = GDB_ID.NULL Then Return True
|
|
' Verifico se cornice curva
|
|
Dim nDir As Integer = 0
|
|
EgtGetInfo(nPart1Id, INFO_FRAME_DIR, nDir)
|
|
Dim bSwap As Boolean = (nDir = 0)
|
|
Dim bCurved As Boolean = (nDir >= 2)
|
|
' Recupero la lavorazione corrente di spatolatura con lama
|
|
Dim sCurrSawSideFinishing = m_MainWindow.m_CurrentMachine.sCurrSawSideFinishing
|
|
If String.IsNullOrEmpty(sCurrSawSideFinishing) Then Return True
|
|
' Inserisco la lavorazione corrente
|
|
Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWSIDEFIN, sCurrSawSideFinishing)
|
|
If nMchId = GDB_ID.NULL Then Return False
|
|
' Recupero sezioni e prima guida dei pezzi nel grezzo
|
|
Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId)
|
|
Dim vId(nCount) As Integer
|
|
Dim nInd As Integer = 0
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE))
|
|
While nPartId <> GDB_ID.NULL
|
|
vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT))
|
|
nInd += 1
|
|
nPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
' Imposto la geometria
|
|
EgtSetMachiningGeometry(vId)
|
|
' Imposto trim iniziale e finale
|
|
EgtSetMachiningParam(MCH_MP.STARTADDLEN, If(bSwap, -dTrimEnd, -dTrimStart))
|
|
EgtSetMachiningParam(MCH_MP.ENDADDLEN, If(bSwap, -dTrimStart, -dTrimEnd))
|
|
' Se cornice curva, imposto SCC
|
|
If bCurved Then EgtSetMachiningParam(MCH_MP.SOLCHOICETYPE, MCH_SCC.ADIR_NEAR)
|
|
' Applico la lavorazione
|
|
Return EgtApplyMachining(False)
|
|
End Function
|
|
|
|
Friend Function AddFrameSawSingle() As Boolean
|
|
' Cancello la lavorazione di taglio singolo
|
|
Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWSINGLE)
|
|
EgtRemoveOperation(nId)
|
|
' Recupero il grezzo corrente
|
|
Dim nRawId As Integer = GetCurrentRaw()
|
|
Dim nSolidId As Integer = EgtGetFirstNameInGroup(nRawId, NAME_RAW_SOLID)
|
|
If nRawId = GDB_ID.NULL Or nSolidId = GDB_ID.NULL Then Return False
|
|
Dim b3Raw As New BBox3d
|
|
GetRawBox(b3Raw)
|
|
' Se non ci sono pezzi, esco
|
|
If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True
|
|
' Recupero la lavorazione corrente di taglio singolo con lama
|
|
Dim sCurrSawSingle = m_MainWindow.m_CurrentMachine.sCurrSawSingle
|
|
If String.IsNullOrEmpty(sCurrSawSingle) Then Return True
|
|
' Creo la lavorazione a partire dalla corrente
|
|
If Not EgtMdbSetCurrMachining(sCurrSawSingle) Then Return False
|
|
Dim sTuuid As String = String.Empty
|
|
Dim sTool As String = String.Empty
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTuuid)
|
|
EgtTdbGetToolFromUUID(sTuuid, sTool)
|
|
EgtTdbSetCurrTool(sTool)
|
|
Dim dMaxMat As Double = 50
|
|
EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, dMaxMat)
|
|
Dim dTDiam As Double = 200
|
|
EgtTdbGetCurrToolParam(MCH_TP.DIAM, dTDiam)
|
|
Dim nStepType As Integer = MCH_SAW_ST.ZIGZAG
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.STEPTYPE, nStepType)
|
|
Dim dStep As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.STEP_, dStep)
|
|
Dim nLiType As Integer = MCH_SAW_LI.CENT
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.LEADINTYPE, nLiType)
|
|
Dim nLoType As Integer = MCH_SAW_LO.CENT
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.LEADOUTTYPE, nLoType)
|
|
Dim dSpeed As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.SPEED, dSpeed)
|
|
Dim dFeed As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.FEED, dFeed)
|
|
Dim dStartFeed As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.STARTFEED, dStartFeed)
|
|
Dim dEndFeed As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.ENDFEED, dEndFeed)
|
|
Dim dTipFeed As Double = 0
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.TIPFEED, dTipFeed)
|
|
Dim nMchId As Integer = EgtCreateMachining(NAME_FRAME_SAWSINGLE, MCH_MY.MILLING, sTool)
|
|
If nMchId = GDB_ID.NULL Then Return False
|
|
' Recupero Id superficie e Ind facet
|
|
Dim nSurfId As Integer = GDB_ID.NULL
|
|
Dim nFacetInd As Integer = -1
|
|
Dim nPirId As Integer = EgtGetFirstPartInRawPart(nRawId)
|
|
While nPirId <> GDB_ID.NULL
|
|
If EgtGetInfo(nPirId, INFO_FRAME_SURF, nSurfId) And
|
|
EgtGetInfo(nPirId, INFO_FRAME_FACET, nFacetInd) Then
|
|
Exit While
|
|
End If
|
|
nPirId = EgtGetNextPartInRawPart(nPirId)
|
|
End While
|
|
' Recupero dati facet
|
|
Dim ptCen As Point3d
|
|
Dim vtN As Vector3d
|
|
If Not EgtSurfTmFacetCenter(nSurfId, nFacetInd, GDB_ID.ROOT, ptCen, vtN) Then Return False
|
|
' Imposto la geometria
|
|
EgtSetMachiningGeometry({nSurfId}, {nFacetInd})
|
|
' Calcolo adiacenze
|
|
Dim vAdj As New List(Of Integer)
|
|
If Not EgtSurfTmFacetAdjacencies(nSurfId, nFacetInd, vAdj) Then Return False
|
|
' Verifico facce adiacenti
|
|
Dim ptAdjCen As Point3d
|
|
Dim vtAdjN As Vector3d = Vector3d.NULL
|
|
For Each nAdj As Integer In vAdj
|
|
' Ciclo sulle adiacenze del solo primo loop (esterno)
|
|
If nAdj = STM_FACETADJ_ENDLOOP Then Exit For
|
|
' Verifico tipo di adiacenza
|
|
Dim bAdj As Boolean = False
|
|
Dim ptP1 As Point3d
|
|
Dim ptP2 As Point3d
|
|
Dim dAng As Double
|
|
If Not EgtSurfTmFacetsContact(nSurfId, nFacetInd, nAdj, GDB_ID.ROOT, bAdj, ptP1, ptP2, dAng) Then Return False
|
|
If dAng < 0 Then
|
|
' Non sono ammesse due facce limitanti
|
|
If Not vtAdjN.IsSmall() Then Return False
|
|
' Recupero la normale della faccia limitante
|
|
If Not EgtSurfTmFacetCenter(nSurfId, nAdj, GDB_ID.ROOT, ptAdjCen, vtAdjN) Then Return False
|
|
End If
|
|
Next
|
|
' Proprietà faccia
|
|
Dim bHorizz As Boolean = (Math.Abs(vtN.x) < EPS_SMALL And Math.Abs(vtN.y) < EPS_SMALL)
|
|
Dim bFree As Boolean = (vtAdjN.IsSmall() OrElse (ptCen.z > ptAdjCen.z And vtN.z > -EPS_SMALL))
|
|
Dim bLeftSide As Boolean = (vtN.z >= -EPS_SMALL)
|
|
Dim dElev As Double = 0
|
|
Dim dStartDist As Double = 0
|
|
Dim dEndDist As Double = 0
|
|
' Se faccia orizzontale non limitata da altre o sopra la limitante
|
|
If bHorizz And bFree Then
|
|
' recupero ingombro della faccia
|
|
Dim nCopyId As Integer = EgtCopySurfTmFacet(nSurfId, nFacetInd, EgtGetParent(nSurfId))
|
|
If nCopyId = GDB_ID.NULL Then Return False
|
|
Dim b3Copy As New BBox3d
|
|
EgtGetBBoxGlob(nCopyId, GDB_BB.STANDARD, b3Copy)
|
|
EgtErase(nCopyId)
|
|
If b3Copy.IsEmpty() Then Return False
|
|
' assegno parametri lavorazione faccia
|
|
If b3Copy.DimY() >= b3Copy.DimX() Then
|
|
If (b3Raw.Max().x - b3Copy.Min().x) <= (b3Copy.Max().x - b3Raw.Min().x) Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_LEFT)
|
|
dElev = b3Raw.Max().x - b3Copy.Min().x
|
|
dStartDist = b3Raw.Max().y - b3Copy.Max().y
|
|
dEndDist = b3Copy.Min().y - b3Raw.Min().y
|
|
Else
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_RIGHT)
|
|
dElev = b3Copy.Max().x - b3Raw.Min().x
|
|
dStartDist = b3Copy.Min().y - b3Raw.Min().y
|
|
dEndDist = b3Raw.Max().y - b3Copy.Max().y
|
|
End If
|
|
Else
|
|
If (b3Raw.Max().y - b3Copy.Min().y) <= (b3Copy.Max().y - b3Raw.Min().y) Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_FRONT)
|
|
dElev = b3Raw.Max().y - b3Copy.Min().y
|
|
dStartDist = b3Copy.Min().x - b3Raw.Min().x
|
|
dEndDist = b3Raw.Max().x - b3Copy.Max().x
|
|
Else
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_BACK)
|
|
dElev = b3Copy.Max().y - b3Raw.Min().y
|
|
dStartDist = b3Raw.Max().x - b3Copy.Max().x
|
|
dEndDist = b3Copy.Min().x - b3Raw.Min().x
|
|
End If
|
|
End If
|
|
If Not bLeftSide Then
|
|
Dim dTemp As Double = dStartDist
|
|
dStartDist = dEndDist
|
|
dEndDist = dTemp
|
|
End If
|
|
' altrimenti
|
|
Else
|
|
Dim vtSide As Vector3d
|
|
' Se faccia non limitata da altre o sopra la limitante
|
|
If bFree Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_DOWN)
|
|
vtSide = Vector3d.Z_AX()
|
|
' altrimenti è stata trovata una faccia adiacente limitante
|
|
Else
|
|
If vtAdjN.x > 10 * EPS_SMALL Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_LEFT)
|
|
vtSide = Vector3d.X_AX()
|
|
ElseIf vtAdjN.x < -10 * EPS_SMALL Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_RIGHT)
|
|
vtSide = -Vector3d.X_AX()
|
|
ElseIf vtAdjN.y > 10 * EPS_SMALL Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_FRONT)
|
|
vtSide = Vector3d.Y_AX()
|
|
ElseIf vtAdjN.y < -10 * EPS_SMALL Then
|
|
EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_BACK)
|
|
vtSide = -Vector3d.Y_AX()
|
|
End If
|
|
End If
|
|
' Calcolo elevazione
|
|
Dim ptP1, ptP2 As Point3d
|
|
If Not EgtSurfTmFacetOppositeSide(nSurfId, nFacetInd, vtSide, GDB_ID.ROOT, ptP1, ptP2) Then Return False
|
|
Dim ptPM As Point3d = Point3d.Media(ptP1, ptP2)
|
|
Dim vtElev As Vector3d = vtN ^ (vtSide ^ vtN)
|
|
If Not vtElev.Normalize() Then Return False
|
|
Dim vInters As New List(Of FlagPar)
|
|
If Not EgtLineSurfTmInters(ptPM, vtElev, nSolidId, GDB_ID.ROOT, vInters) Then Return False
|
|
If vInters.Count() = 0 OrElse vInters(vInters.Count() - 1).dPar <= EPS_SMALL Then
|
|
If Not EgtLineSurfTmInters(ptPM, vtElev, nSurfId, GDB_ID.ROOT, vInters) Then Return False
|
|
End If
|
|
If vInters.Count() > 0 AndAlso vInters(vInters.Count() - 1).dPar > EPS_SMALL Then
|
|
dElev = vInters(vInters.Count() - 1).dPar
|
|
Else
|
|
dElev = dMaxMat
|
|
End If
|
|
' Calcolo distanze iniziale e finale
|
|
Dim vtTg As Vector3d = ptP2 - ptP1
|
|
If Not vtTg.Normalize() Then Return False
|
|
If Not EgtLineSurfTmInters(ptP1, -vtTg, nSolidId, GDB_ID.ROOT, vInters) Then Return False
|
|
If vInters.Count() > 0 AndAlso vInters(vInters.Count() - 1).dPar > EPS_SMALL Then
|
|
dStartDist = vInters(vInters.Count() - 1).dPar
|
|
Else
|
|
dStartDist = 0
|
|
End If
|
|
If Not EgtLineSurfTmInters(ptP2, vtTg, nSolidId, GDB_ID.ROOT, vInters) Then Return False
|
|
If vInters.Count() > 0 AndAlso vInters(vInters.Count() - 1).dPar > EPS_SMALL Then
|
|
dEndDist = vInters(vInters.Count() - 1).dPar
|
|
Else
|
|
dEndDist = 0
|
|
End If
|
|
End If
|
|
' Imposto SCC
|
|
EgtSetMachiningParam(MCH_MP.SOLCHOICETYPE, MCH_SCC.ADIR_NEAR)
|
|
' Imposto lato di correzione
|
|
EgtSetMachiningParam(MCH_MP.WORKSIDE, If(bLeftSide, MCH_MIL_WS.LEFT, MCH_MIL_WS.RIGHT))
|
|
' Annullo affondamento
|
|
EgtSetMachiningParam(MCH_MP.DEPTH, 0.0)
|
|
' Se elevazione superiore a massimo materiale, riduco opportunamento per non collidere
|
|
If dElev > dMaxMat Then
|
|
EgtSetMachiningParam(MCH_MP.OFFSR, (dElev - dMaxMat))
|
|
dElev = dMaxMat
|
|
End If
|
|
' Se richiesto, imposto step di lato
|
|
EgtSetMachiningParam(MCH_MP.STEPTYPE, If(nStepType = MCH_SAW_ST.ONEWAY, MCH_MIL_ST.ONEWAY, MCH_MIL_ST.ZIGZAG))
|
|
If dStep >= EPS_SMALL And dStep < dElev Then
|
|
EgtSetMachiningParam(MCH_MP.STEP_, dStep)
|
|
EgtSetMachiningParam(MCH_MP.USERNOTES, "SideElev=" & DoubleToString( dElev, 1) & ";")
|
|
End If
|
|
' Recupero la distanza di sicurezza
|
|
Dim dSafeZ As Double = m_MainWindow.m_CurrentMachine.dSafeZ()
|
|
' Imposto attacco e uscita
|
|
Dim dTgAgg As Double = Math.Sqrt(dElev * (dTDiam - dElev))
|
|
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_MIL_LI.LINEAR)
|
|
If nLiType = MCH_SAW_LI.CENT Or nLiType = MCH_SAW_LI.STRICT Then
|
|
EgtSetMachiningParam(MCH_MP.LIPERP, dElev + dSafeZ)
|
|
Else
|
|
EgtSetMachiningParam(MCH_MP.LITANG, dStartDist + dTgAgg + dSafeZ)
|
|
End If
|
|
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_MIL_LO.LINEAR)
|
|
If nLoType = MCH_SAW_LO.CENT Or nLoType = MCH_SAW_LO.STRICT Then
|
|
EgtSetMachiningParam(MCH_MP.LOPERP, dElev + dSafeZ)
|
|
Else
|
|
EgtSetMachiningParam(MCH_MP.LOTANG, dEndDist + dTgAgg + dSafeZ)
|
|
End If
|
|
' Imposto speed e feed
|
|
EgtSetMachiningParam(MCH_MP.SPEED, dSpeed)
|
|
EgtSetMachiningParam(MCH_MP.FEED, dFeed)
|
|
EgtSetMachiningParam(MCH_MP.STARTFEED, dStartFeed)
|
|
EgtSetMachiningParam(MCH_MP.ENDFEED, dEndFeed)
|
|
EgtSetMachiningParam(MCH_MP.TIPFEED, dTipFeed)
|
|
' Applico la lavorazione
|
|
Return EgtApplyMachining(False)
|
|
End Function
|
|
|
|
End Module
|