Imports EgtUILib Imports EgtWPFLib5 Public Class SliderManagerVM Inherits VMBase #Region "FIELDS & PROPERTIES" Public Enum ViewSliderType As Integer NULL = 0 ONLY_SELECTED = 1 UNTIL_SELECTED = 2 FROM_SELECTED = 3 End Enum Private m_nLayerIndex As Integer = 0 Public Property nLayerIndex As Integer Get Return m_nLayerIndex End Get Set(value As Integer) If IsNothing(Map.refTopPanelVM.SelPart) Then Return Select Case m_nSelViewSlider Case ViewSliderType.ONLY_SELECTED ' se diverso da nullo nascondo precedente If Not IsNothing(Map.refTopPanelVM.SelPart) Then ' riporto vecchio strato a visualizzazione di tutti i solidi If m_nLayerIndex > 0 Then dLayerAdvancement = 100 If m_nLayerIndex = 0 Then For Each Layer In Map.refTopPanelVM.SelPart.LayerList EgtSetStatus(Layer.nLayerId, GDB_ST.OFF) Next ElseIf m_nLayerIndex > 0 Then EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).nLayerId, GDB_ST.OFF) End If End If m_nLayerIndex = value ' se diverso da nullo visualizzo corrente If Not IsNothing(Map.refTopPanelVM.SelPart) AndAlso m_nLayerIndex > 0 Then EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).nLayerId, GDB_ST.ON_) ' porto barra nuovo strato a 100 If m_nLayerIndex > 0 Then SetLayerAdvancement(100) Case ViewSliderType.UNTIL_SELECTED Dim LayerIndex As Integer = If(m_nLayerIndex > 0, m_nLayerIndex, 1) If value > m_nLayerIndex Then For Index = LayerIndex + 1 To value EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(Index - 1).nLayerId, GDB_ST.ON_) Next ElseIf value < m_nLayerIndex Then For Index = value + 1 To LayerIndex EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(Index - 1).nLayerId, GDB_ST.OFF) Next End If m_nLayerIndex = value Case ViewSliderType.FROM_SELECTED Dim LayerIndex As Integer = If(m_nLayerIndex > 0, m_nLayerIndex, 1) If value > m_nLayerIndex Then For Index = LayerIndex To value EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(Index - 1).nLayerId, GDB_ST.OFF) Next ElseIf value < m_nLayerIndex Then For Index = value To LayerIndex EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(Index - 1).nLayerId, GDB_ST.ON_) Next End If m_nLayerIndex = value End Select NotifyPropertyChanged(NameOf(ghShowValue)) EgtDraw() End Set End Property Private Sub SetLayerIndex(value As Integer) Select Case m_nSelViewSlider Case ViewSliderType.ONLY_SELECTED If Not IsNothing(Map.refTopPanelVM.SelPart) Then ' riporto vecchio strato a visualizzazione di tutti i solidi If m_nLayerIndex > 0 Then dLayerAdvancement = 100 For nLayerInd = 0 To Map.refTopPanelVM.SelPart.LayerList.Count - 1 If nLayerInd = value - 1 Then EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.ON_) Else EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.OFF) End If Next End If m_nLayerIndex = value NotifyPropertyChanged(NameOf(ghShowValue)) EgtDraw() Case ViewSliderType.UNTIL_SELECTED If Not IsNothing(Map.refTopPanelVM.SelPart) Then ' riporto vecchio strato a visualizzazione di tutti i solidi If m_nLayerIndex > 0 Then dLayerAdvancement = 100 For nLayerInd = 0 To Map.refTopPanelVM.SelPart.LayerList.Count - 1 If nLayerInd <= value - 1 Then EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.ON_) Else EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.OFF) End If Next End If m_nLayerIndex = value NotifyPropertyChanged(NameOf(ghShowValue)) EgtDraw() Case ViewSliderType.FROM_SELECTED If Not IsNothing(Map.refTopPanelVM.SelPart) Then ' riporto vecchio strato a visualizzazione di tutti i solidi If m_nLayerIndex > 0 Then dLayerAdvancement = 100 For nLayerInd = 0 To Map.refTopPanelVM.SelPart.LayerList.Count - 1 If nLayerInd >= value - 1 Then EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.ON_) Else EgtSetStatus(Map.refTopPanelVM.SelPart.LayerList(nLayerInd).nLayerId, GDB_ST.OFF) End If Next End If m_nLayerIndex = value NotifyPropertyChanged(NameOf(ghShowValue)) EgtDraw() End Select NotifyPropertyChanged(NameOf(nLayerIndex)) End Sub Public ReadOnly Property ghShowValue As String Get Dim dH As Double = 0 If Not IsNothing(Map.refTopPanelVM.CurrMachining) Then If Map.refTopPanelVM.CurrMachining.dCurrSlicingType = Machining.MPAR_SLICINGTYPE.DEG45 Then Return m_nLayerIndex Else Return m_nLayerIndex & " (" & DoubleToString(m_nLayerIndex * Map.refTopPanelVM.CurrMachining.dCurrStrandH, 0) & "mm)" End If Else Return m_nLayerIndex End If End Get End Property Public ReadOnly Property ghShowMaximum As String Get Dim dH As Double = 0 If Not IsNothing(Map.refTopPanelVM.CurrMachining) Then If Map.refTopPanelVM.CurrMachining.dCurrSlicingType = Machining.MPAR_SLICINGTYPE.DEG45 Then Return m_nLayerIndex_Maximum Else Return m_nLayerIndex_Maximum & " (" & DoubleToString(m_nLayerIndex_Maximum * Map.refTopPanelVM.CurrMachining.dCurrStrandH, 0) & "mm)" End If Else Return m_nLayerIndex_Maximum End If End Get End Property Private m_dLayerAdvancement As Double Public Property dLayerAdvancement As Double Get Return m_dLayerAdvancement End Get Set(value As Double) Select Case m_nSelViewSlider Case ViewSliderType.ONLY_SELECTED Dim nTotSolid As Integer = 0 For Each nLayerId In Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).SolidLayerIdList nTotSolid += EgtGetGroupObjs(nLayerId) Next Dim nTotToolPath As Integer = 0 For Each nLayerId In Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).ToolPathLayerIdList nTotToolPath += EgtGetGroupObjs(nLayerId) Next Dim nOldSolidAdvancement As Integer = Math.Ceiling(nTotSolid * m_dLayerAdvancement / 100) Dim nNewSolidAdvancement As Integer = Math.Ceiling(nTotSolid * value / 100) If nNewSolidAdvancement <> nOldSolidAdvancement Then Dim nIndex As Integer = 0 For nSolidLayerIndex = 0 To Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).SolidLayerIdList.Count - 1 Dim nId As Integer = EgtGetFirstInGroup(Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).SolidLayerIdList(nSolidLayerIndex)) While nId <> GDB_ID.NULL nIndex += 1 If nIndex <= nNewSolidAdvancement Then EgtSetStatus(nId, GDB_ST.ON_) Else EgtSetStatus(nId, GDB_ST.OFF) End If nId = EgtGetNext(nId) End While Next End If Dim nOldToolPathAdvancement As Integer = Math.Ceiling(nTotToolPath * m_dLayerAdvancement / 100) Dim nNewToolPathAdvancement As Integer = Math.Ceiling(nTotToolPath * value / 100) If nNewToolPathAdvancement <> nOldToolPathAdvancement Then Dim nIndex As Integer = 0 For nToolPathLayerIndex = 0 To Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).ToolPathLayerIdList.Count - 1 Dim nId As Integer = EgtGetFirstInGroup(Map.refTopPanelVM.SelPart.LayerList(m_nLayerIndex - 1).ToolPathLayerIdList(nToolPathLayerIndex)) While nId <> GDB_ID.NULL nIndex += 1 If nIndex <= nNewToolPathAdvancement Then EgtSetStatus(nId, GDB_ST.ON_) Else EgtSetStatus(nId, GDB_ST.OFF) End If nId = EgtGetNext(nId) End While Next End If m_dLayerAdvancement = value End Select EgtDraw() End Set End Property Friend Sub SetLayerAdvancement(value As Double) m_dLayerAdvancement = value NotifyPropertyChanged(NameOf(dLayerAdvancement)) End Sub Private m_LayerIndex_Visibility As Visibility = Visibility.Collapsed Public Property LayerIndex_Visibility As Visibility Get Return m_LayerIndex_Visibility End Get Set(value As Visibility) m_LayerIndex_Visibility = value End Set End Property Private m_LayerAdvancement_Visibility As Visibility = Visibility.Collapsed Public Property LayerAdvancement_Visibility As Visibility Get Return m_LayerAdvancement_Visibility End Get Set(value As Visibility) m_LayerAdvancement_Visibility = value End Set End Property Private m_LayerIndex_IsEnabled As Boolean = True Public ReadOnly Property LayerIndex_IsEnabled As Boolean Get Return m_LayerIndex_IsEnabled End Get End Property Friend Sub SetLayerIndexIsEnabled(value As Boolean) m_LayerIndex_IsEnabled = value NotifyPropertyChanged(NameOf(LayerIndex_IsEnabled)) End Sub Private m_LayerAdvancement_IsEnabled As Boolean = True Public ReadOnly Property LayerAdvancement_IsEnabled As Boolean Get Return m_LayerAdvancement_IsEnabled End Get End Property Friend Sub SetLayerAdvancementIsEnabled(value As Boolean) m_LayerAdvancement_IsEnabled = value NotifyPropertyChanged(NameOf(LayerAdvancement_IsEnabled)) End Sub Private m_nLayerIndex_Minimum As Double Public Property nLayerIndex_Minimum As Double Get Return m_nLayerIndex_Minimum End Get Set(value As Double) m_nLayerIndex_Minimum = value End Set End Property Private m_nLayerIndex_Maximum As Double Public Property nLayerIndex_Maximum As Double Get Return m_nLayerIndex_Maximum End Get Set(value As Double) m_nLayerIndex_Maximum = value End Set End Property Private m_ViewSliderList As New List(Of String)({"Only Selected", "Till Selected", "From Selected"}) Public ReadOnly Property ViewSliderList As List(Of String) Get Return m_ViewSliderList End Get End Property Private m_nSelViewSlider As ViewSliderType Public Property ghSelViewSlider As Integer Get Return m_nSelViewSlider - 1 End Get Set(value As Integer) m_nSelViewSlider = value + 1 WriteMainPrivateProfileString(S_PRINTING3D, K_VIEWSLIDER, m_nSelViewSlider) ' ciclo tutti i layer per nasconderli/mostrarli If IsNothing(Map.refTopPanelVM.SelPart) OrElse IsNothing(Map.refTopPanelVM.SelPart.LayerList) Then Return Select Case m_nSelViewSlider Case ViewSliderType.ONLY_SELECTED For Each Layer In Map.refTopPanelVM.SelPart.LayerList If Layer.nLayerIndex = m_nLayerIndex Then EgtSetStatus(Layer.nLayerId, GDB_ST.ON_) Else EgtSetStatus(Layer.nLayerId, GDB_ST.OFF) End If Next Case ViewSliderType.UNTIL_SELECTED For Each Layer In Map.refTopPanelVM.SelPart.LayerList If Layer.nLayerIndex <= m_nLayerIndex Then EgtSetStatus(Layer.nLayerId, GDB_ST.ON_) Else EgtSetStatus(Layer.nLayerId, GDB_ST.OFF) End If Next Case ViewSliderType.FROM_SELECTED For Each Layer In Map.refTopPanelVM.SelPart.LayerList If Layer.nLayerIndex >= m_nLayerIndex Then EgtSetStatus(Layer.nLayerId, GDB_ST.ON_) Else EgtSetStatus(Layer.nLayerId, GDB_ST.OFF) End If Next End Select ' mostro/nascondo slider orizzontale m_LayerAdvancement_Visibility = If(m_nSelViewSlider = ViewSliderType.ONLY_SELECTED, Visibility.Visible, Visibility.Collapsed) NotifyPropertyChanged(NameOf(LayerAdvancement_Visibility)) EgtDraw() End Set End Property Friend Sub SetSelViewSlider(value As ViewSliderType) m_nSelViewSlider = value NotifyPropertyChanged(NameOf(ghSelViewSlider)) End Sub #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in Map Map.SetRefSliderManagerVM(Me) ' leggo valore default ViewSlider Dim nViewSlider As Integer = GetMainPrivateProfileInt(S_PRINTING3D, K_VIEWSLIDER, 1) SetSelViewSlider(nViewSlider) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Sub SetSliderVisibility(bValue As Boolean) Dim Visibility As Visibility = If(bValue, Visibility.Visible, Visibility.Collapsed) m_LayerIndex_Visibility = Visibility NotifyPropertyChanged(NameOf(LayerIndex_Visibility)) End Sub Friend Sub RefreshSlider(nMin As Integer, nMax As Integer) m_nLayerIndex_Minimum = nMin m_nLayerIndex_Maximum = nMax NotifyPropertyChanged(NameOf(nLayerIndex_Minimum)) NotifyPropertyChanged(NameOf(nLayerIndex_Maximum)) NotifyPropertyChanged(NameOf(ghShowMaximum)) SetLayerIndex(m_nLayerIndex) End Sub Friend Sub SetLayerIndexToMax() SetLayerIndex(m_nLayerIndex_Maximum) NotifyPropertyChanged(NameOf(nLayerIndex)) End Sub Friend Sub SetLayerIndexToMin() SetLayerIndex(m_nLayerIndex_Minimum) NotifyPropertyChanged(NameOf(nLayerIndex)) End Sub Friend Sub SetLayerIndexToZero() SetLayerIndex(0) NotifyPropertyChanged(NameOf(nLayerIndex)) End Sub #End Region ' METHODS End Class