Imports System.Windows.Forms.Integration Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Namespace EgtCAM5 Public Class ProjectViewModel Inherits TabViewModel #Region "FIELDS" 'PROJECT PAGE'S PANELS Private m_GridViewPanel As BaseWindowView Private m_DrawPanel As BaseWindowView Private m_DrawOptionPanel As BaseWindowView 'PROJECT PAGE'S SCENE FIELDS AND PROPERTIES ' Reference to the ProjectScene Private WithEvents m_ProjectScene As New Scene ' Reference to the ProjectSceneHost Private SceneHost As WindowsFormsHost ' Property used to bind the scene to the WindowsFormsHost in XAML Private m_bfirst As Boolean = True Public ReadOnly Property ProjectSceneHost As WindowsFormsHost Get If m_bfirst Then SceneHost = New WindowsFormsHost() With {.Child = m_ProjectScene} PreInitializeScene() If Not m_ProjectScene.Init() Then EgtOutLog("Error in Project scene creation") ' Chiudo il programma Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND) End If IniFile.m_ProjectSceneContext = m_ProjectScene.GetCtx PostInitializeScene() ' inizializzo gestore lavorazioni EgtInitMachMgr(IniFile.m_sMachinesRoot) m_bfirst = False End If Return SceneHost End Get End Property ' Scene controller Private WithEvents m_Controller As New Controller #End Region #Region "EGTUILIB FIELDS" Private m_bShowGrid As Boolean Private m_bShowGridFrame As Boolean Private m_bCPlaneTypePos As Boolean Private m_bMmUnits As Boolean 'Private m_MruFiles As New MruList 'Private m_MruScripts As New MruList Private m_bScriptRunning As Boolean = False 'Private m_bStopExec As Boolean = False Private m_bStopScript As Boolean = False 'Private m_ProcEventsCallback As New ProcessEventsCallback(AddressOf ProcessEvents) 'Private m_OutTextCallback As New OutTextCallback(AddressOf OutText) ' Variabile per implementazione eventi Private m_InputText As String #End Region #Region "CONSTRUCTOR" Sub New() Me.sTabName = EgtMsg(MSG_MAINWINDOW + 1) Dim WinPos As New WinPos GetPrivateProfileWinPos(S_GENERAL, "Win1", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) m_GridViewPanel = New BaseWindowView m_GridViewPanel.DataContext = New GridViewPanelViewModel WinPosToWindow(m_GridViewPanel, WinPos) m_GridViewPanel.Show() GetPrivateProfileWinPos(S_GENERAL, "Win2", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) m_DrawPanel = New BaseWindowView m_DrawPanel.DataContext = New DrawPanelViewModel WinPosToWindow(m_DrawPanel, WinPos) m_DrawPanel.Show() GetPrivateProfileWinPos(S_GENERAL, "Win3", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) m_DrawOptionPanel = New BaseWindowView m_DrawOptionPanel.DataContext = New DrawOptionPanelViewModel WinPosToWindow(m_DrawOptionPanel, WinPos) GetPrivateProfileWinPos(S_GENERAL, "Win3", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) m_DrawOptionPanel = New BaseWindowView m_DrawOptionPanel.DataContext = New DrawOptionPanelViewModel WinPosToWindow(m_DrawOptionPanel, WinPos) m_DrawOptionPanel.Show() ' Funzione che contiene la registrazione alle funzioni che permettono di visualizzare e nascondere le finestre di disegno ManagePanelVisibility() ManageClosingApplication() RegisterMainWindowCommands() ' Inizializza i parametri della scena 'InitializeEgtProject() RegisterControllerCommands() ManageTopCommandBar() ' Funzione che contiene la registrazione di tutti le funzioni del DrawPanel RegisterGridViewPanelCommands() RegisterDrawPanelCommands() ' Funzione che contiene la registrazione di tutti i comandi del DrawOptionPanel RegisterDrawOptionPanelCommands() ' Funzione che contiene la registrazione di tutti i comandi della StatusBar RegisterStatusBarCommands() End Sub #End Region #Region "METHODS" Private Sub PreInitializeScene() ' imposto colore di default Dim DefColor As New Color3d(0, 0, 0) GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor) m_ProjectScene.SetDefaultMaterial(DefColor) ' imposto colori sfondo Dim BackTopColor As New Color3d(192, 192, 192) GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor) Dim BackBotColor As New Color3d(BackTopColor) GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor) m_ProjectScene.SetViewBackground(BackTopColor, BackBotColor) ' imposto colore di evidenziazione Dim MarkColor As New Color3d(255, 255, 0) GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor) m_ProjectScene.SetMarkMaterial(MarkColor) ' imposto colore per superfici selezionate Dim SelSurfColor As New Color3d(255, 255, 192) GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor) m_ProjectScene.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_ProjectScene.SetZoomWinAttribs(bOutline, ZwColor) ' imposto colore della linea di distanza Dim DstLnColor As New Color3d(255, 0, 0) GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor) m_ProjectScene.SetDistLineMaterial(DstLnColor) ' imposto parametri OpenGL Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3) Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1) <> 0) Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32) Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32) m_ProjectScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) End Sub Private Sub PostInitializeScene() 'Impostazioni Controller m_Controller.SetScene(m_ProjectScene) Dim bLuaReg As Boolean = (GetPrivateProfileInt(S_GENERAL, K_COMMANDLOG, 0) <> 0) 'If Not m_Controller.SetCommandLog(bLuaReg, m_sTempDir, sCmdLogFile) Then EgtOutLog("Command log not started") If Environment.GetCommandLineArgs.Count() = 0 Then MessageBox.Show("Command log not started", "TestEIn Warning", MessageBoxButton.OK, MessageBoxImage.Warning) End If 'End If ' imposto unità di misura per interfaccia utente m_bMmUnits = (GetPrivateProfileInt(S_SCENE, K_MMUNITS, 1) <> 0) Application.Msn.NotifyColleagues(Application.UPDATESTATUSUNITS, m_bMmUnits) ' imposto visualizzazione riferimento globale Dim bShowGlobFrame As Boolean = (GetPrivateProfileInt(S_SCENE, K_SHOWGFRAME, 1) <> 0) EgtSetGlobFrameShow(bShowGlobFrame) ' imposto i dati della griglia LoadGridData() ' imposto stato di visualizzazione della griglia m_bShowGrid = (GetPrivateProfileInt(S_GRID, K_SHOWGRID, 1) <> 0) m_bShowGridFrame = (GetPrivateProfileInt(S_GRID, K_SHOWFRAME, 1) <> 0) Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(m_bShowGrid, m_bShowGridFrame)) ' imposto tipo coordinate m_bCPlaneTypePos = True m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos) ' modo di visualizzazione Dim nShowMode As Integer = GetPrivateProfileInt(S_SCENE, K_SHOWMODE, SM.SHADING) 'If nShowMode = SM.WIREFRAME Then ' btnWireFrame.Checked = True 'ElseIf nShowMode = SM.HIDDENLINE Then ' btnHiddenLine.Checked = True 'Else ' btnShading.Checked = True 'End If '' visualizzazione direzione curve 'Dim nShowCurveDir As Integer = GetPrivateProfileInt(S_SCENE, K_CURVEDIR, 0, m_sIniFile) 'chkCurveDir.Checked = (nShowCurveDir <> 0) ' visualizzazione avanzata dei triangoli costituenti le superfici Dim bShowTriaAdv As Boolean = (GetPrivateProfileInt(S_SCENE, K_SHOWTRIAADV, 1) <> 0) EgtSetShowTriaAdv(bShowTriaAdv) Application.Msn.NotifyColleagues(Application.PROJECTPAGE_DRAWMODE) ' ObjTree non selezionato Application.Msn.NotifyColleagues(Application.UPDATEOBJTREEOLDID, GDB_ID.NULL) ' nascondo input box Application.Msn.NotifyColleagues(Application.RESETINPUTBOX) ' Apro progetto vuoto m_Controller.NewProject(True) End Sub Private Sub LoadGridData() Dim dSnapStep As Double = GetPrivateProfileDouble(S_GRID, If(m_bMmUnits, K_SNAPSTEP, K_SNAPSTEPINCH), 10) Dim nMinLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MINLINESSTEP, 1) Dim nMajLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MAJLINESSTEP, 10) Dim nExtSStep As Integer = GetPrivateProfileInt(S_GRID, K_EXTSSTEP, 50) Dim MinLnColor As New Color3d(160, 160, 160) GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, MinLnColor) Dim MajLnColor As New Color3d(160, 160, 160) GetPrivateProfileColor(S_GRID, K_MAJLNCOLOR, MajLnColor) EgtSetGridFrame(Frame3d.GLOB) EgtSetGridGeo(dSnapStep, nMinLineSStep, nMajLineSStep, nExtSStep) EgtSetGridColor(MinLnColor, MajLnColor) End Sub ''' ''' Method that manage the visibility of the ProjectPage's Panels ''' Sub ManagePanelVisibility() Application.Msn.Register(Application.PROJECTPAGE_SELECTED, Sub() m_GridViewPanel.Visibility = Visibility.Visible m_DrawPanel.Visibility = Visibility.Visible m_DrawOptionPanel.Visibility = Visibility.Visible End Sub) Application.Msn.Register(Application.PROJECTPAGE_DESELECTED, Sub() m_GridViewPanel.Visibility = Visibility.Hidden m_DrawPanel.Visibility = Visibility.Hidden m_DrawOptionPanel.Visibility = Visibility.Hidden End Sub) Application.Msn.Register(Application.PROJECTPAGE_DRAWMODE, Sub() Me.sTabName = EgtMsg(MSG_MAINWINDOW + 1) m_GridViewPanel.Visibility = Visibility.Visible m_DrawPanel.Visibility = Visibility.Visible m_DrawOptionPanel.Visibility = Visibility.Visible End Sub) Application.Msn.Register(Application.PROJECTPAGE_MACHININGMODE, Sub() Me.sTabName = EgtMsg(MSG_MAINWINDOW + 2) m_GridViewPanel.Visibility = Visibility.Visible m_DrawPanel.Visibility = Visibility.Hidden m_DrawOptionPanel.Visibility = Visibility.Visible End Sub) End Sub ''' ''' Method that manage the visibility of the ProjectPage's Panels ''' Sub RegisterGridViewPanelCommands() Application.Msn.Register(Application.WIREFRAME, Sub() m_ProjectScene.WireFrame() End Sub) Application.Msn.Register(Application.HIDDENLINE, Sub() m_ProjectScene.HiddenLine() End Sub) Application.Msn.Register(Application.SHADING, Sub() m_ProjectScene.Shading() End Sub) Application.Msn.Register(Application.ZOOMALL, Sub() m_ProjectScene.ZoomAll() End Sub) Application.Msn.Register(Application.ZOOMIN, Sub() m_ProjectScene.ZoomIn() End Sub) Application.Msn.Register(Application.ZOOMOUT, Sub() m_ProjectScene.ZoomOut() End Sub) Application.Msn.Register(Application.TOPVIEW, Sub() m_ProjectScene.TopView() End Sub) Application.Msn.Register(Application.FRONTVIEW, Sub() m_ProjectScene.FrontView() End Sub) Application.Msn.Register(Application.LEFTVIEW, Sub() m_ProjectScene.LeftView() End Sub) Application.Msn.Register(Application.BACKVIEW, Sub() m_ProjectScene.BackView() End Sub) Application.Msn.Register(Application.RIGHTVIEW, Sub() m_ProjectScene.RightView() End Sub) Application.Msn.Register(Application.ISOVIEWSW, Sub() m_ProjectScene.IsoViewSW() End Sub) Application.Msn.Register(Application.ISOVIEWSE, Sub() m_ProjectScene.IsoViewSE() End Sub) Application.Msn.Register(Application.ISOVIEWNE, Sub() m_ProjectScene.IsoViewNE() End Sub) Application.Msn.Register(Application.ISOVIEWNW, Sub() m_ProjectScene.IsoViewNW() End Sub) Application.Msn.Register(Application.CURVEDIR, Sub() End Sub) Application.Msn.Register(Application.ANALYZE, Sub() End Sub) Application.Msn.Register(Application.GETDIST, Sub() End Sub) Application.Msn.Register(Application.CPLANETOP, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.TOP) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANEFRONT, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.FRONT) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANERIGHT, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.RIGHT) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANEBACK, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.BACK) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANELEFT, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.LEFT) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANEBOTTOM, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.BOTTOM) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANEVIEW, Sub() m_Controller.SetLastInteger(Controller.GRID_TYPE.VIEW) m_Controller.ExecuteCommand(Controller.CMD.GRID) End Sub) Application.Msn.Register(Application.CPLANEELEVATION, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_ELEVATION) End Sub) Application.Msn.Register(Application.CPLANEORIGIN, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_ORIGIN) End Sub) Application.Msn.Register(Application.CPLANEROTATE, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.GRID_ROTATE) Else m_Controller.ExecuteCommand(Controller.CMD.GRID_ROTATE3D) End If End Sub) Application.Msn.Register(Application.CPLANE3P, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_3P) End Sub) Application.Msn.Register(Application.CPLANEPERPOBJ, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_PERPCURVE) End Sub) Application.Msn.Register(Application.CPLANEOBJ, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_OBJ) End Sub) End Sub Sub RegisterDrawPanelCommands() Application.Msn.Register(Application.POINT, Sub() If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then m_Controller.ExecuteCommand(Controller.CMD.FRAME) ElseIf (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.VECTOR) Else m_Controller.ExecuteCommand(Controller.CMD.POINT) End If End Sub) Application.Msn.Register(Application.LINE2P, Sub() If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then m_Controller.SetContinue() 'EmitStripStatusOutput(EgtMsg(399)) ' Continue : 'L' with line, 'A' with arc End If m_Controller.ExecuteCommand(Controller.CMD.LINE2P) End Sub) Application.Msn.Register(Application.LINEPDL, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.LINEPDL) Else m_Controller.ExecuteCommand(Controller.CMD.LINEPVL) End If End Sub) Application.Msn.Register(Application.ARCPDP, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then m_Controller.SetContinue() 'EmitStripStatusOutput(EgtMsg(399)) ' Continue : 'L' with line, 'A' with arc End If m_Controller.ExecuteCommand(Controller.CMD.ARCPDP) Else m_Controller.ExecuteCommand(Controller.CMD.ARCPVP) End If End Sub) Application.Msn.Register(Application.POLYGON, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.POLYGON) Else m_Controller.ExecuteCommand(Controller.CMD.POLYGONSIDE) End If End Sub) Application.Msn.Register(Application.TEXT, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.TEXT) Else m_Controller.ExecuteCommand(Controller.CMD.TEXTPLUS) End If End Sub) Application.Msn.Register(Application.PLANE, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.REGION) Else m_Controller.ExecuteCommand(Controller.CMD.PLANE) End If End Sub) Application.Msn.Register(Application.DELETE, Sub() m_Controller.SetLastInteger(GDB_ID.SEL) m_Controller.ExecuteCommand(Controller.CMD.DELETE) End Sub) Application.Msn.Register(Application.JOINCURVE, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.SetLastBoolean(False) Else m_Controller.SetLastBoolean(True) End If m_Controller.ExecuteCommand(Controller.CMD.JOINCURVE) End Sub) End Sub Sub RegisterDrawOptionPanelCommands() Application.Msn.Register(Application.NOTIFYINPUTTEXT, Sub(sInputText As String) m_InputText = sInputText End Sub) Application.Msn.Register(Application.SETLASTBOOLEAN, Sub(bBoolean As Boolean) m_Controller.SetLastBoolean(bBoolean) End Sub) Application.Msn.Register(Application.SETLASTINTEGER, Sub(nInteger As Integer) m_Controller.SetLastInteger(nInteger) End Sub) Application.Msn.Register(Application.SHOW, Sub(sString As String) m_Controller.Show(sString) End Sub) Application.Msn.Register(Application.DONE, Sub(sString As String) m_Controller.Done(sString) End Sub) End Sub Sub RegisterStatusBarCommands() Application.Msn.Register(Application.STATUSGRIDCOMMAND, Sub() m_bShowGrid = Not m_bShowGrid Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(m_bShowGrid, m_bShowGridFrame)) EgtDraw() End Sub) Application.Msn.Register(Application.STATUSCURRPOSTYPECOMMAND, Sub() m_bCPlaneTypePos = Not m_bCPlaneTypePos If m_bCPlaneTypePos Then Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPETEXT, "CPLANE") Else Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPETEXT, "WORLD") End If m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos) End Sub) Application.Msn.Register(Application.STATUSUNITSCOMMAND, Sub() m_bMmUnits = Not m_bMmUnits Application.Msn.NotifyColleagues(Application.UPDATESTATUSUNITS, m_bMmUnits) LoadGridData() EgtDraw() End Sub) Application.Msn.Register(Application.STATUSSTOPCOMMAND, Sub() m_bStopScript = True End Sub) End Sub Sub RegisterControllerCommands() Application.Msn.Register(Application.EXECUTECOMMAND, Sub(sString As Controller.CMD) m_Controller.ExecuteCommand(sString) End Sub) End Sub Sub RegisterMainWindowCommands() Application.Msn.Register(Application.LOADGRIDDATA, Sub() LoadGridData() End Sub) Application.Msn.Register(Application.RESETSTATUS, Sub() m_Controller.ResetStatus() End Sub) End Sub Private Sub ManageTopCommandBar() Application.Msn.Register(Application.NEWPROJECT, Sub() m_Controller.NewProject(True) End Sub) Application.Msn.Register(Application.OPENPROJECT, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sDir) m_Controller.OpenProject(sDir) Else 'ShowMenuMruFiles(btnOpen, New Point(0, btnOpen.Height)) End If End Sub) Application.Msn.Register(Application.SAVEPROJECT, Sub() Dim nType As NGE = GetPrivateProfileInt(S_GEOMDB, K_SAVETYPE, NGE.CMPTEXT) If Not String.IsNullOrWhiteSpace(m_Controller.GetCurrFile()) Then m_Controller.SaveProject(nType) Else Dim sFile As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sFile) sFile.TrimEnd("\"c) sFile += "\New" & m_nInstance.ToString() & ".nge" m_Controller.SaveAsProject(sFile, nType) End If End Sub) Application.Msn.Register(Application.SAVEASPROJECT, Sub() Dim nType As NGE = GetPrivateProfileInt(S_GEOMDB, K_SAVETYPE, NGE.CMPTEXT) Dim sFile As String = m_Controller.GetCurrFile() If String.IsNullOrWhiteSpace(sFile) Then GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sFile) sFile.TrimEnd("\"c) sFile += "\New" & m_nInstance.ToString() & ".nge" End If m_Controller.SaveAsProject(sFile, nType) End Sub) Application.Msn.Register(Application.INSERTPROJECT, Sub() ' eseguo Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sDir) m_Controller.InsertProject(sDir) End Sub) Application.Msn.Register(Application.IMPORTPROJECT, Sub() Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir) m_Controller.ImportProject(sDir) End Sub) Application.Msn.Register(Application.EXPORTPROJECT, Sub() m_Controller.ExportProject(Path.ChangeExtension(m_Controller.GetCurrFile(), "dxf")) End Sub) Application.Msn.Register(Application.EXECPROJECT, Sub() 'If (ModifierKeys And Keys.Shift) <> Keys.Shift Then Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTLUADIR, "", sDir) m_Controller.Exec(sDir) 'Else ' ShowMenuMruScripts(btnExec, New Point(0, btnExec.Height)) 'End If End Sub) End Sub Private Sub ManageClosingApplication() Application.Msn.Register(Application.CLOSEAPPLICATION, Sub() ' Salvo le posizioni di tutte le finestre Dim WinPos As New WinPos WindowToWinPos(m_GridViewPanel, WinPos) WritePrivateProfileWinPos(S_GENERAL, "Win1", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) WindowToWinPos(m_DrawPanel, WinPos) WritePrivateProfileWinPos(S_GENERAL, "Win2", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) WindowToWinPos(m_DrawOptionPanel, WinPos) WritePrivateProfileWinPos(S_GENERAL, "Win3", WinPos.nFlag, WinPos.nLeft, WinPos.nTop, WinPos.nWidth, WinPos.nHeight) ' Salvo modo di visualizzazione WritePrivateProfileString(S_SCENE, K_SHOWMODE, EgtGetShowMode().ToString) ' Salvo stato visualizzazione direzione curve WritePrivateProfileString(S_SCENE, K_CURVEDIR, If(EgtGetShowCurveDirection(), 1, 0).ToString) ' Salvo stato visualizzazione griglia WritePrivateProfileString(S_GRID, K_SHOWGRID, If(m_bShowGrid, 1, 0).ToString) ' Salvo stato unità di misura per interfaccia utente WritePrivateProfileString(S_SCENE, K_MMUNITS, If(m_bMmUnits, 1, 0).ToString) End Sub) End Sub #End Region #Region "SCENE EVENTS" Private Sub OnCursorPos(ByVal sender As Object, ByVal sCursorPos As String) Handles m_ProjectScene.OnCursorPos Application.Msn.NotifyColleagues(Application.NOTIFYCURRPOS, sCursorPos) End Sub Private Sub OnMouseSelectedAll(ByVal sender As Object) Handles m_ProjectScene.OnMouseSelectedAll m_Controller.MouseSelectedAll() End Sub Private Sub OnMouseDeselectedAll(ByVal sender As Object) Handles m_ProjectScene.OnMouseDeselectedAll m_Controller.MouseDeselectedAll() End Sub Private Sub OnMouseSelectedObj(ByVal sender As Object, ByVal nId As Integer, ByVal bLast As Boolean) Handles m_ProjectScene.OnMouseSelectedObj m_Controller.MouseSelectedObj(nId, bLast) End Sub Private Sub OnMouseSelectedPart(ByVal sender As Object, ByVal nId As Integer) Handles m_ProjectScene.OnMouseSelectedPart m_Controller.MouseSelectedPart(nId) End Sub Private Sub OnMouseSelectedLayer(ByVal sender As Object, ByVal nId As Integer) Handles m_ProjectScene.OnMouseSelectedLayer m_Controller.MouseSelectedLayer(nId) End Sub Private Sub OnMouseSelectedPath(ByVal sender As Object, ByVal nId As Integer, ByVal bHaltOnFork As Boolean) Handles m_ProjectScene.OnMouseSelectedPath m_Controller.MouseSelectedPath(nId, bHaltOnFork) End Sub Private Sub OnMousePointFromSelection(ByVal sender As Object, ByVal nId As Integer, ByVal PtP As Point3d, ByVal nAux As Integer) Handles m_ProjectScene.OnMousePointFromSelection m_Controller.SetPointFromSelection(nId, PtP, nAux) End Sub Private Sub OnMouseDone(ByVal sender As Object) Handles m_ProjectScene.OnMouseDone m_Controller.Done(m_InputText) End Sub Private Sub OnMouseSelectedPoint(ByVal sender As Object, ByVal PtP As Point3d, ByVal nSep As SEP, ByVal nId As Integer) Handles m_ProjectScene.OnMouseSelectedPoint Dim bDone As Boolean = (Keyboard.Modifiers And ModifierKeys.Control) <> ModifierKeys.Control m_Controller.MouseSelectedPoint(PtP, nSep, nId, bDone) End Sub Private Sub OnMouseSelectedDir(ByVal sender As Object, ByVal VtDir As Vector3d) Handles m_ProjectScene.OnMouseSelectedDir m_Controller.SetLastVector3d(VtDir) End Sub Private Sub OnMouseMoveSelPoint(ByVal sender As Object, ByVal PtP As Point3d) Handles m_ProjectScene.OnMouseMoveSelPoint m_Controller.MouseMoveInSelectionPoint(PtP) End Sub Private Sub OnMouseAnalyzed(ByVal sender As Object, ByVal nId As Integer) Handles m_ProjectScene.OnMouseAnalyzed Application.Msn.NotifyColleagues(Application.UPDATEOBJINOBJTREE, nId) Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREE, nId) End Sub Private Sub OnShowDistance(ByVal sender As Object, ByVal sDistance As String) Handles m_ProjectScene.OnShowDistance Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, sDistance) End Sub Private Sub Scene1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles m_ProjectScene.KeyDown ' Con DEL eseguo cancellazione delle entità selezionate If e.KeyData = System.Windows.Forms.Keys.Delete Then m_Controller.SetLastInteger(GDB_ID.SEL) m_Controller.ExecuteCommand(Controller.CMD.DELETE) ' Con SPAZIO ripeto l'ultimo comando ElseIf e.KeyData = System.Windows.Forms.Keys.Space Then m_Controller.RepeatLastCommand() ' Con 'A' e in modalità continuazione, forzo il passaggio ad arco ElseIf e.KeyData = System.Windows.Forms.Keys.A And m_Controller.GetContinue() Then m_Controller.ContinueArcPDP() ' Con 'L' e in modalità continuazione, forzo il passaggio a retta ElseIf e.KeyData = System.Windows.Forms.Keys.L And m_Controller.GetContinue() Then m_Controller.ContinueLine2P() ' Con 'V' cambio lo stato del check ElseIf e.KeyData = System.Windows.Forms.Keys.V Then Application.Msn.NotifyColleagues(Application.CHANGEINPUTBOXCHECK) End If End Sub #End Region #Region "CONTROLLER EVENTS" Private Sub OnNewProject(ByVal sender As Object, ByVal bOk As Boolean) Handles m_Controller.OnNewProject If Not bOk Then MessageBox.Show(EgtMsg(10002), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error on new file - Error End If End Sub Private Sub OnOpeningProject(ByVal sender As Object) Handles m_Controller.OnOpeningProject Application.Msn.NotifyColleagues(Application.CLEAROBJTREE) End Sub Private Sub OnOpenProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnOpenProject WritePrivateProfileString(S_GENERAL, K_LASTNGEDIR, Path.GetDirectoryName(sFile)) 'If bOk Then ' m_MruFiles.Add(sFile) 'Else ' 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 End Sub Private Sub OnSavingProject(ByVal sender As Object) Handles m_Controller.OnSavingProject End Sub Private Sub OnSavedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnSavedProject WritePrivateProfileString(S_GENERAL, K_LASTNGEDIR, Path.GetDirectoryName(sFile)) 'If bOk Then ' m_MruFiles.Add(sFile) 'Else ' m_MruFiles.Remove(sFile) ' Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file ' MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButtons.OK, MessageBoxIcon.Error) ' Error 'End If End Sub Private Sub OnSavingObject(ByVal sender As Object) Handles m_Controller.OnSavingObject End Sub Private Sub OnSavedObject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnSavedObject WritePrivateProfileString(S_GENERAL, K_LASTNGEOBJDIR, Path.GetDirectoryName(sFile)) 'If bOk Then ' m_MruFiles.Add(sFile) 'Else ' m_MruFiles.Remove(sFile) ' Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file ' MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButtons.OK, MessageBoxIcon.Error) ' Error 'End If End Sub Private Sub OnImportingProject(ByVal sender As Object, ByVal bOkType As Boolean) Handles m_Controller.OnImportingProject If bOkType Then Application.Msn.NotifyColleagues(Application.CLEAROBJTREE) Else MessageBox.Show(EgtMsg(10005), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' File type unknown - Error End If End Sub Private Sub OnImportedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnImportedProject WritePrivateProfileString(S_GENERAL, K_LASTIMPDIR, Path.GetDirectoryName(sFile)) If Not bOk Then Dim sMsg As String = EgtMsg(10006) & " '" & sFile & "'" 'Error importing file MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub Private Sub OnExportingProject(ByVal sender As Object) Handles m_Controller.OnExportingProject End Sub Private Sub OnExportedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnExportedProject WritePrivateProfileString(S_GENERAL, K_LASTEXPDIR, Path.GetDirectoryName(sFile)) If Not bOk Then Dim sMsg As String = EgtMsg(10007) & " '" & sFile & "'" 'Error exporting file MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub Private Sub OnExecutingScript(ByVal sender As Object) Handles m_Controller.OnExecutingScript Application.Msn.NotifyColleagues(Application.CLEAROBJTREE) 'Abilito progress e bottone stop Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSPROGRESS, 0) Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSSTOP, True) ' Dichiaro script in esecuzione m_bScriptRunning = True End Sub Private Sub OnExecutedScript(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean, ByVal sError As String) Handles m_Controller.OnExecutedScript ' Salvo path dello script in lista recenti WritePrivateProfileString(S_GENERAL, K_LASTLUADIR, Path.GetDirectoryName(sFile)) 'If bOk Then ' m_MruScripts.Add(sFile) 'Else ' m_MruScripts.Remove(sFile) ' MessageBox.Show(sError, EgtMsg(10001), MessageBoxButtons.OK, MessageBoxIcon.Error) ' Error 'End If ' Disabilito progress e bottone stop Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSPROGRESS, 0) Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSSTOP, False) '' Dichiaro terminata esecuzione script m_bScriptRunning = False End Sub Private Sub OnPrepareInputBox(ByVal sTitle As String, ByVal sLabel As String, ByVal sCheckLabel As String, ByVal bShowCombo As Boolean, ByVal bShowBtn As Boolean) Handles m_Controller.PrepareInputBox Application.Msn.NotifyColleagues(Application.PREPAREINPUTBOX, New PrepareInputBoxParam(sTitle, sLabel, sCheckLabel, bShowCombo, bShowBtn)) End Sub Private Sub OnSetInputBoxText(ByVal sText As String) Handles m_Controller.SetInputBoxText Application.Msn.NotifyColleagues(Application.SETINPUTBOXTEXT, sText) End Sub Private Sub OnSetInputBoxCheck(ByVal bCheck As Boolean) Handles m_Controller.SetInputBoxCheck Application.Msn.NotifyColleagues(Application.SETINPUTBOXCHECK, bCheck) End Sub Private Sub OnAddInputBoxCombo(ByVal sText As String, ByVal bSelected As Boolean) Handles m_Controller.AddInputBoxCombo Application.Msn.NotifyColleagues(Application.ADDINPUTBOXCOMBO, New AddInputBoxComboParam(sText, bSelected)) End Sub Private Sub OnUpdateUI(ByVal sender As Object, ByVal bReloadUI As Boolean) Handles m_Controller.UpdateUI ' pulisco input e relativi messaggi Application.Msn.NotifyColleagues(Application.RESETINPUTBOX) If m_Controller.GetContinue() Then Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, (EgtMsg(399))) ' Continue : 'L' with line, 'A' with arc Else Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, ("")) End If ' aggiorno dati correnti 'EmitTitle() EmitCurrPartLayer() If bReloadUI Then Application.Msn.NotifyColleagues(Application.LOADOBJTREE) Else Application.Msn.NotifyColleagues(Application.UPDATEOBJTREE) End If End Sub Private Sub OutputInfo(ByVal sender As Object, ByVal sText As String) Handles m_Controller.OutputInfo Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, sText) End Sub #End Region #Region "STATUSBAR EVENTS" Private Sub ProjectScene_OnChangedSnapPointType(ByVal sender As Object, ByVal nSpType As SP, ByVal bUser As Boolean) Handles m_ProjectScene.OnChangedSnapPointType If bUser Then Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPEBACKGROUND, New SolidColorBrush(SystemColors.ControlColor)) Else Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPEBACKGROUND, Brushes.Bisque) End If Select Case nSpType Case SP.PT_SKETCH Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1102)) 'Sketch Point Case SP.PT_GRID Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1104)) 'Grid Point Case SP.PT_END Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1106)) 'End Point Case SP.PT_MID Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1108)) 'Mid Point Case SP.CENTER Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1110)) 'Center Case SP.CENTROID Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1112)) 'Centroid Case SP.PT_NEAR Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1114)) 'Near Point Case SP.PT_INTERS Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1116)) 'Inters Point Case SP.PT_TANGENT Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1118)) 'Tang Point Case SP.PT_PERPENDICULAR Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1120)) 'Perp Point Case SP.PT_MINDIST Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, EgtMsg(1122)) 'MinDist Point Case Else Application.Msn.NotifyColleagues(Application.STATUSSNAPPOINTTYPETEXT, "---") End Select End Sub #End Region ' StatusBar events #Region "DrawOptionPanel" Private Sub EmitCurrPartLayer() Dim sText As String = " " Dim sName As String = String.Empty Dim colObj As Color3d EgtGetColor(GDB_ID.ROOT, colObj) Dim nCurrPart As Integer = m_Controller.GetCurrPart() If nCurrPart <> GDB_ID.NULL Then If EgtGetName(nCurrPart, sName) Then sText = sName Else sText = "Part " + nCurrPart.ToString() End If EgtGetCalcColor(nCurrPart, colObj) Dim nCurrLayer As Integer = m_Controller.GetCurrLayer() If nCurrLayer <> GDB_ID.NULL And EgtExistsObj(nCurrLayer) Then If EgtGetName(nCurrLayer, sName) Then sText += " --> " + sName Else sText += " --> Layer " + nCurrLayer.ToString() End If EgtGetCalcColor(nCurrLayer, colObj) End If End If Application.Msn.NotifyColleagues(Application.UPDATEHEADERNAME, sText) colObj.A = 100 Application.Msn.NotifyColleagues(Application.UPDATEHEADERCOLOR, colObj) End Sub #End Region 'DrawOptionPanel End Class End Namespace