Files
icarus/Icarus/TopPanel/TopPanelVM.vb
T
Emmanuele Sassi 84863dc5d5 - gestione colori in importazione
- gestione visibilita' entita' in importazione
- eliminazione marcatura pezzo selezionato
- correzione su cancellazione pezzo
2023-02-10 11:01:46 +01:00

820 lines
30 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class TopPanelVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
#Region "Pages & Modes"
Private m_SelPage As Integer = -1
Public Property SelPage As Integer
Get
Return m_SelPage
End Get
Set(value As Integer)
' lancio selezione pagina con verifica file modificato
SetSelPage(value)
End Set
End Property
' funzione che permette di cambiare pagina
' bVerifyModification: se vero verifica modifiche su file e chiede di salvare
Friend Sub SetSelPage(Page As Pages, Optional bVerifyModification As Boolean = True)
Dim bOk As Boolean = True
' Esco dallo stato corrente
Select Case m_SelPage
Case Pages.IMPORT
bOk = ExitIMPORT()
Case Pages.MODIFY
bOk = ExitMODIFY()
Case Pages.SLICE
bOk = ExitSLICE()
Case Pages.SIMULATION
bOk = ExitSIMULATION()
Case Pages.MATERIALDB
bOk = ExitMATERIALDB()
Case Pages.MACHININGDB
bOk = ExitMACHININGDB()
Case Pages.CURRMACHINING
bOk = ExitCURRMACHINING()
Case Pages.MODIFYPART
bOk = ExitMODIFYPART()
End Select
If bOk Then
' Entro nel nuovo stato
m_SelPage = Page
Select Case m_SelPage
Case Pages.IMPORT
InitIMPORT()
Case Pages.MODIFY
InitMODIFY()
Case Pages.SLICE
InitSLICE()
Case Pages.SIMULATION
InitSIMULATION()
Case Pages.MATERIALDB
InitMATERIALDB()
Case Pages.MACHININGDB
InitMACHININGDB()
Case Pages.CURRMACHINING
InitCURRMACHINING()
Case Pages.MODIFYPART
InitMODIFYPART()
Case Else
InitNULL()
End Select
End If
End Sub
Private m_ModifyModeList As New List(Of ModifyModeButton)({New ModifyModeButton("Disposition", ModifyModes.DISPOSITION),
New ModifyModeButton("Origin Point", ModifyModes.REFERENCE),
New ModifyModeButton("Layer Start", ModifyModes.STARTMACH),
New ModifyModeButton("Ribs", ModifyModes.RIBS),
New ModifyModeButton("Reduce Shell Number", ModifyModes.SHELLNUMBER),
New ModifyModeButton("Filled Solid", ModifyModes.AUXSOLIDS)})
Public ReadOnly Property ModifyModeList As List(Of ModifyModeButton)
Get
Return m_ModifyModeList
End Get
End Property
Private m_SelModifyMode As ModifyModeButton
Public Property SelModifyMode As ModifyModeButton
Get
Return m_SelModifyMode
End Get
Set(value As ModifyModeButton)
' se in slice
If m_SelPage = Pages.SLICE Then
' imposto pagina di modifica
SetSelPage(Pages.MODIFY)
End If
' se non c'e' pezzo selezionato , modalita' nulla
If IsNothing(m_SelPart) Then
m_SelModifyMode = Nothing
Else
m_SelModifyMode = value
End If
If Not IsNothing(m_SelModifyMode) AndAlso Map.refTopPanelVM.m_PartList.Count > 0 AndAlso Not IsNothing(Map.refTopPanelVM.SelPart) Then
Dim SelLeftPanel As LeftPanelVM.Panels = LeftPanelVM.Panels.NULL
Select Case m_SelModifyMode.ModifyMode
Case ModifyModes.DISPOSITION
SelLeftPanel = LeftPanelVM.Panels.DISPOSITION
Case ModifyModes.REFERENCE
SelLeftPanel = LeftPanelVM.Panels.REFERENCE
Case ModifyModes.STARTMACH
SelLeftPanel = LeftPanelVM.Panels.STARTMACH
Case ModifyModes.RIBS
SelLeftPanel = LeftPanelVM.Panels.RIBS
Case ModifyModes.SHELLNUMBER
SelLeftPanel = LeftPanelVM.Panels.SHELLNUMBER
Case ModifyModes.AUXSOLIDS
SelLeftPanel = LeftPanelVM.Panels.AUXSOLIDS
Case Else
SelLeftPanel = LeftPanelVM.Panels.NULL
End Select
Map.refLeftPanelVM.SetSelPanel(SelLeftPanel)
Else
Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL)
NotifyPropertyChanged(NameOf(SelModifyMode))
End If
' chiudo il popup
SetModifyIsChecked(False)
End Set
End Property
Friend Sub SetSelModifyMode(ModifyMode As ModifyModes)
SelModifyMode = m_ModifyModeList.FirstOrDefault(Function(x) x.ModifyMode = ModifyMode)
NotifyPropertyChanged(NameOf(SelModifyMode))
End Sub
Private m_bModify_IsChecked As Boolean
Public Property bModify_IsChecked As Boolean
Get
Return m_bModify_IsChecked
End Get
Set(value As Boolean)
If Map.refSceneHostVM.MainController.GetStep = 0 Then
m_bModify_IsChecked = value
Else
NotifyPropertyChanged(NameOf(bModify_IsChecked))
End If
End Set
End Property
Friend Sub SetModifyIsChecked(value As Boolean)
m_bModify_IsChecked = value
NotifyPropertyChanged(NameOf(bModify_IsChecked))
End Sub
#End Region ' Pages
#Region "Parts Manager"
Private m_PartList As New ObservableCollection(Of Print3dPartVM)
Public ReadOnly Property PartList As ObservableCollection(Of Print3dPartVM)
Get
Return m_PartList
End Get
End Property
Private m_SelPart As Print3dPartVM
Public Property SelPart As Print3dPartVM
Get
Return m_SelPart
End Get
Set(value As Print3dPartVM)
If Not IsNothing(m_SelPart) Then
'' deseleziono eventuale pezzo precedente
'EgtResetMark(m_SelPart.nPrintSolidId)
End If
m_SelPart = value
If Not IsNothing(value) Then
' Eseguo la selezione
EgtDeselectAll()
' EgtSetMark(m_SelPart.nPrintSolidId)
EgtDraw()
' imposto lavorazione e materiale del pezzo selezionato
Map.refCurrMachiningPanelVM.ReadMachParamFromSelPart()
Dim DbMachining As MachiningIndex = MachiningList.FirstOrDefault(Function(x) x.sGUID = Map.refCurrMachiningPanelVM.CurrMachining.sCurrGUID)
If IsNothing(DbMachining) Then DbMachining = MachiningIndex.Empty()
SetSelMachining(DbMachining)
' notifico posizione pezzo
Map.refDispositionPanelVM.RefreshPos()
End If
End Set
End Property
#End Region ' Parts Manager
#Region "Material"
Private m_MaterialList As New ObservableCollection(Of MaterialIndex)
Public ReadOnly Property MaterialList As ObservableCollection(Of MaterialIndex)
Get
Return m_MaterialList
End Get
End Property
Private m_SelMaterial As MaterialIndex
Public Property SelMaterial As MaterialIndex
Get
Return m_SelMaterial
End Get
Set(value As MaterialIndex)
' salvo materiale selezionato come ultimo utilizzato
If Not IsNothing(value) Then WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMATERIAL, value.sGUID)
' salvo lavorazione selezionata per riselezionarla
Dim PrevMachiningGuid As Guid = Guid.Empty
If Not IsNothing(m_SelMachining) Then PrevMachiningGuid = m_SelMachining.sGUID
' seleziono materiale
m_SelMaterial = value
' scrivo materiale sulla tavola
If Not IsNothing(m_SelMaterial) Then
Dim nTabPartId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, TABLE)
If nTabPartId <> GDB_ID.NULL Then
EgtSetInfo(nTabPartId, KEY_MATERIAL_GUID, Map.refTopPanelVM.SelMaterial.sGUID)
EgtSetInfo(nTabPartId, KEY_MATERIAL_NAME, Map.refTopPanelVM.SelMaterial.sName)
End If
End If
' ricarico lista lavorazioni valide per il materiale selezionato
InitMachiningsList()
Dim PrevMachining As MachiningIndex = m_MachiningList.FirstOrDefault(Function(x) x.sGUID = PrevMachiningGuid)
SetSelMachining(If(Not IsNothing(PrevMachining), PrevMachining, MachiningIndex.Empty()))
End Set
End Property
Friend Sub SetSelMaterial(value As MaterialIndex, Optional bUpdateMaterialList As Boolean = False)
m_SelMaterial = value
NotifyPropertyChanged(NameOf(SelMaterial))
If bUpdateMaterialList Then
' salvo lavorazione selezionata per riselezionarla
Dim PrevMachiningGuid As Guid = Guid.Empty
If Not IsNothing(m_SelMachining) Then PrevMachiningGuid = m_SelMachining.sGUID
' ricarico lista lavorazioni valide per il materiale selezionato
InitMachiningsList()
Dim PrevMachining As MachiningIndex = m_MachiningList.FirstOrDefault(Function(x) x.sGUID = PrevMachiningGuid)
SetSelMachining(If(Not IsNothing(PrevMachining), PrevMachining, MachiningIndex.Empty()))
End If
End Sub
#End Region ' Material
#Region "Machining"
Private m_MachiningList As New ObservableCollection(Of MachiningIndex)
Public ReadOnly Property MachiningList As ObservableCollection(Of MachiningIndex)
Get
Return m_MachiningList
End Get
End Property
Private m_SelMachining As MachiningIndex
Public Property SelMachining As MachiningIndex
Get
Return m_SelMachining
End Get
Set(value As MachiningIndex)
If Not IsNothing(value) Then
' verifico se selezionata none
If Not IsNothing(m_SelMachining) AndAlso m_SelMachining.sGUID = MachiningIndex.Empty().sGUID AndAlso value.sGUID <> MachiningIndex.Empty().sGUID AndAlso m_MachiningList.Contains(MachiningIndex.Empty()) Then
' e la rimuovo
m_MachiningList.Remove(MachiningIndex.Empty())
End If
WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, value.sGUID.ToString())
' imposto selezionata come corrente
If Not IsNothing(m_SelPart) AndAlso (IsNothing(m_SelMachining) OrElse value.sGUID <> m_SelMachining.sGUID) Then
Map.refCurrMachiningPanelVM.SetCurrMachining(New CurrMachining(m_SelPart.nPartId, value.nIndex))
End If
End If
m_SelMachining = value
End Set
End Property
Friend Sub SetSelMachining(SelMachining As MachiningIndex)
' verifico se precedentemente selezionata none
If Not IsNothing(m_SelMachining) AndAlso m_SelMachining.sGUID = MachiningIndex.Empty().sGUID AndAlso SelMachining.sGUID <> MachiningIndex.Empty().sGUID AndAlso m_MachiningList.Contains(MachiningIndex.Empty()) Then
' e la rimuovo
m_MachiningList.Remove(MachiningIndex.Empty())
End If
' se nuova lavorazione e' none o non è presente in lista
If (IsNothing(SelMachining) OrElse SelMachining.sGUID = Guid.Empty OrElse Not MachiningList.Any(Function(x) x.sGUID = SelMachining.sGUID)) AndAlso Not MachiningList.Any(Function(x) x.sGUID = MachiningIndex.Empty.sGUID) Then
' aggiungo lavorazione vuota e la seleziono
MachiningList.Insert(0, MachiningIndex.Empty())
m_SelMachining = MachiningList(0)
' ' se lavorazione da selezionare non trovata
'ElseIf (SelMachining.sGUID = Guid.Empty OrElse Not MachiningList.Any(Function(x) x.sGUID = SelMachining.sGUID)) AndAlso Not MachiningList.Any(Function(x) x.sGUID = MachiningIndex.Empty.sGUID) Then
' ' aggiungo lavorazione vuota e la seleziono
' MachiningList.Insert(0, MachiningIndex.Empty())
' m_SelMachining = SelMachining
Else
m_SelMachining = SelMachining
End If
NotifyPropertyChanged(NameOf(SelMachining))
End Sub
'Private m_CurrMachining As CurrMachining
Public ReadOnly Property CurrMachining As CurrMachining
Get
Return If(Not IsNothing(Map.refCurrMachiningPanelVM), Map.refCurrMachiningPanelVM.CurrMachining, Nothing)
End Get
End Property
Friend Sub UpdateCurrMachining()
NotifyPropertyChanged(NameOf(CurrMachining))
End Sub
'Private Sub SetCurrMachining(CurrMachining As CurrMachining)
' m_CurrMachining = CurrMachining
' Map.refCurrMachiningPanelVM.SetCurrMachining(CurrMachining)
'End Sub
#End Region ' Machining
Private m_TopPanel_IsEnabled As Boolean = True
Public ReadOnly Property TopPanel_IsEnabled As Boolean
Get
Return m_TopPanel_IsEnabled
End Get
End Property
Friend Sub SetTopPanelIsEnabled(value As Boolean)
m_TopPanel_IsEnabled = value
NotifyPropertyChanged(NameOf(TopPanel_IsEnabled))
End Sub
' Definizione comandi
Private m_cmdPartModify As ICommand
Private m_cmdMachining As ICommand
Private m_cmdMaterialDb As ICommand
Private m_cmdPrintParamDb As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTORS"
Sub New()
' Creo riferimento a questa classe in Map
Map.SetRefTopPanelVM(Me)
End Sub
#End Region ' CONSTRUCTORS
#Region "METHODS"
#Region "Materials"
Friend Sub InitMaterialList()
m_MaterialList.Clear()
Dim nIndex As Integer = 1
Dim sGUID As String = ""
Dim sName As String = ""
While ReadMaterialParamString(nIndex, MAT_GUID, "", sGUID) > 0
' leggo nome
ReadMaterialParamString(nIndex, MAT_NAME, "", sName)
' EgtGetStringUtf8FromIni(nIndex, MAT_NAME, "", sName)
MaterialList.Add(New MaterialIndex(nIndex, sGUID, sName))
nIndex += 1
End While
Dim sCurrMaterial As String = ""
GetMainPrivateProfileString(S_PRINTING3D, K_CURRMATERIAL, "", sCurrMaterial)
m_SelMaterial = m_MaterialList.FirstOrDefault(Function(x) x.sGUID = sCurrMaterial)
NotifyPropertyChanged(NameOf(SelMaterial))
End Sub
#End Region ' Materials
#Region "Machining"
Friend Sub InitMachiningsList()
If IsNothing(m_SelMaterial) Then Return
MachiningList.Clear()
' leggo ed aggiungo le altre
Dim nIndex As Integer = 1
Dim sGUID As String = ""
Dim sName As String = ""
Dim sMaterials As String = ""
While ReadMachiningParamString(nIndex, MAC_GUID, "", sGUID) > 0
Dim Guid As Guid = Guid.Empty
Guid.TryParse(sGUID, Guid)
ReadMachiningParamString(nIndex, MAC_NAME, "", sName)
' leggo materiali che usa
ReadMachiningParamSplit(nIndex, MAC_MATERIALS, "", sMaterials)
Dim MacMaterials() As String = sMaterials.Split(";"c)
If MacMaterials.Contains(SelMaterial.sGUID) Then
MachiningList.Add(New MachiningIndex(nIndex, Guid, sName))
End If
nIndex += 1
End While
Dim sCurrMachining As String = ""
GetMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, "", sCurrMachining)
Dim CurrMachining As Guid
Guid.TryParse(sCurrMachining, CurrMachining)
m_SelMachining = MachiningList.FirstOrDefault(Function(x) x.sGUID = CurrMachining)
NotifyPropertyChanged(NameOf(SelMachining))
End Sub
Friend Function GetSelMachining() As Machining
If IsNothing(m_SelMachining) Then Return Nothing
Return New Machining(m_SelMachining.nIndex)
End Function
'Friend Sub WriteMachParamOnSelPart()
' If IsNothing(m_SelPart) OrElse IsNothing(m_CurrMachining) Then Return
' m_CurrMachining.WriteMachParamOnPart(m_SelPart.nPartId)
'End Sub
#End Region ' Machining
#Region "Pages"
Private Sub InitIMPORT()
' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(False)
Map.refTopPanelVM.SetTopPanelIsEnabled(False)
Map.refSliceManagerVM.SetButtonsIsEnabled(False)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(False)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
' imposto pagina
Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.IMPORT)
''Map.refImportPanelVM.Init()
Map.refManagePartPanelVM.Init(ManagePartPanelVM.ManagePartType.IMPORT)
End Sub
Private Function ExitIMPORT()
' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(True)
Map.refTopPanelVM.SetTopPanelIsEnabled(True)
Map.refSliceManagerVM.SetButtonsIsEnabled(True)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(True)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
Return True
End Function
Private Sub InitMODIFY()
SetSelModifyMode(ModifyModes.DISPOSITION)
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL)
Map.refViewLayerManagerVM.UpdateIsVisibleFromIni()
End Sub
Private Function ExitMODIFY()
SetSelModifyMode(ModifyModes.NULL)
' Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL)
Return True
End Function
Private Sub InitSLICE()
Map.refSliceManagerVM.UpdateState(True)
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.TFSEDITOR)
Map.refSliderManagerVM.SetSliderVisibility(True)
Map.refSliderManagerVM.SetLayerIndexToMax()
Map.refViewLayerManagerVM.UpdateIsVisibleFromIni()
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
EgtDeselectAll()
End Sub
Private Function ExitSLICE()
Map.refSliceManagerVM.UpdateState(False)
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL)
Map.refSliderManagerVM.SetSliderVisibility(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
SelPart = SelPart
Return True
End Function
Private Sub InitSIMULATION()
End Sub
Private Function ExitSIMULATION()
Return True
End Function
Private Sub InitMATERIALDB()
' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(False)
Map.refTopPanelVM.SetTopPanelIsEnabled(False)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False)
Map.refSliceManagerVM.SetButtonsIsEnabled(False)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(False)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
' imposto pagina
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.MATERIALDB)
End Sub
Private Function ExitMATERIALDB()
' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(True)
Map.refTopPanelVM.SetTopPanelIsEnabled(True)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True)
Map.refSliceManagerVM.SetButtonsIsEnabled(True)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(True)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
Return True
End Function
Private Sub InitMACHININGDB()
' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(False)
Map.refTopPanelVM.SetTopPanelIsEnabled(False)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False)
Map.refSliceManagerVM.SetButtonsIsEnabled(False)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(False)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
' imposto pagina
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB)
End Sub
Private Function ExitMACHININGDB()
' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(True)
Map.refTopPanelVM.SetTopPanelIsEnabled(True)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True)
Map.refSliceManagerVM.SetButtonsIsEnabled(True)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(True)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
Return True
End Function
Private Sub InitCURRMACHINING()
' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(False)
Map.refTopPanelVM.SetTopPanelIsEnabled(False)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False)
Map.refSliceManagerVM.SetButtonsIsEnabled(False)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(False)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
' imposto pagina
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.CURRPRINTPARAM)
End Sub
Private Function ExitCURRMACHINING()
' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(True)
Map.refTopPanelVM.SetTopPanelIsEnabled(True)
Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True)
Map.refSliceManagerVM.SetButtonsIsEnabled(True)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(True)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
Return True
End Function
Private Sub InitMODIFYPART()
' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(False)
Map.refTopPanelVM.SetTopPanelIsEnabled(False)
Map.refSliceManagerVM.SetButtonsIsEnabled(False)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(False)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False)
'' tolgo mark da pezzo selezionato
'If Not IsNothing(SelPart) Then
' EgtResetMark(SelPart.nPrintSolidId)
'End If
' imposto pagina
Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.MODIFYPART)
End Sub
Private Function ExitMODIFYPART()
' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma
Map.refProjManagerVM.SetProjCmdIsEnabled(True)
Map.refTopPanelVM.SetTopPanelIsEnabled(True)
Map.refSliceManagerVM.SetButtonsIsEnabled(True)
Map.refSliderManagerVM.SetLayerIndexIsEnabled(True)
Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True)
Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True)
'' ripristino mark su pezzo selezionato
'If Not IsNothing(SelPart) Then
' EgtSetMark(SelPart.nPrintSolidId)
'End If
Return True
End Function
Private Sub InitNULL()
Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL)
End Sub
#End Region ' Pages
#Region "Parts Manager"
Friend Sub AddNewPart(sFile As String)
' rinomino pezzo e layer
Dim nPartId As Integer = EgtGetLastPart()
EgtSetName(nPartId, PART)
'Dim nLayerId As Integer = EgtGetFirstInGroup(nPartId)
'EgtSetName(nLayerId, ORIGINAL_SOLID)
'' Recupero o creo layer ausiliario
'Dim nAuxId As Integer = EgtGetFirstNameInGroup(nPartId, LAY_AUX)
'If Not nAuxId Then
' nAuxId = EgtCreateGroup(nPartId)
' EgtSetName(nAuxId, LAY_AUX)
'End If
' Richiedo posizione origine e offset pezzo
Dim b3Part As New BBox3d
EgtGetBBoxGlob(nPartId, GDB_BB.EXACT, b3Part)
Dim nRefX As Integer = 1
Dim nRefY As Integer = 1
Dim dPosX As Double = CurrentMachine.b3Tab.DimX / 2 - b3Part.DimX / 2
Dim dPosY As Double = CurrentMachine.b3Tab.DimY / 2 - b3Part.DimY / 2
' Dim Positions = EgtDialogBox( 'Part position on table:', { 'Reference', 'CB:Left,Center,Right'},
' { '', 'CB:Bottom,Middle,Top'},
' { 'X', EgtNumToString( EgtToUiUnits( dPosX), 1)},
' { 'Y', EgtNumToString( EgtToUiUnits( dPosY), 1)})
Dim ChooseReferenceWndVM As New ChooseReferenceWndVM
Dim ChooseReferenceWndV As New ChooseReferenceWndV(Application.Current.MainWindow, ChooseReferenceWndVM)
If Not ChooseReferenceWndV.ShowDialog() Then Return
Dim gg = ChooseReferenceWndVM.SelReference
'' Aggiungo il box del solido
'Dim nBoxId As Integer = EgtSurftmb(nAuxId, b3Solid, False, GDB_RT.GLOB)
'' posiziono il pezzo al centro
'Dim b3Part As New BBox3d
'EgtGetBBoxGlob(nPartId, GDB_BB.EXACT, b3Part)
'Dim dPosX As Double = (CurrentMachine.b3Tab.DimX() / 2) - (b3Part.DimX() / 2)
'Dim dPosY As Double = (CurrentMachine.b3Tab.DimY() / 2) - (b3Part.DimY() / 2)
' Posiziono il pezzo e aggiorno il suo box
Dim vtMove As Vector3d = New Point3d(dPosX, dPosY, 0) - b3Part.Min()
EgtMove(nPartId, vtMove)
b3Part.Move(vtMove)
' Creo il frame del pezzo
Dim frPart = New Frame3d(b3Part.Center() - 0.5 * b3Part.DimZ() * Vector3d.Z_AX(), Frame3d.TYPE.TOP)
Dim nFrameId = EgtCreateGeoFrame(nPartId, frPart, GDB_RT.GLOB)
If nFrameId <> GDB_ID.NULL Then
EgtSetName(nFrameId, "FramePart")
EgtSetMode(nFrameId, GDB_MD.LOCKED)
End If
EgtAddMachGroup("3dPrint")
EgtSetTable("Tab")
Dim nRawId As Integer = EgtAddRawPart(b3Part.Min, b3Part.DimX, b3Part.DimY, b3Part.DimZ, New Color3d(128, 128, 128, 30))
EgtAddPartToRawPart(nPartId, b3Part.Min, nRawId)
EgtMoveToCornerRawPart(nRawId, New Point3d(dPosX, dPosY, 0), MCH_CR.BL)
EgtResetCurrMachGroup()
' creo lo start point
Dim ptStart As Point3d = b3Part.Center() - 0.6 * b3Part.DimY() * Vector3d.Y_AX() - 0.5 * b3Part.DimZ() * Vector3d.Z_AX()
Dim nPtStartId As Integer = EgtCreateGeoPoint(nPartId, ptStart, GDB_RT.GLOB)
If nPtStartId <> GDB_ID.NULL Then
EgtSetName(nPtStartId, "StartPoint")
EgtSetColor(nPtStartId, New Color3d(255, 0, 0))
End If
' aggiungo a lista pezzi e seleziono
Dim NewPart As New Print3dPartVM(nPartId, sFile)
PartList.Add(NewPart)
SelPart = NewPart
NotifyPropertyChanged(NameOf(SelPart))
End Sub
Friend Sub SelPartFromId(nPartId As Integer)
Dim PartToSel As Print3dPartVM = m_PartList.First(Function(x) x.nPartId = nPartId)
If Not IsNothing(PartToSel) Then
SelPart = PartToSel
NotifyPropertyChanged(NameOf(SelPart))
End If
End Sub
Friend Sub SelLastPart()
If PartList.Count > 0 Then
SelPart = PartList.LastOrDefault()
NotifyPropertyChanged(NameOf(SelPart))
End If
End Sub
Friend Sub SelFirstPart()
If PartList.Count > 0 Then
SelPart = PartList.FirstOrDefault()
NotifyPropertyChanged(NameOf(SelPart))
End If
End Sub
#End Region ' Parts Manager
#End Region ' METHODS
#Region "COMMANDS"
#Region "PartModify"
''' <summary>
''' Returns a command that do CPlaneTop.
''' </summary>
Public ReadOnly Property PartModify_Command As ICommand
Get
If m_cmdPartModify Is Nothing Then
m_cmdPartModify = New Command(AddressOf PartModify)
End If
Return m_cmdPartModify
End Get
End Property
''' <summary>
''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand.
''' </summary>
Public Sub PartModify()
If IsNothing(m_SelPart) Then Return
SelPage = Pages.MODIFYPART
End Sub
#End Region ' PartModify
#Region "Machining"
''' <summary>
''' Returns a command that do CPlaneTop.
''' </summary>
Public ReadOnly Property Machining_Command As ICommand
Get
If m_cmdMachining Is Nothing Then
m_cmdMachining = New Command(AddressOf Machining)
End If
Return m_cmdMachining
End Get
End Property
''' <summary>
''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand.
''' </summary>
Public Sub Machining()
If IsNothing(m_SelPart) OrElse IsNothing(CurrMachining) Then Return
If IsNothing(m_SelMachining) Then
MessageBox.Show("Select current Db Machining first!", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation)
Return
End If
SelPage = Pages.CURRMACHINING
End Sub
#End Region ' Machining
#Region "PrintParamDb"
''' <summary>
''' Returns a command that do CPlaneTop.
''' </summary>
Public ReadOnly Property PrintParamDb_Command As ICommand
Get
If m_cmdPrintParamDb Is Nothing Then
m_cmdPrintParamDb = New Command(AddressOf PrintParamDb)
End If
Return m_cmdPrintParamDb
End Get
End Property
''' <summary>
''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand.
''' </summary>
Public Sub PrintParamDb()
'Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB)
SelPage = Pages.MACHININGDB
End Sub
#End Region ' PrintParamDb
#Region "MaterialDb"
''' <summary>
''' Returns a command that do CPlaneTop.
''' </summary>
Public ReadOnly Property MaterialDb_Command As ICommand
Get
If m_cmdMaterialDb Is Nothing Then
m_cmdMaterialDb = New Command(AddressOf MaterialDb)
End If
Return m_cmdMaterialDb
End Get
End Property
''' <summary>
''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand.
''' </summary>
Public Sub MaterialDb()
'Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB)
SelPage = Pages.MATERIALDB
End Sub
#End Region ' MaterialDb
#End Region ' COMMANDS
End Class
Public Class ModifyModeButton
Inherits VMBase
Private m_sName As String
Public ReadOnly Property sName As String
Get
Return m_sName
End Get
End Property
Private m_ModifyMode As ModifyModes
Public ReadOnly Property ModifyMode As ModifyModes
Get
Return m_ModifyMode
End Get
End Property
Sub New(sName As String, ModifyMode As ModifyModes)
m_sName = sName
m_ModifyMode = ModifyMode
End Sub
End Class