Files
icarus/Icarus/TopPanel/TopPanelVM.vb
T
DarioS 3dabab5b72 Icarus :
- eliminati file inutili
- prime modifiche per gestione necessità ricalcolo slices.
2022-09-16 08:53:48 +02:00

615 lines
20 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()
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 Else
InitNULL()
End Select
End If
End Sub
Private m_ModifyModeList As New List(Of ModifyModeButton)({New ModifyModeButton("Disposition", ModifyModes.DISPOSITION),
New ModifyModeButton("Reference", ModifyModes.REFERENCE),
New ModifyModeButton("StartMachining", ModifyModes.STARTMACH),
New ModifyModeButton("Ribs", ModifyModes.RIBS),
New ModifyModeButton("Shell Number", ModifyModes.SHELLNUMBER),
New ModifyModeButton("Aux Solids", 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)
m_SelModifyMode = value
Dim SelLeftPanel As LeftPanelVM.Panels = LeftPanelVM.Panels.NULL
Select Case value.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)
End Set
End Property
Friend Sub SetSelModifyMode(ModifyMode As ModifyModes)
SelModifyMode = m_ModifyModeList.FirstOrDefault(Function(x) x.ModifyMode = ModifyMode)
NotifyPropertyChanged(NameOf(SelModifyMode))
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
' visualizzo/nascondo tutti i layer
EgtSetStatus(m_SelPart.nPrintSolidLayerId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nPrintSolidId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nOriginalPartLayerId, GDB_ST.OFF)
EgtSetStatus(m_SelPart.nRibsLayerId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nAuxSolidsLayerId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nMachStartLayerId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nMachStartId, GDB_ST.ON_)
EgtSetStatus(m_SelPart.nReferenceId, GDB_ST.ON_)
Dim nSliceLayerId As Integer = EgtGetFirstInGroup(m_SelPart.nPartId)
While nSliceLayerId <> GDB_ID.NULL
Dim nSliceNbr As Integer = 0
If EgtGetInfo(nSliceLayerId, "SliceNbr", nSliceNbr) AndAlso nSliceNbr > 0 Then
EgtSetStatus(nSliceLayerId, GDB_ST.OFF)
End If
nSliceLayerId = EgtGetNext(nSliceLayerId)
End While
' Eseguo la selezione
EgtSetStatus(m_SelPart.nPartId, GDB_ST.ON_)
EgtDeselectAll()
EgtSetMark(m_SelPart.nPrintSolidId)
EgtDraw()
' imposto lavorazione e materiale del pezzo selezionato
Map.refCurrMachiningPanelVM.ReadMachParamFromSelPart()
SetSelMachining(MachiningList.FirstOrDefault(Function(x) x.sGUID = Map.refCurrMachiningPanelVM.CurrMachining.sCurrGUID))
' notifico posizione pezzo
Map.refDispositionPanelVM.RefreshPos()
End If
End Set
End Property
#End Region ' Parts Manager
#Region "Material"
Private m_MaterialList As New List(Of MaterialIndex)
Public ReadOnly Property MaterialList As List(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)
m_SelMaterial = value
WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMATERIAL, value.sGUID)
' ricarico lista lavorazioni valide per il materiale selezionato
InitMachiningsList()
End Set
End Property
#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)
' verifico se vecchia modificata e chiedo se salvare?
If Not IsNothing(value) Then
WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, value.sGUID)
' 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))
'm_CurrMachining.UpdateMachParam()
End If
End If
m_SelMachining = value
' aggiorno parametri mostrati nella barra
If Not IsNothing(CurrMachining) Then CurrMachining.UpdateMachParam()
End Set
End Property
Friend Sub SetSelMachining(SelMachining As MachiningIndex)
m_SelMachining = SelMachining
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
' Definizione comandi
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)
' carico lista materiali
InitMaterialList()
' carico lista parametri di stampa
InitMachiningsList()
End Sub
#End Region ' CONSTRUCTORS
#Region "METHODS"
#Region "Materials"
Friend Sub InitMaterialList()
Dim nIndex As Integer = 1
Dim sGUID As String = ""
Dim sName As String = ""
While GetPrivateProfileString(nIndex, MAT_GUID, "", sGUID, Map.refMainWindowVM.MainWindowM.sMaterialsDir & "/Materials.ini") > 0
' leggo nome
EgtGetStringUtf8FromIni(nIndex, MAT_NAME, "", sName, Map.refMainWindowVM.MainWindowM.sMaterialsDir & "/Materials.ini")
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)
End Sub
Friend Function GetSelMaterialData() As Material
Return New Material(m_SelMaterial.nIndex, m_SelMaterial.sGUID, m_SelMaterial.sName)
End Function
#End Region ' Materials
#Region "Machining"
Friend Sub InitMachiningsList()
If IsNothing(m_SelMaterial) Then Return
MachiningList.Clear()
Dim nIndex As Integer = 1
Dim sGUID As String = ""
Dim sName As String = ""
Dim sMaterials As String = ""
While GetPrivateProfileString(nIndex, MAC_GUID, "", sGUID, Map.refMainWindowVM.MainWindowM.sMachiningsDir & "/Machinings.ini") > 0
GetPrivateProfileString(nIndex, MAC_NAME, "", sName, Map.refMainWindowVM.MainWindowM.sMachiningsDir & "/Machinings.ini")
' leggo materiali che usa
GetPrivateProfileString(nIndex, MAC_MATERIALS, "", sMaterials, Map.refMainWindowVM.MainWindowM.sMachiningsDir & "/Machinings.ini")
Dim MacMaterials() As String = sMaterials.Split(";"c)
If MacMaterials.Contains(SelMaterial.sGUID) Then
MachiningList.Add(New MachiningIndex(nIndex, sGUID, sName))
End If
nIndex += 1
End While
Dim sCurrMachining As String = ""
GetMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, "", sCurrMachining)
SelMachining = MachiningList.FirstOrDefault(Function(x) x.sGUID = sCurrMachining)
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()
Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.IMPORT)
Map.refImportPanelVM.Init()
End Sub
Private Function ExitIMPORT()
Return True
End Function
Private Sub InitMODIFY()
SetSelModifyMode(ModifyModes.DISPOSITION)
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL)
End Sub
Private Function ExitMODIFY()
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()
EgtDeselectAll()
End Sub
Private Function ExitSLICE()
Map.refSliceManagerVM.UpdateState(False)
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL)
Map.refSliderManagerVM.SetSliderVisibility(False)
Map.refSliderManagerVM.SetLayerIndexToZero()
SelPart = SelPart
Return True
End Function
Private Sub InitSIMULATION()
End Sub
Private Function ExitSIMULATION()
Return True
End Function
Private Sub InitMATERIALDB()
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.MATERIALDB)
End Sub
Private Function ExitMATERIALDB()
Return True
End Function
Private Sub InitMACHININGDB()
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB)
End Sub
Private Function ExitMACHININGDB()
Return True
End Function
Private Sub InitCURRMACHINING()
Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.CURRPRINTPARAM)
End Sub
Private Function ExitCURRMACHINING()
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 "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