Files
omagoffice/MySceneHost/MySceneHostVM.vb
T
DarioS 2d39dcacc3 OmagOFFICE 2.3k1 :
- modifiche per escludere spessore sovratavola da scalatura foto fatte con CameraMng
- all'esportazione verso la macchina le foto vengono rese non più scalabili per lo spessore pezzo (come gli scan)
- corretta scrittura dati in interfaccia per problema decimali che falsano la posizione del cursore.
2021-11-16 06:37:37 +01:00

820 lines
38 KiB
VB.net

Imports System.Windows.Interop
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Imports System.Text.RegularExpressions
Public Class MySceneHostVM
Inherits EgtWPFLib5.SceneHostVM
#Region "CONSTRUCTOR"
Sub New()
MyBase.New()
AddHandler MainController.OnNewProject, AddressOf OnNewProject
AddHandler MainController.OnOpenProject, AddressOf OnOpenProject
AddHandler MainController.OnSavingProject, AddressOf OnSavingProject
AddHandler MainController.OnSavedProject, AddressOf OnSavedProject
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Overrides Sub InitScene()
InitSceneEvents()
' Inizializzazione Scena
PreInitializeScene()
' Se tutto bene
If MainScene.Init() And OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.OFFICE_BASE) Then
PostInitializeScene()
' Imposto stato gestione mouse diretto della scena a nessuno
MainScene.SetStatusNull()
' Recupero e imposto handle finestra principale
Dim hMainWnd As IntPtr = New WindowInteropHelper(Application.Current.MainWindow).Handle
EgtSetMainWindowHandle(hMainWnd)
' inizializzo gestore lavorazioni
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir)
Return
End If
' Problemi
' Se manca la chiave
If OmagOFFICEMap.refMainWindowVM.MainWindowM.nKeyLevel = -1 Or OmagOFFICEMap.refMainWindowVM.MainWindowM.nKeyLevel = -2 Then
EgtOutLog("Missing Dongle")
' Box di avviso chiave mancante : "Chiave non presente. \n Inserirla e riavviare il programma." "Errore"
Dim sText As String = EgtMsg(MSG_MISSINGKEYWD + 2) & vbCrLf & EgtMsg(MSG_MISSINGKEYWD + 3)
Dim sTitle As String = EgtMsg(MSG_MISSINGKEYWD + 1)
MessageBox.Show(sText, sTitle, MessageBoxButton.OK, MessageBoxImage.Error)
' Altrimenti manca la licenza
Else
EgtOutLog("Problems with Licence")
' Box di avviso licenza con problemi : "Programma senza licenza. \n Caricala e riavvia il programma." "Errore"
Dim sText As String = EgtMsg(MSG_MISSINGKEYWD + 5) & vbCrLf & EgtMsg(MSG_MISSINGKEYWD + 6)
Dim sTitle As String = EgtMsg(MSG_MISSINGKEYWD + 1)
If MessageBox.Show(sText, sTitle, MessageBoxButton.OKCancel, MessageBoxImage.Error) = MessageBoxResult.OK Then
' Apro dialogo per richiesta file licenza
Dim LicDlg As New Microsoft.Win32.OpenFileDialog() With {
.DefaultExt = ".lic",
.Filter = "Licences (.lic)|*.lic",
.CheckFileExists = True,
.ValidateNames = True
}
If LicDlg.ShowDialog() = True Then
' Recupero il direttorio del file
Dim sDir As String = Path.GetDirectoryName(LicDlg.FileName)
' Se il file non è già nel direttorio di configurazione lo copio
If Not String.Equals(Path.GetFullPath(sDir), Path.GetFullPath(OmagOFFICEMap.refMainWindowVM.MainWindowM.sConfigDir), StringComparison.OrdinalIgnoreCase) Then
Try
File.Copy(LicDlg.FileName, Path.Combine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sConfigDir, LicDlg.SafeFileName), True)
Catch ex As Exception
End Try
End If
' Imposto il nuovo file di licenza nell'Ini
WriteMainPrivateProfileString(S_GENERAL, K_LICENCE, LicDlg.SafeFileName)
End If
End If
End If
' Chiudo il programma
End
End Sub
Public Overrides Sub InitSceneEvents()
AddHandler MainScene.OnMouseDownScene, AddressOf OnMouseDownScene
AddHandler MainScene.OnMouseMoveScene, AddressOf OnMouseMoveScene
AddHandler MainScene.OnMouseUpScene, AddressOf OnMouseUpScene
AddHandler MainScene.KeyDown, AddressOf OnKeyDownScene
AddHandler MainScene.OnCursorPos, AddressOf OnCursorPos
AddHandler MainScene.OnShowDistance, AddressOf OnShowDistance
AddHandler MainScene.OnChangedSnapPointType, AddressOf OnChangedSnapPointType
End Sub
Private Sub PreInitializeScene()
' imposto colore di default
Dim DefColor As New Color3d(0, 0, 0)
GetMainPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor)
MainScene.SetDefaultMaterial(DefColor)
' imposto colori sfondo
Dim BackTopColor As New Color3d(192, 192, 192)
GetMainPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor)
Dim BackBotColor As New Color3d(BackTopColor)
GetMainPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor)
MainScene.SetViewBackground(BackTopColor, BackBotColor)
' imposto colore di evidenziazione
Dim MarkColor As New Color3d(255, 255, 0)
GetMainPrivateProfileColor(S_SCENE, K_MARK, MarkColor)
MainScene.SetMarkMaterial(MarkColor)
' imposto colore per superfici selezionate
Dim SelSurfColor As New Color3d(255, 255, 192)
GetMainPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor)
MainScene.SetSelSurfMaterial(SelSurfColor)
' imposto tipo e colore del rettangolo di zoom
Dim bOutline As Boolean = True
Dim ZwColor As New Color3d(0, 0, 0)
GetMainPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor)
MainScene.SetZoomWinAttribs(bOutline, ZwColor)
' imposto colore della linea di distanza
Dim DstLnColor As New Color3d(255, 0, 0)
GetMainPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor)
MainScene.SetDistLineMaterial(DstLnColor)
' imposto parametri OpenGL
Dim nDriver As Integer = GetMainPrivateProfileInt(S_OPENGL, K_DRIVER, 3)
Dim b2Buff As Boolean = (GetMainPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1) <> 0)
Dim nColorBits As Integer = GetMainPrivateProfileInt(S_OPENGL, K_COLORBITS, 32)
Dim nDepthBits As Integer = GetMainPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32)
MainScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits)
End Sub
Private Sub PostInitializeScene()
' Impostazioni Controller
MainController.SetScene(MainScene)
' imposto tipo coordinate
MainScene.SetGridCursorPos(True)
' modo di visualizzazione
Dim nShowMode As Integer = GetMainPrivateProfileInt(S_SCENE, K_SHOWMODE, SM.SHADING)
OmagOFFICEMap.refShowPanelVM.SetShowMode(DirectCast(nShowMode, SM))
' visualizzazione avanzata dei triangoli costituenti le superfici
Dim bShowTriaAdv As Boolean = (GetMainPrivateProfileInt(S_SCENE, K_SHOWTRIAADV, 1) <> 0)
EgtSetShowTriaAdv(bShowTriaAdv)
' tipo visualizzazione per Zmap
Dim nShowZmap As Integer = GetMainPrivateProfileInt(S_SCENE, K_SHOWZMAP, 1)
EgtSetShowZmap(DirectCast(nShowZmap, ZSM), False)
' dimensione lineare max in pixel delle textures
Dim nTxrMaxLinPix As Integer = GetMainPrivateProfileInt(S_SCENE, K_TEXMAXLINPIX, 4096)
EgtSetTextureMaxLinPixels(nTxrMaxLinPix)
' tipo snap point
MainScene.SetSnapPointType(SP.PT_SKETCH)
End Sub
Public Overrides Sub SaveProject()
MyBase.SaveProject()
' Imposto stato gestione mouse diretto della scena a nessuno
MainScene.SetStatusNull()
End Sub
Public Overrides Sub SaveAsProject()
MyBase.SaveAsProject()
' Imposto stato gestione mouse diretto della scena a nessuno
MainScene.SetStatusNull()
End Sub
#End Region ' METHODS
#Region "ProjectManager"
Public Overrides Sub NewProject()
EgtSetCurrentContext(MainScene.GetCtx())
Dim bOk As Boolean = MainController.NewProject()
' Eventuale reset VM
If bOk Then
VeinMatching.Clear()
End If
MainScene.SetStatusNull()
End Sub
Public Overrides Sub OpenProject(sFilePath As String)
EgtSetCurrentContext(MainScene.GetCtx())
Dim bOk As Boolean = False
If String.IsNullOrEmpty(sFilePath) Then
' Recupero cartella dell'ultimo progetto aperto
Dim sDir As String = MainController.GetCurrFile()
If String.IsNullOrWhiteSpace(sDir) Then
GetMainPrivateProfileString(S_MRUFILES, K_FILE, "", sDir)
End If
If Not String.IsNullOrWhiteSpace(sDir) Then
sDir = Path.GetDirectoryName(sDir)
End If
bOk = MainController.OpenProject(sDir)
Else
bOk = MainController.OpenProject(sFilePath, False)
End If
MainScene.SetStatusNull()
' Eventuale apertura file VM
Dim sFile As String = String.Empty
If bOk AndAlso EgtGetCurrFilePath(sFile) Then
Dim sVmFile As String = Path.ChangeExtension(sFile, ".vme")
VeinMatching.Open(sVmFile)
End If
End Sub
Public Overrides Sub ExportProject()
EgtSetCurrentContext(MainScene.GetCtx())
' Verifico che il progetto sia salvato
If EgtGetModified() Then
MessageBox.Show(EgtMsg( 91501), "", MessageBoxButton.OK, MessageBoxImage.Exclamation)
Return
End If
' Scelta del direttorio di destinazione
Dim sLastExportDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_EXPORTDIR, "", sLastExportDir)
Dim DirDlg As New System.Windows.Forms.FolderBrowserDialog
DirDlg.Description = EgtMsg( 91502) ' Seleziona il direttorio di esportazione
DirDlg.SelectedPath = sLastExportDir
If DirDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return
WriteMainPrivateProfileString(S_GENERAL, K_EXPORTDIR, DirDlg.SelectedPath)
' Eseguo esportazione
If ExecExport(DirDlg.SelectedPath) Then
' Esportazione conclusa con successo
OmagOFFICEMap.refStatusBarVM.SetOutputMessage( EgtMsg( 91504), 5, MSG_TYPE.INFO)
Else
' Errore nell'esportazione
MessageBox.Show( EgtMsg( 91503), "", MessageBoxButton.OK, MessageBoxImage.Error)
End If
EgtSetCurrentContext(MainScene.GetCtx())
End Sub
Private Function ExecExport(sDirDest As String) As Boolean
' Path completa del progetto corrente
Dim sFilePath As String = String.Empty
EgtGetCurrFilePath(sFilePath)
' Preparo la lista dei gruppi di lavoro
Dim vMchGrps As New List(Of Integer)
Dim nGrpId = EgtGetFirstMachGroup()
While nGrpId <> GDB_ID.NULL
vMchGrps.Add(nGrpId)
nGrpId = EgtGetNextMachGroup(nGrpId)
End While
' Risultato esportazione
Dim bOk As Boolean = True
' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto
Dim nCurrCtx As Integer = EgtGetCurrentContext()
Dim nCtx As Integer = EgtInitContext()
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir)
' Per ogni gruppo di lavoro
For Each nMchGrpId As Integer In vMchGrps
' Carico il progetto
EgtOpenFile(sFilePath)
' Recupero il nome del gruppo
Dim sMchGrp As String = String.Empty
EgtGetMachGroupName(nMchGrpId, sMchGrp)
' Recupero il nome della lastra
Dim sSlabName As String = String.Empty
EgtGetInfo(nMchGrpId, INFO_SLABNAME, sSlabName)
' sostituisco eventuali caratteri speciali
If sSlabName.IndexOfAny("[~`!@#$%^&*()-+=|{}':;.,<>/\\?]".ToCharArray) <> -1 Then
sSlabName = Regex.Replace(sSlabName, "[~`!@#$%^&*()-+=|{}':;.,<>/\\?]", "_")
End If
' Creo path del file di salvataggio
Dim nSelectTypeExport As Integer = GetMainPrivateProfileInt(S_GENERAL, "TypeExportName", 0)
Dim sFileDest As String = String.Empty
If nSelectTypeExport <> 0 Then
sFileDest = sDirDest & "\" & If(String.IsNullOrEmpty(sSlabName), sMchGrp, sSlabName) & ".nge"
Else
sFileDest = sDirDest & "\" & Path.GetFileNameWithoutExtension(sFilePath) & "_" & If(String.IsNullOrEmpty(sSlabName), sMchGrp, sSlabName) & ".nge"
End If
' Verifico se al gruppo è associata una foto
Dim nPhotoId As Integer = EgtGetFirstNameInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP), PHOTO_NAME & sMchGrp)
' Elimino le altre fotografie
Dim nPhId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP))
While nPhId <> GDB_ID.NULL
Dim nNextPhId As Integer = EgtGetNext(nPhId)
If nPhId <> nPhotoId Then
EgtErase(nPhId)
End If
nPhId = nNextPhId
End While
' Sistemo l'eventuale foto del gruppo
If nPhotoId <> GDB_ID.NULL Then
Dim sOriPath As String = String.Empty
EgtGetPhotoPath(nPhotoId, sOriPath)
Dim sNewPath As String = Path.ChangeExtension(sFileDest, Path.GetExtension(sOriPath))
EgtChangePhotoPath(nPhotoId, sNewPath)
Try
File.Copy(sOriPath, sNewPath, True)
Catch ex As Exception
bOk = False
EgtOutLog( "Slab image not found :" & sOriPath)
End Try
EgtSetName(nPhotoId, PHOTO_NAME)
EgtChangePhotoCenterAsFlatScan( nPhotoId)
End If
' Elimino gli altri gruppi di lavorazioni
For Each nMGrpId As Integer In vMchGrps
If nMGrpId <> nMchGrpId Then
EgtRemoveMachGroup(nMGrpId)
End If
Next
' Elimino i pezzi che non stanno nel gruppo corrente (sono ancora pezzi dopo averlo attivato)
EgtSetCurrMachGroup(nMchGrpId)
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
Dim nNextPartId As Integer = EgtGetNextPart(nPartId)
EgtErase(nPartId)
nPartId = nNextPartId
End While
EgtResetCurrMachGroup()
' Assegno nome standard OmagCUT al gruppo di lavoro
EgtSetName(nMchGrpId, MACH_GROUP)
' Definisco gruppo marcatore di OmagCUT
Dim nMarkId As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nMarkId, NAME_PROJMARK)
EgtSetLevel(nMarkId, GDB_LV.SYSTEM)
Dim nReducedCut As Integer = 1
EgtGetInfo(nMchGrpId, INFO_REDUCEDCUT, nReducedCut)
EgtSetInfo(nMarkId, INFO_REDUCEDCUT, nReducedCut)
Dim nSacProbe As Integer = 0
EgtGetInfo(nMchGrpId, INFO_SACPROBE, nSacProbe)
EgtSetInfo(nMarkId, INFO_SACPROBE, nSacProbe)
Dim nWash As Integer = 1
EgtGetInfo(nMchGrpId, INFO_WASHING, nWash)
EgtSetInfo(nMarkId, INFO_WASHING, nWash)
Dim nOrder As Integer = 0
EgtGetInfo(nMchGrpId, INFO_MACHORDER, nOrder)
EgtSetInfo(nMarkId, INFO_MACHORDER, nOrder)
Dim sMatName As String = String.Empty
EgtGetInfo(nMchGrpId, INFO_PROJMAT, sMatName)
EgtSetInfo(nMarkId, INFO_PROJMAT, sMatName)
' Salvo il file
If Not EgtSaveFile(sFileDest, NGE.CMPTEXT) Then bOk = False
Next
' Distruggo il contesto corrente e ripristino quello originale
EgtSetCurrentContext(nCurrCtx)
EgtDeleteContext(nCtx)
Return bOk
End Function
Public Sub DxfOutProject()
EgtSetCurrentContext(MainScene.GetCtx())
' Verifico che il progetto sia salvato
If EgtGetModified() Then
MessageBox.Show(EgtMsg( 91501), "", MessageBoxButton.OK, MessageBoxImage.Exclamation)
Return
End If
' Scelta del direttorio di destinazione
Dim sLastDxfOutDir As String = String.Empty
GetMainPrivateProfileString(S_GENERAL, K_DXFOUTDIR, "", sLastDxfOutDir)
Dim DirDlg As New System.Windows.Forms.FolderBrowserDialog
DirDlg.Description = EgtMsg( 91502) ' Seleziona il direttorio di esportazione
DirDlg.SelectedPath = sLastDxfOutDir
If DirDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then Return
WriteMainPrivateProfileString(S_GENERAL, K_DXFOUTDIR, DirDlg.SelectedPath)
' Eseguo esportazione
If ExecDxfOut(DirDlg.SelectedPath) Then
' Esportazione conclusa con successo
OmagOFFICEMap.refStatusBarVM.SetOutputMessage( EgtMsg( 91504), 5, MSG_TYPE.INFO)
Else
' Errore nell'esportazione
MessageBox.Show( EgtMsg( 91503), "", MessageBoxButton.OK, MessageBoxImage.Error)
End If
EgtSetCurrentContext(MainScene.GetCtx())
End Sub
Private Function ExecDxfOut(sDirDest As String) As Boolean
' Path completa del progetto corrente
Dim sFilePath As String = String.Empty
EgtGetCurrFilePath(sFilePath)
' Flag tipo esportazione
Dim nDxfOutType As Integer = GetMainPrivateProfileInt( S_DXFOUT, K_DXFOUT_TYPE, 0)
' Preparo la lista dei gruppi di lavoro
Dim vMchGrps As New List(Of Integer)
Dim nGrpId = EgtGetFirstMachGroup()
While nGrpId <> GDB_ID.NULL
vMchGrps.Add(nGrpId)
nGrpId = EgtGetNextMachGroup(nGrpId)
End While
' Risultato esportazione
Dim bOk As Boolean = True
' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto
Dim nCurrCtx As Integer = EgtGetCurrentContext()
Dim nCtx As Integer = EgtInitContext()
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir)
' Per ogni gruppo di lavoro
For Each nMchGrpId As Integer In vMchGrps
' Carico il progetto
EgtOpenFile(sFilePath)
' Recupero il nome del gruppo
Dim sMchGrp As String = String.Empty
EgtGetMachGroupName(nMchGrpId, sMchGrp)
' Recupero il nome della lastra
Dim sSlabName As String = String.Empty
EgtGetInfo(nMchGrpId, INFO_SLABNAME, sSlabName)
' Creo path del file di salvataggio
Dim sFileDest As String = sDirDest & "\" & Path.GetFileNameWithoutExtension(sFilePath) & "_" & If(String.IsNullOrEmpty(sSlabName), sMchGrp, sSlabName) & ".dxf"
' Gruppo delle foto
Dim nPhGrpId As Integer = EgtGetFirstNameInGroup( GDB_ID.ROOT, PHOTO_GRP)
' Verifico se al gruppo è associata una foto
Dim nPhotoId As Integer = EgtGetFirstNameInGroup( nPhGrpId, PHOTO_NAME & sMchGrp)
' Elimino le altre fotografie
Dim nPhId As Integer = EgtGetFirstInGroup( nPhGrpId)
While nPhId <> GDB_ID.NULL
Dim nNextPhId As Integer = EgtGetNext(nPhId)
If nPhId <> nPhotoId Then
EgtErase(nPhId)
End If
nPhId = nNextPhId
End While
' Sistemo l'eventuale foto del gruppo
Dim nLoopId As Integer = GDB_ID.NULL
If nPhotoId <> GDB_ID.NULL Then
Dim sOriPath As String = String.Empty
EgtGetPhotoPath(nPhotoId, sOriPath)
Dim sNewPath As String = Path.ChangeExtension(sFileDest, Path.GetExtension(sOriPath))
EgtChangePhotoPath(nPhotoId, sNewPath)
Try
File.Copy(sOriPath, sNewPath, True)
Catch ex As Exception
bOk = False
EgtOutLog( "Slab image not found :" & sOriPath)
End Try
' Ne estraggo il contorno e cancello la regione
Dim nCount As Integer = 0
nLoopId = EgtExtractSurfFrChunkLoops( nPhotoId, 0, nPhGrpId, nCount)
EgtSetColor( nLoopId, New Color3d( 0, 0, 0))
EgtErase( nPhotoId)
End If
' Elimino i pezzi che non stanno nel gruppo corrente (sono ancora pezzi dopo averlo attivato)
EgtSetCurrMachGroup(nMchGrpId)
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
Dim nNextPartId As Integer = EgtGetNextPart(nPartId)
EgtErase(nPartId)
nPartId = nNextPartId
End While
' Rendo unico il nome dei pezzi rimasti
nPartId = EgtGetFirstPartInRawPart( EgtGetFirstRawPart())
While nPartId <> GDB_ID.NULL
Dim sName As String = ""
if Not EgtGetName( nPartId, sName) OrElse String.IsNullOrWhiteSpace( sName) Then sName = "P"
EgtSetName( nPartId, sName & "_" & nPartId.ToString())
nPartId = EgtGetNextPartInRawPart( nPartId)
End While
' Rimuovo dal grezzo punti, regioni e superfici
Dim nDatId As Integer = EgtGetFirstInGroup( EgtGetFirstRawPart())
While nDatId <> GDB_ID.NULL
Dim nNextDatId As Integer = EgtGetNext( nDatId)
Select EgtGetType( nDatId)
Case GDB_TY.GEO_POINT, GDB_TY.SRF_FRGN, GDB_TY.SRF_MESH
EgtErase( nDatId)
Case Else
EgtSetStatus( nDatId, GDB_ST.ON_)
End Select
nDatId = nNextDatId
End While
' Porto a livello utente gli oggetti da esportare (primo grezzo e suoi pezzi)
nPartId = EgtGetFirstPartInRawPart( EgtGetFirstRawPart())
While nPartId <> GDB_ID.NULL
' Cancello outline
Dim nOutId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_OUTLOOP)
EgtErase( nOutId)
' Cancello eventuali buchi
Dim nInId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_INLOOP)
While nInId <> GDB_ID.NULL
Dim nNextInId As Integer = EgtGetNext( nInId)
EgtErase( nInId)
nInId = nNextInId
End While
' Sposto contorno regione e testi nel pezzo, poi cancello la regione
Dim nRegId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_REGION)
Dim nObjId As Integer = EgtGetFirstInGroup( nRegId)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
Select EgtGetType( nObjId)
Case GDB_TY.SRF_FRGN
EgtSetColor( nObjId, New Color3d( 0, 0, 0))
Dim nCount As Integer = 0
EgtExtractSurfFrChunkLoops( nObjId, 0, nPartId, nCount)
Case GDB_TY.EXT_TEXT
EgtRelocateGlob( nObjId, nPartId)
End Select
nObjId = nNextObjId
End While
EgtErase( nRegId)
' Elimino eventuali regioni sopra e sotto
Dim nUpRegId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_UPREG)
EgtErase( nUpRegId)
Dim nDownRegId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_DOWNREG)
EgtErase( nDownRegId)
' Sposto testi inclinazione lati nel pezzo, poi cancello il gruppo
Dim nSideAngleId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_SIDEANGLE)
nObjId = EgtGetFirstInGroup( nSideAngleId)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
Select EgtGetType( nObjId)
Case GDB_TY.EXT_TEXT
EgtSetName( nObjId, NAME_SIDEANGLE)
EgtRelocateGlob( nObjId, nPartId)
End Select
nObjId = nNextObjId
End While
EgtErase( nSideAngleId)
' Sposto incisioni da sopra nel pezzo, poi cancello il gruppo
Dim nOnLayId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_ONPATH)
nObjId = EgtGetFirstInGroup( nOnLayId)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
EgtSetName( nObjId, NAME_ONPATH)
EgtRelocateGlob( nObjId, nPartId)
nObjId = nNextObjId
End While
EgtErase( nOnLayId)
' Sposto incisioni da sotto nel pezzo, poi cancello il gruppo
Dim nDripLayId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_DRIPCUT)
nObjId = EgtGetFirstInGroup( nDripLayId)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
EgtSetName( nObjId, NAME_DRIPCUT)
EgtRelocateGlob( nObjId, nPartId)
nObjId = nNextObjId
End While
EgtErase( nDripLayId)
' Sposto forature da sotto nel pezzo, poi cancello il gruppo
Dim nUdrillLayId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_UNDERDRILL)
nObjId = EgtGetFirstInGroup( nUdrillLayId)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
EgtSetName( nObjId, NAME_UNDERDRILL)
EgtRelocateGlob( nObjId, nPartId)
nObjId = nNextObjId
End While
EgtErase( nUdrillLayId)
' Sposto i contorni dei tagli nel pezzo,
Dim nPvId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_PREVIEW)
Dim nOpeId As Integer = EgtGetFirstInGroup( nPvId)
While nOpeId <> GDB_ID.NULL
Dim nEntId = EgtGetFirstInGroup( EgtGetFirstInGroup( nOpeId))
While nEntId <> GDB_ID.NULL
Dim nNextEntId As Integer = EgtGetNext( nEntId)
If EgtGetType( nEntId) = GDB_TY.CRV_COMPO Then
EgtSetName( nEntId, NAME_PREVIEW)
EgtRelocateGlob( nEntId, nPartId)
End If
nEntId = nNextEntId
End While
nOpeId = EgtGetNext( nOpeId)
End While
Dim nClId As Integer = EgtGetFirstInGroup( EgtGetFirstInGroup( nPvId))
nPartId = EgtGetNextPartInRawPart( nPartId)
End While
' Sistemo visibilità layer foto
If nPhotoId <> GDB_ID.NULL Then
EgtSetLevel( nPhGrpId, GDB_LV.USER)
EgtSetStatus( nLoopId, GDB_ST.ON_)
End If
' Sposto il primo grezzo con i suoi pezzi sotto la radice
Dim nRawPart As Integer = EgtGetFirstRawPart()
EgtRelocateGlob( nRawPart, GDB_ID.ROOT)
Dim nGroupId As Integer = EgtGetFirstGroupInGroup( nRawPart)
While nGroupId <> GDB_ID.NULL
Dim nNextGroupId As Integer = EgtGetNextGroup( nGroupId)
EgtRelocateGlob( nGroupId, GDB_ID.ROOT)
nGroupId = nNextGroupId
End While
' Rimuovo il gruppo di base delle macchine
EgtErase( EgtGetFirstNameInGroup( GDB_ID.ROOT, "MachAux"))
' Rimuovo il gruppo di base delle lavorazioni (con tutti i gruppi di lavoro)
EgtErase( EgtGetFirstNameInGroup( GDB_ID.ROOT, "MachBase"))
' Aggiustamenti per esportazioni speciali
If nDxfOutType = 1 Then
' Rimuovo il rettangolo della foto
EgtErase( nPhGrpId)
' Sistemo il grezzo
Dim nObjId As Integer = EgtGetFirstInGroup( nRawPart)
While nObjId <> GDB_ID.NULL
Dim nNextObjId As Integer = EgtGetNext( nObjId)
Select EgtGetType( nObjId)
Case GDB_TY.EXT_TEXT
EgtErase( nObjId)
Case GDB_TY.CRV_COMPO
Dim sName As String = ""
If EgtGetName( nObjId, sName) AndAlso sName = NAME_KERF Then
EgtErase( nObjId)
Else
EgtSetColor( nObjId, New Color3d( 0, 0, 255))
End If
End Select
nObjId = nNextObjId
End While
' Creo il layer dei pezzi
Dim nAllPartsId As Integer = EgtCreateGroup( GDB_ID.ROOT)
EgtSetName( nAllPartsId, "Parts")
' Creo il layer dei TOPS
Dim nAllTopsId As Integer = EgtCreateGroup( GDB_ID.ROOT)
EgtSetName( nAllTopsId, "Tops")
' Sposto tutti le entità dei pezzi (tranne i tagli) in un unico layer pezzi
nPartId = EgtGetFirstGroupInGroup( GDB_ID.ROOT)
While nPartId <> GDB_ID.NULL
Dim nNextPartId As Integer = EgtGetNextGroup( nPartId)
If nPartId <> nRawPart And nPartId <> nAllPartsId And nPartId <> nAllTopsId Then
Dim nEntId As Integer = EgtGetFirstInGroup( nPartId)
While nEntId <> GDB_ID.NULL
Dim nNextEntId As Integer = EgtGetNext( nEntId)
Dim sName As String = ""
if Not EgtGetName( nEntId, sName) OrElse
( sName <> NAME_SIDEANGLE AndAlso sName <> NAME_ONPATH AndAlso
sName <> NAME_DRIPCUT AndAlso sName <> NAME_UNDERDRILL AndAlso sName <> NAME_PREVIEW) Then
Dim sText As String = ""
If EgtTextGetContent( nEntId, sText) AndAlso sText = "*TOP*" Then
EgtRelocateGlob( nEntId, nAllTopsId)
Else
EgtRelocateGlob( nEntId, nAllPartsId)
End If
End If
nEntId = nNextEntId
End While
EgtErase( nPartId)
End If
nPartId = nNextPartId
End While
End If
' Esporto il file
If Not EgtExportDxf( GDB_ID.ROOT, sFileDest) Then bOk = False
Next
' Distruggo il contesto corrente e ripristino quello originale
EgtSetCurrentContext(nCurrCtx)
EgtDeleteContext(nCtx)
Return bOk
End Function
#End Region ' ProjectManager
#Region "EVENTS"
Private Sub OnNewProject(sender As Object, bOk As Boolean)
OmagOFFICEMap.refMainWindowVM.Title = " New - OmagOFFICE"
End Sub
Private Sub OnOpenProject(sender As Object, sFile As String, bOk As Boolean)
' Verifico la validità del file appena aperto (deve contenere almeno un gruppo di lavoro)
If EgtGetMachGroupCount() = 0 Then bOk = False
' Procedo a seconda del risultato
If bOk Then
OmagOFFICEMap.refMainWindowVM.Title = sFile & " - OmagOFFICE"
WriteMainPrivateProfileString(S_GENERAL, K_LASTPROJ, sFile)
OmagOFFICEMap.refTopCommandBarVM.m_MruFiles.Add(sFile)
Else
EgtNewFile()
OmagOFFICEMap.refMainWindowVM.Title = " New - OmagOFFICE"
OmagOFFICEMap.refTopCommandBarVM.m_MruFiles.Remove(sFile)
Dim sMsg As String = EgtMsg(10003) & " '" & sFile & "'" 'Error opening file
MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error
End If
MainScene.SetStatusNull()
End Sub
Private Sub OnSavingProject(ByVal sender As Object, sFile As String)
' Recupero tutti i file di texture associabili ai gruppi di lavoro del progetto
Dim sDirToSearch As String = Path.GetDirectoryName(sFile)
Dim sFileToSearch As String = Path.GetFileNameWithoutExtension(sFile) & "." & PHOTO_NAME & "*"
Dim vsTxrFile As New List(Of String)
For Each sTxrFile In My.Computer.FileSystem.GetFiles(sDirToSearch, FileIO.SearchOption.SearchTopLevelOnly, sFileToSearch)
vsTxrFile.Add(sTxrFile)
Next
' Rinomino path di eventuali fotografie
Dim nPhotoId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP))
While nPhotoId <> GDB_ID.NULL
' Path originale
Dim sPhoto As String = String.Empty
If EgtGetPhotoPath(nPhotoId, sPhoto) Then
' Nome della foto
Dim sName As String = String.Empty
EgtGetName(nPhotoId, sName)
' Nuova path
Dim sNewPhoto As String = Path.GetDirectoryName(sFile) & "\" &
Path.GetFileNameWithoutExtension(sFile) & "." & sName &
Path.GetExtension(sPhoto)
' Se diverse, eseguo copia
If String.Compare(sPhoto, sNewPhoto, True) <> 0 Then
Try
' Eseguo copia
File.Copy(sPhoto, sNewPhoto, True)
' Notifico a foto il cambio di path
EgtChangePhotoPath(nPhotoId, sNewPhoto)
' Eventuale notifica a VeinMatching del cambio di path
VeinMatching.ChangePhotoPath(sPhoto, sNewPhoto)
Catch ex As Exception
End Try
End If
' Tolgo da lista file texture associabili, se presente
vsTxrFile.Remove(sNewPhoto)
End If
' passo alla successiva
nPhotoId = EgtGetNext(nPhotoId)
End While
' Se rimasti file associabili, li cancello
For Each sTxrFile In vsTxrFile
Try
My.Computer.FileSystem.DeleteFile(sTxrFile)
Catch
End Try
Next
End Sub
Private Sub OnSavedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean)
' Se salvataggio non riuscito, esco subito
If Not bOk Then
OmagOFFICEMap.refTopCommandBarVM.m_MruFiles.Remove(sFile)
Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file
MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error
Return
End If
' Eventuale salvataggio VM
Dim sVmFile As String = Path.ChangeExtension(sFile, ".vme")
VeinMatching.Save(sVmFile)
' Eventuale salvataggio CSV
CsvM.SaveCsvPartList()
' Aggiornamento titolo
OmagOFFICEMap.refMainWindowVM.Title = sFile & " - OmagOFFICE"
' Riabilito visualizzazione pezzi in parcheggio
EstCalc.ShowParkedParts()
' Inserisco nome in MRU
OmagOFFICEMap.refTopCommandBarVM.m_MruFiles.Add(sFile)
' Salvo nome ultimo file
WriteMainPrivateProfileString(S_GENERAL, K_LASTPROJ, sFile)
End Sub
Private Sub OnMouseDownScene(sender As Object, e As Windows.Forms.MouseEventArgs)
' Si può selezionare solo con il tasto sinistro e se stato NULL
If e.Button <> Windows.Forms.MouseButtons.Left Or Not MainScene.IsStatusNull() Then Return
' Chiamo l'opportuno gestore
Select Case OmagOFFICEMap.refOptionPanelVM.SelItem
Case OptionPanelVM.Tabs.RAWPART
OmagOFFICEMap.refRawPartTabVM.OnMouseDownScene(sender, e)
Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnMouseDownScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING
OmagOFFICEMap.refMachiningTabVM.OnMouseDownScene(sender, e)
Case OptionPanelVM.Tabs.SIMUL
End Select
End Sub
Private Sub OnMouseMoveScene(sender As Object, e As Windows.Forms.MouseEventArgs)
' Chiamo l'opportuno gestore
Select Case OmagOFFICEMap.refOptionPanelVM.SelItem
Case OptionPanelVM.Tabs.RAWPART
OmagOFFICEMap.refRawPartTabVM.OnMouseMoveScene(sender, e)
Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnMouseMoveScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING
Case OptionPanelVM.Tabs.SIMUL
End Select
End Sub
Private Sub OnMouseUpScene(sender As Object, e As Windows.Forms.MouseEventArgs)
' Chiamo l'opportuno gestore
Select Case OmagOFFICEMap.refOptionPanelVM.SelItem
Case OptionPanelVM.Tabs.RAWPART
OmagOFFICEMap.refRawPartTabVM.OnMouseUpScene(sender, e)
Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnMouseUpScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING
Case OptionPanelVM.Tabs.SIMUL
End Select
End Sub
Private Sub OnKeyDownScene(sender As Object, e As System.Windows.Forms.KeyEventArgs)
' Chiamo l'opportuno gestore
Select Case OmagOFFICEMap.refOptionPanelVM.SelItem
Case OptionPanelVM.Tabs.RAWPART
Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnKeyDownScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING
Case OptionPanelVM.Tabs.SIMUL
End Select
End Sub
Private Sub OnCursorPos(ByVal sender As Object, ByVal sCursorPos As String)
OmagOFFICEMap.refStatusBarVM.SetCurrPos(sCursorPos)
End Sub
Private Sub OnShowDistance(ByVal sender As Object, ByVal sDistance As String)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sDistance)
End Sub
Private Sub OnChangedSnapPointType(ByVal sender As Object, ByVal nSpType As SP, ByVal bUser As Boolean)
Dim BtnColor As Brush
If bUser Then
BtnColor = New SolidColorBrush(SystemColors.ControlColor)
Else
BtnColor = Brushes.Bisque
End If
Select Case nSpType
Case SP.PT_SKETCH
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1102), BtnColor) 'Sketch Point
Case SP.PT_GRID
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1104), BtnColor) 'Grid Point
Case SP.PT_END
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1106), BtnColor) 'End Point
Case SP.PT_MID
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1108), BtnColor) 'Mid Point
Case SP.CENTER
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1110), BtnColor) 'Center
Case SP.CENTROID
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1112), BtnColor) 'Centroid
Case SP.PT_NEAR
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1114), BtnColor) 'Near Point
Case SP.PT_INTERS
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1116), BtnColor) 'Inters Point
Case SP.PT_TANGENT
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1118), BtnColor) 'Tang Point
Case SP.PT_PERPENDICULAR
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1120), BtnColor) 'Perp Point
Case SP.PT_MINDIST
OmagOFFICEMap.refStatusBarVM.SetSnapPointType(EgtMsg(1122), BtnColor) 'MinDist Point
Case Else
OmagOFFICEMap.refStatusBarVM.SetSnapPointType("---", BtnColor)
End Select
End Sub
#End Region ' EVENTS
End Class