Imports EgtUILib Imports EgtWPFLib5 Imports EgtPHOTOLib Imports System.IO Public Class OmagPhotoWD ' Riferimento alla MainWindow Friend m_MainWindow As MainWindow Private m_AddToDataBaseUC As AddToDataBaseUC Private m_StateList As New List(Of EgtWPFLib5.IdNameStruct) ' il contorno dell sfrido è definito a partire dai punti che rappresentano i vertici dello stesso Private m_ContornScrap As New List(Of Point3d) ' se lo stato della lastra è "2" significa che è già stata inserita nel DB (non devo generare una nuova foto!) Private m_nState As Integer = 1 ' salvo il nome del file *.jpg Private m_sFileImage As String = String.Empty ' definsce se il slavataggio è andato a buon fine (questa variabile deve esistere anche dopo la chiusura della finestra!) Public Shared m_IsAdded As Boolean = False Public Shared m_sDtBsId As String = "" Public Shared m_bSlabIsSelected As Boolean = False ' definisce se il grezzo è stato eliminato dal DB Public Shared m_IsDeleted As Boolean = False Public Sub New(sImage As String, ContornScrap As List(Of Point3d), MnWindow As MainWindow, nState As Integer, DatabaseID As String) InitializeComponent() ' salvo il riferimento della finestra principale m_MainWindow = MnWindow ' leggo lo stato dello sfrido per decidere quale modalità di apertuta usare m_nState = nState '--------------- CARCICO lastra esistente --------------- If m_nState = 2 Then m_bSlabIsSelected = False ' ricerco l'elemento già inserito nel DB For Each Item As Slab In EgtPHOTOLib.refProjectVM.SlabList Dim CurrId As String = Item.GetCurrentID.Trim If Item.GetCurrentID.Trim = DatabaseID.Trim Then EgtPHOTOLib.refProjectVM.SelSlab = Item m_bSlabIsSelected = True Exit For End If Next ' se non trovo nessun elemento nel db allora esco If IsNothing(EgtPHOTOLib.refProjectVM.SelSlab) Then EgtOutLog("ID is not found in database: " & DatabaseID) m_bSlabIsSelected = False Return End If ' procedo alla visualizzazione della pagina EgtPHOTOLib.PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.DETAIL ' carico la lista degli stati letta dalla libreria For Each Item As EgtWPFLib5.IdNameStruct In EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList m_StateList.Add(Item) Next ' notifico che la lastra è in modifica da questo programma EgtPHOTOLib.PhotoMap.refProjectVM.SelSlab.IsSelected = EgtPHOTOLib.MainData.nKey EgtPHOTOLib.PhotoMap.refOptionPanelVM.IsSelected() ' posiziono la finestra Me.Top = 15 Me.Left = 15 Return End If '--------------- DEFINSCO nuova lastra esistente --------------- ' imposto come prima pagina sempre la lista (per inizializzare gli elementi della libreria) → ACCELERARE il processo di creazione di questo oggetto! EgtPHOTOLib.PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.NEWSLAB ' imposto il percoso della foto appena generato EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.ImagePath = sImage ' carico la foto come texture EgtPHOTOLib.PhotoMap.refOptionPanelVM.PostPhoto(sImage, "") ' carico l'elenco dei materiali (non serve...) EgtPHOTOLib.PhotoMap.refOptionPanelVM.SetMaterialFromDB() ' definisco la lista degli stati For Each Item As EgtWPFLib5.IdNameStruct In EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList m_StateList.Add(Item) Next ' imposto i dati lastra EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Thickness = m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight ' carico la lista degli stati letta dalla libreria EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelState = EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList(0) ' ricorco il materiale corrente nell'elenco dei materiali presenti nel DB (se non presente nell'elenco?) For Each MaterialItem As String In EgtPHOTOLib.PhotoMap.refOptionPanelVM.MaterialList If MaterialItem.ToLower = m_MainWindow.m_CurrentMachine.CurrMat.sName.ToLower Then EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Material = MaterialItem Exit For End If Next ' salvo in locale i punti che arrivano dal progetto m_ContornScrap = ContornScrap ' avvio la finestra di modifica Dim m_refImagePrevieV As New EgtPHOTOLib.ImagePreviewV() ' modifico l'immagine e salvo m_refImagePrevieV.SetContourScraps(m_ContornScrap) m_refImagePrevieV.Hide() m_refImagePrevieV.Show() m_refImagePrevieV.SaveImage() m_refImagePrevieV.Close() m_bSlabIsSelected = True ' posiziono la finestra Me.Top = 15 Me.Left = 15 End Sub ' posizionamento degli UserControl all'interno della griglia Private Sub OmagPhotoWD_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized ' definisco nella pagina la posizione dello UserControl e inizializzo le liste m_AddToDataBaseUC = New AddToDataBaseUC(Me) m_AddToDataBaseUC.SetValue(Grid.ColumnProperty, 0) m_AddToDataBaseUC.SetValue(Grid.RowProperty, 1) m_AddToDataBaseUC.SetValue(Grid.RowSpanProperty, 2) Me.OptionSLabGrid.Children.Add(m_AddToDataBaseUC) m_AddToDataBaseUC.StateCmBx.ItemsSource = m_StateList ' recupero la scena dalla libreria e la carico nel finestra Dim MyScene As New EgtPHOTOLib.SceneHostSlabV(EgtPHOTOLib.PhotoMap.refSceneHostVM) MyScene.SetValue(Grid.ColumnProperty, 1) MyScene.SetValue(Grid.ColumnSpanProperty, 2) MyScene.SetValue(Grid.RowProperty, 1) Me.OptionSLabGrid.Children.Add(MyScene) End Sub ' carcio i dati della lastra Private Sub PostLoaded() Handles Me.Loaded If Not m_bSlabIsSelected Then Return End If ' carico i campi con i dati letti da database If m_nState = 2 Then ' provo ad eseguire la separazione dei campi m_sDtBsId = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Id m_AddToDataBaseUC.BlockTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNameBlock m_AddToDataBaseUC.NbrIdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNbrID m_AddToDataBaseUC.StateCmBx.SelectedIndex = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.State m_AddToDataBaseUC.MatTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Material m_AddToDataBaseUC.ThicknessTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Thickness m_AddToDataBaseUC.ProjectTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.ProjectAssignedTo ' aggiorno il testo del messaggio "Add" → "Save" m_AddToDataBaseUC.AddBtn.Content = "Save" Return End If ' inizializzo i campi 'm_AddToDataBaseUC.IdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Id m_AddToDataBaseUC.BlockTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNameBlock m_AddToDataBaseUC.NbrIdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNbrID m_AddToDataBaseUC.StateCmBx.SelectedIndex = 0 m_AddToDataBaseUC.MatTxBx.Text = m_MainWindow.m_CurrentMachine.CurrMat.sName m_AddToDataBaseUC.ThicknessTxBx.Text = LenToString(m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight, 4) m_AddToDataBaseUC.ProjectTxBx.Text = m_MainWindow.m_CurrentProjectPageUC.GetCurrentProjectName() ' rendo in primo piano la finestra Me.Activate() End Sub Private Sub ExitBtn_Click() Handles ExitBtn.Click ' se esista una lastra corrente, notifico che deve essere deselezionata If Not IsNothing(EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab) Then EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.IsSelected = 0 EgtPHOTOLib.PhotoMap.refOptionPanelVM.IsSelected() End If Me.Close() End Sub End Class