diff --git a/VeinMatching/VeinMatchingWindow.xaml.vb b/VeinMatching/VeinMatchingWindow.xaml.vb index b0ba99b..329c833 100644 --- a/VeinMatching/VeinMatchingWindow.xaml.vb +++ b/VeinMatching/VeinMatchingWindow.xaml.vb @@ -7,180 +7,180 @@ Imports EgtWPFLib Public Class VeinMatchingWindow - ' Riferimento alla MainWindow - Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) - ' Dichiarazione Scene - Friend WithEvents VeinMatchingScene As New Scene - Private VeinMatchingSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost - ' Gestione finestra - Private m_bFirst As Boolean = True - Private m_bPositioned As Boolean = False - ' Selezione e modifica - Private m_nIdToSel As Integer = GDB_ID.NULL - Private m_nIdToDesel As Integer = GDB_ID.NULL + ' Riferimento alla MainWindow + Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) + ' Dichiarazione Scene + Friend WithEvents VeinMatchingScene As New Scene + Private VeinMatchingSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost + ' Gestione finestra + Private m_bFirst As Boolean = True + Private m_bPositioned As Boolean = False + ' Selezione e modifica + Private m_nIdToSel As Integer = GDB_ID.NULL + Private m_nIdToDesel As Integer = GDB_ID.NULL - Private Sub Window_Initialized(sender As Object, e As EventArgs) - ' Assegnazione scena all'host e posizionamento nella PlacePageGrid - VeinMatchingSceneHost.Child = VeinMatchingScene - VeinMatchingSceneHost.SetValue(Grid.ColumnProperty, 1) - Me.VeinMatchingGrid.Children.Add(VeinMatchingSceneHost) - ' Per non farla visualizzare alla creazione - Me.Left = 32000 - ' Assegno messaggi - NewBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 3) - ExportBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 10) - End Sub + Private Sub Window_Initialized(sender As Object, e As EventArgs) + ' Assegnazione scena all'host e posizionamento nella PlacePageGrid + VeinMatchingSceneHost.Child = VeinMatchingScene + VeinMatchingSceneHost.SetValue(Grid.ColumnProperty, 1) + Me.VeinMatchingGrid.Children.Add(VeinMatchingSceneHost) + ' Per non farla visualizzare alla creazione + Me.Left = 32000 + ' Assegno messaggi + NewBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 3) + ExportBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 10) + End Sub - Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded - If m_bFirst Then - ' Imposto finestra senza SystemMenu - Dim hwnd As IntPtr = New WindowInteropHelper(Me).Handle - SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) And Not WS_SYSMENU) - ' imposto colore di default - Dim DefColor As New Color3d(0, 0, 0) - GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetDefaultMaterial(DefColor) - ' imposto colori sfondo - VeinMatchingScene.SetViewBackground(GetBackTopColor(), GetBackBottomColor()) - ' imposto colore di evidenziazione - Dim MarkColor As New Color3d(255, 255, 0) - GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetMarkMaterial(MarkColor) - ' imposto colore per superfici selezionate - Dim SelSurfColor As New Color3d(255, 255, 192) - GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetSelSurfMaterial(SelSurfColor) - ' imposto tipo e colore del rettangolo di zoom - Dim bOutline As Boolean = True - Dim ZwColor As New Color3d(0, 0, 0) - GetPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetZoomWinAttribs(bOutline, ZwColor) - ' imposto colore della linea di distanza - Dim DstLnColor As New Color3d(255, 0, 0) - GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetDistLineMaterial(DstLnColor) - ' imposto parametri OpenGL - Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3, m_MainWindow.GetIniFile()) - Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1, m_MainWindow.GetIniFile()) <> 0) - Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32, m_MainWindow.GetIniFile()) - Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32, m_MainWindow.GetIniFile()) - VeinMatchingScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) - ' inizializzo la scena (DB geometrico + visualizzazione) e verifico presenza chiave - If Not VeinMatchingScene.Init() Then - m_MainWindow.m_CadCutPageUC.m_ProjectMgr.VeinMatchingBtn.IsChecked = False - Me.Close() + Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded + If m_bFirst Then + ' Imposto finestra senza SystemMenu + Dim hwnd As IntPtr = New WindowInteropHelper(Me).Handle + SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) And Not WS_SYSMENU) + ' imposto colore di default + Dim DefColor As New Color3d(0, 0, 0) + GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetDefaultMaterial(DefColor) + ' imposto colori sfondo + VeinMatchingScene.SetViewBackground(GetBackTopColor(), GetBackBottomColor()) + ' imposto colore di evidenziazione + Dim MarkColor As New Color3d(255, 255, 0) + GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetMarkMaterial(MarkColor) + ' imposto colore per superfici selezionate + Dim SelSurfColor As New Color3d(255, 255, 192) + GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetSelSurfMaterial(SelSurfColor) + ' imposto tipo e colore del rettangolo di zoom + Dim bOutline As Boolean = True + Dim ZwColor As New Color3d(0, 0, 0) + GetPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetZoomWinAttribs(bOutline, ZwColor) + ' imposto colore della linea di distanza + Dim DstLnColor As New Color3d(255, 0, 0) + GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetDistLineMaterial(DstLnColor) + ' imposto parametri OpenGL + Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3, m_MainWindow.GetIniFile()) + Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1, m_MainWindow.GetIniFile()) <> 0) + Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32, m_MainWindow.GetIniFile()) + Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32, m_MainWindow.GetIniFile()) + VeinMatchingScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) + ' inizializzo la scena (DB geometrico + visualizzazione) e verifico presenza chiave + If Not VeinMatchingScene.Init() Then + m_MainWindow.m_CadCutPageUC.m_ProjectMgr.VeinMatchingBtn.IsChecked = False + Me.Close() + End If + ' dimensione lineare max in pixel delle textures + Dim nTxrMaxLinPix As Integer = GetPrivateProfileInt(S_SCENE, K_TEXMAXLINPIX, 4096, m_MainWindow.GetIniFile()) + EgtSetTextureMaxLinPixels(nTxrMaxLinPix) + m_bFirst = False + End If + ' inibisco selezione diretta da Scene + VeinMatchingScene.SetStatusNull() + End Sub + + Private Sub Window_Closed(sender As Object, e As EventArgs) Handles Me.Closed + ' Salvo posizione Window (se posizionata e non minimizzata) + If m_bPositioned And Me.WindowState <> WindowState.Minimized Then + Dim nFlag As Integer = If(Me.WindowState = WindowState.Maximized, 1, 0) + WritePrivateProfileWinPos(S_VEINMATCHING, K_VEINMA_PLACE, nFlag, CInt(Me.Left), CInt(Me.Top), CInt(Me.Width), CInt(Me.Height), m_MainWindow.GetIniFile()) + End If + End Sub + + ' imposto le dimensioni e la posizione della pagina corrente + Friend Sub AdjustPosition() + ' Se già pozizionata, esco subito + If m_bPositioned Then Return + ' Imposto posizione e dimensioni della MainWindow da INI + Dim nFlag, nLeft, nTop, nWidth, nHeight As Integer + If GetPrivateProfileWinPos(S_VEINMATCHING, K_VEINMA_PLACE, nFlag, nLeft, nTop, nWidth, nHeight, m_MainWindow.GetIniFile()) Then + Dim PtTL = New System.Drawing.Point(nLeft, nTop) + Dim s As System.Windows.Forms.Screen = System.Windows.Forms.Screen.FromPoint(PtTL) + If s.Bounds.Contains(PtTL) Then + Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual + Me.Top = nTop + Me.Left = nLeft + Me.Height = nHeight + Me.Width = nWidth + Me.WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) + m_bPositioned = True + Return + End If + End If + ' Imposto in posizione standard + Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual + Me.Top = m_MainWindow.Top + Me.Left = m_MainWindow.Left + Me.Height = nHeight + Me.Width = nWidth + Me.WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) + m_bPositioned = True + End Sub + + Private Sub OnMouseDownScene(sender As Object, e As Windows.Forms.MouseEventArgs) Handles VeinMatchingScene.OnMouseDownScene + ' Si può selezionare solo con il tasto sinistro e se stato NULL + If e.Button <> Windows.Forms.MouseButtons.Left Or Not VeinMatchingScene.IsStatusNull() Then Return + ' Eseguo selezione + EgtSetObjFilterForSelWin(True, True, True, True, True) + Dim nSel As Integer + EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel) + ' Ricavo nome dell'entità selezionata e identificativo + Dim nId As Integer = EgtGetFirstObjInSelWin() + While nId <> GDB_ID.NULL + ' Cerco l'identificativo del pezzo cui appartiene + Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId)) + If EgtIsPart(nPartId) Then + Dim nStat As Integer = GDB_ST.ON_ + EgtGetStatus(nPartId, nStat) + ' Se già selezionato o posizione oggetto incompatibile con flag posizione selezionati + If nStat = GDB_ST.SEL Then + ' Memorizzo Id da deselezionare + m_nIdToDesel = nPartId + Else + ' Memorizzo Id da selezionare + m_nIdToSel = nPartId End If - ' dimensione lineare max in pixel delle textures - Dim nTxrMaxLinPix As Integer = GetPrivateProfileInt(S_SCENE, K_TEXMAXLINPIX, 4096, m_MainWindow.GetIniFile()) - EgtSetTextureMaxLinPixels(nTxrMaxLinPix) - m_bFirst = False - End If - ' inibisco selezione diretta da Scene - VeinMatchingScene.SetStatusNull() - End Sub + EgtDraw() + Exit While + End If + ' Passo al successivo + nId = EgtGetNextObjInSelWin() + End While + End Sub - Private Sub Window_Closed(sender As Object, e As EventArgs) Handles Me.Closed - ' Salvo posizione Window (se posizionata e non minimizzata) - If m_bPositioned And Me.WindowState <> WindowState.Minimized Then - Dim nFlag As Integer = If(Me.WindowState = WindowState.Maximized, 1, 0) - WritePrivateProfileWinPos(S_VEINMATCHING, K_VEINMA_PLACE, nFlag, CInt(Me.Left), CInt(Me.Top), CInt(Me.Width), CInt(Me.Height), m_MainWindow.GetIniFile()) - End If - End Sub - - ' imposto le dimensioni e la posizione della pagina corrente - Friend Sub AdjustPosition() - ' Se già pozizionata, esco subito - If m_bPositioned Then Return - ' Imposto posizione e dimensioni della MainWindow da INI - Dim nFlag, nLeft, nTop, nWidth, nHeight As Integer - If GetPrivateProfileWinPos(S_VEINMATCHING, K_VEINMA_PLACE, nFlag, nLeft, nTop, nWidth, nHeight, m_MainWindow.GetIniFile()) Then - Dim PtTL = New System.Drawing.Point(nLeft, nTop) - Dim s As System.Windows.Forms.Screen = System.Windows.Forms.Screen.FromPoint(PtTL) - If s.Bounds.Contains(PtTL) Then - Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual - Me.Top = nTop - Me.Left = nLeft - Me.Height = nHeight - Me.Width = nWidth - Me.WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) - m_bPositioned = True - Return - End If - End If - ' Imposto in posizione standard - Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual - Me.Top = m_MainWindow.Top - Me.Left = m_MainWindow.Left - Me.Height = nHeight - Me.Width = nWidth - Me.WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) - m_bPositioned = True - End Sub - - Private Sub OnMouseDownScene(sender As Object, e As Windows.Forms.MouseEventArgs) Handles VeinMatchingScene.OnMouseDownScene - ' Si può selezionare solo con il tasto sinistro e se stato NULL - If e.Button <> Windows.Forms.MouseButtons.Left Or Not VeinMatchingScene.IsStatusNull() Then Return - ' Eseguo selezione - EgtSetObjFilterForSelWin(True, True, True, True, True) - Dim nSel As Integer - EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel) - ' Ricavo nome dell'entità selezionata e identificativo - Dim nId As Integer = EgtGetFirstObjInSelWin() - While nId <> GDB_ID.NULL - ' Cerco l'identificativo del pezzo cui appartiene - Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId)) - If EgtIsPart(nPartId) Then - Dim nStat As Integer = GDB_ST.ON_ - EgtGetStatus(nPartId, nStat) - ' Se già selezionato o posizione oggetto incompatibile con flag posizione selezionati - If nStat = GDB_ST.SEL Then - ' Memorizzo Id da deselezionare - m_nIdToDesel = nPartId - Else - ' Memorizzo Id da selezionare - m_nIdToSel = nPartId - End If - EgtDraw() - Exit While - End If - ' Passo al successivo - nId = EgtGetNextObjInSelWin() - End While - End Sub - - Private Sub OnMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles VeinMatchingScene.OnMouseUpScene - ' Se selezione da eseguire - If m_nIdToSel <> GDB_ID.NULL Then - ' Eseguo la selezione in Nesting - Dim bSelected As Boolean = False - Dim nOriId As Integer = GDB_ID.NULL - EgtGetInfo(m_nIdToSel, KEY_ORI_ID, nOriId) - If EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) AndAlso EgtExistsObj(nOriId) Then - If (m_MainWindow.m_CadCutPageUC.m_NestPage.SelectPart(nOriId, False)) Then - bSelected = True - Else - ' "Attenzione" "Pezzo non selezionabile in questa condizione" - Dim Mbox As New EgtMsgBox(Me, 350, EgtMsgBox.WidthType.PIXEL, EgtMsg(91122), EgtMsg(91606), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION, 2) - End If - End If - EgtSetCurrentContext(VeinMatchingScene.GetCtx()) - ' Se selezione riuscita, la eseguo anche in VME - If bSelected Then EgtSelectObj(m_nIdToSel) - ' Se deselezione da eseguire - ElseIf m_nIdToDesel <> GDB_ID.NULL Then - ' Eseguo la deselezione in Nesting - Dim bDeselected As Boolean = False - Dim nOriId As Integer = GDB_ID.NULL - EgtGetInfo(m_nIdToDesel, KEY_ORI_ID, nOriId) - If EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) AndAlso EgtExistsObj(nOriId) Then - If (m_MainWindow.m_CadCutPageUC.m_NestPage.DeselectPart(nOriId, False)) Then - bDeselected = True - End If + Private Sub OnMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles VeinMatchingScene.OnMouseUpScene + ' Se selezione da eseguire + If m_nIdToSel <> GDB_ID.NULL Then + ' Eseguo la selezione in Nesting + Dim bSelected As Boolean = False + Dim nOriId As Integer = GDB_ID.NULL + EgtGetInfo(m_nIdToSel, KEY_ORI_ID, nOriId) + If EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) AndAlso EgtExistsObj(nOriId) Then + If (m_MainWindow.m_CadCutPageUC.m_NestPage.SelectPart(nOriId, False)) Then + bSelected = True + Else + ' "Attenzione" "Pezzo non selezionabile in questa condizione" + Dim Mbox As New EgtMsgBox(Me, 350, EgtMsgBox.WidthType.PIXEL, EgtMsg(91122), EgtMsg(91606), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION, 2) End If End If EgtSetCurrentContext(VeinMatchingScene.GetCtx()) - ' Se deselezione riuscita, la eseguo anche in VME - If bDeselected Then EgtDeselectObj(m_nIdToDesel) + ' Se selezione riuscita, la eseguo anche in VME + If bSelected Then EgtSelectObj(m_nIdToSel) + ' Se deselezione da eseguire + ElseIf m_nIdToDesel <> GDB_ID.NULL Then + ' Eseguo la deselezione in Nesting + Dim bDeselected As Boolean = False + Dim nOriId As Integer = GDB_ID.NULL + EgtGetInfo(m_nIdToDesel, KEY_ORI_ID, nOriId) + If EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) AndAlso EgtExistsObj(nOriId) Then + If (m_MainWindow.m_CadCutPageUC.m_NestPage.DeselectPart(nOriId, False)) Then + bDeselected = True + End If + End If + End If + EgtSetCurrentContext(VeinMatchingScene.GetCtx()) + ' Se deselezione riuscita, la eseguo anche in VME + If bDeselected Then EgtDeselectObj(m_nIdToDesel) End If ' Reset m_nIdToSel = GDB_ID.NULL @@ -204,724 +204,724 @@ Public Class VeinMatchingWindow End Class Friend Module VeinMatching - ' creo la lista delle alzatine, ad ogni alzatina associo anche il lato del piano cucina (e non solo) a cui si riferisce - Private m_ListALZFront As New ObservableCollection(Of Aletta) + ' creo la lista delle alzatine, ad ogni alzatina associo anche il lato del piano cucina (e non solo) a cui si riferisce + Private m_ListALZFront As New ObservableCollection(Of Aletta) - ' Riferimento alla MainWindow - Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) - ' Contesto del VeinMatching - Friend m_nVeinCtx As Integer = 0 - ' Nome fotografia - Private m_nPhoto As Integer = 0 - ' Dimensioni immagine da esportare - Private m_nImgWidth As Integer = 1600 - Private m_nImgHeight As Integer = 1200 + ' Riferimento alla MainWindow + Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) + ' Contesto del VeinMatching + Friend m_nVeinCtx As Integer = 0 + ' Nome fotografia + Private m_nPhoto As Integer = 0 + ' Dimensioni immagine da esportare + Private m_nImgWidth As Integer = 1600 + Private m_nImgHeight As Integer = 1200 - ' Costanti - Const REF_NAME As String = "Ref" - Const KEY_ORI_REF As String = "OriRef" + ' Costanti + Const REF_NAME As String = "Ref" + Const KEY_ORI_REF As String = "OriRef" - Friend Function SetRefOnAllParts(nCtx As Integer) As Boolean - ' Si opera nel contesto indicato - EgtSetCurrentContext(nCtx) - Dim nId As Integer = EgtGetFirstPart() - While nId <> GDB_ID.NULL - ' Gruppo regione - Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_REGION) - ' Entità superficie regione piatta - Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) - While nRegId <> GDB_ID.NULL - If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then - Exit While - End If - nRegId = EgtGetNext(nRegId) - End While - ' Ne recupero il centroide - Dim ptCen As Point3d - EgtCentroid(nRegId, GDB_ID.ROOT, ptCen) - ' Inserisco il riferimento - Dim frRef As New Frame3d(ptCen) - Dim nRefId As Integer = EgtCreateGeoFrame(nRegLayId, frRef, GDB_RT.GLOB) - EgtSetName(nRefId, REF_NAME) - ' salvo nelle info il riferimento originale - EgtSetInfo(nRefId, KEY_ORI_REF, frRef) - ' nascondo l'oggetto appena inserito - EgtSetMode(nRefId, GDB_MD.HIDDEN) - ' Passo al pezzo successivo - nId = EgtGetNextPart(nId) - End While - Return True - End Function - - ' aggiungo il disegno nel VeinMatch - Friend Function SetRefOnPart(nId As Integer) As Boolean - ' Si opera nel contesto corrente (CurrentProjectScene.GetCtx()) - ' Verifico validità identificativo oggetto - If nId = GDB_ID.NULL Then Return False - ' Recupero gruppo regione - Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_REGION) - ' Se c'è già il riferimento, esco - If EgtGetFirstNameInGroup(nRegLayId, REF_NAME) <> GDB_ID.NULL Then Return True - ' Entità superficie regione piatta - Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) - While nRegId <> GDB_ID.NULL + Friend Function SetRefOnAllParts(nCtx As Integer) As Boolean + ' Si opera nel contesto indicato + EgtSetCurrentContext(nCtx) + Dim nId As Integer = EgtGetFirstPart() + While nId <> GDB_ID.NULL + ' Gruppo regione + Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_REGION) + ' Entità superficie regione piatta + Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) + While nRegId <> GDB_ID.NULL If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then - Exit While + Exit While End If nRegId = EgtGetNext(nRegId) - End While - ' Ne recupero il centroide - Dim ptCen As Point3d - EgtCentroid(nRegId, GDB_ID.ROOT, ptCen) - ' Inserisco il riferimento - Dim frRef As New Frame3d(ptCen) - Dim nRefId As Integer = EgtCreateGeoFrame(nRegLayId, frRef, GDB_RT.GLOB) - EgtSetName(nRefId, REF_NAME) - ' salvo nelle info il riferimento originale - EgtSetInfo(nRefId, KEY_ORI_REF, frRef) - ' nascondo l'oggetto appena inserito - EgtSetMode(nRefId, GDB_MD.HIDDEN) - Return True - End Function + End While + ' Ne recupero il centroide + Dim ptCen As Point3d + EgtCentroid(nRegId, GDB_ID.ROOT, ptCen) + ' Inserisco il riferimento + Dim frRef As New Frame3d(ptCen) + Dim nRefId As Integer = EgtCreateGeoFrame(nRegLayId, frRef, GDB_RT.GLOB) + EgtSetName(nRefId, REF_NAME) + ' salvo nelle info il riferimento originale + EgtSetInfo(nRefId, KEY_ORI_REF, frRef) + ' nascondo l'oggetto appena inserito + EgtSetMode(nRefId, GDB_MD.HIDDEN) + ' Passo al pezzo successivo + nId = EgtGetNextPart(nId) + End While + Return True + End Function - ' ------------------- ELENCO FUNZIONI PER GESTIONE ALZATINE E FRONTALINI ------------------- - ' genero la lista delle alzatine dei frontalini - Friend Function CreateListAlzAndFront() As Boolean - EgtSetCurrentContext(m_nVeinCtx) - Dim nId As Integer = EgtGetFirstPart() - While nId <> GDB_ID.NULL - ' verifico che il pezzo sia una alzatina - Dim sInfoName As String = String.Empty - EgtGetInfo(nId, "CMP", sInfoName) - If sInfoName = "AlzFront" Then - Dim AlzFront As New Aletta(nId) - m_ListALZFront.Add(AlzFront) - End If + ' aggiungo il disegno nel VeinMatch + Friend Function SetRefOnPart(nId As Integer) As Boolean + ' Si opera nel contesto corrente (CurrentProjectScene.GetCtx()) + ' Verifico validità identificativo oggetto + If nId = GDB_ID.NULL Then Return False + ' Recupero gruppo regione + Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_REGION) + ' Se c'è già il riferimento, esco + If EgtGetFirstNameInGroup(nRegLayId, REF_NAME) <> GDB_ID.NULL Then Return True + ' Entità superficie regione piatta + Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) + While nRegId <> GDB_ID.NULL + If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then + Exit While + End If + nRegId = EgtGetNext(nRegId) + End While + ' Ne recupero il centroide + Dim ptCen As Point3d + EgtCentroid(nRegId, GDB_ID.ROOT, ptCen) + ' Inserisco il riferimento + Dim frRef As New Frame3d(ptCen) + Dim nRefId As Integer = EgtCreateGeoFrame(nRegLayId, frRef, GDB_RT.GLOB) + EgtSetName(nRefId, REF_NAME) + ' salvo nelle info il riferimento originale + EgtSetInfo(nRefId, KEY_ORI_REF, frRef) + ' nascondo l'oggetto appena inserito + EgtSetMode(nRefId, GDB_MD.HIDDEN) + Return True + End Function + + ' ------------------- ELENCO FUNZIONI PER GESTIONE ALZATINE E FRONTALINI ------------------- + ' genero la lista delle alzatine dei frontalini + Friend Function CreateListAlzAndFront() As Boolean + EgtSetCurrentContext(m_nVeinCtx) + Dim nId As Integer = EgtGetFirstPart() + While nId <> GDB_ID.NULL + ' verifico che il pezzo sia una alzatina + Dim sInfoName As String = String.Empty + EgtGetInfo(nId, "CMP", sInfoName) + If sInfoName = "AlzFront" Then + Dim AlzFront As New Aletta(nId) + m_ListALZFront.Add(AlzFront) + End If + ' Passo al pezzo successivo + nId = EgtGetNextPart(nId) + End While + Return True + End Function + + ' genero la lista dei piani cucina + Friend Function LinkReferencesOnAlette() As Boolean + Dim nId As Integer = EgtGetFirstPart() + While nId <> GDB_ID.NULL + ' escludo dalla ricerca le alette + Dim sCMP As String = String.Empty + EgtGetInfo(nId, "CMP", sCMP) + If sCMP = "AlzFront" Then ' Passo al pezzo successivo nId = EgtGetNextPart(nId) - End While - Return True - End Function - - ' genero la lista dei piani cucina - Friend Function LinkReferencesOnAlette() As Boolean - Dim nId As Integer = EgtGetFirstPart() - While nId <> GDB_ID.NULL - ' escludo dalla ricerca le alette - Dim sCMP As String = String.Empty - EgtGetInfo(nId, "CMP", sCMP) - If sCMP = "AlzFront" Then - ' Passo al pezzo successivo - nId = EgtGetNextPart(nId) - Continue While + Continue While + End If + ' Recupero gruppo regione + Dim nOutLoopLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_OUTLOOP) + ' Entità lato + Dim nSideId As Integer = EgtGetFirstInGroup(nOutLoopLayId) + While nSideId <> GDB_ID.NULL + Dim sInfoGUID As String = String.Empty + EgtGetInfo(nSideId, "RefAF", sInfoGUID) + If Not String.IsNullOrEmpty(sInfoGUID) Then + Dim Item As Aletta + For Each Item In m_ListALZFront + If Item.RefGUID = sInfoGUID Then + Item.IdSideRef = nSideId + End If + Next + ' ricerco nella lista delle alette il suo End If - ' Recupero gruppo regione - Dim nOutLoopLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_OUTLOOP) - ' Entità lato - Dim nSideId As Integer = EgtGetFirstInGroup(nOutLoopLayId) - While nSideId <> GDB_ID.NULL - Dim sInfoGUID As String = String.Empty - EgtGetInfo(nSideId, "RefAF", sInfoGUID) - If Not String.IsNullOrEmpty(sInfoGUID) Then - Dim Item As Aletta - For Each Item In m_ListALZFront - If Item.RefGUID = sInfoGUID Then - Item.IdSideRef = nSideId - End If - Next - ' ricerco nella lista delle alette il suo - End If - nSideId = EgtGetNext(nSideId) - End While - ' Passo al pezzo successivo - nId = EgtGetNextPart(nId) - End While - Return True - End Function - ' ------------------- ELENCO FUNZIONI PER GESTIONE ALZATINE E FRONTALINI ------------------- + nSideId = EgtGetNext(nSideId) + End While + ' Passo al pezzo successivo + nId = EgtGetNextPart(nId) + End While + Return True + End Function + ' ------------------- ELENCO FUNZIONI PER GESTIONE ALZATINE E FRONTALINI ------------------- - Friend Function Clear() As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Pulisco il DB - EgtNewFile() - EgtDraw() - ' Reset contatore foto - m_nPhoto = 0 - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return True - End Function + Friend Function Clear() As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Pulisco il DB + EgtNewFile() + EgtDraw() + ' Reset contatore foto + m_nPhoto = 0 + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return True + End Function - Friend Function AddPart(sPartFile As String, nPartId As Integer) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nMainCtx = SetVeinContext() - If nMainCtx = 0 Then Return False - ' Inserisco il pezzo - EgtInsertFile(sPartFile) - ' Ne recupero l'Id - Dim nVeinId2 As Integer = EgtGetLastPart() - ' Assegno Id originale - EgtSetInfo(nVeinId2, KEY_ORI_ID, nPartId) - ' Nascondo scritte, sono nel layer "Region" - Dim nVeinRegId As Integer = EgtGetFirstNameInGroup(nVeinId2, NAME_REGION) - Dim nCurrId As Integer = EgtGetFirstInGroup(nVeinRegId) - While nCurrId <> GDB_ID.NULL + Friend Function AddPart(sPartFile As String, nPartId As Integer) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nMainCtx = SetVeinContext() + If nMainCtx = 0 Then Return False + ' Inserisco il pezzo + EgtInsertFile(sPartFile) + ' Ne recupero l'Id + Dim nVeinId2 As Integer = EgtGetLastPart() + ' Assegno Id originale + EgtSetInfo(nVeinId2, KEY_ORI_ID, nPartId) + ' Nascondo scritte, sono nel layer "Region" + Dim nVeinRegId As Integer = EgtGetFirstNameInGroup(nVeinId2, NAME_REGION) + Dim nCurrId As Integer = EgtGetFirstInGroup(nVeinRegId) + While nCurrId <> GDB_ID.NULL + If EgtGetType(nCurrId) = GDB_TY.EXT_TEXT Then EgtSetStatus(nCurrId, GDB_ST.OFF) + nCurrId = EgtGetNext(nCurrId) + End While + ' Nascondo layer con valori angoli dei lati + nCurrId = EgtGetFirstNameInGroup(nVeinId2, SIDE_ANGLE_LAYER) + EgtSetStatus(nCurrId, GDB_ST.OFF) + ' Se necessario, ripristino il contesto originale + If nMainCtx > 0 Then EgtSetCurrentContext(nMainCtx) + Return True + End Function + + Friend Function AddParts(sPartFile As String, nFirstPartId As Integer) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nMainCtx = SetVeinContext() + If nMainCtx = 0 Then Return False + ' Inserisco i pezzi e recupero Id primo pezzo inserito + Dim nFirstVeinId As Integer = EgtGetLastPart() + EgtInsertFile(sPartFile) + nFirstVeinId = If(nFirstVeinId <> GDB_ID.NULL, EgtGetNextPart(nFirstVeinId), EgtGetFirstPart()) + ' Ciclo sui pezzi inseriti + Dim nVeinId As Integer = nFirstVeinId + While nVeinId <> GDB_ID.NULL + ' Assegno Id originale + EgtSetInfo(nVeinId, KEY_ORI_ID, nFirstPartId + nVeinId - nFirstVeinId) + ' Nascondo scritte, sono nel layer "Region" + Dim nVeinRegId As Integer = EgtGetFirstNameInGroup(nVeinId, NAME_REGION) + Dim nCurrId As Integer = EgtGetFirstInGroup(nVeinRegId) + While nCurrId <> GDB_ID.NULL If EgtGetType(nCurrId) = GDB_TY.EXT_TEXT Then EgtSetStatus(nCurrId, GDB_ST.OFF) nCurrId = EgtGetNext(nCurrId) - End While - ' Nascondo layer con valori angoli dei lati - nCurrId = EgtGetFirstNameInGroup(nVeinId2, SIDE_ANGLE_LAYER) - EgtSetStatus(nCurrId, GDB_ST.OFF) - ' Se necessario, ripristino il contesto originale - If nMainCtx > 0 Then EgtSetCurrentContext(nMainCtx) - Return True - End Function + End While + ' Nascondo layer con valori angoli dei lati + nCurrId = EgtGetFirstNameInGroup(nVeinId, SIDE_ANGLE_LAYER) + EgtSetStatus(nCurrId, GDB_ST.OFF) + ' Passo al pezzo successivo + nVeinId = EgtGetNextPart(nVeinId) + End While + ' Se necessario, ripristino il contesto originale + If nMainCtx > 0 Then EgtSetCurrentContext(nMainCtx) + Return True + End Function - Friend Function AddParts(sPartFile As String, nFirstPartId As Integer) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nMainCtx = SetVeinContext() - If nMainCtx = 0 Then Return False - ' Inserisco i pezzi e recupero Id primo pezzo inserito - Dim nFirstVeinId As Integer = EgtGetLastPart() - EgtInsertFile(sPartFile) - nFirstVeinId = If(nFirstVeinId <> GDB_ID.NULL, EgtGetNextPart(nFirstVeinId), EgtGetFirstPart()) - ' Ciclo sui pezzi inseriti - Dim nVeinId As Integer = nFirstVeinId - While nVeinId <> GDB_ID.NULL - ' Assegno Id originale - EgtSetInfo(nVeinId, KEY_ORI_ID, nFirstPartId + nVeinId - nFirstVeinId) - ' Nascondo scritte, sono nel layer "Region" - Dim nVeinRegId As Integer = EgtGetFirstNameInGroup(nVeinId, NAME_REGION) - Dim nCurrId As Integer = EgtGetFirstInGroup(nVeinRegId) - While nCurrId <> GDB_ID.NULL - If EgtGetType(nCurrId) = GDB_TY.EXT_TEXT Then EgtSetStatus(nCurrId, GDB_ST.OFF) - nCurrId = EgtGetNext(nCurrId) - End While - ' Nascondo layer con valori angoli dei lati - nCurrId = EgtGetFirstNameInGroup(nVeinId, SIDE_ANGLE_LAYER) - EgtSetStatus(nCurrId, GDB_ST.OFF) - ' Passo al pezzo successivo - nVeinId = EgtGetNextPart(nVeinId) - End While - ' Se necessario, ripristino il contesto originale - If nMainCtx > 0 Then EgtSetCurrentContext(nMainCtx) - Return True - End Function + ' Questa funzione gestisce l'insermento dei pezzi disgenatoi direttamente in DrawPage + Friend Function AddPartFromDraw(nPartId As Integer, Optional bPack As Boolean = False) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Se esiste già il pezzo nel VM, esco + If GetVeinPartId(nPartId) <> GDB_ID.NULL Then Return True + ' Verifico validità pezzo + If nPartId = GDB_ID.NULL Then Return False + ' Salvo il pezzo su file temporaneo + Dim sTmpDir As String = String.Empty + If Not EgtGetTempDir(sTmpDir) Then Return False + Dim sTmpFile As String = sTmpDir & "\FlatPartVme.Nge" + EgtSaveObjToFile(nPartId, sTmpFile, NGE.BIN) + ' Carico il file nel VM + Dim bOk As Boolean = My.Computer.FileSystem.FileExists(sTmpFile) + If bOk Then + bOk = AddPart(sTmpFile, nPartId) + ' Ne aggiorno la visualizzazione + ZoomAll() + ' Cancello il file + My.Computer.FileSystem.DeleteFile(sTmpFile) + End If + Return bOk + End Function - ' Questa funzione gestisce l'insermento dei pezzi disgenatoi direttamente in DrawPage - Friend Function AddPartFromDraw(nPartId As Integer, Optional bPack As Boolean = False) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Se esiste già il pezzo nel VM, esco - If GetVeinPartId(nPartId) <> GDB_ID.NULL Then Return True - ' Verifico validità pezzo - If nPartId = GDB_ID.NULL Then Return False - ' Salvo il pezzo su file temporaneo - Dim sTmpDir As String = String.Empty - If Not EgtGetTempDir(sTmpDir) Then Return False - Dim sTmpFile As String = sTmpDir & "\FlatPartVme.Nge" - EgtSaveObjToFile(nPartId, sTmpFile, NGE.BIN) - ' Carico il file nel VM - Dim bOk As Boolean = My.Computer.FileSystem.FileExists(sTmpFile) - If bOk Then - bOk = AddPart(sTmpFile, nPartId) - ' Ne aggiorno la visualizzazione - ZoomAll() - ' Cancello il file - My.Computer.FileSystem.DeleteFile(sTmpFile) - End If - Return bOk - End Function + Friend Function UpdatePart(nPartId As Integer) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + EgtSetInfo(nPartId, KEY_ORI_ID, nPartId) + ' Recupero il pezzo nel VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + Dim nId = GetVeinPartId(nOriId) + If nId <> GDB_ID.NULL Then EgtSetInfo(nId, KEY_ORI_ID, nPartId) + EgtSetCurrentContext(nMainCtx) + Return True + End Function - Friend Function UpdatePart(nPartId As Integer) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - EgtSetInfo(nPartId, KEY_ORI_ID, nPartId) - ' Recupero il pezzo nel VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - Dim nId = GetVeinPartId(nOriId) - If nId <> GDB_ID.NULL Then EgtSetInfo(nId, KEY_ORI_ID, nPartId) - EgtSetCurrentContext(nMainCtx) - Return True - End Function + Friend Function OnInsertPartInRaw(nPartId As Integer, Optional bDeselect As Boolean = True) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Se non c'è la fotografia, esco + Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() + If nPhotoId = GDB_ID.NULL Then Return If(bDeselect, OnDeselectPart(nPartId), True) + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + ' Verifico se esiste già la foto del progetto corrente nel VeinMatching + Dim sPhoto As String = String.Empty + EgtGetPhotoPath(nPhotoId, sPhoto) + Dim sVeinPhoto As String = String.Empty + GetVeinPhotoPath(sVeinPhoto) + ' Se necessario, copio la foto + If String.Compare(sPhoto, sVeinPhoto, True) <> 0 Then + If Not CopyPhoto(nPhotoId) Then Return False + End If + ' Recupero il pezzo nel VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + Dim nId = GetVeinPartId(nOriId) + If nId <> GDB_ID.NULL Then + ' Recupero la regione del pezzo + Dim nRegId As Integer = GetVeinPartRegionId(nId) + ' Gli assegno la texture della foto + EgtSetTextureName(nRegId, GetPhotoName()) + ' Sistemo il riferimento della texture + Dim refTxr As New Frame3d + GetVeinRefPhoto(nMainCtx, nPartId, nId, refTxr) + EgtSetTextureFrame(nRegId, refTxr, GDB_RT.GLOB) + ' Sistemo il colore + Dim colWhite As New Color3d(255, 255, 255, 100) + EgtSetColor(nRegId, colWhite) + ' Se richiesto, eseguo deselezione + If bDeselect Then EgtDeselectObj(nId) + End If + EgtDraw() + EgtSetCurrentContext(nMainCtx) + Return True + End Function - Friend Function OnInsertPartInRaw(nPartId As Integer, Optional bDeselect As Boolean = True) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Se non c'è la fotografia, esco - Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() - If nPhotoId = GDB_ID.NULL Then Return If(bDeselect, OnDeselectPart(nPartId), True) - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - ' Verifico se esiste già la foto del progetto corrente nel VeinMatching - Dim sPhoto As String = String.Empty - EgtGetPhotoPath(nPhotoId, sPhoto) - Dim sVeinPhoto As String = String.Empty - GetVeinPhotoPath(sVeinPhoto) - ' Se necessario, copio la foto - If String.Compare(sPhoto, sVeinPhoto, True) <> 0 Then - If Not CopyPhoto(nPhotoId) Then Return False - End If - ' Recupero il pezzo nel VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - Dim nId = GetVeinPartId(nOriId) - If nId <> GDB_ID.NULL Then - ' Recupero la regione del pezzo - Dim nRegId As Integer = GetVeinPartRegionId(nId) - ' Gli assegno la texture della foto - EgtSetTextureName(nRegId, GetPhotoName()) - ' Sistemo il riferimento della texture - Dim refTxr As New Frame3d - GetVeinRefPhoto(nMainCtx, nPartId, nId, refTxr) - EgtSetTextureFrame(nRegId, refTxr, GDB_RT.GLOB) - ' Sistemo il colore - Dim colWhite As New Color3d(255, 255, 255, 100) - EgtSetColor(nRegId, colWhite) - ' Se richiesto, eseguo deselezione - If bDeselect Then EgtDeselectObj(nId) - End If - EgtDraw() - EgtSetCurrentContext(nMainCtx) - Return True - End Function + Friend Function OnMovePartInRaw(nPartId As Integer) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Se non c'è la fotografia, esco + Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() + If nPhotoId = GDB_ID.NULL Then Return True + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + ' Recupero il pezzo nel VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + Dim nId = GetVeinPartId(nOriId) + If nId <> GDB_ID.NULL Then + ' Recupero la regione del pezzo + Dim nRegId As Integer = GetVeinPartRegionId(nId) + ' Sistemo il riferimento della texture + Dim refTxr As New Frame3d + GetVeinRefPhoto(nMainCtx, nPartId, nId, refTxr) + EgtSetTextureFrame(nRegId, refTxr, GDB_RT.GLOB) + End If + EgtDraw() + EgtSetCurrentContext(nMainCtx) + Return True + End Function - Friend Function OnMovePartInRaw(nPartId As Integer) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Se non c'è la fotografia, esco - Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() - If nPhotoId = GDB_ID.NULL Then Return True - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - ' Recupero il pezzo nel VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - Dim nId = GetVeinPartId(nOriId) - If nId <> GDB_ID.NULL Then - ' Recupero la regione del pezzo - Dim nRegId As Integer = GetVeinPartRegionId(nId) - ' Sistemo il riferimento della texture - Dim refTxr As New Frame3d - GetVeinRefPhoto(nMainCtx, nPartId, nId, refTxr) - EgtSetTextureFrame(nRegId, refTxr, GDB_RT.GLOB) - End If - EgtDraw() - EgtSetCurrentContext(nMainCtx) - Return True - End Function + Friend Function OnRemovePartFromRaw(nPartId As Integer, Optional bDeselect As Boolean = True) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Se non c'è la fotografia, esco + Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() + If nPhotoId = GDB_ID.NULL Then Return If(bDeselect, OnDeselectPart(nPartId), True) + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + ' Tolgo la texture dal pezzo + EgtSetCurrentContext(m_nVeinCtx) + Dim nId As Integer = GetVeinPartId(nOriId) + If nId <> GDB_ID.NULL Then + ' Recupero la regione del pezzo + Dim nRegId As Integer = GetVeinPartRegionId(nId) + ' Gli tolgo la texture + EgtRemoveTextureData(nRegId) + ' Sistemo il colore + Dim colAqua As New Color3d(0, 255, 255, 25) + EgtSetColor(nRegId, colAqua) + ' Se richiesto, eseguo deselezione + If bDeselect Then EgtDeselectObj(nId) + End If + EgtDraw() + EgtSetCurrentContext(nMainCtx) + Return True + End Function - Friend Function OnRemovePartFromRaw(nPartId As Integer, Optional bDeselect As Boolean = True) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Se non c'è la fotografia, esco - Dim nPhotoId As Integer = m_MainWindow.m_CurrentProjectPageUC.GetPhoto() - If nPhotoId = GDB_ID.NULL Then Return If(bDeselect, OnDeselectPart(nPartId), True) - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - ' Tolgo la texture dal pezzo - EgtSetCurrentContext(m_nVeinCtx) - Dim nId As Integer = GetVeinPartId(nOriId) - If nId <> GDB_ID.NULL Then - ' Recupero la regione del pezzo - Dim nRegId As Integer = GetVeinPartRegionId(nId) - ' Gli tolgo la texture - EgtRemoveTextureData(nRegId) - ' Sistemo il colore - Dim colAqua As New Color3d(0, 255, 255, 25) - EgtSetColor(nRegId, colAqua) - ' Se richiesto, eseguo deselezione - If bDeselect Then EgtDeselectObj(nId) - End If - EgtDraw() - EgtSetCurrentContext(nMainCtx) - Return True - End Function + Friend Function OnSelectPart(nPartId As Integer, Optional bDraw As Boolean = True) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + ' Recupero il pezzo nel VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + Dim nId = GetVeinPartId(nOriId) + Dim bFound As Boolean = nId <> GDB_ID.NULL + ' Lo seleziono e aggiorno visualizzazione + If bFound Then + EgtSelectObj(nId) + If bDraw Then EgtDraw() + End If + ' Ritorno al contesto originale + EgtSetCurrentContext(nMainCtx) + Return bFound + End Function - Friend Function OnSelectPart(nPartId As Integer, Optional bDraw As Boolean = True) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - ' Recupero il pezzo nel VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - Dim nId = GetVeinPartId(nOriId) - Dim bFound As Boolean = nId <> GDB_ID.NULL - ' Lo seleziono e aggiorno visualizzazione - If bFound Then - EgtSelectObj(nId) - If bDraw Then EgtDraw() - End If - ' Ritorno al contesto originale - EgtSetCurrentContext(nMainCtx) - Return bFound - End Function + Friend Function OnDeselectPart(nPartId As Integer) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Recupero il nome originale del pezzo + Dim nOriId As Integer = nPartId + EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) + ' Recupero il pezzo nel VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + Dim nId = GetVeinPartId(nOriId) + Dim bFound As Boolean = nId <> GDB_ID.NULL + ' Lo seleziono + If bFound Then EgtDeselectObj(nId) + ' Aggiorno visualizzazione e ritorno al contesto originale + EgtDraw() + EgtSetCurrentContext(nMainCtx) + Return bFound + End Function - Friend Function OnDeselectPart(nPartId As Integer) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Recupero il nome originale del pezzo - Dim nOriId As Integer = nPartId - EgtGetInfo(nPartId, KEY_ORI_ID, nOriId) - ' Recupero il pezzo nel VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - Dim nId = GetVeinPartId(nOriId) - Dim bFound As Boolean = nId <> GDB_ID.NULL - ' Lo seleziono - If bFound Then EgtDeselectObj(nId) - ' Aggiorno visualizzazione e ritorno al contesto originale - EgtDraw() - EgtSetCurrentContext(nMainCtx) - Return bFound - End Function + Friend Function AssemblyParts() As Boolean + CreateListAlzAndFront() + LinkReferencesOnAlette() + EgtSetCurrentContext(m_nVeinCtx) + Dim Item As Aletta + For Each Item In m_ListALZFront + ' inizio a posizionare i pezzi nel piano nella posizione corretta pronti per essere ruotati + Dim ptSRef As Point3d + Dim ptERef As Point3d + Dim ptE As Point3d - Friend Function AssemblyParts() As Boolean - CreateListAlzAndFront() - LinkReferencesOnAlette() - EgtSetCurrentContext(m_nVeinCtx) - Dim Item As Aletta - For Each Item In m_ListALZFront - ' inizio a posizionare i pezzi nel piano nella posizione corretta pronti per essere ruotati - Dim ptSRef As Point3d - Dim ptERef As Point3d - Dim ptE As Point3d + If Not EgtStartPoint(Item.IdSideRef, GDB_ID.ROOT, ptSRef) Then Return False + If Not EgtEndPoint(Item.IdSideRef, GDB_ID.ROOT, ptERef) Then Return False + If Not EgtEndPoint(Item.SideId, GDB_ID.ROOT, ptE) Then Return False + Dim vtMove As Vector3d = ptSRef - ptE + EgtMove(Item.PartId, vtMove, GDB_RT.GLOB) + ' ruoto i pezzi + Dim vtRot As Vector3d = ptERef - ptSRef + EgtRotate(Item.PartId, ptSRef, vtRot, -90, GDB_RT.GLOB) + Next + Draw() - If Not EgtStartPoint(Item.IdSideRef, GDB_ID.ROOT, ptSRef) Then Return False - If Not EgtEndPoint(Item.IdSideRef, GDB_ID.ROOT, ptERef) Then Return False - If Not EgtEndPoint(Item.SideId, GDB_ID.ROOT, ptE) Then Return False - Dim vtMove As Vector3d = ptSRef - ptE - EgtMove(Item.PartId, vtMove, GDB_RT.GLOB) - ' ruoto i pezzi - Dim vtRot As Vector3d = ptERef - ptSRef - EgtRotate(Item.PartId, ptSRef, vtRot, -90, GDB_RT.GLOB) - Next - Draw() + Return True + End Function - Return True - End Function + Friend Function OnSelectAll() As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Eseguo selezione di tutti i pezzi + EgtSelectAll() + EgtDraw() + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return True + End Function - Friend Function OnSelectAll() As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Eseguo selezione di tutti i pezzi - EgtSelectAll() - EgtDraw() - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return True - End Function + Friend Function OnDeselectAll() As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Eseguo deselezione di tutti i pezzi + EgtDeselectAll() + EgtDraw() + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return True + End Function - Friend Function OnDeselectAll() As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Eseguo deselezione di tutti i pezzi - EgtDeselectAll() - EgtDraw() - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return True - End Function + Friend Function Draw() As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Eseguo Zoom + EgtDraw() + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return True + End Function - Friend Function Draw() As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Eseguo Zoom - EgtDraw() - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return True - End Function + Friend Function ZoomAll() As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Eseguo Zoom + EgtZoom(ZM.ALL) + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return True + End Function - Friend Function ZoomAll() As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Eseguo Zoom - EgtZoom(ZM.ALL) - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return True - End Function + Friend Function Open(sFilePath As String) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Apro il file + EgtSetCurrentContext(m_nVeinCtx) + Dim bOk As Boolean = EgtOpenFile(sFilePath) + ' Aggiorno contatore foto + Dim nPhId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP)) + While nPhId <> GDB_ID.NULL + Dim sName As String = String.Empty + EgtGetName(nPhId, sName) + Dim nVal As Integer = 0 + If StringToInt(sName.Replace(PHOTO_NAME, ""), nVal) Then m_nPhoto = Math.Max(m_nPhoto, nVal) + nPhId = EgtGetNext(nPhId) + End While + ' Eseguo zoom all + EgtZoom(ZM.ALL) + ' Ripristino il contesto originale + EgtSetCurrentContext(nMainCtx) + Return bOk + End Function - Friend Function Open(sFilePath As String) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Apro il file - EgtSetCurrentContext(m_nVeinCtx) - Dim bOk As Boolean = EgtOpenFile(sFilePath) - ' Aggiorno contatore foto - Dim nPhId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP)) - While nPhId <> GDB_ID.NULL - Dim sName As String = String.Empty - EgtGetName(nPhId, sName) - Dim nVal As Integer = 0 - If StringToInt(sName.Replace(PHOTO_NAME, ""), nVal) Then m_nPhoto = Math.Max(m_nPhoto, nVal) - nPhId = EgtGetNext(nPhId) - End While - ' Eseguo zoom all - EgtZoom(ZM.ALL) - ' Ripristino il contesto originale - EgtSetCurrentContext(nMainCtx) - Return bOk - End Function + Friend Function Save(sFilePath As String) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx As Integer = EgtGetCurrentContext() + ' Salvo il file + EgtSetCurrentContext(m_nVeinCtx) + Dim bOk As Boolean = EgtSaveFile(sFilePath, NGE.CMPTEXT) + ' Ripristino il contesto originale + EgtSetCurrentContext(nMainCtx) + Return bOk + End Function - Friend Function Save(sFilePath As String) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx As Integer = EgtGetCurrentContext() - ' Salvo il file - EgtSetCurrentContext(m_nVeinCtx) - Dim bOk As Boolean = EgtSaveFile(sFilePath, NGE.CMPTEXT) - ' Ripristino il contesto originale - EgtSetCurrentContext(nMainCtx) - Return bOk - End Function - - Friend Function Export(sFilePath As String) As Boolean - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return True - ' Recupero il contesto corrente (principale) - Dim nMainCtx = EgtGetCurrentContext() - ' Esporto il file come immagine - EgtSetCurrentContext(m_nVeinCtx) - Dim bOk As Boolean = (EgtGetFileType(sFilePath) = FT.IMG) - bOk = bOk AndAlso EgtGetImage(EgtGetShowMode(), New Color3d(255, 255, 255), New Color3d(255, 255, 255), + Friend Function Export(sFilePath As String) As Boolean + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return True + ' Recupero il contesto corrente (principale) + Dim nMainCtx = EgtGetCurrentContext() + ' Esporto il file come immagine + EgtSetCurrentContext(m_nVeinCtx) + Dim bOk As Boolean = (EgtGetFileType(sFilePath) = FT.IMG) + bOk = bOk AndAlso EgtGetImage(EgtGetShowMode(), New Color3d(255, 255, 255), New Color3d(255, 255, 255), m_nImgWidth, m_nImgHeight, sFilePath) - ' Ripristino il contesto originale - EgtSetCurrentContext(nMainCtx) - Return bOk - End Function + ' Ripristino il contesto originale + EgtSetCurrentContext(nMainCtx) + Return bOk + End Function - Private Function GetPhotoName() As String - Return PHOTO_NAME & m_nPhoto.ToString() - End Function + Private Function GetPhotoName() As String + Return PHOTO_NAME & m_nPhoto.ToString() + End Function - Private Function CopyPhoto(nPhotoId As Integer) As Boolean - ' Recupero il contesto corrente - Dim nCurrCtx = EgtGetCurrentContext() - ' Recupero i dati della fotografia - Dim sPath As String = String.Empty - If Not EgtGetPhotoPath(nPhotoId, sPath) OrElse Not File.Exists(sPath) Then Return False - Dim ptOri As Point3d - If Not EgtGetPhotoOrigin(nPhotoId, ptOri) Then Return False - Dim ptCen As Point3d - If Not EgtGetPhotoCenter(nPhotoId, ptCen) Then Return False - Dim dDimX, dDimY As Double - If Not EgtGetPhotoDimensions(nPhotoId, dDimX, dDimY) Then Return False - Dim ptMin, ptMax As Point3d - If Not EgtGetBBoxGlob(nPhotoId, GDB_BB.STANDARD, ptMin, ptMax) Then Return False - ' Passo al contesto del VeinMatching - EgtSetCurrentContext(m_nVeinCtx) - ' Se non esiste il gruppo per le foto, lo creo - Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP) - If nPhGrpId = GDB_ID.NULL Then - nPhGrpId = EgtCreateGroup(GDB_ID.ROOT) - If nPhGrpId = GDB_ID.NULL Then - EgtSetCurrentContext(nCurrCtx) - Return False - End If - EgtSetName(nPhGrpId, PHOTO_GRP) - End If - EgtSetLevel(nPhGrpId, GDB_LV.SYSTEM) - EgtSetStatus(nPhGrpId, GDB_ST.OFF) - ' Carico la fotografia - m_nPhoto += 1 - Dim nNewId As Integer = EgtAddPhoto2(GetPhotoName(), sPath, ptOri, ptCen, dDimX, dDimY, nPhGrpId, ptMin, ptMax) - ' Ritorno al contesto corrente - EgtSetCurrentContext(nCurrCtx) - Return nNewId <> GDB_ID.NULL - End Function + Private Function CopyPhoto(nPhotoId As Integer) As Boolean + ' Recupero il contesto corrente + Dim nCurrCtx = EgtGetCurrentContext() + ' Recupero i dati della fotografia + Dim sPath As String = String.Empty + If Not EgtGetPhotoPath(nPhotoId, sPath) OrElse Not File.Exists(sPath) Then Return False + Dim ptOri As Point3d + If Not EgtGetPhotoOrigin(nPhotoId, ptOri) Then Return False + Dim ptCen As Point3d + If Not EgtGetPhotoCenter(nPhotoId, ptCen) Then Return False + Dim dDimX, dDimY As Double + If Not EgtGetPhotoDimensions(nPhotoId, dDimX, dDimY) Then Return False + Dim ptMin, ptMax As Point3d + If Not EgtGetBBoxGlob(nPhotoId, GDB_BB.STANDARD, ptMin, ptMax) Then Return False + ' Passo al contesto del VeinMatching + EgtSetCurrentContext(m_nVeinCtx) + ' Se non esiste il gruppo per le foto, lo creo + Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP) + If nPhGrpId = GDB_ID.NULL Then + nPhGrpId = EgtCreateGroup(GDB_ID.ROOT) + If nPhGrpId = GDB_ID.NULL Then + EgtSetCurrentContext(nCurrCtx) + Return False + End If + EgtSetName(nPhGrpId, PHOTO_GRP) + End If + EgtSetLevel(nPhGrpId, GDB_LV.SYSTEM) + EgtSetStatus(nPhGrpId, GDB_ST.OFF) + ' Carico la fotografia + m_nPhoto += 1 + Dim nNewId As Integer = EgtAddPhoto2(GetPhotoName(), sPath, ptOri, ptCen, dDimX, dDimY, nPhGrpId, ptMin, ptMax) + ' Ritorno al contesto corrente + EgtSetCurrentContext(nCurrCtx) + Return nNewId <> GDB_ID.NULL + End Function - Private Function SetVeinContext() As Integer - ' Verifico esista il contesto del VeinMatching - If m_nVeinCtx = 0 Then Return 0 - ' Recupero il contesto corrente - Dim nCurrCtx = EgtGetCurrentContext() - ' Se necessario, cambio contesto - If m_nVeinCtx <> nCurrCtx Then - If EgtSetCurrentContext(m_nVeinCtx) Then - Return nCurrCtx - Else - Return 0 - End If - Else - Return -1 - End If - End Function + Private Function SetVeinContext() As Integer + ' Verifico esista il contesto del VeinMatching + If m_nVeinCtx = 0 Then Return 0 + ' Recupero il contesto corrente + Dim nCurrCtx = EgtGetCurrentContext() + ' Se necessario, cambio contesto + If m_nVeinCtx <> nCurrCtx Then + If EgtSetCurrentContext(m_nVeinCtx) Then + Return nCurrCtx + Else + Return 0 + End If + Else + Return -1 + End If + End Function - Private Function GetVeinPhoto() As Integer - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return GDB_ID.NULL - ' Recupero Id foto - Dim nId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP), GetPhotoName()) - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return nId - End Function + Private Function GetVeinPhoto() As Integer + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return GDB_ID.NULL + ' Recupero Id foto + Dim nId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP), GetPhotoName()) + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return nId + End Function - Private Function GetVeinPhotoPath(ByRef sPath As String) As Boolean - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return False - ' Recupero path dell'immagine della foto - Dim nId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP), GetPhotoName()) - Dim bOk As Boolean = EgtGetPhotoPath(nId, sPath) - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return bOk - End Function + Private Function GetVeinPhotoPath(ByRef sPath As String) As Boolean + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return False + ' Recupero path dell'immagine della foto + Dim nId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP), GetPhotoName()) + Dim bOk As Boolean = EgtGetPhotoPath(nId, sPath) + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return bOk + End Function - Private Function GetVeinRefPhoto(nMainCtx As Integer, nPartId As Integer, nVePartId As Integer, ByRef refPhoto As Frame3d) As Boolean - ' Riferimento della foto rispetto al riferimento del pezzo nel contesto principale - If Not EgtSetCurrentContext(nMainCtx) Then Return False - ' riferimento della foto in globale - If Not m_MainWindow.m_CurrentProjectPageUC.GetPhotoTextureRef(refPhoto) Then Return False - ' riferimento del pezzo in globale - Dim nRefId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(nPartId, NAME_REGION), REF_NAME) - Dim refPart As New Frame3d - If Not EgtFrame(nRefId, GDB_ID.ROOT, refPart) Then Return False - ' porto il riferimento della foto in quello del pezzo - refPhoto.ToLoc(refPart) - ' Riferimento della foto rispetto al riferimento del pezzo in VeinMatching - If Not EgtSetCurrentContext(m_nVeinCtx) Then Return False - ' riferimento del pezzo in globale - Dim nVeRefId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(nVePartId, NAME_REGION), REF_NAME) - Dim refVePart As New Frame3d - If Not EgtFrame(nVeRefId, GDB_ID.ROOT, refVePart) Then Return False - refPhoto.ToGlob(refVePart) - Return True - End Function + Private Function GetVeinRefPhoto(nMainCtx As Integer, nPartId As Integer, nVePartId As Integer, ByRef refPhoto As Frame3d) As Boolean + ' Riferimento della foto rispetto al riferimento del pezzo nel contesto principale + If Not EgtSetCurrentContext(nMainCtx) Then Return False + ' riferimento della foto in globale + If Not m_MainWindow.m_CurrentProjectPageUC.GetPhotoTextureRef(refPhoto) Then Return False + ' riferimento del pezzo in globale + Dim nRefId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(nPartId, NAME_REGION), REF_NAME) + Dim refPart As New Frame3d + If Not EgtFrame(nRefId, GDB_ID.ROOT, refPart) Then Return False + ' porto il riferimento della foto in quello del pezzo + refPhoto.ToLoc(refPart) + ' Riferimento della foto rispetto al riferimento del pezzo in VeinMatching + If Not EgtSetCurrentContext(m_nVeinCtx) Then Return False + ' riferimento del pezzo in globale + Dim nVeRefId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(nVePartId, NAME_REGION), REF_NAME) + Dim refVePart As New Frame3d + If Not EgtFrame(nVeRefId, GDB_ID.ROOT, refVePart) Then Return False + refPhoto.ToGlob(refVePart) + Return True + End Function - Private Function GetVeinPartId(nPartId As Integer) As Integer - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return GDB_ID.NULL - ' Cerco il pezzo in Vein che corrisponde al pezzo desiderato - Dim nId As Integer = EgtGetFirstPart() - While nId <> GDB_ID.NULL - Dim nOriId As Integer - If EgtGetInfo(nId, KEY_ORI_ID, nOriId) AndAlso nOriId = nPartId Then - Exit While - End If - nId = EgtGetNextPart(nId) - End While - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return nId - End Function + Private Function GetVeinPartId(nPartId As Integer) As Integer + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return GDB_ID.NULL + ' Cerco il pezzo in Vein che corrisponde al pezzo desiderato + Dim nId As Integer = EgtGetFirstPart() + While nId <> GDB_ID.NULL + Dim nOriId As Integer + If EgtGetInfo(nId, KEY_ORI_ID, nOriId) AndAlso nOriId = nPartId Then + Exit While + End If + nId = EgtGetNextPart(nId) + End While + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return nId + End Function - Private Function GetVeinPartRegionId(nVeinPartId As Integer) As Integer - ' Imposto VeinMatching context - Dim nCurrCtx = SetVeinContext() - If nCurrCtx = 0 Then Return GDB_ID.NULL - ' Gruppo regione - Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nVeinPartId, NAME_REGION) - ' Entità superficie regione piatta - Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) - While nRegId <> GDB_ID.NULL - If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then - Exit While - End If - nRegId = EgtGetNext(nRegId) - End While - ' Se necessario, ripristino il contesto originale - If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) - Return nRegId - End Function + Private Function GetVeinPartRegionId(nVeinPartId As Integer) As Integer + ' Imposto VeinMatching context + Dim nCurrCtx = SetVeinContext() + If nCurrCtx = 0 Then Return GDB_ID.NULL + ' Gruppo regione + Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nVeinPartId, NAME_REGION) + ' Entità superficie regione piatta + Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) + While nRegId <> GDB_ID.NULL + If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then + Exit While + End If + nRegId = EgtGetNext(nRegId) + End While + ' Se necessario, ripristino il contesto originale + If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) + Return nRegId + End Function End Module Public Class Aletta - Private m_PartId As Integer = -1 - Public ReadOnly Property PartId As Integer - Get - Return m_PartId - End Get - End Property + Private m_PartId As Integer = -1 + Public ReadOnly Property PartId As Integer + Get + Return m_PartId + End Get + End Property - Private m_SideId As Integer = -1 - Public ReadOnly Property SideId As Integer - Get - Return m_SideId - End Get - End Property + Private m_SideId As Integer = -1 + Public ReadOnly Property SideId As Integer + Get + Return m_SideId + End Get + End Property - Private m_RefGUID As String = String.Empty - Public ReadOnly Property RefGUID As String - Get - Return m_RefGUID - End Get - End Property + Private m_RefGUID As String = String.Empty + Public ReadOnly Property RefGUID As String + Get + Return m_RefGUID + End Get + End Property - Private m_IdSideRef As Integer = -1 - Public Property IdSideRef As Integer - Get - Return m_IdSideRef - End Get - Set(value As Integer) - m_IdSideRef = value - End Set - End Property + Private m_IdSideRef As Integer = -1 + Public Property IdSideRef As Integer + Get + Return m_IdSideRef + End Get + Set(value As Integer) + m_IdSideRef = value + End Set + End Property - Sub New(nId As Integer) - m_PartId = nId + Sub New(nId As Integer) + m_PartId = nId - ' Recupero l'info legata al lato che contiene iil riferiemnto - Dim nOutLoopLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_OUTLOOP) - ' Entità lato - Dim nSideId As Integer = EgtGetFirstInGroup(nOutLoopLayId) - While nSideId <> GDB_ID.NULL - Dim sInfoGUID As String = String.Empty - EgtGetInfo(nSideId, "RefAF", sInfoGUID) - If Not String.IsNullOrEmpty(sInfoGUID) Then - m_RefGUID = sInfoGUID - m_SideId = nSideId - Exit While - End If - nSideId = EgtGetNext(nSideId) - End While - End Sub + ' Recupero l'info legata al lato che contiene iil riferiemnto + Dim nOutLoopLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_OUTLOOP) + ' Entità lato + Dim nSideId As Integer = EgtGetFirstInGroup(nOutLoopLayId) + While nSideId <> GDB_ID.NULL + Dim sInfoGUID As String = String.Empty + EgtGetInfo(nSideId, "RefAF", sInfoGUID) + If Not String.IsNullOrEmpty(sInfoGUID) Then + m_RefGUID = sInfoGUID + m_SideId = nSideId + Exit While + End If + nSideId = EgtGetNext(nSideId) + End While + End Sub End Class