diff --git a/Constants/ConstGen.vb b/Constants/ConstGen.vb index 48b33e9..b08da3d 100644 --- a/Constants/ConstGen.vb +++ b/Constants/ConstGen.vb @@ -214,7 +214,8 @@ Module ConstGen Public Const INFO_DEPTH As String = "Depth" Public Const INFO_WIDTH As String = "Width" Public Const INFO_DEPTH2 As String = "Depth2" - Public CONST INFO_AGG2 As String = "Agg2" + Public Const INFO_AGG2 As String = "Agg2" + Public Const INFO_ROUNDOFF As String = "RoundOff" ' Info in entità da tagliare per taglio ristretto Public Const INFO_STRICT As String = "Strict" ' Info in entità da tagliare per angolo di lato e tallone diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 59e27a1..ae935ea 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -142,6 +142,7 @@ Module ConstIni Public Const K_UNDERDRILLDEPTH As String = "UnderDrillDepth" Public Const K_FILOTOPOFFSET As String = "FiloTopOffset" Public Const K_FILOTOPDEPTH As String = "FiloTopDepth" + Public Const K_ROUNDOFF As String = "RoundOff" Public Const S_NEST As String = "Nest" Public Const K_DIRECT As String = "Direct" diff --git a/DrawImport/CompoDimensionUC.xaml.vb b/DrawImport/CompoDimensionUC.xaml.vb index 95012b2..cbaf611 100644 --- a/DrawImport/CompoDimensionUC.xaml.vb +++ b/DrawImport/CompoDimensionUC.xaml.vb @@ -336,6 +336,7 @@ Public Class CompoDimensionUC Dim nCmpInfo As Integer = 0 If EgtGetInfo(nId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then EgtSetStatus(nId, GDB_ST.OFF) + UpdateInLoopReference(nCmp) Exit While End If nId = EgtGetNextName(nId, "HoleLabels") @@ -379,5 +380,42 @@ Public Class CompoDimensionUC EgtDraw() End Sub + Private Sub UpdateInLoopReference(nCmp As Integer) + ' aggiorno il layer "FiloTop" + Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop") + While nIdInLoop <> GDB_ID.NULL + Dim nCmpInfoIL As Integer = 0 + If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then + Dim nLayFiloTop As Integer = GDB_ID.NULL + EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop) + If nLayFiloTop <> GDB_ID.NULL Then + Dim LocalList As New List(Of Integer) From {nIdInLoop} + m_DrawPage.m_FiloTopUC.CreateFiloTopPreView(LocalList) + EgtSetStatus(nLayFiloTop, GDB_ST.ON_) + Exit While + End If + End If + nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop") + End While + End Sub + + ' riceve la info "ID" della componente + Public Sub SetStatusVisibilityInLoopReference(nCmp As Integer, Status As GDB_ST) + ' aggiorno il layer "FiloTop" + Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop") + While nIdInLoop <> GDB_ID.NULL + Dim nCmpInfoIL As Integer = 0 + If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then + Dim nLayFiloTop As Integer = GDB_ID.NULL + EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop) + If nLayFiloTop <> GDB_ID.NULL Then + EgtSetStatus(nLayFiloTop, Status) + Exit While + End If + End If + nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop") + End While + End Sub + #End Region ' METHODS for InternalCompo End Class diff --git a/DrawImport/DrawPageUC.xaml.vb b/DrawImport/DrawPageUC.xaml.vb index 712beab..b3bbf90 100644 --- a/DrawImport/DrawPageUC.xaml.vb +++ b/DrawImport/DrawPageUC.xaml.vb @@ -41,6 +41,9 @@ Public Class DrawPageUC Friend m_bDrawOk As Boolean = False Private m_bFirst As Boolean = True + Private m_SelListHole As New List(Of Integer) + Private m_DeselectListHole As New List(Of Integer) + ' questa variabile serve per risalire al nome della componente che ospita i componenti interni att Friend m_sMainCompo As String = String.Empty @@ -360,6 +363,8 @@ Public Class DrawPageUC Dim nCmpInfo As Integer = 0 If EgtGetInfo(nHLId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then EgtSetStatus(nHLId, GDB_ST.ON_) + ' nascondo eventuali FiloTop + m_CompoDimension.SetStatusVisibilityInLoopReference(nCmp, GDB_ST.OFF) Exit While End If nHLId = EgtGetNextName(nHLId, "HoleLabels") @@ -462,21 +467,25 @@ Public Class DrawPageUC EgtDeselectObj(nId) EgtDeselectObj(nLayId) Dim sLayName As String = "" - If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo( nLayId, INFO_FILOTOP) Then - EgtRemoveInfo( nLayId, INFO_FILOTOP) - EgtRemoveInfo( nLayId, INFO_OFFSET) - EgtRemoveInfo( nLayId, INFO_DEPTH) - EgtResetColor( nLayId) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + EgtRemoveInfo(nLayId, INFO_FILOTOP) + EgtRemoveInfo(nLayId, INFO_OFFSET) + EgtRemoveInfo(nLayId, INFO_DEPTH) + EgtResetColor(nLayId) End If + m_DeselectListHole.Add(nLayId) + m_SelListHole.Remove(nLayId) Else Dim sLayName As String = "" - If EgtGetName( nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then - EgtSelectObj( nId) - EgtSelectObj( nLayId) - EgtSetInfo( nLayId, INFO_FILOTOP, 1) - EgtSetInfo( nLayId, INFO_OFFSET, m_FiloTopUC.FiloTopOffset) - EgtSetInfo( nLayId, INFO_DEPTH, m_FiloTopUC.FiloTopDepth) - EgtSetColor( nLayId, New Color3d(255, 255, 255)) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then + EgtSelectObj(nId) + EgtSelectObj(nLayId) + EgtSetInfo(nLayId, INFO_FILOTOP, 1) + EgtSetInfo(nLayId, INFO_OFFSET, m_FiloTopUC.FiloTopOffset) + EgtSetInfo(nLayId, INFO_DEPTH, m_FiloTopUC.FiloTopDepth) + EgtSetColor(nLayId, New Color3d(255, 255, 255)) + m_SelListHole.Add(nLayId) + m_DeselectListHole.Remove(nLayId) End If End If EgtDraw() @@ -484,6 +493,8 @@ Public Class DrawPageUC End If nId = EgtGetNextObjInSelWin() End While + m_FiloTopUC.CreateFiloTopPreView(m_SelListHole) + m_FiloTopUC.EraseFiloTopPreview(m_DeselectListHole) End Sub Private Sub OnShowDistanceVector(sender As Object, vtDist As Vector3d) Handles DrawScene.OnShowDistanceVector @@ -1362,6 +1373,8 @@ Public Class DrawPageUC End Sub Private Sub FiloTopBtn_Click(sender As Object, e As RoutedEventArgs) Handles FiloTopBtn.Click + m_SelListHole.Clear() + m_DeselectListHole.Clear() m_SceneButtons.MeasureBtn.IsChecked = False If FiloTopBtn.IsChecked Then ' Imposto modalità @@ -1375,25 +1388,25 @@ Public Class DrawPageUC m_PrevSideAnglePage = Pages.AlzFront LeftButtonGrd.Children.Remove(m_CompoDimension.m_AlzFrontPage) End If - VariablesGrd.Children.Add( m_FiloTopUC) + VariablesGrd.Children.Add(m_FiloTopUC) SideAngleBtn.IsEnabled = False EngraveBtn.IsEnabled = False DripCutBtn.IsEnabled = False MessageGrid.Visibility = Windows.Visibility.Hidden BackBtn.Visibility = Windows.Visibility.Hidden - MessageTxBx.Text = EgtMsg( MSG_DRAWPAGEUC + 6) ' Selezionare un contorno + MessageTxBx.Text = EgtMsg(MSG_DRAWPAGEUC + 6) ' Selezionare un contorno MessageBrd.Background = Application.Current.FindResource("OmagCut_Green") ' In ogni caso, nascondo layer delle misure - Dim PartId As Integer = EgtGetFirstInGroup( GDB_ID.ROOT) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_AUX), GDB_ST.OFF) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_QUOTATURE), GDB_ST.OFF) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_ETICHETTE), GDB_ST.OFF) + Dim PartId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_AUX), GDB_ST.OFF) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_QUOTATURE), GDB_ST.OFF) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_ETICHETTE), GDB_ST.OFF) Else - VariablesGrd.Children.Remove( m_FiloTopUC) + VariablesGrd.Children.Remove(m_FiloTopUC) If m_PrevSideAnglePage = Pages.CompoDimension Then - VariablesGrd.Children.Add( m_CompoDimension) + VariablesGrd.Children.Add(m_CompoDimension) ElseIf m_PrevSideAnglePage = Pages.InternalComponent Then - LeftButtonGrd.Children.Add( m_CompoDimension.m_InternalCompoPage) + LeftButtonGrd.Children.Add(m_CompoDimension.m_InternalCompoPage) End If SideAngleBtn.IsEnabled = m_bEnableSideAngle EngraveBtn.IsEnabled = True diff --git a/DrawImport/FiloTopUC.xaml b/DrawImport/FiloTopUC.xaml index 75d6f89..cb94ae1 100644 --- a/DrawImport/FiloTopUC.xaml +++ b/DrawImport/FiloTopUC.xaml @@ -41,7 +41,11 @@ FontSize="{DynamicResource FontSize_LowerCaseCharacter}"/> - - + + + diff --git a/DrawImport/FiloTopUC.xaml.vb b/DrawImport/FiloTopUC.xaml.vb index 58c2cba..bb4da9b 100644 --- a/DrawImport/FiloTopUC.xaml.vb +++ b/DrawImport/FiloTopUC.xaml.vb @@ -7,6 +7,8 @@ Public Class FiloTopUC ' Riferimento alla pagina che ha aperto SideAngleUC Private m_CallingPage As MainWindow.Pages + Private m_SelList As New List(Of Integer) + ' Offset della sfilettatura Private m_dFiloTopOffset As Double = 0 Friend ReadOnly Property FiloTopOffset As Double @@ -23,6 +25,13 @@ Public Class FiloTopUC End Get End Property + ' esegue l'arrotindamento sugli angoli del percorso utensile + Private m_bCornerradius As Boolean = False + Friend ReadOnly Property bCornerRadius As Boolean + Get + Return m_bCornerradius + End Get + End Property Private Sub FiloTopUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded ' Imposto riferimenti ad altre pagine @@ -43,14 +52,18 @@ Public Class FiloTopUC End If ' Gestisco visualizzazione dei parametri - Parameter2TxBl.Visibility = Windows.Visibility.Visible + ParameterTxBl.Visibility = Windows.Visibility.Visible Parameter2TxBx.Visibility = Windows.Visibility.Visible + Parameter3TxBl.Visibility = Windows.Visibility.Visible ' Aggiorno valori m_dFiloTopOffset = GetPrivateProfileDouble( S_SIDES, K_FILOTOPOFFSET, 5, m_MainWindow.GetIniFile()) ParameterTxBx.Text = LenToString( m_dFiloTopOffset, 3) m_dFiloTopDepth = GetPrivateProfileDouble( S_SIDES, K_FILOTOPDEPTH, 5, m_MainWindow.GetIniFile()) - Parameter2TxBx.Text = LenToString( m_dFiloTopDepth, 3) + Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3) + m_bCornerradius = GetPrivateProfileInt(S_SIDES, K_ROUNDOFF, 0, m_MainWindow.GetIniFile()) <> 0 + Parameter3ChBx.IsChecked = m_bCornerradius + m_SelList.Clear() End Sub Private Sub FiloTopUC_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded @@ -74,6 +87,8 @@ Public Class FiloTopUC End While nPartId = EgtGetNextPart(nPartId) End While + ' aggiorno la preview + CreateFiloTopPreView(m_SelList, False) End Sub Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed @@ -95,4 +110,161 @@ Public Class FiloTopUC End While End Sub + Private Sub Parameter3ChBx_Checked() Handles Parameter3ChBx.Click + ' Assegno il valore + m_bCornerradius = Parameter3ChBx.IsChecked + WritePrivateProfileString(S_SIDES, K_ROUNDOFF, If(m_bCornerradius, "1", "0"), m_MainWindow.GetIniFile()) + ' Aggiorno le info del profilo + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + EgtSetInfo(nLayId, INFO_ROUNDOFF, If(m_bCornerradius, 1, 0)) + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + ' aggiorno la preview (False = blocco la lettura dei dati della componente) + CreateFiloTopPreView(m_SelList, False) + End Sub + + Public Sub CreateFiloTopPreView(SelList As List(Of Integer), Optional bReadInfo As Boolean = True) + m_SelList = SelList + If m_SelList.Count < 1 Then Return + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + ' verifico che lemento corrente appartenga all'elenco degli elementi selezionati + Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer) + Return value = nLayId + End Function) <> 0 + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) AndAlso bIsSelected Then + ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- + Dim nLayFiloTop As Integer = GDB_ID.NULL + Dim nInLoopRef As Integer = GDB_ID.NULL + nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + ' verifico il Layer "FiloTop" sia associato all'InLoop corrente + While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId) + nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + End While + + ' se non esiste il Layer "FiloTop" + If nLayFiloTop = GDB_ID.NULL Then + ' lo creo + nLayFiloTop = EgtCreateGroup(nPartId) + EgtSetName(nLayFiloTop, "FiloTop") + EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId) + EgtSetInfo(nLayId, "FiloTopRef", nLayFiloTop) + End If + + ' carico i dati del filo top selezionato + If bReadInfo Then + EgtGetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset) + ParameterTxBx.Text = LenToString(m_dFiloTopOffset, 3) + EgtGetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth) + Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3) + Dim nVal As Integer = If(m_bCornerradius, 1, 0) + EgtGetInfo(nLayFiloTop, INFO_ROUNDOFF, nVal) + Parameter3ChBx.IsChecked = If(nVal = 1, True, False) + m_bCornerradius = Parameter3ChBx.IsChecked + End If + + ' procedo alla creazione della curva + Dim nIdCompoCurve As Integer = GDB_ID.NULL + ' cancello un eventuale curva composita creata in precedenza + nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView") + If nIdCompoCurve <> GDB_ID.NULL Then + EgtErase(nIdCompoCurve) + End If + Dim nCompoCurve As New List(Of Integer) + ' costruisco il percorso chiuso dati i lati di contorno + Dim nLine As Integer = EgtGetFirstInGroup(nLayId) + While nLine <> GDB_ID.NULL + nCompoCurve.Add(nLine) + nLine = EgtGetNext(nLine) + End While + Dim PtNearStart As Point3d + Dim nInfoRoundOff As Integer = If(m_bCornerradius, 1, 0) + + nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False) + EgtSetName(nIdCompoCurve, "OffsetPreView") + + ' salvo i dati nel layer FiloTop + EgtSetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset) + EgtSetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth) + EgtSetInfo(nLayFiloTop, INFO_ROUNDOFF, nInfoRoundOff) + + Dim bOk As Boolean = False + ' leggo che tipo di offset applicare (Round, Extend) + If nInfoRoundOff <> 1 Then + bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.EXTEND) + Else + bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.FILLET) + End If + + ' se la generazione della curva non va a buon fine + If Not bOk Then + EgtErase(nLayFiloTop) + EgtRemoveInfo(nLayId, "FiloTopRef") + EgtOutLog("Error in generation OffsetPreView in TopEgde ") + End If + ' ---------------------- Fine GESTIONE PREVIEW percorso ------------------------------- + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + EgtDraw() + End Sub + + ' riceve la lista dei LayerFiloTop che devono essere eliminati + Public Sub EraseFiloTopPreview(EraseList As List(Of Integer)) + Dim m_EraseList As List(Of Integer) = EraseList + If m_EraseList.Count < 1 Then Return + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + Dim bIsSelected As Boolean = m_EraseList.Find(Function(value As Integer) + Return value = nLayId + End Function) <> 0 + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso bIsSelected Then + ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- + Dim nLayFiloTop As Integer = GDB_ID.NULL + Dim nInLoopRef As Integer = GDB_ID.NULL + nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + ' cerco il Layer associato all'InLoop corrente + While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId) + nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + End While + + ' se non esiste il Layer + If nLayFiloTop = GDB_ID.NULL Then + ' esco + Return + Else + ' lo elimino + EgtErase(nLayFiloTop) + EraseList.Remove(nLayId) + End If + ' ---------------------- Fine GESTIONE PREVIEW percorso ------------------------------- + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + EgtDraw() + End Sub + + End Class diff --git a/Machine/CurrentMachine.vb b/Machine/CurrentMachine.vb index f61cfd3..cfad857 100644 --- a/Machine/CurrentMachine.vb +++ b/Machine/CurrentMachine.vb @@ -1327,7 +1327,7 @@ Public Class CurrentMachine ' Leggo valori da file Data e li carico nelle proprietà Dim sFilePath As String = sMachDir & "\" & MACHININGS_DIR & "\" & WATERJETDB_FILE Dim Local_MaterialList = New ObservableCollection(Of EgtWPFLib5.WjMaterial) - Local_MaterialList = EgtWPFLib5.WaterjetDbWindowVM.LoadWjMaterials(sFilePath) + Local_MaterialList = WaterjetDbWindowVM_OmagCUT.LoadWjMaterials(sFilePath) ' definisco la lista delle qualità (solo se è vuota) If m_Qualities.Count < 1 Then m_Qualities.Add("Q1") @@ -1358,7 +1358,7 @@ Public Class CurrentMachine ' Leggo valori da file Data e li carico nelle proprietà Dim sFilePath As String = sMachDir & "\" & MACHININGS_DIR & "\" & WATERJETDB_FILE Dim Local_MaterialList = New ObservableCollection(Of EgtWPFLib5.WjMaterial) - Local_MaterialList = EgtWPFLib5.WaterjetDbWindowVM.LoadWjMaterials(sFilePath) + Local_MaterialList = WaterjetDbWindowVM_OmagCUT.LoadWjMaterials(sFilePath) Dim sItems() As String = sCurMat.Split("."c) If sItems.Count > 1 Then Dim sMat As String = sItems(0) diff --git a/Machine/MachinePageUC.xaml.vb b/Machine/MachinePageUC.xaml.vb index 3fb1078..d725942 100644 --- a/Machine/MachinePageUC.xaml.vb +++ b/Machine/MachinePageUC.xaml.vb @@ -145,12 +145,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.Alarms Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then AlarmsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -215,12 +215,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.ToolsDb Case MachinePages.WaterJet 'Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then ToolsDBBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -285,12 +285,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.MachiningDb Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then MachiningDBBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -358,12 +358,12 @@ Public Class MachinePageUC PolishingsBtn.IsChecked = True Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then PolishingsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -513,12 +513,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.MachineCN Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then TestingPageBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -593,12 +593,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.Statistics Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then StatisticsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina diff --git a/Machine/WaterJetPageUC.xaml.vb b/Machine/WaterJetPageUC.xaml.vb index be33a3d..ea728f2 100644 --- a/Machine/WaterJetPageUC.xaml.vb +++ b/Machine/WaterJetPageUC.xaml.vb @@ -8,18 +8,18 @@ Public Class WaterJetPageUC ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) - Private m_refWaterjetDbWindowVM As EgtWPFLib5.WaterjetDbWindowVM + Private m_refWaterjetDbWindowVM As WaterjetDbWindowVM_OmagCUT Private m_sOrigNewMaterial As String = String.Empty Private m_sOrigNewSubMaterial As String = String.Empty Private Sub WaterJetPage_Initialized(sender As Object, e As EventArgs) - m_refWaterjetDbWindowVM = New EgtWPFLib5.WaterjetDbWindowVM(m_MainWindow.m_CurrentMachine.sMachDir) + m_refWaterjetDbWindowVM = New WaterjetDbWindowVM_OmagCUT(m_MainWindow.m_CurrentMachine.sMachDir) Me.DataContext = m_refWaterjetDbWindowVM EgtWPFLib.Utility.MainWindow = m_MainWindow End Sub Public Sub WaterJetPage_Reinitialize() - m_refWaterjetDbWindowVM = New EgtWPFLib5.WaterjetDbWindowVM(m_MainWindow.m_CurrentMachine.sMachDir) + m_refWaterjetDbWindowVM = New WaterjetDbWindowVM_OmagCUT(m_MainWindow.m_CurrentMachine.sMachDir) Me.DataContext = m_refWaterjetDbWindowVM End Sub diff --git a/Machine/WaterjetDbWindowVM.vb b/Machine/WaterjetDbWindowVM.vb new file mode 100644 index 0000000..90ba80d --- /dev/null +++ b/Machine/WaterjetDbWindowVM.vb @@ -0,0 +1,61 @@ +Imports System.Collections.ObjectModel +Imports System.IO +Imports EgtUILib +Imports EgtWPFLib5 +Imports EgtWPFLib + +' nuova libreria EgtWPFLib5 ver 2.4g1 +Public Class WaterjetDbWindowVM_OmagCUT + Inherits EgtWPFLib5.WaterjetDbWindowVM + + Public Function CloseWaterjetDb_OmagCut(MainWindow As Window) As SaveWndBtnEnum + If bIsModified Then + Dim SaveWjDbWnd As New EgtMsgBox(MainWindow, "", EgtMsg(31759), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) + Select Case SaveWjDbWnd.m_nPressedBtn + Case 1 ' Yes + WriteWaterjetDb() + bIsModified = False + Return SaveWndBtnEnum.YES + Case 2 ' No + Return SaveWndBtnEnum.NO + Case Else ' Cancel + Return SaveWndBtnEnum.CANCEL + End Select + Else + Dim bExitFor As Boolean = False + For Each Material As EgtWPFLib5.WjMaterial In MaterialList + If Not IsNothing(Material.SubMaterialList) Then + For Each SubMaterial As EgtWPFLib5.WjSubMaterial In Material.SubMaterialList + If Not IsNothing(SubMaterial.ParamList) Then + For Each QParam As EgtWPFLib5.WjParam In SubMaterial.ParamList + bExitFor = QParam.IsModified() + If bExitFor Then Exit For + Next + End If + If bExitFor Then Exit For + Next + End If + If bExitFor Then Exit For + Next + If bExitFor Then + Dim SaveWjDbWnd As New EgtMsgBox(MainWindow, "", EgtMsg(31759), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) + Select Case SaveWjDbWnd.m_nPressedBtn + Case 1 ' Yes + WriteWaterjetDb() + bIsModified = False + Return SaveWndBtnEnum.YES + Case 2 ' No + Return SaveWndBtnEnum.NO + Case Else ' Cancel + Return SaveWndBtnEnum.CANCEL + End Select + End If + End If + Return SaveWndBtnEnum.YES + End Function + + Sub New(sMachDir As String) + MyBase.New(sMachDir) + End Sub + +End Class diff --git a/MainWindow.xaml.vb b/MainWindow.xaml.vb index d5b960c..9e76cd7 100644 --- a/MainWindow.xaml.vb +++ b/MainWindow.xaml.vb @@ -1092,10 +1092,10 @@ Class MainWindow Case MachinePageUC.MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet Dim m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) - Dim nPressedBtn As Integer = DirectCast(m_MachinePageUC.m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_MachinePageUC.m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then Return False - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_MachinePageUC.m_WaterJetPageUC.WaterJetPage_Reinitialize() End If End Select diff --git a/OmagCUT.vbproj b/OmagCUT.vbproj index 5589832..aa1d3ec 100644 --- a/OmagCUT.vbproj +++ b/OmagCUT.vbproj @@ -205,6 +205,7 @@ ImportExportToolWD.xaml + WaterJetPageUC.xaml diff --git a/RawPhoto/RawPartPageUC.xaml.vb b/RawPhoto/RawPartPageUC.xaml.vb index 37e88f4..6931b2d 100644 --- a/RawPhoto/RawPartPageUC.xaml.vb +++ b/RawPhoto/RawPartPageUC.xaml.vb @@ -45,9 +45,9 @@ Public Class RawPartPageUC ' Layer per crocette temporanee Private m_nTempLay As Integer = GDB_ID.NULL ' Definizione lista modalità di definizione grezzo per ComboBox - Private m_RawModeList(2) As String - Private m_RawModeDamagedList(1) As String - Private m_RawModeListEx(3) As String + Private m_RawModeList(3) As String + Private m_RawModeDamagedList(2) As String + Private m_RawModeListEx(4) As String ' Variabile che indica la zona danneggiata selezionata Private m_nSelDmg As Integer ' Array per modalità per punti @@ -63,6 +63,8 @@ Public Class RawPartPageUC Private m_CurveXDamagedAreaList As New List(Of Integer) ' Flag che indica se è in corso la definizione tramite laser o se il grezzo è già chiuso Private m_bIsRawDefiningByLaser As Boolean = False + ' Flag che indica se è in corso la definizione tramite lama o se il grezzo è già chiuso + Private m_bIsRawDefiningBySaw As Boolean = False ' Flag di tastatura in corso Private m_bProbingOn As Boolean = False ' Flag inserimento punti laser da disegno @@ -99,6 +101,8 @@ Public Class RawPartPageUC FROM_PHOTO = 3 DAMAGED = 4 DAMAGED_BY_LASER = 5 + DAMAGED_BY_SAW = 6 + FROM_SAW = 7 End Enum Private Sub RawPartPage_Initialized(sender As Object, e As EventArgs) @@ -123,14 +127,32 @@ Public Class RawPartPageUC m_RawModeList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeList(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeList(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + Else + ' se non insrisco "Lama" allora ridimensiono il vettore + ReDim Preserve m_RawModeList(2) + End If m_RawModeListEx(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeListEx(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeListEx(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser - m_RawModeListEx(3) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeListEx(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + m_RawModeListEx(4) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + Else + ' se non insrisco "Lama" allora ridimensiono il vettore + m_RawModeListEx(3) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + ReDim Preserve m_RawModeListEx(3) + End If RawModeCmBx.ItemsSource = m_RawModeList ' lista per selezione RawModeDamaged m_RawModeDamagedList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeDamagedList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeDamagedList(2) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + Else + ReDim Preserve m_RawModeDamagedList(1) + End If RawModeDamagedCmBx.ItemsSource = m_RawModeDamagedList ' Nascondo bottone tastatura lastra se disattivato da file .ini @@ -309,9 +331,10 @@ Public Class RawPartPageUC ' Verifico cosa selezionato Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID) Dim nKerfId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_KERF) + '----------------------------------------- INIZIO ------------------ se decido di inserire i punti laser manualmente -------------------------------------------------- - ' se decido di inserire i punti laser manualmente - If m_bFromDraw And m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Then + ' se decido di inserire i punti laser manualmente (in assenza di collegamento con CN) + If m_bFromDraw AndAlso (m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.FROM_SAW Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW) Then ' Rimuovo eventuali crocette create acquisendo i punti nel disegno EgtEmptyGroup(m_nTempLay) ' Acquisisco punto da disegno @@ -336,6 +359,7 @@ Public Class RawPartPageUC Return End If '----------------------------------------- FINE ------------------ se decido di inserire i punti laser manualmente -------------------------------------------------- + ' recupero elemento selezionato nella scena EgtSetObjFilterForSelWin(True, True, True, True, True) Dim nSel As Integer EgtSelect(e.Location, 2 * Scene.DIM_SEL, 2 * Scene.DIM_SEL, nSel) @@ -349,8 +373,7 @@ Public Class RawPartPageUC m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) m_nDragEnt = -1 m_dDragPar = -1 - ElseIf sName = NAME_KERF And - (m_ActiveRawMode = RAWMODE.RECTANGLE Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then + ElseIf sName = NAME_KERF And (m_ActiveRawMode = RAWMODE.RECTANGLE Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) Dim dDist, dU As Double If Not EgtPointCurveDist(m_ptPrev.Loc(nKerfId), nKerfId, nKerfId, dDist, dU) Then @@ -360,7 +383,7 @@ Public Class RawPartPageUC m_dDragPar = dU ' Privilegio il kerf, pertanto esco Exit While - ElseIf sName = NAME_DAMAGED And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER) Then + ElseIf sName = NAME_DAMAGED And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) Dim dDist, dU As Double If Not EgtPointCurveDist(m_ptPrev.Loc(nSelId), nSelId, nSelId, dDist, dU) Then @@ -377,6 +400,7 @@ Public Class RawPartPageUC End If nSelId = EgtGetNextObjInSelWin() End While + ' se drag e modalità punti If m_bDrag And m_ActiveRawMode = RAWMODE.BY_POINTS Then ' se aggiungi punto @@ -413,7 +437,7 @@ Public Class RawPartPageUC End If End If ' se drag e modalità zona danneggiata - ElseIf m_bDrag And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER) Then + ElseIf m_bDrag And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW) Then ' se aggiungi zona rovinata If m_nPtDmgMode = DMGMODE.ADD Then AddNewDamagedArea() @@ -665,6 +689,8 @@ Public Class RawPartPageUC Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click ' Non è possibile uscire con tastatura in corso If m_bProbingOn Then Return + ' reimposto il comando OutLine + OutlineBtn_Click(Nothing, Nothing) ' Se confermata uscita If ExitRawPart(True) Then m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(Me) @@ -696,6 +722,16 @@ Public Class RawPartPageUC CloseDamagedAreaByLaser() End If End If + If m_ActiveRawMode = RAWMODE.FROM_SAW Then + If m_bIsRawDefiningBySaw Then + CloseRawBySaw() + End If + End If + If m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW Then + If m_bIsRawDefiningBySaw Then + CloseDamagedAreaBySaw() + End If + End If ' Apro pagina di selezione della lavorazione prima di chiudere il grezzo m_ChooseMachiningPage = New ChooseMachining(m_MainWindow) '--------------------------- SELEZIONE LAVORAZIONI --------------------------------- @@ -779,6 +815,8 @@ Public Class RawPartPageUC Case 0 ' Rettangolo ' Se ero in modalità da laser VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() ' Verificos e sto realmente cambiando modalità Dim bChanging As Boolean = (m_ActiveRawMode <> RAWMODE.RECTANGLE) ' Imposto nuova modalità @@ -790,6 +828,8 @@ Public Class RawPartPageUC Case 1 ' Punti ' Se ero in modalità da laser VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.BY_POINTS ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva @@ -797,6 +837,8 @@ Public Class RawPartPageUC UpdateCircles() EgtDraw() Case 2 ' Da laser + ' Se ero in modalità da Lama + VerifySawDefinig() ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.FROM_LASER RemoveCircles() @@ -811,10 +853,44 @@ Public Class RawPartPageUC ' Disattivo il bottone CloseBtn.IsEnabled = False OkBtn.IsEnabled = False - Case 3 ' Da fotografia + Case 3 ' Da Lama + If Not m_MainWindow.m_CurrentMachine.bSaw Then ' Da fotografia + ' Se ero in modalità da laser + VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() + ' Imposto nuova modalità + m_ActiveRawMode = RAWMODE.FROM_PHOTO + ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva + RawModeView() + RemoveCircles() + ' Creo il grezzo dal contorno riconosciuto nella fotografia + CreateRawFromPhotoContour() + EgtDraw() + Exit Select + End If ' Se ero in modalità da laser VerifyLaserDefining() ' Imposto nuova modalità + m_ActiveRawMode = RAWMODE.FROM_SAW + RemoveCircles() + LoadFromMachine() + ' Azzero lista e punto di partenza + m_CurveXKerfList.Clear() + m_bptLast = False + ' Segno flag che indica definizione grezzo con laser in corso + m_bIsRawDefiningBySaw = True + ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva + RawModeView() + ' Disattivo il bottone + CloseBtn.IsEnabled = False + OkBtn.IsEnabled = False + Case 4 ' Da fotografia + ' Se ero in modalità da laser + VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() + ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.FROM_PHOTO ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva RawModeView() @@ -822,6 +898,7 @@ Public Class RawPartPageUC ' Creo il grezzo dal contorno riconosciuto nella fotografia CreateRawFromPhotoContour() EgtDraw() + End Select End Sub @@ -831,6 +908,8 @@ Public Class RawPartPageUC m_ActiveRawMode = RAWMODE.DAMAGED Case 1 ' Da laser m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER + Case 2 ' Da Lama + m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW End Select RawModeView() EgtDraw() @@ -927,11 +1006,43 @@ Public Class RawPartPageUC ' Disattivo bottoni zone rovinate e foto DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden + Case RAWMODE.DAMAGED_BY_SAW + RawModeCmBx.IsEnabled = True + RawModeDamagedCmBx.Visibility = Visibility.Visible + LengthTxBx.IsEnabled = False + WidthTxBx.IsEnabled = False + OffsetXTxBx.IsEnabled = False + OffsetYTxBx.IsEnabled = False + ' Visualizzo bottoni per laser + PointsGpBx.Visibility = Windows.Visibility.Visible + PointsGpBx.SetValue(Grid.RowSpanProperty, 2) + AddBtn.SetValue(Grid.RowSpanProperty, 1) + RemoveBtn.SetValue(Grid.RowSpanProperty, 1) + CloseBtn.Visibility = Windows.Visibility.Visible + ' Disattivo bottoni zone rovinate e foto + DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden + ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden + Case RAWMODE.FROM_SAW + RawModeCmBx.IsEnabled = True + RawModeDamagedCmBx.Visibility = Visibility.Collapsed + LengthTxBx.IsEnabled = False + WidthTxBx.IsEnabled = False + OffsetXTxBx.IsEnabled = False + OffsetYTxBx.IsEnabled = False + ' Visualizzo bottoni per lama + PointsGpBx.Visibility = Windows.Visibility.Visible + PointsGpBx.SetValue(Grid.RowSpanProperty, 2) + AddBtn.SetValue(Grid.RowSpanProperty, 1) + RemoveBtn.SetValue(Grid.RowSpanProperty, 1) + CloseBtn.Visibility = Windows.Visibility.Visible + ' Disattivo bottoni zone rovinate e foto + DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden + ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden End Select End Sub Private Sub OutlineBtn_Click(sender As Object, e As RoutedEventArgs) Handles OutlineBtn.Click - If m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Then + If m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW Then ' m_ActiveRawMode = RAWMODE.BY_POINTS m_ActiveRawMode = m_PrecActiveRawMode RawModeCmBx.SelectedIndex = m_ActiveRawMode @@ -946,6 +1057,9 @@ Public Class RawPartPageUC If m_PrecActiveRawMode = RAWMODE.FROM_LASER Then m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER RawModeDamagedCmBx.SelectedIndex = 1 + ElseIf m_PrecActiveRawMode = RAWMODE.FROM_SAW Then + m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW + RawModeDamagedCmBx.SelectedIndex = 2 Else m_ActiveRawMode = RAWMODE.DAMAGED RawModeDamagedCmBx.SelectedIndex = 0 @@ -1010,6 +1124,54 @@ Public Class RawPartPageUC End If AddBtn.IsChecked = False EgtDraw() + Case RAWMODE.FROM_SAW + Dim ptAcquired As Point3d + ' Se inserimento manuale dei punti laser + If m_bFromDraw Then + If Not IsNothing(m_ptPrev) Then + ptAcquired = m_ptPrev + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Else + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + ' altrimenti da macchina + Else + If Not AcquireSawPoint(ptAcquired) Then + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + End If + ' Limito il punto a stare nella tavola con franco pari al kerf + If ptAcquired.x < m_RawKerf Then ptAcquired.x = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.y < m_RawKerf Then ptAcquired.y = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.x > m_dTableLength - m_RawKerf Then ptAcquired.x = m_dTableLength - m_RawKerf - SAFE_RAW_DIST + If ptAcquired.y > m_dTableWidth - m_RawKerf Then ptAcquired.y = m_dTableWidth - m_RawKerf - SAFE_RAW_DIST + ' Aggiusto Z punto movimentato (è in locale al tavolo) + ptAcquired.z = m_CurrentMachine.dAdditionalTable + m_RawHeight + 'Porto il punto nel riferimento del grezzo + Dim frRaw As New Frame3d + EgtGetGroupGlobFrame(m_CurrProjPage.m_nRawId, frRaw) + ptAcquired.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + m_ptPrev.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + If m_bptLast Then + If Point3d.SameApprox(ptAcquired, m_ptLast) Then + AddBtn.IsChecked = False + Exit Sub + End If + Dim NewLine As Integer = EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptAcquired) + EgtSetColor(NewLine, m_KerfCol) + m_CurveXKerfList.Add(NewLine) + Else + m_bptLast = True + End If + m_ptLast = ptAcquired + If m_CurveXKerfList.Count > 1 Then + OkBtn.IsEnabled = True + CloseBtn.IsEnabled = True + End If + AddBtn.IsChecked = False + EgtDraw() Case RAWMODE.DAMAGED ' Verifico ci sia almeno una zona rovinata If EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_DAMAGED) = GDB_ID.NULL Then @@ -1068,6 +1230,54 @@ Public Class RawPartPageUC End If AddBtn.IsChecked = False EgtDraw() + Case RAWMODE.DAMAGED_BY_SAW + Dim ptAcquired As Point3d + ' Se inserimento manuale dei punti laser + If m_bFromDraw Then + If Not IsNothing(m_ptPrev) Then + ptAcquired = m_ptPrev + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Else + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + ' altrimenti da macchina + Else + If Not AcquireSawPoint(ptAcquired) Then + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + End If + ' Limito il punto a stare nella tavola con franco pari al kerf + If ptAcquired.x < m_RawKerf Then ptAcquired.x = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.y < m_RawKerf Then ptAcquired.y = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.x > m_dTableLength - m_RawKerf Then ptAcquired.x = m_dTableLength - m_RawKerf - SAFE_RAW_DIST + If ptAcquired.y > m_dTableWidth - m_RawKerf Then ptAcquired.y = m_dTableWidth - m_RawKerf - SAFE_RAW_DIST + ' Aggiusto Z punto movimentato (è in locale al tavolo) + ptAcquired.z = m_CurrentMachine.dAdditionalTable + m_RawHeight + 'Porto il punto nel riferimento del grezzo + Dim frRaw As New Frame3d + EgtGetGroupGlobFrame(m_CurrProjPage.m_nRawId, frRaw) + ptAcquired.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + m_ptPrev.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + If m_bptLast Then + If Point3d.SameApprox(ptAcquired, m_ptLast) Then + AddBtn.IsChecked = False + Exit Sub + End If + Dim NewLine As Integer = EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptAcquired) + EgtSetColor(NewLine, m_KerfCol) + m_CurveXDamagedAreaList.Add(NewLine) + Else + m_bptLast = True + End If + m_ptLast = ptAcquired + If m_CurveXDamagedAreaList.Count > 1 Then + OkBtn.IsEnabled = True + CloseBtn.IsEnabled = True + End If + AddBtn.IsChecked = False + EgtDraw() End Select End Sub @@ -1099,6 +1309,28 @@ Public Class RawPartPageUC Return True End Function + Private Function AcquireSawPoint(ByRef ptAcquired As Point3d) As Boolean + Dim ptTipP1 As Point3d + ' Recupero la posizione macchina + Dim dL1, dL2, dL3, dR1, dR2 As Double + If Not m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2) Then + Return False + End If + ' Recupero dati utensile e testa corrente + Dim sTool As String = "" + Dim sHead As String = "" + Dim nExit As Integer = 0 + EgtGetCalcTool(sTool, sHead, nExit) + ' Trasformo in posizione punta utensile in basso + If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, ptTipP1) Then + Return False + End If + ' Porto il tip nell'origine tavola + ptAcquired = ptTipP1 + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Return True + End Function + Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click Select Case m_ActiveRawMode Case RAWMODE.RECTANGLE @@ -1126,6 +1358,26 @@ Public Class RawPartPageUC End If RemoveBtn.IsChecked = False EgtDraw() + Case RAWMODE.FROM_SAW + If m_CurveXKerfList.Count > 0 Then + If m_CurveXKerfList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXKerfList(m_CurveXKerfList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXKerfList(m_CurveXKerfList.Count - 1)) + m_CurveXKerfList.RemoveAt(m_CurveXKerfList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXKerfList(m_CurveXKerfList.Count - 1)) + m_CurveXKerfList.RemoveAt(m_CurveXKerfList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXKerfList(m_CurveXKerfList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() Case RAWMODE.DAMAGED ' Verifico ci sia almeno una zona rovinata If EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_DAMAGED) = GDB_ID.NULL Then @@ -1136,6 +1388,46 @@ Public Class RawPartPageUC DeleteBtn.IsChecked = False m_nPtMode = If(RemoveBtn.IsChecked(), PTMODE.REMOVE, PTMODE.MOVE) m_nPtDmgMode = DMGMODE.NONE + Case RAWMODE.DAMAGED_BY_LASER + If m_CurveXDamagedAreaList.Count > 0 Then + If m_CurveXDamagedAreaList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() + Case RAWMODE.DAMAGED_BY_SAW + If m_CurveXDamagedAreaList.Count > 0 Then + If m_CurveXDamagedAreaList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() End Select End Sub @@ -1976,6 +2268,26 @@ Public Class RawPartPageUC End If End Sub + Private Sub VerifySawDefinig() + If m_bIsRawDefiningBySaw Then + If m_CurveXKerfList.Count > 1 Then + CloseRawBySaw() + Else + ' Elimino tutti i segmenti disegnati + For Each nEntityId As Integer In m_CurveXKerfList + If EgtGetType(nEntityId) = GDB_TY.CRV_LINE Then + EgtErase(nEntityId) + End If + Next + ' Azzero lista e punto di partenza + m_CurveXKerfList.Clear() + ' Creo rettangolo + UpdateRawPart() + End If + m_bIsRawDefiningBySaw = False + End If + End Sub + Private Sub LoadFromMachine() ' Elimino grezzo già presente EgtErase(EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID)) @@ -1993,6 +2305,10 @@ Public Class RawPartPageUC Select Case m_ActiveRawMode Case RAWMODE.DAMAGED_BY_LASER CloseDamagedAreaByLaser() + Case RAWMODE.DAMAGED_BY_SAW + CloseDamagedAreaBySaw() + Case RAWMODE.FROM_SAW + CloseRawBySaw() Case Else CloseRawByLaser() End Select @@ -2036,6 +2352,42 @@ Public Class RawPartPageUC CloseBtn.IsEnabled = False End Sub + Private Sub CloseRawBySaw() + ' Verifico ci siano punti + If m_CurveXKerfList.Count() = 0 Then Return + ' Recupero punto iniziale prima linea del grezzo + Dim ptStart As Point3d + EgtStartPoint(m_CurveXKerfList(0), ptStart) + m_CurveXKerfList.Add(EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptStart)) + ' Trasformo lista di curve in un array + Dim CurveXKerfArray As Integer() = m_CurveXKerfList.ToArray + ' Creo contorno kerf + Dim nKerfId As Integer = EgtCreateCurveCompoByChain(m_CurrProjPage.m_nRawId, m_CurveXKerfList.Count, CurveXKerfArray, ptStart, True) + EgtSetName(nKerfId, NAME_KERF) + EgtSetColor(nKerfId, m_KerfCol) + ' Pulisco lista entità del grezzo + m_CurveXKerfList.Clear() + ' Aggiorno il grezzo comprese dimensioni e posizione + UpdateRawPartKerf() + ' Salvo il valore del kerf (sempre in mm) + Dim dKerf As Double = 0 + StringToLen(KerfTxBx.Text, dKerf) + If dKerf < 0 Then + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_INVERT_KERF, -1) + Else + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_INVERT_KERF, 1) + End If + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_KERF, m_RawKerf) + ' Segno flag che indica fine della definizione + m_bIsRawDefiningBySaw = False + ' Elimino primo punto per prossimo grezzo + m_bptLast = False + ' Aggiorno visualizzazione + EgtDraw() + ' Disattivo il bottone chiudi grezzo + CloseBtn.IsEnabled = False + End Sub + #Region "Damaged Area" Private Sub AddNewDamagedArea() @@ -2092,6 +2444,32 @@ Public Class RawPartPageUC CloseBtn.IsEnabled = False End Sub + Private Sub CloseDamagedAreaBySaw() + ' Verifico ci siano punti + If m_CurveXDamagedAreaList.Count() = 0 Then Return + ' Recupero punto iniziale prima linea del grezzo + Dim ptStart As Point3d + EgtStartPoint(m_CurveXDamagedAreaList(0), ptStart) + ' creao la linea che va dal primo punto all'ultimo + m_CurveXDamagedAreaList.Add(EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptStart)) + ' Trasformo lista di curve in un array + Dim CurveXDamagedAreaArray As Integer() = m_CurveXDamagedAreaList.ToArray + ' Creo contorno kerf + Dim nDmgId As Integer = EgtCreateCurveCompoByChain(m_CurrProjPage.m_nRawId, m_CurveXDamagedAreaList.Count, CurveXDamagedAreaArray, ptStart, True) + EgtSetName(nDmgId, NAME_DAMAGED) + EgtSetColor(nDmgId, m_KerfCol) + ' Pulisco lista entità del grezzo + m_CurveXDamagedAreaList.Clear() + ' Segno flag che indica fine della definizione + m_bIsRawDefiningBySaw = False + ' Elimino primo punto per prossimo grezzo + m_bptLast = False + ' Aggiorno visualizzazione + EgtDraw() + ' Disattivo il bottone chiudi grezzo + CloseBtn.IsEnabled = False + End Sub + Private Sub RemoveDamagedArea() ' Elimino area rovinata selezionata EgtErase(m_nSelDmg)