diff --git a/CAM/CamAuto.vb b/CAM/CamAuto.vb index b5a0ab6..2676876 100644 --- a/CAM/CamAuto.vb +++ b/CAM/CamAuto.vb @@ -1,5 +1,6 @@ Imports System.Windows.Forms.Integration Imports EgtUILib +Imports EgtWPFLib5 Friend Module CamAuto @@ -33,6 +34,43 @@ Friend Module CamAuto Return bOk End Function + Friend Function AddSawMachining(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() @@ -134,6 +172,63 @@ Friend Module CamAuto Return True End Function + 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 + Dim bOk As Boolean = True + Dim nIdPart As Integer = EgtGetFirstPart() + While nIdPart <> GDB_ID.NULL + ' accedo al Layer OutLoop dei pezzi nel grezzo + Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) + Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) + SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + nIdPart = EgtGetNextPart(nIdPart) + End While + Dim nRawId As Integer = CamAuto.GetCurrentRaw() + nIdPart = EgtGetFirstPartInRawPart(nRawId) + While nIdPart <> GDB_ID.NULL + ' accedo al Layer OutLoop dei pezzi in parcheggio + Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) + Dim nEntId As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) + SetResetDef_Machining(nEntId, sSawingTilted, bApplySawingTilted, bOnlySideAng) + nIdPart = EgtGetNextPartInRawPart(nIdPart) + End While + Return bOk + End Function + + ' ripristina la lavorazone indicata di default per i tagli inclinati + Private Sub SetResetDef_Machining(nEntId As Integer, sSawingTilted As String, bApplySawingTilted As Boolean, bOnlySideAng As Boolean) + While nEntId <> GDB_ID.NULL + Dim sInfoSIdeAng As String = String.Empty + EgtGetInfo(nEntId, INFO_SIDE_ANGLE, sInfoSIdeAng) + ' Se è un'entità associata ad una lavorazione inclinata + If Not String.IsNullOrEmpty(sInfoSIdeAng) Then + If bApplySawingTilted Then + ' forzo la lavorazione inclinata + If String.IsNullOrEmpty(sSawingTilted) Then + ' ma se non esiste nessuna lavorezione specifica applico qualla standard + EgtRemoveInfo(nEntId, DEF_MACHINING) + Else + ' Applico quella specificata + EgtSetInfo(nEntId, DEF_MACHINING, sSawingTilted) + End If + Else + ' Rimuovo la lavorazione e applico quella standard + EgtRemoveInfo(nEntId, DEF_MACHINING) + End If + + ElseIf Not bOnlySideAng Then + Dim sInfo As String = String.Empty + EgtGetInfo(nEntId, DEF_MACHINING, sInfo) + If Not String.IsNullOrEmpty(sInfo) Then + ' se esiste una lavorazione specificata allora la rimuovo + 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() @@ -360,7 +455,7 @@ Friend Module CamAuto EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_UNDERDRILL)) = 0 Then Return True End If - ' Se tutti i pezzi + ' Se tutti i pezzi Else ' Salvo fase attualmente corrente Dim nOriPhase As Integer = EgtGetCurrPhase() @@ -487,6 +582,7 @@ Friend Module CamAuto 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 bIsMultiCut = (EgtGetHeadId("H101") <> GDB_ID.NULL) @@ -501,9 +597,9 @@ Friend Module CamAuto Dim sTool2 As String = String.Empty EgtGetMachiningParam(MCH_MP.TUUID, sTuuid) EgtTdbGetToolFromUUID(sTuuid, sTool) - If String.IsNullOrWhiteSpace( sTool) Then + If String.IsNullOrWhiteSpace(sTool) Then Dim sMchTool As String = "" - EgtGetMachiningParam( MCH_MP.TOOL, sMchTool) + EgtGetMachiningParam(MCH_MP.TOOL, sMchTool) bOk = False If sMissingTools.IndexOf(sMchTool) = -1 Then sMissingTools = sMissingTools & sMchTool & ", " @@ -516,8 +612,24 @@ Friend Module CamAuto End If sTool2 = sTool & "-2" End If - If String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrSaw) <> 0 AndAlso - ( String.IsNullOrWhiteSpace( sTool2) OrElse String.Compare(sTool2, m_MainWindow.m_CurrentMachine.sCurrSaw) <> 0) AndAlso + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + Dim bOnHolder As Boolean = False + For Each ToolPosition As ToolChangerPos In m_MainWindow.m_CurrentMachine.ToolChanger + If ToolPosition.sTool <> String.Empty Then + If sTool = ToolPosition.sTool Then + bOnHolder = True + Exit For + End If + End If + Next + If Not bOnHolder Then + bOk = False + If sMissingTools.IndexOf(sTool) = -1 Then + sMissingTools = sMissingTools & sTool & ", " + End If + End If + ElseIf String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrSaw) <> 0 AndAlso + (String.IsNullOrWhiteSpace(sTool2) OrElse String.Compare(sTool2, m_MainWindow.m_CurrentMachine.sCurrSaw) <> 0) AndAlso String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrDripSaw) <> 0 Then bOk = False If sMissingTools.IndexOf(sTool) = -1 Then @@ -555,6 +667,8 @@ Friend Module CamAuto 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 @@ -584,7 +698,7 @@ Friend Module CamAuto 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 + 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 @@ -599,7 +713,7 @@ Friend Module CamAuto LocalListOperId.Add(nOperId) 'AddWaterJetMachining(nOperId, nWarn) End If - End If + End If End If nOperId = EgtGetNextOperation(nOperId) End While @@ -707,8 +821,8 @@ Friend Module CamAuto 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) + 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) @@ -727,8 +841,8 @@ Friend Module CamAuto 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) + 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) @@ -885,9 +999,9 @@ Friend Module CamAuto 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) + 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 @@ -897,6 +1011,7 @@ Friend Module CamAuto 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 @@ -915,6 +1030,7 @@ Friend Module CamAuto Dim dMillingShort As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_MILLING_SHORTENING, 0, m_MainWindow.GetMachIniFile()) EgtLuaSetGlobStringVar("CAM.MATERIAL", sMaterial) EgtLuaSetGlobStringVar("CAM.SAWMCH", sSawMch) + EgtLuaSetGlobStringVar("CAM.SAWTILTEDMCH", sSawTiltedMch) EgtLuaSetGlobStringVar("CAM.MILLMCH", sMillMch) EgtLuaSetGlobStringVar("CAM.DRILLMCH", sDrillMch) EgtLuaSetGlobStringVar("CAM.POCKETMCH", sPocketMch) @@ -1074,13 +1190,13 @@ Friend Module CamAuto 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) + 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) + 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 @@ -1107,8 +1223,8 @@ Friend Module CamAuto ' 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)) + 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 @@ -1123,13 +1239,13 @@ Friend Module CamAuto 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) + 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) + 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 @@ -1166,8 +1282,8 @@ Friend Module CamAuto ' 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)) + 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 @@ -1182,13 +1298,13 @@ Friend Module CamAuto 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) + 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) + 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 @@ -1209,8 +1325,8 @@ Friend Module CamAuto ' 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)) + 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 @@ -1349,14 +1465,14 @@ Friend Module CamAuto dStartDist = dEndDist dEndDist = dTemp End If - ' altrimenti + ' 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 + ' altrimenti è stata trovata una faccia adiacente limitante Else If vtAdjN.x > 10 * EPS_SMALL Then EgtSetMachiningParam(MCH_MP.FACEUSE, MCH_MIL_FU.ORTUP_LEFT) diff --git a/CadCuts/ChangeToolWD.xaml b/CadCuts/ChangeToolWD.xaml new file mode 100644 index 0000000..1d619f9 --- /dev/null +++ b/CadCuts/ChangeToolWD.xaml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CadCuts/ChangeToolWD.xaml.vb b/CadCuts/ChangeToolWD.xaml.vb new file mode 100644 index 0000000..1d09cbe --- /dev/null +++ b/CadCuts/ChangeToolWD.xaml.vb @@ -0,0 +1,376 @@ +Imports System.Collections.ObjectModel +Imports EgtUILib + +Public Class ChangeToolWD + Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) + + Private m_SetUpMachiningList As New ObservableCollection(Of ItemMachining) + + Sub New(Owner As Window) + Me.Owner = Owner + InitializeComponent() + End Sub + + ' Parametri della lama impostata correntemente in macchina + Private m_DefaultSaw_Name As String = String.Empty + Private m_DefaultSaw_Diam As Double = 0 + Private m_DefaultSaw_Thick As Double = 0 + Private m_DefaultSaw_Exists As Boolean = False + + ' Il nome della lavorazione restituito dalla selezione + Private m_NewSawing As String = String.Empty + Public ReadOnly Property NewSawing As String + Get + Return m_NewSawing + End Get + End Property + + ' Il colore della lavorazione + Private m_EgtColor As New Color3d + Public ReadOnly Property EgtColor As Color3d + Get + Return m_EgtColor + End Get + End Property + + ' Il nome della posizione sulla rulliera + Private m_TCPos As String = String.Empty + Public ReadOnly Property TCPos As String + Get + Return m_TCPos + End Get + End Property + + ' Nome della lavorazione corrente + Private m_CurrSawing As String = String.Empty + Public Property CurrSawing As String + Get + Return m_CurrSawing + End Get + Set(value As String) + m_CurrSawing = value + End Set + End Property + + Private Sub GetDiamAndThickDefaultSaw() + m_DefaultSaw_Name = m_MainWindow.m_CurrentMachine.sCurrSaw + If EgtTdbSetCurrTool(m_DefaultSaw_Name) Then + ' Diametro lama lavorazione + EgtTdbGetCurrToolParam(MCH_TP.DIAM, m_DefaultSaw_Diam) + ' Spessore lama corrente + EgtTdbGetCurrToolParam(MCH_TP.THICK, m_DefaultSaw_Thick) + m_DefaultSaw_Exists = True + End If + End Sub + + Private Sub OpenFile_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized + ' Posizione finestra + Me.Top = Owner.Top + Owner.Height / 2 - Me.Height / 2 + Me.Left = Owner.Left + Owner.Width / 2 - Me.Width / 2 + ' Definizione del collegamento tra ItemList e ListBox1 + SetUpToolListBox.ItemsSource = m_SetUpMachiningList + ' 90378=Seleziona lavorazione + FilePathTxBl.Text = EgtMsg(90378) + End Sub + + Private Sub OpenFile_Loaded(sender As Object, e As EventArgs) Handles Me.Loaded + If String.IsNullOrEmpty(m_CurrSawing) Then + m_CurrSawing = m_MainWindow.m_CurrentMachine.sCurrSawing + End If + ' carico elenco degli utensili impostati attualmente in macchina (anche il laser!) + LoadSetUpMachining() + ' ricerco la lavorazione corrente + Dim Item As ItemMachining = m_SetUpMachiningList.FirstOrDefault(Function(x) x.Machining = m_CurrSawing) + Dim Index As Integer = m_SetUpMachiningList.IndexOf(Item) + If Index < 0 Then + ' Imposto lavorazione di default + EgtMdbSetCurrMachining(m_CurrSawing) + Dim sTool As String = String.Empty + EgtMdbGetCurrMachiningParam(MCH_MP.TOOL, sTool) + ' ⚠️ Utensile {0} non attrezzato + ErrorTxBl.Text = String.Format(EgtMsg(90377), sTool) + Index = 0 + End If + ' se presente seleziono il primo elemento + If m_SetUpMachiningList.Count > 0 Then + SetUpToolListBox.SelectedItem = m_SetUpMachiningList(Index) + OkBtn.IsEnabled = True + Else + OkBtn.IsEnabled = False + End If + End Sub + +#Region "SET UP MACHINING" + + ' Creo le liste da mostrare nella lista + Private Function LoadSetUpMachining() As Boolean + Dim sNameTool As String = String.Empty + Dim nType As Integer = 0 + Dim sHeadTool As String = String.Empty + Dim nExitTool As Integer = 0 + ' Imposto il contesto corrente + EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) + ' Recupero la lista di tutte le lavorazioni di lama + Dim local_Sawing As TreeViewItem.CathegoryItem = GetAllSwaing() + ' Se non ci sono lavorazioni di lama allora esco + If IsNothing(local_Sawing) Then Return False + + ' Ripulisco la lista degli utensili + m_SetUpMachiningList.Clear() + CreateSawingList(local_Sawing) + + Return True + End Function + + ' Creo la lista delle delle lavorazioni di lama da proporre + Private Sub CreateSawingList(SawingFam As TreeViewItem.CathegoryItem) + ' Recupero le info della lama montata di default + GetDiamAndThickDefaultSaw() + ' recupero la prima lavorazione + For Each Item As TreeViewItem.CustomItem In SawingFam.Items + Dim sNameTool As String = String.Empty + ' Imposto la lavorazione corrente + EgtMdbSetCurrMachining(Item.Name) + ' Recupero il nome dell'utensile della lavorazione + EgtMdbGetCurrMachiningParam(MCH_MP.TOOL, sNameTool) + If Not String.IsNullOrEmpty(sNameTool) And VerifyCurrSawTollerance(sNameTool) Then + ' Verifico che sia montata su un portautensile + EgtTdbSetCurrTool(sNameTool) + Dim sTCPos As String = String.Empty + EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sTCPos) + If Not String.IsNullOrEmpty(sTCPos) Then + ' Cerco nel porta utensili automaitico + For Each ToolPosition As ToolChangerPos In m_MainWindow.m_CurrentMachine.ToolChanger + If ToolPosition.sTool <> String.Empty Then + If sNameTool = ToolPosition.sTool Then + ' Verifico che il materiale e lo spessore + If VerifyCurrMachiningMaterial() Then + m_SetUpMachiningList.Add(New ItemMachining(Item.Name, sNameTool, sTCPos, Utility.GetColorPV())) + End If + Exit For + End If + End If + Next + End If + End If + Next + ' reimposto la lavorazione di lama e la lama impostate in macchina + EgtTdbSetCurrTool(m_MainWindow.m_CurrentMachine.sCurrSaw) + EgtMdbSetCurrMachining(m_MainWindow.m_CurrentMachine.sCurrSawing) + End Sub + + ' verifico l'utensile corrente (impostato nella funzione chiamante) se può lavorare il grezzo corrente + Private Function VerifyCurrMachiningMaterial() As Boolean + Dim m_MaterialsList As New ObservableCollection(Of MachiningMaterial) + For Each Material As Material In m_MainWindow.m_CurrentMachine.Materials + If m_MainWindow.m_CurrentMachine.bWaterJet And m_MainWindow.m_CurrentMachine.bFromDBWaterJet Then + m_MaterialsList.Add(New MachiningMaterial(Material.nId, Material.sName, Material.SubId)) + Else + m_MaterialsList.Add(New MachiningMaterial(Material.nId, Material.sName)) + End If + Next + + Dim ToolString As String = String.Empty + EgtMdbGetCurrMachiningParam(MCH_MP.SYSNOTES, ToolString) + If ToolString <> String.Empty Then + Dim sItems() = ToolString.Split(";".ToCharArray) + Dim Index As Integer = 0 + For Each Material As MachiningMaterial In m_MaterialsList + Dim Param() As String = sItems(Index).Split(",".ToCharArray) + Dim SubParam() As String = Param(0).Split(".".ToCharArray) + Dim nParId As Integer = 0 + Dim nSubParId As Integer = 0 + If m_MainWindow.m_CurrentMachine.bWaterJet And m_MainWindow.m_CurrentMachine.bFromDBWaterJet Then + If StringToInt(SubParam(0), nParId) AndAlso nParId = m_MainWindow.m_CurrentMachine.CurrMat.nId AndAlso SubParam.Count > 1 AndAlso + StringToInt(SubParam(1), nSubParId) AndAlso nSubParId = Material.nSubId Then + StringToDouble(Param(1), Material.dMinThickness) + StringToDouble(Param(2), Material.dMaxThickness) + Material.VerifyIfActive() + Else + Material.VerifyIfActive() + End If + Else + If StringToInt(Param(0), nParId) AndAlso nParId = m_MainWindow.m_CurrentMachine.CurrMat.nId Then + StringToDouble(Param(1), Material.dMinThickness) + StringToDouble(Param(2), Material.dMaxThickness) + Material.VerifyIfActive() + If m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight > Material.dMinThickness And m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight < Material.dMaxThickness Then + Return True + End If + End If + End If + Index += 1 + Next + End If + Return False + End Function + + ' verifico l'utensile corrente (impostato nella funzione chiamante) se ha le stesse dimensioni della lama di default + Private Function VerifyCurrSawTollerance(sNameTool As String) As Boolean + If m_DefaultSaw_Exists Then + If EgtTdbSetCurrTool(sNameTool) Then + ' Diametro nuova lama + Dim NewDiam As Double = 0 + EgtTdbGetCurrToolParam(MCH_TP.DIAM, NewDiam) + ' Spessore lama + Dim NewThick As Double = 0 + EgtTdbGetCurrToolParam(MCH_TP.THICK, NewThick) + ' Verifico che la nuova lama possa essere applicata: diametro minore, uguale spessore + Dim Delta_Diam As Double = NewDiam - m_DefaultSaw_Diam + Dim Delta_Thick As Double = Math.Abs(NewThick - m_DefaultSaw_Thick) + If Delta_Diam < EPS_SMALL And Delta_Thick < EPS_SMALL Then + Return True + Else + EgtOutLog(String.Format("New saw {0} can not repalce the current {1}; Delta_Diam={2}, |Delta_Thick|={3} ", sNameTool, m_DefaultSaw_Name, Delta_Diam, Delta_Thick)) + End If + Else + EgtOutLog("Impossible to find in tooldb SAW: " & sNameTool) + End If + Else + If String.IsNullOrEmpty(m_DefaultSaw_Name) Then + EgtOutLog("There is no currsaw setted in machine!") + Else + EgtOutLog("Impossible to find in tooldb currsaw setted in machine: " & m_DefaultSaw_Name) + End If + End If + Return False + End Function + + ' Restituisce tutto l'elenco delle lavorazioni disponibili in macchina + Private Function GetAllSwaing() As TreeViewItem.CathegoryItem + Dim sFName As String = EgtMsg(MSG_MACHININGSDBPAGEUC + 31) + Dim nFType As Integer = MCH_MY.SAWING + If Not m_MainWindow.m_CurrentMachine.bSawing Then Return Nothing + ' Inserisco categoria ed eventuali elementi + Dim MachiningCathegory As New TreeViewItem.CathegoryItem(sFName, nFType) + Dim MachiningName As String = String.Empty + If EgtMdbGetFirstMachining(nFType, MachiningName) Then + MachiningCathegory.Items.Add(New TreeViewItem.CustomItem(MachiningName, nFType)) + While EgtMdbGetNextMachining(nFType, MachiningName) + MachiningCathegory.Items.Add(New TreeViewItem.CustomItem(MachiningName, nFType)) + End While + End If + Return MachiningCathegory + End Function + +#End Region ' Set up machinining + + Private Sub SetUpToolListBox_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles SetUpToolListBox.PreviewMouseUp + ' Disabilito Ok + OkBtn.IsEnabled = False + ' Recupero item selezionato + If SetUpToolListBox.SelectedItems.Count() = 0 Then + Return + End If + m_NewSawing = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).Machining + m_EgtColor = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).PrintFootToolColor + m_TCPos = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).ToolPos + ' A seconda del tipo + OkBtn.IsEnabled = True + End Sub + + Private Sub SetUpToolListBox_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles SetUpToolListBox.SelectionChanged + ' Disabilito Ok + OkBtn.IsEnabled = False + ' Recupero item selezionato + If SetUpToolListBox.SelectedItems.Count() = 0 Then + Return + Else + m_NewSawing = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).Machining + m_EgtColor = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).PrintFootToolColor + m_TCPos = m_SetUpMachiningList(SetUpToolListBox.SelectedIndex).ToolPos + OkBtn.IsEnabled = True + End If + End Sub + + Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click + DialogResult = True + End Sub + +End Class + +Public Class ItemMachining + + Private m_ToolPos As String = String.Empty + Private m_ToolName As String = String.Empty + Private m_Machining As String = String.Empty + Private m_ToolExit As Integer = 1 + Private m_ToolType As Integer = -1 + Private m_PrintFootToolColor As New Color3d(0, 255, 0, 100) + Private m_cSawColor As SolidColorBrush + + ' Posizione porta utensile + Public Property ToolPos As String + Get + Return m_ToolPos + End Get + Set(value As String) + m_ToolPos = value + End Set + End Property + + ' Nome utensile + Public Property ToolName As String + Get + Return m_ToolName + End Get + Set(value As String) + m_ToolName = value + End Set + End Property + + ' Nome della lavorazione + Public Property Machining As String + Get + Return m_Machining + End Get + Set(value As String) + m_Machining = value + End Set + End Property + + Public Property ToolExit As Integer + Get + Return m_ToolExit + End Get + Set(value As Integer) + m_ToolExit = value + End Set + End Property + + Public Property ToolType As Integer + Get + Return m_ToolType + End Get + Set(value As Integer) + m_ToolType = value + End Set + End Property + + Public Property PrintFootToolColor As Color3d + Get + Return m_PrintFootToolColor + End Get + Set(value As Color3d) + m_PrintFootToolColor = value + End Set + End Property + + Public Property SawColor As SolidColorBrush + Get + Return m_cSawColor + End Get + Set(value As SolidColorBrush) + m_cSawColor = value + End Set + End Property + + Sub New(sMachining As String, sToolName As String, sToolPos As String, cColor As Color3d) + m_Machining = sMachining + m_ToolPos = sToolPos + m_ToolName = sToolName + m_PrintFootToolColor = cColor + m_cSawColor = New SolidColorBrush(Color.FromRgb(m_PrintFootToolColor.R, m_PrintFootToolColor.G, m_PrintFootToolColor.B)) + End Sub + +End Class diff --git a/CadCuts/ChooseTestToolWD.xaml.vb b/CadCuts/ChooseTestToolWD.xaml.vb index db207bf..dd22649 100644 --- a/CadCuts/ChooseTestToolWD.xaml.vb +++ b/CadCuts/ChooseTestToolWD.xaml.vb @@ -142,6 +142,30 @@ Public Class ChooseTestToolWD End If Next Return True + + Case CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW + For Each ToolChangerPos As ToolChangerPos In m_MainWindow.m_CurrentMachine.ToolChanger + If Not String.IsNullOrWhiteSpace(ToolChangerPos.sTool) Then + 'm_SetUpToolList.Add(New ToolPos(ToolChangerPos.sTool, ToolChangerPos.sName, False)) + sNameTool = ToolChangerPos.sTool + If Not String.IsNullOrEmpty(sNameTool) Then + ' Imposto la lama + m_SetUpToolList.Add(New TestTool(sNameTool, sNameTool)) + End If + End If + Next + For Each ToolChangerPos As ToolChangerPos In m_MainWindow.m_CurrentMachine.ManualToolChanger + If Not String.IsNullOrWhiteSpace(ToolChangerPos.sTool) Then + 'm_SetUpToolList.Add(New ToolPos(ToolChangerPos.sTool, ToolChangerPos.sName, False)) + sNameTool = ToolChangerPos.sTool + If Not String.IsNullOrEmpty(sNameTool) Then + ' Imposto la lama + m_SetUpToolList.Add(New TestTool(sNameTool, sNameTool)) + End If + End If + Next + Return True + Case Else Return False End Select diff --git a/CadCuts/SplitAuto.vb b/CadCuts/SplitAuto.vb index c3fdd40..471a923 100644 --- a/CadCuts/SplitAuto.vb +++ b/CadCuts/SplitAuto.vb @@ -1,6 +1,4 @@ -Imports System.Net -Imports System.Windows.Forms.Integration -Imports EgtUILib +Imports EgtUILib Public Module SplitAuto @@ -51,151 +49,296 @@ Public Module SplitAuto While nOperId <> GDB_ID.NULL ' verifico sia una lavorazione valida della fase corrente If IsValidMachining(nOperId) And EgtGetOperationPhase(nOperId) = nCurrPhase Then - ' se appartiene ad un grezzo attivo la inserisco in lista - If IsMachiningInActiveRaw(nOperId) Then - Dim Mach As New SplitMach - Mach.m_nEntId = GDB_ID.NULL - ' identificativo - Mach.m_nId = nOperId - ' eventuali lavorazioni inglobate - 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 Mach.m_vOthId.Add(nId) - Next - End If - ' tipo - Mach.m_nType = EgtGetOperationType(nOperId) - ' layer di origine - EgtGetInfo(nOperId, INFO_MCH_LAYER, Mach.m_sLay) - ' se taglio con lama - If Mach.m_nType = MCH_OY.SAWING Then - ' verifica interferenza - If Mach.m_sLay = NAME_OUTLOOP Then - EgtVerifyMachining(nOperId, Mach.m_nInterf) - For Each nId As Integer In Mach.m_vOthId - Dim nRes As Integer = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO - EgtVerifyMachining(nId, nRes) - Mach.m_nInterf = Mach.m_nInterf Or nRes - Next - Else - Mach.m_nInterf = FMI_TYPE.NONE - End If - ' la imposto come lavorazione corrente - EgtSetCurrMachining(nOperId) - ' inversione - EgtGetMachiningParam(MCH_MP.INVERT, Mach.m_bInvert) - ' recupero l'angolo di fianco - EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) - ' recupero allungamento iniziale e finale (negativi vicino ad angoli interni) - Dim dStartAddLen As Double = -10 - EgtGetMachiningParam(MCH_MP.STARTADDLEN, dStartAddLen) - Dim dEndAddLen As Double = -10 - EgtGetMachiningParam(MCH_MP.ENDADDLEN, dEndAddLen) - ' recupero tipo entità, angolo con entità precedente e successiva, lunghezze libere iniziale e finale - Mach.m_bIsLine = True - Mach.m_dPrevAng = 0 - Mach.m_dNextAng = 0 - Mach.m_dStartFreeLen = FREELEN_INF + 1 - Mach.m_dEndFreeLen = FREELEN_INF + 1 - Dim nEntId, nSub As Integer - If EgtGetMachiningGeometry(0, nEntId, nSub) Then - ' EgtGetType( nEntId) = GDB_TY.CRV_ARC OrElse - If EgtGetType(nEntId) = GDB_TY.CRV_COMPO Then Mach.m_bIsLine = False - EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng) - EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_NEXTANG, INFO_PREVANG), Mach.m_dNextAng) - EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_START_FREELEN, INFO_END_FREELEN), Mach.m_dStartFreeLen) - EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_END_FREELEN, INFO_START_FREELEN), Mach.m_dEndFreeLen) - Mach.m_bEnableInvert = GetEnableInvert(nEntId) - EgtMidVector(nEntId, GDB_ID.ROOT, Mach.m_vtDir) - If Mach.m_bInvert Then Mach.m_vtDir = -Mach.m_vtDir - Mach.m_nEntId = nEntId - EgtGetInfo(nOperId, "ManageLeadInOnIntCorner", Mach.m_bMngLeadInOnIntCorner) - End If - ' verifico se trasformabile in un taglio di separazione (almeno da un lato) - If (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And - Mach.m_sLay = NAME_OUTLOOP And ( Mach.m_nInterf And FMI_TYPE.RM) = 0 Then - Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) - Dim bIn As Boolean = False - Dim bOut As Boolean = False - CanExtendSides(Mach, bIn, bOut) - Mach.m_bCanStartAll = ((dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LI_OK) <> 0) And - Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn - Mach.m_bCanEndAll = ((dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LO_OK) <> 0) And - Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut - If nRes = 0 Then - EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") - End If + Dim Mach As New SplitMach + If CreateMach(Mach, nOperId) Then MachSplitList.Add(Mach) + '' se appartiene ad un grezzo attivo la inserisco in lista + 'If IsMachiningInActiveRaw(nOperId) Then + ' Dim Mach As New SplitMach + ' Mach.m_nEntId = GDB_ID.NULL + ' ' identificativo + ' Mach.m_nId = nOperId + ' ' eventuali lavorazioni inglobate + ' 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 Mach.m_vOthId.Add(nId) + ' Next + ' End If + ' ' tipo + ' Mach.m_nType = EgtGetOperationType(nOperId) + ' ' layer di origine + ' EgtGetInfo(nOperId, INFO_MCH_LAYER, Mach.m_sLay) + ' ' se taglio con lama + ' If Mach.m_nType = MCH_OY.SAWING Then + ' ' verifica interferenza + ' If Mach.m_sLay = NAME_OUTLOOP Then + ' EgtVerifyMachining(nOperId, Mach.m_nInterf) + ' For Each nId As Integer In Mach.m_vOthId + ' Dim nRes As Integer = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO + ' EgtVerifyMachining(nId, nRes) + ' Mach.m_nInterf = Mach.m_nInterf Or nRes + ' Next + ' Else + ' Mach.m_nInterf = FMI_TYPE.NONE + ' End If + ' ' la imposto come lavorazione corrente + ' EgtSetCurrMachining(nOperId) + ' ' inversione + ' EgtGetMachiningParam(MCH_MP.INVERT, Mach.m_bInvert) + ' ' recupero l'angolo di fianco + ' EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) + ' ' recupero allungamento iniziale e finale (negativi vicino ad angoli interni) + ' Dim dStartAddLen As Double = -10 + ' EgtGetMachiningParam(MCH_MP.STARTADDLEN, dStartAddLen) + ' Dim dEndAddLen As Double = -10 + ' EgtGetMachiningParam(MCH_MP.ENDADDLEN, dEndAddLen) + ' ' recupero tipo entità, angolo con entità precedente e successiva, lunghezze libere iniziale e finale + ' Mach.m_bIsLine = True + ' Mach.m_dPrevAng = 0 + ' Mach.m_dNextAng = 0 + ' Mach.m_dStartFreeLen = FREELEN_INF + 1 + ' Mach.m_dEndFreeLen = FREELEN_INF + 1 + ' Dim nEntId, nSub As Integer + ' If EgtGetMachiningGeometry(0, nEntId, nSub) Then + ' ' EgtGetType( nEntId) = GDB_TY.CRV_ARC OrElse + ' If EgtGetType(nEntId) = GDB_TY.CRV_COMPO Then Mach.m_bIsLine = False + ' EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng) + ' EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_NEXTANG, INFO_PREVANG), Mach.m_dNextAng) + ' EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_START_FREELEN, INFO_END_FREELEN), Mach.m_dStartFreeLen) + ' EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_END_FREELEN, INFO_START_FREELEN), Mach.m_dEndFreeLen) + ' Mach.m_bEnableInvert = GetEnableInvert(nEntId) + ' EgtMidVector(nEntId, GDB_ID.ROOT, Mach.m_vtDir) + ' If Mach.m_bInvert Then Mach.m_vtDir = -Mach.m_vtDir + ' Mach.m_nEntId = nEntId + ' EgtGetInfo(nOperId, "ManageLeadInOnIntCorner", Mach.m_bMngLeadInOnIntCorner) + ' End If + ' ' verifico se trasformabile in un taglio di separazione (almeno da un lato) + ' If (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + ' Mach.m_sLay = NAME_OUTLOOP And ( Mach.m_nInterf And FMI_TYPE.RM) = 0 Then + ' Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) + ' Dim bIn As Boolean = False + ' Dim bOut As Boolean = False + ' CanExtendSides(Mach, bIn, bOut) + ' Mach.m_bCanStartAll = ((dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LI_OK) <> 0) And + ' Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn + ' Mach.m_bCanEndAll = ((dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LO_OK) <> 0) And + ' Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut + ' If nRes = 0 Then + ' EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") + ' End If + + ' ElseIf (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + ' Mach.m_sLay = NAME_OUTLOOP And + ' (Mach.m_nInterf = FMI_TYPE.LI Or Mach.m_nInterf = FMI_TYPE.LO Or Mach.m_nInterf = FMI_TYPE.RM) Then + ' Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) + ' Dim bIn As Boolean = False + ' Dim bOut As Boolean = False + ' CanExtendSides(Mach, bIn, bOut) + ' ' And (nRes And CAR_RES.LI_OK) <> 0 : da aggiungere + ' Mach.m_bCanStartAll = (dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + ' Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn And + ' Mach.m_nInterf <> FMI_TYPE.LI + ' ' And (nRes And CAR_RES.LO_OK) <> 0 : da aggiungere come sopra + ' Mach.m_bCanEndAll = (dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + ' Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut And + ' Mach.m_nInterf <> FMI_TYPE.LO + ' If nRes = 0 Then + ' EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") + ' End If + ' End If + ' ' se trasformabile in taglio di separazione, verifico se lo è + ' If Mach.m_bCanStartAll Or Mach.m_bCanEndAll Then + ' EgtSetCurrMachining(nOperId) + ' Dim nLiType As Integer + ' EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiType) + ' Dim nLoType As Integer + ' EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoType) + ' Mach.m_bStartAll = (nLiType = MCH_SAW_LI.EXT_CENT Or nLiType = MCH_SAW_LI.EXT_OUT) + ' Mach.m_bEndAll = (nLoType = MCH_SAW_LO.EXT_CENT Or nLoType = MCH_SAW_LO.EXT_OUT) + ' Else + ' Mach.m_bStartAll = False + ' Mach.m_bEndAll = False + ' End If + ' ' Waterjet + ' ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then + ' Mach.m_nInterf = FMI_TYPE.NONE + ' ' recupero l'angolo di fianco + ' EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) + ' Mach.m_bCanStartAll = False + ' Mach.m_bCanEndAll = False + ' Mach.m_bStartAll = False + ' Mach.m_bEndAll = False + ' ' Forature e fresature + ' Else + ' Mach.m_nInterf = FMI_TYPE.NONE + ' Mach.m_dSideAng = 0 + ' Mach.m_bCanStartAll = False + ' Mach.m_bCanEndAll = False + ' Mach.m_bStartAll = False + ' Mach.m_bEndAll = False + ' End If + ' ' abilitazione + ' Mach.m_bEnabled = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF) + ' ' pausa + ' Mach.m_bPause = GetPause(nOperId) + ' ' inserisco in lista + ' MachSplitList.Add(Mach) + ' ' altrimenti la disattivo + 'Else + ' EgtSetOperationMode(nOperId, False) + 'End If - ElseIf (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And - Mach.m_sLay = NAME_OUTLOOP And - (Mach.m_nInterf = FMI_TYPE.LI Or Mach.m_nInterf = FMI_TYPE.LO Or Mach.m_nInterf = FMI_TYPE.RM) Then - Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) - Dim bIn As Boolean = False - Dim bOut As Boolean = False - CanExtendSides(Mach, bIn, bOut) - ' And (nRes And CAR_RES.LI_OK) <> 0 : da aggiungere - Mach.m_bCanStartAll = (dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And - Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn And - Mach.m_nInterf <> FMI_TYPE.LI - ' And (nRes And CAR_RES.LO_OK) <> 0 : da aggiungere come sopra - Mach.m_bCanEndAll = (dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And - Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut And - Mach.m_nInterf <> FMI_TYPE.LO - If nRes = 0 Then - EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") - End If - End If - ' se trasformabile in taglio di separazione, verifico se lo è - If Mach.m_bCanStartAll Or Mach.m_bCanEndAll Then - EgtSetCurrMachining(nOperId) - Dim nLiType As Integer - EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiType) - Dim nLoType As Integer - EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoType) - Mach.m_bStartAll = (nLiType = MCH_SAW_LI.EXT_CENT Or nLiType = MCH_SAW_LI.EXT_OUT) - Mach.m_bEndAll = (nLoType = MCH_SAW_LO.EXT_CENT Or nLoType = MCH_SAW_LO.EXT_OUT) - Else - Mach.m_bStartAll = False - Mach.m_bEndAll = False - End If - ' Waterjet - ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then - Mach.m_nInterf = FMI_TYPE.NONE - ' recupero l'angolo di fianco - EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) - Mach.m_bCanStartAll = False - Mach.m_bCanEndAll = False - Mach.m_bStartAll = False - Mach.m_bEndAll = False - ' Forature e fresature - Else - Mach.m_nInterf = FMI_TYPE.NONE - Mach.m_dSideAng = 0 - Mach.m_bCanStartAll = False - Mach.m_bCanEndAll = False - Mach.m_bStartAll = False - Mach.m_bEndAll = False - End If - ' abilitazione - Mach.m_bEnabled = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF) - ' pausa - Mach.m_bPause = GetPause(nOperId) - ' inserisco in lista - MachSplitList.Add(Mach) - ' altrimenti la disattivo - Else - EgtSetOperationMode(nOperId, False) - End If End If nOperId = EgtGetNextOperation(nOperId) End While Return True End Function + Friend Function CreateMach(ByRef Mach As SplitMach, nOperId As Integer) As Boolean + Dim bOk As Boolean = True + ' se appartiene ad un grezzo attivo la inserisco in lista + If IsMachiningInActiveRaw(nOperId) Then + Mach.m_nEntId = GDB_ID.NULL + ' identificativo + Mach.m_nId = nOperId + ' eventuali lavorazioni inglobate + 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 Mach.m_vOthId.Add(nId) + Next + End If + ' tipo + Mach.m_nType = EgtGetOperationType(nOperId) + ' layer di origine + EgtGetInfo(nOperId, INFO_MCH_LAYER, Mach.m_sLay) + ' se taglio con lama + If Mach.m_nType = MCH_OY.SAWING Then + ' verifica interferenza + If Mach.m_sLay = NAME_OUTLOOP Then + EgtVerifyMachining(nOperId, Mach.m_nInterf) + For Each nId As Integer In Mach.m_vOthId + Dim nRes As Integer = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO + EgtVerifyMachining(nId, nRes) + Mach.m_nInterf = Mach.m_nInterf Or nRes + Next + Else + Mach.m_nInterf = FMI_TYPE.NONE + End If + ' la imposto come lavorazione corrente + EgtSetCurrMachining(nOperId) + ' inversione + EgtGetMachiningParam(MCH_MP.INVERT, Mach.m_bInvert) + ' recupero l'angolo di fianco + EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) + ' recupero allungamento iniziale e finale (negativi vicino ad angoli interni) + Dim dStartAddLen As Double = -10 + EgtGetMachiningParam(MCH_MP.STARTADDLEN, dStartAddLen) + Dim dEndAddLen As Double = -10 + EgtGetMachiningParam(MCH_MP.ENDADDLEN, dEndAddLen) + ' recupero tipo entità, angolo con entità precedente e successiva, lunghezze libere iniziale e finale + Mach.m_bIsLine = True + Mach.m_dPrevAng = 0 + Mach.m_dNextAng = 0 + Mach.m_dStartFreeLen = FREELEN_INF + 1 + Mach.m_dEndFreeLen = FREELEN_INF + 1 + Dim nEntId, nSub As Integer + If EgtGetMachiningGeometry(0, nEntId, nSub) Then + ' EgtGetType( nEntId) = GDB_TY.CRV_ARC OrElse + If EgtGetType(nEntId) = GDB_TY.CRV_COMPO Then Mach.m_bIsLine = False + EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng) + EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_NEXTANG, INFO_PREVANG), Mach.m_dNextAng) + EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_START_FREELEN, INFO_END_FREELEN), Mach.m_dStartFreeLen) + EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_END_FREELEN, INFO_START_FREELEN), Mach.m_dEndFreeLen) + Mach.m_bEnableInvert = GetEnableInvert(nEntId) + EgtMidVector(nEntId, GDB_ID.ROOT, Mach.m_vtDir) + If Mach.m_bInvert Then Mach.m_vtDir = -Mach.m_vtDir + Mach.m_nEntId = nEntId + EgtGetInfo(nOperId, "ManageLeadInOnIntCorner", Mach.m_bMngLeadInOnIntCorner) + End If + ' verifico se trasformabile in un taglio di separazione (almeno da un lato) + If (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + Mach.m_sLay = NAME_OUTLOOP And (Mach.m_nInterf And FMI_TYPE.RM) = 0 Then + Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) + Dim bIn As Boolean = False + Dim bOut As Boolean = False + CanExtendSides(Mach, bIn, bOut) + Mach.m_bCanStartAll = ((dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LI_OK) <> 0) And + Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn + Mach.m_bCanEndAll = ((dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And (nRes And CAR_RES.LO_OK) <> 0) And + Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut + If nRes = 0 Then + EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") + End If + + ElseIf (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + Mach.m_sLay = NAME_OUTLOOP And + (Mach.m_nInterf = FMI_TYPE.LI Or Mach.m_nInterf = FMI_TYPE.LO Or Mach.m_nInterf = FMI_TYPE.RM) Then + Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) + Dim bIn As Boolean = False + Dim bOut As Boolean = False + CanExtendSides(Mach, bIn, bOut) + ' And (nRes And CAR_RES.LI_OK) <> 0 : da aggiungere + Mach.m_bCanStartAll = (dStartAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine And bIn And + Mach.m_nInterf <> FMI_TYPE.LI + ' And (nRes And CAR_RES.LO_OK) <> 0 : da aggiungere come sopra + Mach.m_bCanEndAll = (dEndAddLen > -EPS_SMALL Or Mach.m_bMngLeadInOnIntCorner) And + Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine And bOut And + Mach.m_nInterf <> FMI_TYPE.LO + If nRes = 0 Then + EgtOutLog("Operation ID " & nOperId.ToString & " isn't split cut! verify depth machining.") + End If + End If + ' se trasformabile in taglio di separazione, verifico se lo è + If Mach.m_bCanStartAll Or Mach.m_bCanEndAll Then + EgtSetCurrMachining(nOperId) + Dim nLiType As Integer + EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiType) + Dim nLoType As Integer + EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoType) + Mach.m_bStartAll = (nLiType = MCH_SAW_LI.EXT_CENT Or nLiType = MCH_SAW_LI.EXT_OUT) + Mach.m_bEndAll = (nLoType = MCH_SAW_LO.EXT_CENT Or nLoType = MCH_SAW_LO.EXT_OUT) + Else + Mach.m_bStartAll = False + Mach.m_bEndAll = False + End If + ' Waterjet + ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then + Mach.m_nInterf = FMI_TYPE.NONE + ' recupero l'angolo di fianco + EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) + Mach.m_bCanStartAll = False + Mach.m_bCanEndAll = False + Mach.m_bStartAll = False + Mach.m_bEndAll = False + ' Forature e fresature + Else + Mach.m_nInterf = FMI_TYPE.NONE + Mach.m_dSideAng = 0 + Mach.m_bCanStartAll = False + Mach.m_bCanEndAll = False + Mach.m_bStartAll = False + Mach.m_bEndAll = False + End If + ' abilitazione + Mach.m_bEnabled = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF) + ' pausa + Mach.m_bPause = GetPause(nOperId) + Else + ' altrimenti la disattivo + EgtSetOperationMode(nOperId, False) + bOk = False + End If + Return bOk + End Function + Private Function CanExtendSides(CurrMach As SplitMach, ByRef bIn As Boolean, ByRef bOut As Boolean) As Boolean If CurrMach.m_dPrevAng < -EPS_ANG_SMALL And CurrMach.m_dNextAng > EPS_ANG_SMALL Then ' Posso estendere SOLO l'uscita @@ -283,8 +426,19 @@ Public Module SplitAuto ElseIf Math.Abs(dSideAng) > EPS_ANG_SMALL Then colCut = COL_MCH_CUT_ANG() Else - colCut = COL_MCH_CUT() + ' Se macchina con cambio utensile di lama + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + Dim sSawing As String = String.Empty, sSaw As String = String.Empty + m_MainWindow.m_CadCutPageUC.m_SplitPage.GetCurrSawingandSaw(nOperId, sSawing, sSaw) + ' Setto l'utensile corrente + EgtTdbSetCurrTool(sSaw) + ' recupero il colore della lavorazione direttamente dall'utensile + colCut = Utility.GetColorPV() + Else + colCut = COL_MCH_CUT() + End If End If + For Each nId In vCutId EgtSetColor(nId, colCut) Next diff --git a/CadCuts/SplitPageUC.xaml b/CadCuts/SplitPageUC.xaml index c8a109a..238ad4c 100644 --- a/CadCuts/SplitPageUC.xaml +++ b/CadCuts/SplitPageUC.xaml @@ -1,10 +1,10 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + mc:Ignorable="d" + d:DesignHeight="853.3" d:DesignWidth="1280" Initialized="SplitPageUC_Initialized"> @@ -64,24 +64,49 @@ + SelectionMode="Extended"> - - - - - + + + + + + + + + + + + + + + + + + @@ -100,14 +125,14 @@ - - + + - + @@ -138,7 +163,7 @@ - + @@ -152,17 +177,17 @@ - + - + - + diff --git a/CadCuts/SplitPageUC.xaml.vb b/CadCuts/SplitPageUC.xaml.vb index bb138f8..c422ce6 100644 --- a/CadCuts/SplitPageUC.xaml.vb +++ b/CadCuts/SplitPageUC.xaml.vb @@ -1,6 +1,5 @@ Imports System.Collections.ObjectModel Imports System.ComponentModel -Imports System.Drawing Imports EgtUILib Public Class SplitPageUC @@ -206,28 +205,54 @@ Public Class SplitPageUC sText = EgtMsg(90791) & " " & i.ToString() & " " & DoubleToString(Mach.m_dSideAng, 2) & "°" End If If Mach.m_bPause Then AddPauseText(sText) - m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.SAWING)) + AddItemToList(i, Mach, sText, MCH_OY.SAWING) ElseIf Mach.m_nType = MCH_OY.DRILLING Then ' Foratura Dim sText As String = EgtMsg(90792) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) - m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.DRILLING)) + 'm_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.DRILLING)) + AddItemToList(i, Mach, sText, MCH_OY.DRILLING) ElseIf Mach.m_nType = MCH_OY.MILLING Then ' Fresatura Dim sText As String = EgtMsg(90793) & " " & i.ToString() If Mach.m_sLay = NAME_ONPATH Then AddTopText(sText) If Mach.m_bPause Then AddPauseText(sText) - m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.MILLING)) + 'm_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.MILLING)) + AddItemToList(i, Mach, sText, MCH_OY.MILLING) ElseIf Mach.m_nType = MCH_OY.POCKETING Then ' Svuotatura Dim sText As String = EgtMsg(90796) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) - m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.POCKETING)) + 'm_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.POCKETING)) + AddItemToList(i, Mach, sText, MCH_OY.POCKETING) ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then ' Waterjet Dim sText As String = EgtMsg(90797) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) - m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.WATERJETTING)) + 'm_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.WATERJETTING)) + AddItemToList(i, Mach, sText, MCH_OY.WATERJETTING) End If Next End Sub + Private Sub AddItemToList(i As Integer, Mach As SplitMach, sText As String, nMach As Integer) + Dim sTCPos As String = String.Empty + ' Visualizzo la posizione utensile solo se configurata + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + Dim sSawing As String = String.Empty, sSaw As String = String.Empty + GetCurrSawingandSaw(Mach.m_nId, sSawing, sSaw) + ' Verifico che sia montata su un portautensile + EgtTdbSetCurrTool(sSaw) + EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sTCPos) + End If + ' Se TCPos non trovato + If String.IsNullOrEmpty(sTCPos) Then + ' Inserisco solo nome lavorazione + m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, nMach)) + Else + ' altrimenti se esiste una lama impostata nell'if sopra + Dim sawColor As Color3d = Utility.GetColorPV() + Dim tmpSawColor As System.Windows.Media.Color = System.Windows.Media.Color.FromRgb(sawColor.R, sawColor.G, sawColor.B) + m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, nMach, sTCPos, New SolidColorBrush(tmpSawColor))) + End If + End Sub + #Region "BRIDGE" Private Sub OnMyMouseDownSceneBridges(sender As Object, e As System.Windows.Forms.MouseEventArgs, @@ -470,6 +495,39 @@ Public Class SplitPageUC Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene ' Verifico di essere il gestore attivo e non in modalità sola visualizzazione If Not m_bActive OrElse m_bShow Then Return + + If e.Button = Windows.Forms.MouseButtons.Right And m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + Dim nCurrCtx As Integer = EgtGetCurrentContext() + Dim nSel1 As Integer = GDB_ID.NULL + Dim nPvId As Integer = GDB_ID.NULL + Dim nMchId As Integer = GDB_ID.NULL + EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel1) + Dim nId1 As Integer = EgtGetFirstObjInSelWin() + While nId1 <> GDB_ID.NULL + ' Verifico sia un attacco o uscita di taglio con lama + Dim nType As Integer = 0 + Dim sName As String = "" + EgtGetName(nId1, sName) + nPvId = EgtGetParent(EgtGetParent(nId1)) + nMchId = GDB_ID.NULL + If String.Compare(sName, NAME_PV_PRECUT) = 0 Or String.Compare(sName, NAME_PV_POSTCUT) = 0 Or String.Compare(sName, NAME_PV_CUT) = 0 Then + If EgtGetInfo(nPvId, "MId", nMchId) Then + Exit While + End If + End If + nId1 = EgtGetNextObjInSelWin() + End While + + If nMchId = GDB_ID.NULL Then + GetCurrSelection() + Return + End If + + ChangeMachinig(nMchId) + GetCurrSelection() + Return + End If + ' Si può selezionare solo con il tasto sinistro e se stato NULL If e.Button <> Windows.Forms.MouseButtons.Left Or Not m_CurrProjPage.CurrentProjectScene.IsStatusNull() Then @@ -489,6 +547,7 @@ Public Class SplitPageUC If m_nIdSelectedPartWJ_Srt <> GDB_ID.NULL And m_nIdSelectedPartWJ_End <> GDB_ID.NULL Then DeselectWJBridgesPart() End If + GetCurrSelection() Return End If @@ -497,6 +556,7 @@ Public Class SplitPageUC OnMyMouseDownSceneBridgesDelete(sender, e) ' aggiorno la visualizzazione delle lavorazioni e la lista RefreshMachList() + GetCurrSelection() Return End If @@ -584,6 +644,88 @@ Public Class SplitPageUC End If MachiningLsBx.SelectedIndex = -1 End If + GetCurrSelection() + End Sub + + Private Sub ChangeMachinig(nMchId As Integer) + ' Imposto la lavorazione corrente + Dim sSawing As String = String.Empty + Dim EntId As Integer = GDB_ID.NULL + Dim SubEntId As Integer = GDB_ID.NULL + EgtSetCurrMachining(nMchId) + If Not EgtGetMachiningGeometry(0, EntId, SubEntId) Then Return + ' Recupero il nome della lavorazione + EgtGetInfo(EntId, DEF_MACHINING, sSawing) + + ' Apro pagina di selezione della lavorazione + Dim m_ChangeToolPage = New ChangeToolWD(m_MainWindow) + ' Imposto nome lavorazione corrente + m_ChangeToolPage.CurrSawing = sSawing + ' apro la finestra per la selezione delle lavorazioni + m_ChangeToolPage.ShowDialog() + + ' se seleziono "Ok" allora resetto tutte le lavorazioni del progetto + If m_ChangeToolPage.DialogResult Then + EgtSetInfo(EntId, DEF_MACHINING, m_ChangeToolPage.NewSawing) + Dim Index As Integer = 0 + For Index = 0 To m_MachiningList.Count() - 1 + If m_MachiningList(Index).m_nId = nMchId Then + Exit For + End If + Next + Dim nNewMchId As Integer = -1 + CamAuto.AddSawMachining(nMchId, nNewMchId) + ' Elimino la numerazione e la freccia + EgtErase(m_MachiningList(Index).m_nArrId) + EgtErase(m_MachiningList(Index).m_nNbrId) + Dim Mach As New SplitMach + ' Sostituisco la vecchia lavorazione con la nuova + If SplitAuto.CreateMach(Mach, nNewMchId) Then + ' Assegno la lavorazione alla lista + m_MachiningList(Index) = Mach + ' Riassegno la numerazione + NumberDirectionMachining(Index) + m_ItemList(Index).TCPos = m_ChangeToolPage.TCPos + ' Recupero il colore della lavorazione + Dim EgtCol As Color3d = m_ChangeToolPage.EgtColor + Dim tmpSawColor As System.Windows.Media.Color = System.Windows.Media.Color.FromRgb(EgtCol.R, EgtCol.G, EgtCol.B) + m_ItemList(Index).SawColor = New SolidColorBrush(tmpSawColor) + m_ItemList(Index).MachiningTCPosVisibility = Visibility.Visible + EgtDraw() + End If + End If + End Sub + + Public Sub GetCurrSawingandSaw(ByVal nMchId As Integer, ByRef sSawing As String, ByRef sNameTool As String) + Dim EntId As Integer = GDB_ID.NULL + Dim SubEntId As Integer = GDB_ID.NULL + EgtSetCurrMachining(nMchId) + If Not EgtGetMachiningGeometry(0, EntId, SubEntId) Then Return + ' Eventualmente recupero il nome della lavorazione + EgtGetInfo(EntId, DEF_MACHINING, sSawing) + If String.IsNullOrEmpty(sSawing) Then sSawing = m_MainWindow.m_CurrentMachine.sCurrSawing + ' Imposto la lavorazione corrente + EgtMdbSetCurrMachining(sSawing) + ' Recupero il nome dell'utensile della lavorazione + EgtMdbGetCurrMachiningParam(MCH_MP.TOOL, sNameTool) + End Sub + + ' Dato l'id della lavorazione nel grezzo colora il taglio del colore assegnato + Public Sub ColorsCut(nOperId As Integer, EgtCol As Color3d) + ' Recupero la lavorazione + Dim nPVRawId As Integer = EgtGetFirstNameInGroup(nOperId, "PV") + Dim nPVPartId As Integer = GDB_ID.NULL + EgtGetInfo(nPVRawId, "PvId", nPVPartId) + Dim nId2 As Integer = EgtGetFirstInGroup(EgtGetFirstInGroup(nPVPartId)) + Dim sName As String = "" + EgtGetName(nId2, sName) + While nId2 <> GDB_ID.NULL + If String.Compare(sName, NAME_PV_CUT) = 0 Then + EgtSetColor(nId2, EgtCol) + Exit While + End If + nId2 = EgtGetNext(nId2) + End While End Sub Private Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseMoveScene @@ -764,6 +906,15 @@ Public Class SplitPageUC OnOffCut() End Sub + Private Sub MachiningLsBx_MouseRightButtonDown(sender As Object, e As MouseEventArgs) Handles MachiningLsBx.PreviewMouseRightButtonDown + ' se disabilitata la modifica allora esco + If m_bShow Then Return + If m_IsCtrlKeyDown Or m_IsShiftKeyDown Then Return + Dim Index As Integer = MachiningLsBx.SelectedIndex + If Index = -1 Then Return + ChangeMachinig(m_MachiningList(Index).m_nId) + End Sub + Private Sub MoveUpBtn_Click(sender As Object, e As RoutedEventArgs) Handles MoveUpBtn.Click MoveItem(-1) End Sub @@ -2666,6 +2817,10 @@ Public Class SplitPageUC Private m_sName As String Private m_bIsActive As Boolean Private m_nType As Integer + ' Posizione porta utensile (parametro non obbligatorio) + Private m_sTCPos As String = "" + Private m_cSawColor As SolidColorBrush + Private m_bMachiningTCPosVisibility As Visibility = Visibility.Hidden Private m_IsSelected As Boolean @@ -2690,6 +2845,31 @@ Public Class SplitPageUC End Set End Property + '!!!!!!!!!!!!!!!!!!!! + Public Property TCPos As String + Get + Return m_sTCPos + End Get + Set(value As String) + If value <> m_sTCPos Then + m_sTCPos = value + NotifyPropertyChanged("TCPos") + End If + End Set + End Property + + '!!!!!!!!!!!!!!!!!!!! + Public Property SawColor As SolidColorBrush + Get + Return m_cSawColor + End Get + Set(value As SolidColorBrush) + m_cSawColor = value + NotifyPropertyChanged("SawColor") + End Set + End Property + + Public Property bIsActive As Boolean Get Return m_bIsActive @@ -2720,11 +2900,34 @@ Public Class SplitPageUC End Set End Property + Public Property MachiningTCPosVisibility As Visibility + Get + Return m_bMachiningTCPosVisibility + End Get + Set(value As Visibility) + If value <> m_bMachiningTCPosVisibility Then + m_bMachiningTCPosVisibility = value + NotifyPropertyChanged("MachiningTCPosVisibility") + End If + End Set + End Property + Sub New(Name As String, Ind As Integer, bIsActive As Boolean, nType As Integer) Me.m_sName = Name Me.m_nInd = Ind Me.m_bIsActive = bIsActive Me.m_nType = nType + Me.m_bMachiningTCPosVisibility = Visibility.Hidden + End Sub + + Sub New(Name As String, Ind As Integer, bIsActive As Boolean, nType As Integer, sTCPos As String, cSawColor As SolidColorBrush) + Me.m_sName = Name + Me.m_nInd = Ind + Me.m_bIsActive = bIsActive + Me.m_nType = nType + Me.m_sTCPos = sTCPos + Me.m_cSawColor = cSawColor + Me.m_bMachiningTCPosVisibility = Visibility.Visible End Sub Public Sub NotifyPropertyChanged(propName As String) diff --git a/Constants/ConstGen.vb b/Constants/ConstGen.vb index e161d84..727ada9 100644 --- a/Constants/ConstGen.vb +++ b/Constants/ConstGen.vb @@ -324,6 +324,8 @@ Module ConstGen Public Const INFO_START As String = "Start" ' Nome dei tagli diretti inseriti in fase di Splitting Public Const SPLIT_CUT As String = "SplitCut" + ' Forzo specifica lavorazione + Public Const DEF_MACHINING As String = "Def_Machining" ' Nome di pezzo che è una cornice Public Const NAME_FRAME As String = "Frame" diff --git a/Constants/ConstMachIni.vb b/Constants/ConstMachIni.vb index 2c04c08..2dbb399 100644 --- a/Constants/ConstMachIni.vb +++ b/Constants/ConstMachIni.vb @@ -313,6 +313,7 @@ Public Const S_MACH_MACH As String = "Mach" Public Const K_CURRSAW As String = "CurrSaw" + Public Const K_CURRSAWTILTED As String = "CurrSawTilted" Public Const K_CURRDRILL As String = "CurrDrill" Public Const K_CURRMILL As String = "CurrMill" Public Const K_CURRMILLNOTIP As String = "CurrMillNoTip" @@ -320,6 +321,8 @@ Public Const K_CURRDRIPDRILL As String = "CurrDripDrill" Public Const K_CURRWATERJET As String = "CurrWaterJet" Public Const K_CURRSAWING As String = "CurrSawing" + Public Const K_CURRSAWINGTILTED As String = "CurrSawingTilted" + Public Const K_APPLYSAWINGTILTED As String = "ApplySawingTilted" Public Const K_CURRDRILLING As String = "CurrDrilling" Public Const K_CURRMILLING As String = "CurrMilling" Public Const K_CURRPOCKETING As String = "CurrPocketing" diff --git a/DrawImport/SideAngle.vb b/DrawImport/SideAngle.vb index 4dee7f0..3240254 100644 --- a/DrawImport/SideAngle.vb +++ b/DrawImport/SideAngle.vb @@ -226,6 +226,10 @@ Module SideAngle EgtSetInfo(EntId, INFO_SIDE_ANGLE, dAng) EgtSetInfo(EntId, INFO_ORIG_SIDE_ANGLE, dAng) EgtSetInfo(EntId, INFO_HEEL, dHeel) + Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted + If Not String.IsNullOrEmpty(sSawingTilted) Then + EgtSetInfo(EntId, DEF_MACHINING, sSawingTilted) + End If End If End If End If diff --git a/DrawImport/SideAngleUc.xaml.vb b/DrawImport/SideAngleUc.xaml.vb index c3b8321..7481817 100644 --- a/DrawImport/SideAngleUc.xaml.vb +++ b/DrawImport/SideAngleUc.xaml.vb @@ -1303,10 +1303,15 @@ Public Class SideAngleUC If dSideAngle <> 0 Then EgtSetInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE, dSideAngle) EgtSetInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE, dSideAngle) - ' Cancello inclinazione nell'apposito campo info + Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted + If Not String.IsNullOrEmpty(sSawingTilted) Then + EgtSetInfo(CurrEntity.nGeomId, DEF_MACHINING, sSawingTilted) + End If + ' Cancello inclinazione nell'apposito campo info Else EgtRemoveInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE) EgtRemoveInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE) + EgtRemoveInfo(CurrEntity.nGeomId, DEF_MACHINING) End If ' Aggiorno lista entità con nuova inclinazione CurrEntity.dSideAngle = dSideAngle diff --git a/Machine/AlarmsPageUC.xaml b/Machine/AlarmsPageUC.xaml index 3488b44..e7529e5 100644 --- a/Machine/AlarmsPageUC.xaml +++ b/Machine/AlarmsPageUC.xaml @@ -7,371 +7,381 @@ mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="1280"> - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - - - - - - - - - - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - + - + - - - - - - - - - - + + + + + + + + + + - - - - + - + - - + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - + + + + - - - - - - - - - - - - - - - - - - + + diff --git a/Machine/AlarmsPageUC.xaml.vb b/Machine/AlarmsPageUC.xaml.vb index 23f781e..27eaa0e 100644 --- a/Machine/AlarmsPageUC.xaml.vb +++ b/Machine/AlarmsPageUC.xaml.vb @@ -57,6 +57,7 @@ Public Class AlarmsPageUC ' Imposto i messaggi letti dal file dei messaggi CurrSawTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 1) + CurrSawTiltedTxBl.Text = EgtMsg(91049) ' Current saw tilted AuxiliaryToolTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 2) CurrDrillTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 3) CurrCupWheelTxBl.Text = EgtMsg(MSG_ALARMS2PAGEUC + 20) @@ -120,6 +121,7 @@ Public Class AlarmsPageUC CfrPercTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 48) ' Riduzione % MachiningsGpBx.Header = EgtMsg(MSG_ALARMS2PAGEUC + 1) ' Lavorazioni CurrSawingTxBl.Text = EgtMsg(MSG_ALARMS2PAGEUC + 2) ' Taglio lama + CurrSawingTiltedTxBl.Text = EgtMsg(91050) ' Taglio inclinato CurrDrillingTxBl.Text = EgtMsg(MSG_ALARMS2PAGEUC + 3) ' Foratura CurrMillingTxBl.Text = EgtMsg(MSG_ALARMS2PAGEUC + 4) ' Fresatura CurrPocketingTxBl.Text = EgtMsg(91069) ' Svuotatura @@ -159,7 +161,7 @@ Public Class AlarmsPageUC HolesGpBx.Visibility = Windows.Visibility.Hidden Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL 'Non faccio alcunchè - Case CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER + Case CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW 'Da implementare End Select @@ -292,6 +294,59 @@ Public Class AlarmsPageUC ' attivo il bottone per l'apertura della pagina che mostra la configurazione degli utensili in parcheggio SetUpBtn.Visibility = Windows.Visibility.Visible + Case CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW + ' Aggiorno la lista delle lame con quelle montate sul portautensile automatico + Dim m_SawOnHolderList As New ObservableCollection(Of String) + Dim bOnHolder As Boolean = False + For Each sNameTool As String In m_SawList + If Not String.IsNullOrEmpty(sNameTool) Then + ' Verifico che sia montata su un portautensile + EgtTdbSetCurrTool(sNameTool) + Dim sTCPos As String = String.Empty + EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sTCPos) + If Not String.IsNullOrEmpty(sTCPos) Then + ' Cerco nel porta utensili automaitico + For Each ToolPosition As ToolChangerPos In m_MainWindow.m_CurrentMachine.ToolChanger + If ToolPosition.sTool <> String.Empty Then + If sNameTool = ToolPosition.sTool Then + m_SawOnHolderList.Add(sNameTool) + ' Se il nome dell'utensile è lo stesso di quello impostato nella combo allora lo setto + If sNameTool = m_CurrentMachine.sCurrSaw Then + bOnHolder = True + End If + Exit For + End If + End If + Next + End If + End If + Next + m_SawList = m_SawOnHolderList + CurrSawCmBx.ItemsSource = m_SawList + If bOnHolder Then + ' reimposto la lavorazione di lama e la lama impostate in macchina + EgtTdbSetCurrTool(m_CurrentMachine.sCurrSaw) + ' Seleziono lama corrente + CurrSawCmBx.SelectedItem = m_CurrentMachine.sCurrSaw + Else + m_CurrentMachine.sCurrSawing = "" + End If + + CurrSawTiltedCmBx.ItemsSource = m_SawList + If m_SawList.IndexOf(m_CurrentMachine.sCurrSawTilted) > -1 Then + ' Seleziono lama corrente + CurrSawTiltedCmBx.SelectedItem = m_CurrentMachine.sCurrSawTilted + Else + m_CurrentMachine.sCurrSawingTilted = "" + End If + + ' attivo la selezione della lama per il taglio in inlinato + CurrSawTiltedTxBl.Visibility = Visibility.Visible + CurrSawTiltedCmBx.Visibility = Visibility.Visible + + ' attivo il bottone per l'apertura della pagina che mostra la configurazione degli utensili in parcheggio + SetUpBtn.Visibility = Windows.Visibility.Visible + End Select ' aggiorno le TextBlock con le lavorazioni correnti @@ -441,6 +496,21 @@ Public Class AlarmsPageUC CurrSawingTxBl.Visibility = Windows.Visibility.Hidden CurrSawingTxBx.Visibility = Windows.Visibility.Hidden End If + If m_CurrentMachine.sCurrSawingTilted <> String.Empty Then + If Not m_CurrentMachine.bApplySawingTilted Then + CurrSawingTiltedTxBx.Foreground = Brushes.Gray + CurrSawingTiltedTxBx.TextDecorations = TextDecorations.Strikethrough + Else + CurrSawingTiltedTxBx.Foreground = Brushes.White + CurrSawingTiltedTxBx.TextDecorations = Nothing + End If + CurrSawingTiltedTxBx.Text = m_CurrentMachine.sCurrSawingTilted + CurrSawingTiltedTxBl.Visibility = Windows.Visibility.Visible + CurrSawingTiltedTxBx.Visibility = Windows.Visibility.Visible + Else + CurrSawingTiltedTxBl.Visibility = Windows.Visibility.Hidden + CurrSawingTiltedTxBx.Visibility = Windows.Visibility.Hidden + End If If m_CurrentMachine.sCurrDrilling <> String.Empty Then CurrDrillingTxBx.Text = m_CurrentMachine.sCurrDrilling CurrDrillingTxBl.Visibility = Windows.Visibility.Visible @@ -641,6 +711,42 @@ Public Class AlarmsPageUC RefreschMachining() End Sub + ' -- SAW TILTED -- + Private Sub CurrSawTiltedCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrSawTiltedCmBx.SelectionChanged + If IsNothing(CurrSawTiltedCmBx.SelectedItem) Then Return + ' Assegno + m_CurrentMachine.sCurrSawTilted = CurrSawTiltedCmBx.SelectedItem.ToString() + ' Se nuova lama incompatibile con lavorazione di taglio corrente, resetto quest'ultima + Dim sMchTuuid As String = String.Empty + Dim sMchTool As String = String.Empty + If Not EgtMdbSetCurrMachining(m_CurrentMachine.sCurrSawingTilted) Or + Not EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sMchTuuid) Or + Not EgtTdbGetToolFromUUID(sMchTuuid, sMchTool) Or + String.Compare(sMchTool, m_CurrentMachine.sCurrSawTilted, True) <> 0 Then + m_CurrentMachine.sCurrSawingTilted = String.Empty + End If + + ' Dim sVal As String = String.Empty + ' Dim dVal As Double = 0 + ' If m_CurrentMachine.GetUserNote("FsevLength", sVal, m_CurrentMachine.sCurrSaw) Then + ' StringToDouble(sVal, dVal) + ' m_CurrentMachine.SetFsevLength(dVal) + ' End If + ' If m_CurrentMachine.GetUserNote("FsevPerc", sVal, m_CurrentMachine.sCurrSaw) Then + ' StringToDouble(sVal, dVal) + ' m_CurrentMachine.SetFsevPerc(dVal) + ' End If + ' + ' ' Leggo parametri per variazione feed in tagli aggiornati in funzione della lama + ' CfrLenTxBx.Text = LenToString(m_CurrentMachine.dFsevLength, 3) + ' CfrPercTxBx.Text = DoubleToString(m_CurrentMachine.dFsevPerc, 0) + + ' Aggiorno utensili per lavoro in corso + m_MainWindow.m_WorkInProgressPageUC.UpdateTools() + ' aggiorno la lista delle lavorazioni + RefreschMachining() + End Sub + ' -- DRILL -- Private Sub CurrDrillCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrDrillCmBx.SelectionChanged If IsNothing(CurrDrillCmBx.SelectedItem) Then Return @@ -1375,7 +1481,7 @@ Public Class AlarmsPageUC Select Case m_CurrentMachine.MountedToolConfig Case CurrentMachine.MountedToolConfigs.SAW Return New ToolPos(m_CurrentMachine.sCurrSaw, "T100", True) - Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL, CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER + Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL, CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Dim ChooseTool As New ChooseToolWD(m_MainWindow) If ChooseTool.ShowDialog Then Return ChooseTool.GetSelectedTool diff --git a/Machine/ChooseToolWD.xaml.vb b/Machine/ChooseToolWD.xaml.vb index 1918cea..b3569c0 100644 --- a/Machine/ChooseToolWD.xaml.vb +++ b/Machine/ChooseToolWD.xaml.vb @@ -76,6 +76,18 @@ Public Class ChooseToolWD End If Next Return True + Case CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW + For Each ToolChangerPos As ToolChangerPos In m_MainWindow.m_CurrentMachine.ToolChanger + If Not String.IsNullOrWhiteSpace(ToolChangerPos.sTool) Then + m_SetUpToolList.Add(New ToolPos(ToolChangerPos.sTool, ToolChangerPos.sName, False)) + End If + Next + For Each ToolChangerPos As ToolChangerPos In m_MainWindow.m_CurrentMachine.ManualToolChanger + If Not String.IsNullOrWhiteSpace(ToolChangerPos.sTool) Then + m_SetUpToolList.Add(New ToolPos(ToolChangerPos.sTool, ToolChangerPos.sName, False)) + End If + Next + Return True Case Else Return False End Select diff --git a/Machine/CurrentMachine.vb b/Machine/CurrentMachine.vb index e4d9c5b..ab4f657 100644 --- a/Machine/CurrentMachine.vb +++ b/Machine/CurrentMachine.vb @@ -107,6 +107,7 @@ Public Class CurrentMachine ' Variabili che contengono il nome degli utensili disponibili per tipo Private m_sCurrSaw As String = String.Empty + Private m_sCurrSawTilted As String = String.Empty Private m_sCurrDrill As String = String.Empty Private m_sCurrMill As String = String.Empty Private m_sCurrMillNoTip As String = String.Empty @@ -116,6 +117,8 @@ Public Class CurrentMachine ' Variabili che contengono le lavorazioni correntemente attive (utilizzate per definire lavorazioni nel programma) Private m_sCurrSawing As String = String.Empty + Private m_sCurrSawingTilted As String = String.Empty + Private m_bApplySawingTilted As Boolean = False Private m_sCurrDrilling As String = String.Empty Private m_sCurrMilling As String = String.Empty Private m_sCurrPocketing As String = String.Empty @@ -193,6 +196,7 @@ Public Class CurrentMachine SAWANDAUXTOOL = 1 MANUALTOOLCHANGER = 2 TOOLCHANGER = 3 + TOOLCHANGERWITHSAW = 4 End Enum ' Massimo numero di utensili su Tc @@ -573,6 +577,18 @@ Public Class CurrentMachine End Set End Property + Friend Property sCurrSawTilted As String + Get + Return m_sCurrSawTilted + End Get + Set(value As String) + If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWTILTED, value, sMachIniFile) Then + m_sCurrSawTilted = value + ' m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text = value + End If + End Set + End Property + Friend Property sCurrDrill As String Get Return m_sCurrDrill @@ -647,18 +663,32 @@ Public Class CurrentMachine If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWING, value, sMachIniFile) Then m_sCurrSawing = value m_MainWindow.m_CurrentProjectPageUC.MachiningTxBx.Text = value - '' aggiorno il file ini della macchina con i valori correnti della lavorazione - 'Dim sVal As String = String.Empty - 'Dim dVal As Double = m_dFsevLength - 'If GetUserNote("FsevLength", sVal, m_sCurrSawing, False) Then - ' StringToDouble(sVal, dVal) - ' SetFsevLength(dVal) - 'End If - 'dVal = m_dFsevPerc - 'If GetUserNote("FsevPerc", sVal, m_sCurrSawing, False) Then - ' StringToDouble(sVal, m_dFsevPerc) - ' SetFsevPerc(dVal) - 'End If + End If + End Set + End Property + + Friend Property sCurrSawingTilted As String + Get + Return m_sCurrSawingTilted + End Get + Set(value As String) + If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWINGTILTED, value, sMachIniFile) Then + m_sCurrSawingTilted = value + 'm_MainWindow.m_CurrentProjectPageUC.MachiningTxBx.Text = value + End If + End Set + End Property + + Friend Property bApplySawingTilted As Boolean + Get + Return m_bApplySawingTilted + End Get + Set(value As Boolean) + m_bApplySawingTilted = value + If m_bApplySawingTilted Then + WritePrivateProfileString(S_MACH_MACH, K_APPLYSAWINGTILTED, "1", sMachIniFile) + Else + WritePrivateProfileString(S_MACH_MACH, K_APPLYSAWINGTILTED, "0", sMachIniFile) End If End Set End Property @@ -1273,6 +1303,14 @@ Public Class CurrentMachine ' Leggo utensili correnti ' lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, Nothing, m_sCurrSaw, sMachIniFile) + ' lama inclinata + If m_nShowToolChanger = 4 Then + GetPrivateProfileString(S_MACH_MACH, K_CURRSAWTILTED, Nothing, m_sCurrSawTilted, sMachIniFile) + Else + ' se non è configurato il cambio utensile e allora imposto l'unica lama disponibile per i tagli inclinati + m_sCurrSawTilted = m_sCurrSaw + End If + ' foretto GetPrivateProfileString(S_MACH_MACH, K_CURRDRILL, Nothing, m_sCurrDrill, sMachIniFile) ' fresa @@ -1289,6 +1327,10 @@ Public Class CurrentMachine ' Leggo lavorazioni correnti ' lama GetPrivateProfileString(S_MACH_MACH, K_CURRSAWING, Nothing, m_sCurrSawing, sMachIniFile) + ' lama inlicnata + GetPrivateProfileString(S_MACH_MACH, K_CURRSAWINGTILTED, Nothing, m_sCurrSawingTilted, sMachIniFile) + ' applica lavorazione di lama inclinata + m_bApplySawingTilted = (GetPrivateProfileInt(S_MACH_MACH, K_APPLYSAWINGTILTED, 0, sMachIniFile) <> 0) ' foretto GetPrivateProfileString(S_MACH_MACH, K_CURRDRILLING, Nothing, m_sCurrDrilling, sMachIniFile) ' fresa diff --git a/Machine/SetUpPage.xaml.vb b/Machine/SetUpPage.xaml.vb index e53aa6c..f043e82 100644 --- a/Machine/SetUpPage.xaml.vb +++ b/Machine/SetUpPage.xaml.vb @@ -3,6 +3,8 @@ Imports System.ComponentModel Imports OmagCUT.TreeViewItem Imports EgtUILib Imports EgtWPFLib +Imports EgtWPFLib5 +Imports FXServer Public Class SetUpPage @@ -13,6 +15,7 @@ Public Class SetUpPage Private m_CurrMachine As CurrentMachine = m_MainWindow.m_CurrentMachine Private m_ToolTreeList As New ObservableCollection(Of CathegoryItem) + Private m_SawsList As CathegoryItem Private m_DrillbitsList As CathegoryItem Private m_MillsList As CathegoryItem Private m_CupsList As CathegoryItem @@ -26,10 +29,10 @@ Public Class SetUpPage ' Assegno la lista utensili come sorgente dell'albero ToolTree.ItemsSource = m_ToolTreeList - If m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Then + If m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Or m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then '' Cambio utensile macchina ' Modifico numero colonne della griglia in base al numero di porta utensili disponibili sulla macchina - Dim ColNum As Integer = CInt( Math.Ceiling( m_CurrMachine.ToolChangerNbr / 5.0)) + Dim ColNum As Integer = CInt(Math.Ceiling(m_CurrMachine.ToolChangerNbr / 5.0)) If ColNum > 12 Then EgtOutLog("TC warning : too many tools (max 12 * 5)") ColNum = 12 @@ -59,11 +62,11 @@ Public Class SetUpPage '' Cambio utensile manuale ' Modifico numero colonne della griglia in base al numero di porta utensili disponibili sulla macchina - Dim ManColNum As Integer = CInt( Math.Ceiling( m_CurrMachine.ManualToolChangerNbr / 5.0)) - If ManColNum > 12 Then - EgtOutLog("ManTC warning : too many tools (max 12 * 5)") - ManColNum = 12 - End If + Dim ManColNum As Integer = CInt(Math.Ceiling(m_CurrMachine.ManualToolChangerNbr / 5.0)) + If ManColNum > 12 Then + EgtOutLog("ManTC warning : too many tools (max 12 * 5)") + ManColNum = 12 + End If For Index As Integer = 12 To ManColNum + 1 Step -1 For Index2 As Integer = Index * 5 To (Index - 1) * 5 + 1 Step -1 ManTlChGrid.Children.Remove(GetManTlChPosFromIndex(Index2)) @@ -85,7 +88,7 @@ Public Class SetUpPage Next ' Se portautensili della macchina presente - If m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Then + If m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Or m_CurrMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then ' Apro quello TlChScVw.Visibility = Windows.Visibility.Visible ToolChangerBtn.IsChecked = True @@ -106,15 +109,25 @@ Public Class SetUpPage Private Sub SetUpPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded ' Inizializzo le famiglie di utensili nell'albero EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) - InitializeToolGroup( m_CurrMachine.bDrill, MCH_TY.DRILL_STD, EgtMsg( 90752), m_DrillbitsList) - InitializeToolGroup( m_CurrMachine.bMill, MCH_TY.MILL_STD, EgtMsg( 90753), m_MillsList) - InitializeToolGroup( m_CurrMachine.bCupWheel, MCH_TY.MILL_NOTIP, EgtMsg( 90754), m_CupsList) - InitializeToolGroup( m_CurrMachine.bPolishingWheel, MCH_TY.MILL_POLISHING, EgtMsg( 90756), m_PolishingsList) + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then InitializeToolGroup(m_CurrMachine.bSaw, MCH_TY.SAW_STD, EgtMsg(90751), m_SawsList) + InitializeToolGroup(m_CurrMachine.bDrill, MCH_TY.DRILL_STD, EgtMsg(90752), m_DrillbitsList) + InitializeToolGroup(m_CurrMachine.bMill, MCH_TY.MILL_STD, EgtMsg(90753), m_MillsList) + InitializeToolGroup(m_CurrMachine.bCupWheel, MCH_TY.MILL_NOTIP, EgtMsg(90754), m_CupsList) + InitializeToolGroup(m_CurrMachine.bPolishingWheel, MCH_TY.MILL_POLISHING, EgtMsg(90756), m_PolishingsList) ' Posiziono utensili già posizionati sul portautensili For Each ToolPosition As ToolChangerPos In m_CurrMachine.ToolChanger If ToolPosition.sTool <> String.Empty Then - If Not IsNothing( m_DrillbitsList) Then + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW AndAlso Not IsNothing(m_SawsList) Then + For Each Item As CustomItem In m_SawsList.Items + If Item.Name = ToolPosition.sTool Then + m_SetUpToolsList.Items.Add(Item) + m_SawsList.Items.Remove(Item) + Exit For + End If + Next + End If + If Not IsNothing(m_DrillbitsList) Then For Each Item As CustomItem In m_DrillbitsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -123,7 +136,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_MillsList) Then + If Not IsNothing(m_MillsList) Then For Each Item As CustomItem In m_MillsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -132,7 +145,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_CupsList) Then + If Not IsNothing(m_CupsList) Then For Each Item As CustomItem In m_CupsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -141,7 +154,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_PolishingsList) Then + If Not IsNothing(m_PolishingsList) Then For Each Item As CustomItem In m_PolishingsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -158,7 +171,7 @@ Public Class SetUpPage ' Posiziono utensili già posizionati sul portautensili manuale For Each ToolPosition As ToolChangerPos In m_CurrMachine.ManualToolChanger If ToolPosition.sTool <> String.Empty Then - If Not IsNothing( m_DrillbitsList) Then + If Not IsNothing(m_DrillbitsList) Then For Each Item As CustomItem In m_DrillbitsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -167,7 +180,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_MillsList) Then + If Not IsNothing(m_MillsList) Then For Each Item As CustomItem In m_MillsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -176,7 +189,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_CupsList) Then + If Not IsNothing(m_CupsList) Then For Each Item As CustomItem In m_CupsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -185,7 +198,7 @@ Public Class SetUpPage End If Next End If - If Not IsNothing( m_PolishingsList) Then + If Not IsNothing(m_PolishingsList) Then For Each Item As CustomItem In m_PolishingsList.Items If Item.Name = ToolPosition.sTool Then m_SetUpToolsList.Items.Add(Item) @@ -710,16 +723,16 @@ Public Class SetUpPage End Function ' Funzione che carica gli utensili del Db nell'albero - Friend Sub InitializeToolGroup( bEnabled As Boolean, nTType As Integer, sFName As String, ByRef ToolCathegory As CathegoryItem) + Friend Sub InitializeToolGroup(bEnabled As Boolean, nTType As Integer, sFName As String, ByRef ToolCathegory As CathegoryItem) If Not bEnabled Then Return ' Inserisco categoria ed eventuali elementi - ToolCathegory = New CathegoryItem( sFName, nTType) + ToolCathegory = New CathegoryItem(sFName, nTType) Dim nType As Integer = 0 Dim ToolName As String = String.Empty - Dim bFound As Boolean = EgtTdbGetFirstTool( nTType, ToolName, nType) + Dim bFound As Boolean = EgtTdbGetFirstTool(nTType, ToolName, nType) While bFound - If nType = nTType Then ToolCathegory.Items.Add( New CustomItem( ToolName, nType)) - bFound = EgtTdbGetNextTool( nTType, ToolName, nType) + If nType = nTType Then ToolCathegory.Items.Add(New CustomItem(ToolName, nType)) + bFound = EgtTdbGetNextTool(nTType, ToolName, nType) End While m_ToolTreeList.Add(ToolCathegory) End Sub @@ -761,7 +774,7 @@ Public Class SetUpPage ToolHolderClicked.Tool.IsChecked = False GetTxBxFromTlChPos(ToolHolderClicked.Name).Text = String.Empty End If - ' altrimenti da levare + ' altrimenti da levare Else RestoreToolInList(GetTxBxFromTlChPos(ToolHolderClicked.Name).Text) GetTxBxFromTlChPos(ToolHolderClicked.Name).Text = String.Empty @@ -771,14 +784,17 @@ Public Class SetUpPage ' Funzione che rimuove l'utensile selezionato dall'albero Private Sub RemoveToolFromList() - If Not IsNothing( m_DrillbitsList) AndAlso m_DrillbitsList.Items.Contains( ToolTree.SelectedItem) Then - m_DrillbitsList.Items.Remove( ToolTree.SelectedItem) - ElseIf Not IsNothing( m_MillsList) AndAlso m_MillsList.Items.Contains( ToolTree.SelectedItem) Then - m_MillsList.Items.Remove( ToolTree.SelectedItem) - ElseIf Not IsNothing( m_CupsList) AndAlso m_CupsList.Items.Contains( ToolTree.SelectedItem) Then - m_CupsList.Items.Remove( ToolTree.SelectedItem) - ElseIf Not IsNothing( m_PolishingsList) AndAlso m_PolishingsList.Items.Contains( ToolTree.SelectedItem) Then - m_PolishingsList.Items.Remove( ToolTree.SelectedItem) + If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW AndAlso + Not IsNothing(m_SawsList) AndAlso m_SawsList.Items.Contains(ToolTree.SelectedItem) Then + m_SawsList.Items.Remove(ToolTree.SelectedItem) + ElseIf Not IsNothing(m_DrillbitsList) AndAlso m_DrillbitsList.Items.Contains(ToolTree.SelectedItem) Then + m_DrillbitsList.Items.Remove(ToolTree.SelectedItem) + ElseIf Not IsNothing(m_MillsList) AndAlso m_MillsList.Items.Contains(ToolTree.SelectedItem) Then + m_MillsList.Items.Remove(ToolTree.SelectedItem) + ElseIf Not IsNothing(m_CupsList) AndAlso m_CupsList.Items.Contains(ToolTree.SelectedItem) Then + m_CupsList.Items.Remove(ToolTree.SelectedItem) + ElseIf Not IsNothing(m_PolishingsList) AndAlso m_PolishingsList.Items.Contains(ToolTree.SelectedItem) Then + m_PolishingsList.Items.Remove(ToolTree.SelectedItem) End If End Sub @@ -786,7 +802,9 @@ Public Class SetUpPage Private Sub RestoreToolInList(sToolName As String) For Each Tool As CustomItem In m_SetUpToolsList.Items If Tool.Name = sToolName Then - If Tool.nType = MCH_TY.DRILL_STD Then + If Tool.nType = MCH_TY.SAW_STD Then + m_SawsList.Items.Add(Tool) + ElseIf Tool.nType = MCH_TY.DRILL_STD Then m_DrillbitsList.Items.Add(Tool) ElseIf Tool.nType = MCH_TY.MILL_STD Then m_MillsList.Items.Add(Tool) @@ -1084,6 +1102,39 @@ Public Class SetUpPage EgtTdbSave() End Sub + ' Funzione che genera il file di setup corrente (per Cam5 e Office) + Private Sub SaveSetUpFile() + If m_CurrMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then Return + Dim sContentFile As String = "; this file has been created by program OmagCUT by current setup" & vbCrLf + sContentFile &= "[General]" & vbCrLf + For Each ToolPosition As ToolChangerPos In m_CurrMachine.ToolChanger + Dim sToolName As String = ToolPosition.sTool + Dim sPositionName As String = ToolPosition.sName + Dim sPosition As Integer = ToolPosition.nPosition + If Not String.IsNullOrEmpty(sToolName) Then + EgtTdbSetCurrTool(sToolName) + ' Recupero l'uscita + Dim nExit As Integer = 1 + EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nExit) + ' Recupero la testa + Dim sHead As String = "" + EgtTdbGetCurrToolParam(MCH_TP.HEAD, sHead) + ' Recupero nome file nge dell'utensile + Dim sUUID As String = "" + EgtTdbGetCurrToolParam(MCH_TP.UUID, sUUID) + 'local sRaw='Pos'..tostring(Index)..'='..TcPos..';'..EgtTdbGetCurrToolParam( MCH_TP.HEAD)..';'..EgtTdbGetCurrToolParam( MCH_TP.EXIT)..'/'..EgtTdbGetCurrToolParam( MCH_TP.UUID)..'/'..ToolName + sContentFile &= "Pos" & sPosition.ToString & "=" & sPositionName & ";" & sHead & ";" & nExit.ToString & "/" & sUUID & "/" & sToolName & vbCrLf + End If + Next + ' Apro il file e lo sovrascrivo + Dim sFileOmagCutSetUp As String = m_CurrMachine.sMachDir & "\SetUp\CurrOmagCUT.stu" + Try + My.Computer.FileSystem.WriteAllText(sFileOmagCutSetUp, sContentFile, False) + Catch ex As Exception + EgtOutLog("Error in creatinf file CurrOmagCUT.stu: " & ex.ToString) + End Try + End Sub + ' Evento che permette di aprire le cartelle degli utensili con un click singolo Private Sub ToolTree_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles ToolTree.PreviewMouseUp If TypeOf ToolTree.SelectedItem Is CathegoryItem Then @@ -1095,6 +1146,8 @@ Public Class SetUpPage Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click ' Eseguo salvataggio (DB utensili + attrezzaggio) SaveToolChangerStatus() + ' Salvo nel file di setup l'attuale configurazione + SaveSetUpFile() ' Esco m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Add(m_MainWindow.m_MachinePageUC.m_AlarmsPageUC) m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Remove(Me) @@ -1131,7 +1184,7 @@ Public Class SetUpPage RemoveToolFromList() Else ' Altrimenti segnalo che la posizione è già occupata - Dim InfoMsgBox As New EgtMsgBox(m_MainWindow, "", EgtMsg( 90759), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION) + Dim InfoMsgBox As New EgtMsgBox(m_MainWindow, "", EgtMsg(90759), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION) End If Return End If @@ -1149,7 +1202,7 @@ Public Class SetUpPage RemoveToolFromList() Else ' Altrimenti segnalo che la posizione è già occupata - Dim InfoMsgBox As New EgtMsgBox(m_MainWindow, "", EgtMsg( 90759), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION) + Dim InfoMsgBox As New EgtMsgBox(m_MainWindow, "", EgtMsg(90759), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION) End If Return End If diff --git a/Machine/ToolChangerPosUC.xaml b/Machine/ToolChangerPosUC.xaml index adcab91..f524630 100644 --- a/Machine/ToolChangerPosUC.xaml +++ b/Machine/ToolChangerPosUC.xaml @@ -18,7 +18,7 @@ - + diff --git a/Machine/ToolsDbPageUC.xaml b/Machine/ToolsDbPageUC.xaml index af2ef00..b270f24 100644 --- a/Machine/ToolsDbPageUC.xaml +++ b/Machine/ToolsDbPageUC.xaml @@ -1,12 +1,12 @@  + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:EgtWPFLib="clr-namespace:EgtWPFLib;assembly=EgtWPFLib" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:self="clr-namespace:OmagCUT.TreeViewItem" + mc:Ignorable="d" + d:DesignHeight="768" d:DesignWidth="1280" Initialized="ToolsDbPage_Initialized" Loaded="ToolsDbPage_Loaded"> @@ -24,7 +24,7 @@ - + @@ -224,12 +224,12 @@ + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_LeftKeyboardTextBoxNoBorder}"/> + BorderThickness="0" BorderBrush="Black" CornerRadius="3"> @@ -237,17 +237,27 @@ - + + + + + + Style="{DynamicResource OmagCut_KeyboardTextBox}" /> + Style="{DynamicResource OmagCut_NoNameGroupBorder}"> @@ -259,18 +269,18 @@ + Style="{DynamicResource OmagCut_LeftKeyboardTextBoxNoBorder}" /> + Style="{DynamicResource OmagCut_RightCalculatorTextBoxInBorder}" /> + Style="{DynamicResource OmagCut_GroupBox}"> @@ -282,19 +292,19 @@ + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> + Style="{DynamicResource OmagCut_GroupBox}"> @@ -309,23 +319,23 @@ + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> + Style="{DynamicResource OmagCut_ToolsDBTextBlock}"/> + Style="{DynamicResource OmagCut_CalculatorTextBoxInGroupBox}" /> @@ -336,7 +346,7 @@ - + @@ -420,11 +430,32 @@ - - + + + + + + + + + + + + + + + + - + + + + + + + + + + diff --git a/Project/ProjectMgrUC.xaml.vb b/Project/ProjectMgrUC.xaml.vb index 8fd2e79..2e0d359 100644 --- a/Project/ProjectMgrUC.xaml.vb +++ b/Project/ProjectMgrUC.xaml.vb @@ -26,6 +26,8 @@ Public Class ProjectMgrUC RegisterBtn.Content = "REG" 'Shape Registration ResetCutBtn.Content = EgtMsg(MSG_NESTPAGEUC + 6) 'Reset + ResetCut2Btn.Content = EgtMsg(91024) 'Reset lavorazioni + ResetCut1Btn.Content = EgtMsg(91025) 'Aggiorna feed/speed SimulateBtn.ToolTip = EgtMsg(MSG_CADCUTPAGEUC + 1) 'Simulate - Simula If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.OFFICE_TYPE) Then WorkBtn.ToolTip = EgtMsg(MSG_CADCUTPAGEUC + 10) 'Export - Esporta @@ -33,7 +35,7 @@ Public Class ProjectMgrUC WorkBtn.ToolTip = EgtMsg(MSG_CADCUTPAGEUC + 2) 'Work - Lavora End If TestBtn.ToolTip = EgtMsg(90255) 'Test - ResetCutBtn.ToolTip = "Reset Cuts" & vbCrLf & "Reset Feed (Shift)" + ResetCutBtn.ToolTip = "Reset Cuts" & vbCrLf & "Other Reset (Shift)" End Sub Private Sub ProjectMgrUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded @@ -287,11 +289,58 @@ Public Class ProjectMgrUC End Sub Private Sub ResetCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles ResetCutBtn.Click - If (Keyboard.Modifiers And ModifierKeys.Shift) Then - ' eseguo il ricalcolo delle sole FEED di lavorazione - UpdateFeedAllMachining() - Return + If (Keyboard.Modifiers And ModifierKeys.Shift) > 0 Then + If ResetCutPopUp.IsOpen Then + ResetCutPopUp.IsOpen = False + Else + ResetCutPopUp.IsOpen = True + End If + Else + ResetCut3Btn_Click() End If + End Sub + + ' Reimposto le feed di tutte le lavorazioni + Private Sub ResetCut1Btn_Click(sender As Object, e As RoutedEventArgs) Handles ResetCut1Btn.Click + ' eseguo il ricalcolo delle sole FEED di lavorazione + UpdateFeedAllMachining() + End Sub + + ' Reimposto le lavorazioni di default e ripristino i parametri + Private Sub ResetCut2Btn_Click(sender As Object, e As RoutedEventArgs) Handles ResetCut2Btn.Click + EgtSetCurrentContext(m_CurrProjPage.CurrentProjectScene.GetCtx()) + ' Cancello eventuali messaggi + m_CurrProjPage.ClearMessage() + ' cancello tutti i tagli di separazione (Waterjet) + ResetAllSplitCurv() + ' cancello tutti i punti di inizio (Waterjet) + ResetAllStartCurv() + ' cancello tutti i ponticelli disegnati + ResetAllBRidges() + ' cancella tutti i tagli di separazione inseriti in OFFICE + ResetAllSplitCut() + + ' assegno la lavorazione corrente per i tagli di lama inclinati (solo se specificato nella ComboBox della ChooseMachinig) + RestoreDef_Machinig(True) + ' assegno la lavorazione corrente per i tagli verticali + RestoreDef_Machinig(False) + + ' Ricalcolo tutte le lavorazioni + Dim nWarn As Integer = 0 + ResetAllMachinings(nWarn) + If nWarn = 1 Then m_CurrProjPage.SetWarningMessage(EgtMsg(MSG_SPLITPAGEUC + 11)) ' Lama troppo grande per utilizzo ventosa + ' Se eistono elimino i grezzi delle fasi che non contengono lavorazioni + ResetAllRawPart() + ' Aggiorno Info C Home + Dim dCHome As Double + EgtGetAxisHomePos("C", dCHome) + EgtSetInfo(EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_PROJMARK), INFO_CAXESHOME, DoubleToString(dCHome, 0)) + ' Aggiorno visualizzazione + EgtDraw() + End Sub + + ' Resetta i valori dei parametri (ma non le lavorazioni) + Private Sub ResetCut3Btn_Click() EgtSetCurrentContext(m_CurrProjPage.CurrentProjectScene.GetCtx()) ' Cancello eventuali messaggi m_CurrProjPage.ClearMessage() diff --git a/RawPhoto/ChooseMachining.xaml b/RawPhoto/ChooseMachining.xaml index 0810827..17f28b9 100644 --- a/RawPhoto/ChooseMachining.xaml +++ b/RawPhoto/ChooseMachining.xaml @@ -35,7 +35,42 @@ - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RawPhoto/ChooseMachining.xaml.vb b/RawPhoto/ChooseMachining.xaml.vb index 453a482..9a1ac80 100644 --- a/RawPhoto/ChooseMachining.xaml.vb +++ b/RawPhoto/ChooseMachining.xaml.vb @@ -8,6 +8,7 @@ Public Class ChooseMachining Private m_CurrentMachine As CurrentMachine = m_MainWindow.m_CurrentMachine ' Liste che contengono gli elementi appartenenti alle ComboBox Private m_SawingList As New List(Of String) + Private m_SawingTiltedList As New List(Of String) Private m_AuxMachTypeList As New List(Of StringIdCmBx) Private m_DrillingList As New List(Of String) Private m_MillingList As New List(Of String) @@ -36,6 +37,7 @@ Public Class ChooseMachining Me.Top = Owner.Top + Owner.Height / 2 - Me.Height Me.Left = Owner.Left + Owner.Width / 2 - Me.Width / 2 CurrSawingCmBx.ItemsSource = m_SawingList + CurrSawingTiltedCmBx.ItemsSource = m_SawingTiltedList AuxiliaryMachiningCmBx.ItemsSource = m_AuxMachTypeList CurrDrillingCmBx.ItemsSource = m_DrillingList CurrMillingCmBx.ItemsSource = m_MillingList @@ -44,6 +46,7 @@ Public Class ChooseMachining CurrWJettingQualityCmBx.ItemsSource = m_CurrentMachine.Qualities CurrSawingTxBl.Text = EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 1) + CurrSawingTiltedTxBl.Text = EgtMsg(91023) ' Lavorazione inclinata AuxiliaryMachiningTxBl.Text = EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 2) CurrDrillingTxBl.Text = EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 3) CurrMillingTxBl.Text = EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 4) @@ -69,7 +72,13 @@ Public Class ChooseMachining ' -- TAGLIO -- CreateMachiningList(MCH_MY.SAWING, m_CurrentMachine.sCurrSaw, m_SawingList) ' aggiungo un campo vuoto - m_SawingList.Add( "") + m_SawingList.Add("") + ' -- TAGLIO TILTED -- + CurrSawingTiltedCmBx.IsEnabled = m_MainWindow.m_CurrentMachine.bApplySawingTilted + ApplySawingTiltedChBx.IsChecked = m_MainWindow.m_CurrentMachine.bApplySawingTilted + CreateMachiningList(MCH_MY.SAWING, m_CurrentMachine.sCurrSawTilted, m_SawingTiltedList) + ' aggiungo un campo vuoto + m_SawingTiltedList.Add("") ' Verifico la configurazione della macchina per creare i combobox Select Case m_CurrentMachine.MountedToolConfig @@ -78,7 +87,7 @@ Public Class ChooseMachining ChooseMachiningGrid.Children.Remove(AuxiliaryMachiningTxBl) ChooseMachiningGrid.Children.Remove(AuxiliaryMachiningCmBx) - Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL, CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER + Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL, CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW ' Creo lista lavorazioni foretto e fresa If m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Then CreateMachiningList(MCH_MY.DRILLING, m_CurrentMachine.sCurrDrill, m_DrillingList) @@ -114,7 +123,10 @@ Public Class ChooseMachining ' ---- MACCHINA CON CAMBIO UTENSILE ---- ElseIf m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER Or - m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Then + m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Or + m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + ' -- TAGLIO -- + ' Il taglio è aggiunto sempre (all'inizio di questo metodo) ' -- FORATURA -- CreateMachiningList(MCH_MY.DRILLING, m_DrillingList) ' Se la lista è vuota cancello la lavorazione corrente di questo tipo @@ -206,7 +218,8 @@ Public Class ChooseMachining m_AuxMachTypeList.Add(New StringIdCmBx(4, EgtMsg(91069))) End If If m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER Or - m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Then + m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGER Or + m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then m_AuxMachTypeList.Add(New StringIdCmBx(3, EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 8))) End If End If @@ -490,6 +503,8 @@ Public Class ChooseMachining Dim nDeltaRow As Integer = 4 Dim nNewRow As Integer = 2 ' nascondo tutte le CmBx e TxBl + CurrSawingTiltedTxBl.Visibility = Windows.Visibility.Hidden + CurrSawingTiltedCmBx.Visibility = Windows.Visibility.Hidden CurrDrillingTxBl.Visibility = Windows.Visibility.Hidden CurrDrillingCmBx.Visibility = Windows.Visibility.Hidden CurrMillingTxBl.Visibility = Windows.Visibility.Hidden @@ -499,6 +514,33 @@ Public Class ChooseMachining CurrWJettingTxBl.Visibility = Windows.Visibility.Hidden CurrWJettingCmBx.Visibility = Windows.Visibility.Hidden + ' -- LAMA TILTED -- se definito il cambio utensile con lama + 'If m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then + If Not String.IsNullOrEmpty(m_CurrentMachine.sCurrSawTilted) Then + ' Definizione di due righe della tabella con la giusta altezza + For Index As Integer = 1 To nNewRow + Dim Row As New RowDefinition + Row.Height = New GridLength(0.5, GridUnitType.Star) + ChooseMachiningGrid.RowDefinitions.Add(Row) + Next + m_RowNumber = m_RowNumber + nNewRow + ' titolo della ComboBox + CurrSawingTiltedTxBl.SetValue(Grid.RowProperty, m_RowNumber - nDeltaRow - nNewRow) + ' ComboBox (nella riga successiva al titolo) + CurrSawingTiltedCmBx.SetValue(Grid.RowProperty, m_RowNumber - nDeltaRow - nNewRow + 1) + 'ButtonsGrid.SetValue(Grid.RowProperty, 5) + If m_CurrentMachine.sCurrSawingTilted <> String.Empty Then + CurrSawingTiltedCmBx.SelectedItem = m_CurrentMachine.sCurrSawingTilted + End If + ' verifico che la selezione sia andata a buon fine, altrimenti comunico l'avvenuta modifica + If String.IsNullOrEmpty(CurrSawingTiltedCmBx.SelectedItem) Then + ' verifico che sia stato inserito veramente una lavorazione prima di comunicare una modifica + If CurrSawingTiltedCmBx.SelectedItem <> m_CurrentMachine.sCurrSawingTilted Then m_MachIsModified = True + End If + CurrSawingTiltedTxBl.Visibility = Windows.Visibility.Visible + CurrSawingTiltedCmBx.Visibility = Windows.Visibility.Visible + End If + ' -- FORATURA -- se foretto presente If m_CurrentMachine.bDrill And m_DrillingList.Count() > 0 Then ' Definizione di due righe della tabella con la giusta altezza @@ -621,6 +663,20 @@ Public Class ChooseMachining m_MainWindow.m_CurrentMachine.sCurrSawing = CurrSawingCmBx.SelectedItem.ToString() End Sub + Private Sub ApplySawingTiltedChBx_Checked() Handles ApplySawingTiltedChBx.Click + If ApplySawingTiltedChBx.IsChecked Then + CurrSawingTiltedCmBx.IsEnabled = True + m_MainWindow.m_CurrentMachine.bApplySawingTilted = True + Else + CurrSawingTiltedCmBx.IsEnabled = False + m_MainWindow.m_CurrentMachine.bApplySawingTilted = False + End If + End Sub + + Private Sub CurrSawingTiltedCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrSawingTiltedCmBx.SelectionChanged + m_MainWindow.m_CurrentMachine.sCurrSawingTilted = CurrSawingTiltedCmBx.SelectedItem.ToString() + End Sub + Private Sub CurrDrillingCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrDrillingCmBx.SelectionChanged m_MainWindow.m_CurrentMachine.sCurrDrilling = CurrDrillingCmBx.SelectedItem.ToString() End Sub diff --git a/RawPhoto/RawPartPageUC.xaml.vb b/RawPhoto/RawPartPageUC.xaml.vb index 8f1a7f9..fe68fdc 100644 --- a/RawPhoto/RawPartPageUC.xaml.vb +++ b/RawPhoto/RawPartPageUC.xaml.vb @@ -6,7 +6,7 @@ Imports EgtWPFLib Public Class RawPartPageUC ' Dati generali CN - Friend m_CN As CN_generico + ' Friend m_CN As CN_generico ' Riferimento alla MainWindow Dim m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) diff --git a/Simulation/SimulationPageUC.xaml.vb b/Simulation/SimulationPageUC.xaml.vb index e8595cd..e01d58d 100644 --- a/Simulation/SimulationPageUC.xaml.vb +++ b/Simulation/SimulationPageUC.xaml.vb @@ -87,6 +87,7 @@ Public Class SimulationPageUC End Sub Private Sub SimulationPage_Loaded(sender As Object, e As RoutedEventArgs) + EgtOutLog(" -- PREPARE SIMUL --") m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC Dim bOk As Boolean = True ' Elimino eventuale attrezzaggio da OmagOFFICE @@ -111,9 +112,9 @@ Public Class SimulationPageUC If bOk Then m_CurrProjPage.SetOrderMachiningFlag() Dim bModif As Boolean = TestAllMachiningsForStrict() If bModif Then - m_CurrProjPage.SetWarningMessage(EgtMsg(90321)) 'Ridotte alcune lavorazioni per evitare interferenze + m_CurrProjPage.SetWarningMessage(EgtMsg(90321)) 'Ridotte alcune lavorazioni per evitare interferenze Else - m_CurrProjPage.SetInfoMessage(EgtMsg(90399)) 'Aggiornate tutte le lavorazioni + m_CurrProjPage.SetInfoMessage(EgtMsg(90399)) 'Aggiornate tutte le lavorazioni End If End If ' Costringo ad aggiornare UI @@ -131,7 +132,7 @@ Public Class SimulationPageUC ' Se errore in setup, lo segnalo If Not bSetup Then m_CurrProjPage.SetErrorMessage(EgtMsg(90322) & " " & sMissingTools) 'Mancano gli utensili : ... - ' Se errore in generazione, segnalo l'errore + ' Se errore in generazione, segnalo l'errore ElseIf Not bOk Then m_CurrProjPage.SetErrorMessage(EgtMsg(90314)) 'Errore nella generazione del programma CN End If @@ -171,7 +172,7 @@ Public Class SimulationPageUC ' Nascondo eventuale contorno da foto m_CurrProjPage.ShowContour(False) ' Nascondo eventuali testi con dati su aree - m_CurrProjPage.SetAreasStatus( false) + m_CurrProjPage.SetAreasStatus(False) ' Recupero eventuale fase di ripartenza m_nRestart = m_MainWindow.m_CurrentProjectPageUC.GetProjectNcRestart() ' Imposto prima fase @@ -484,7 +485,8 @@ Public Class SimulationPageUC Private Function LoadCurrTools() As Boolean ' Se macchina senza cambio utensile automatico devo caricare gli utensili - If m_MainWindow.m_CurrentMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGER Then + If m_MainWindow.m_CurrentMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGER And + m_MainWindow.m_CurrentMachine.MountedToolConfig <> CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW Then ' Imposto la lama corrente Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw If Not EgtLoadTool("H1", 1, sSaw) Then Return False diff --git a/Utility/Utility.vb b/Utility/Utility.vb index 04793bc..4f9bc7d 100644 --- a/Utility/Utility.vb +++ b/Utility/Utility.vb @@ -453,6 +453,27 @@ Module Utility Return True End Function + ' Restituisce il colore dell'utensile correntemente settato, se non trova l'utesile o il colore ritorna il default (0,255,0) + Friend Function GetColorPV() As Color3d + Dim ToolString As String = String.Empty + Dim ToolColor As String = String.Empty + 'EgtTdbGetCurrToolParam(MCH_MP.SYSNOTES, ToolString) + EgtTdbGetCurrToolParam(MCH_TP.SYSNOTES, ToolString) + EgtTdbGetCurrToolValInNotes(MCH_TP.SYSNOTES, "COLOR", ToolColor) + Dim sItems As String() = ToolColor.Split(","c) + ' Verifico che siano almeno 3 campi + If sItems.Count < 3 Then + Return New Color3d(0, 255, 0, 100) + Else + ' Verifico che tutti i campi siano numerici + If IsNumeric(sItems(0)) And IsNumeric(sItems(1)) And IsNumeric(sItems(2)) Then + Return New Color3d(CInt(sItems(0)), CInt(sItems(1)), CInt(sItems(2)), 100) + Else + Return New Color3d(0, 255, 0, 100) + End If + End If + End Function + '-------------------------------------------------------------------------------------------------- Public Class Language