Imports System.Windows.Forms.Integration Imports System.Windows.Interop Imports System.IO Imports System.Globalization Imports EgtUILib Imports EgtWPFLib5 Imports EgtWPFLib5.EgtFloating Public Class ProjectVM Inherits TabViewModel #Region "FIELDS" Friend Event OnPreControllerExec(sFilePath As String) Friend Event OnPostControllerExec() ' Variabili in cui salvo i filtri di selezione della modalità Draw e che poi ripristino all'uscita dalla modalità Machining Private m_bSelZeroDim As Boolean = True Private m_bSelCurve As Boolean = True Private m_bSelSurf As Boolean = True Private m_bSelVolume As Boolean = True Private m_bSelExtra As Boolean = True Private m_bLoaded As Boolean = False ' Variabile che contiene il Frame di disegno per poterlo ripristinare dopo essere passato dalla lavorazioneù Private m_GridDrawFrame3d As Frame3d = New Frame3d(New Point3d(0, 0, 0)) '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} m_bfirst = False End If Return SceneHost End Get End Property ' Scene controller Private WithEvents m_Controller As New Controller ' Definizione comandi Private m_cmdLoaded As ICommand ' Flag per non salvare Script appena eseguito in elenco MruScript Private m_bScriptInMru As Boolean = True Private m_PanelList As New List(Of Panel) Public ReadOnly Property PanelList As List(Of Panel) Get Return m_PanelList End Get End Property #End Region #Region "EGTUILIB FIELDS" Private m_bCPlaneTypePos As Boolean 'Private m_bStopExec 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() ' Creo riferimento a questa classe in EgtCAM5Map e in ButtonItem Map.SetRefProjectVM(Me) ButtonItem.m_ProjectVM = Me ' Creo classe di supporto per la visualizzazione dei parametri utensile e di lavorazione per Db e operazioni TMDbParamVisibility.bFirst = True ' Inizializza i parametri della scena 'InitializeEgtProject() ' aggiungo componenti interfaccia Dim bPlugin As Boolean = True If IsActivePlugin() Then ' recupero nome del plugin Dim PluginDirNameList() As String = Directory.GetDirectories(IniFile.m_sDataRoot & "\Plugin") For Each PluginDirName In PluginDirNameList Dim PluginName As String = Path.GetFileNameWithoutExtension(PluginDirName) Dim ConfigurationData As IPluginConfigData = Map.refMainWindowVM.GetConfigData(Of IPluginConfigData)(PluginName & ".ConfigurationData") If Not IsNothing(ConfigurationData) And ConfigurationData.ControlList.Count > 0 Then For Each Element In ConfigurationData.ControlList Select Case Element Case PLUGIN_RIGHT_TRAY m_PanelList.Add(New RightTrayV) Case PLUGIN_LEFT_TRAY m_PanelList.Add(New LeftTrayV) Case Else m_PanelList.Add(Map.refMainWindowVM.GetControlByName(Of IPluginControl)(Element)) End Select Next End If Next m_PanelList.Add(New BottomTrayV) m_PanelList.Add(New TopTrayV) Else m_PanelList.Add(New TopTrayV) m_PanelList.Add(New LeftTrayV) m_PanelList.Add(New RightTrayV) m_PanelList.Add(New BottomTrayV) End If m_PanelList.Add(New SceneContentControlV) End Sub #End Region #Region "Get & Set" Friend Function GetScene() As Scene Return m_ProjectScene End Function Friend Function GetController() As Controller Return m_Controller End Function #End Region ' Get & Set #Region "COMMANDS" #Region "LoadedCommand" ''' ''' Returns a command that do Point. ''' Public ReadOnly Property LoadedCommand As ICommand Get If m_cmdLoaded Is Nothing Then m_cmdLoaded = New RelayCommand(AddressOf Loaded) End If Return m_cmdLoaded End Get End Property ''' ''' Execute the Point. This method is invoked by the PointCommand. ''' Public Sub Loaded(ByVal param As Object) ' Verifico sia la prima volta If m_bLoaded Then Return m_bLoaded = True ' Creazione scena PreInitializeScene() ' Se tutto bene If m_ProjectScene.Init() And (IniFile.m_nKeyOptions And KEY_OPT.BASE) <> 0 Then IniFile.m_ProjectSceneContext = m_ProjectScene.GetCtx PostInitializeScene() ' Recupero e imposto handle finestra principale Dim hMainWnd As IntPtr = New WindowInteropHelper(Application.Current.MainWindow).Handle EgtSetMainWindowHandle(hMainWnd) ' Inizializzo gestore lavorazioni If Not EgtInitMachMgr(IniFile.m_sMachinesRoot, IniFile.m_sToolMakersDir) Then ' non riuscita -> imposto modalità solo disegno IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Map.refProjectV.SetDbPanelVisibility() End If ' Inizializzo gestore travi e pareti If (IniFile.m_nKeyOptions And KEY_OPT.BEAM) <> 0 Or (IniFile.m_nKeyOptions And KEY_OPT.WALL) <> 0 Then Dim nFlag As Integer = GetPrivateProfileInt(S_IMPORT, K_BTLFLAG, EIB_FL.NONE) EgtInitBeamMgr(nFlag) End If ' Log di eventuali estensioni EgtOutLog("Extensions :") Dim bExtensions As Boolean = False If IniFile.IsActiveBeam() Then bExtensions = True Dim sVersion As String = "---" IniFile.GetSpecialLuaVersion(IniFile.m_sBeamDirPath, sVersion) Dim sOut As String = "Beam ver. " & sVersion & " " & IniFile.m_sBeamDirPath EgtOutLog(sOut) End If If IniFile.IsActiveWall() Then bExtensions = True Dim sVersion As String = "---" IniFile.GetSpecialLuaVersion(IniFile.m_sWallDirPath, sVersion) Dim sOut As String = "Wall ver. " & sVersion & " " & IniFile.m_sWallDirPath EgtOutLog(sOut) End If If IniFile.IsActiveDoors() Then bExtensions = True Dim sVersion As String = "---" IniFile.GetSpecialLuaVersion(IniFile.m_sDoorsDirPath, sVersion) Dim sOut As String = "Doors ver. " & sVersion & " " & IniFile.m_sDoorsDirPath EgtOutLog(sOut) End If If IniFile.IsActiveGunStock() Then bExtensions = True Dim sVersion As String = "---" IniFile.GetSpecialLuaVersion(IniFile.m_sGunstockDirPath, sVersion) Dim sOut As String = "Gunstock ver. " & sVersion & " " & IniFile.m_sGunstockDirPath EgtOutLog(sOut) End If If Not bExtensions Then EgtOutLog("---") ' Apro progetto vuoto Map.refTopCommandBarVM.NewCmd() ' Seleziono la macchina impostata nel file ini Map.refMachinePanelVM.LoadCurrentMachine() EgtSetCurrentContext(IniFile.m_ProjectSceneContext) Return End If ' Problemi SceneHost.Child = Nothing ' Se manca la chiave If IniFile.m_nKeyLevel = -1 Or IniFile.m_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 : sKeyInfo \n "Programma senza licenza. \n Caricala e riavvia il programma." "Errore" Dim sKeyInfo As String = "" : EgtGetKeyInfo(sKeyInfo) Dim sText As String = sKeyInfo & vbCrLf & 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(IniFile.m_sConfigDir), StringComparison.OrdinalIgnoreCase) Then Try File.Copy(LicDlg.FileName, Path.Combine(IniFile.m_sConfigDir, LicDlg.SafeFileName), True) Catch ex As Exception End Try End If ' Imposto il nuovo file di licenza nell'Ini WritePrivateProfileString(S_GENERAL, K_LICENCE, LicDlg.SafeFileName) End If End If End If ' Chiudo il programma IniFile.m_bFailedRun = True Map.refMainWindowVM.CloseApplicationCmd() End Sub #End Region ' LoadedCommand #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 spessore linee Dim nLineWidth As Integer = 1 nLineWidth = GetPrivateProfileInt(S_SCENE, K_LINEWIDTH, nLineWidth) m_ProjectScene.SetLineWidth(nLineWidth) ' 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) Dim sCmdLogFile As String = CMDLOG_FILE_NAME.Replace("#", IniFile.m_nInstance.ToString()) If Not m_Controller.SetCommandLog(bLuaReg, m_sTempDir, sCmdLogFile) Then EgtOutLog("Command log not started") If Environment.GetCommandLineArgs.Count() <= 1 Then MessageBox.Show("Command log not started", "EgtCAM5 Warning", MessageBoxButton.OK, MessageBoxImage.Warning) End If End If m_Controller.SetSurfTmTolerance(OptionModule.m_dGeometryTolerance) m_Controller.SetUseCustomColors(True, S_SCENE, K_CUSTOMCOLORS) ' imposto unità di misura per interfaccia utente IniFile.m_bMmUnits = (GetPrivateProfileInt(S_SCENE, K_MMUNITS, 1) <> 0) Map.refStatusBarVM.UpdateStatusUnits(IniFile.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 IniFile.m_bDrawShowGrid = (GetPrivateProfileInt(S_GRID, K_DRAWSHOWGRID, 1) <> 0) IniFile.m_bMachiningShowGrid = (GetPrivateProfileInt(S_GRID, K_MACHININGSHOWGRID, 1) <> 0) IniFile.m_bShowGridFrame = (GetPrivateProfileInt(S_GRID, K_SHOWFRAME, 1) <> 0) Map.refStatusBarVM.UpdateStatusGrid(New UpdateStatusGridParam(IniFile.m_bDrawShowGrid, IniFile.m_bShowGridFrame)) ' imposto tipo coordinate m_bCPlaneTypePos = True Map.refStatusBarVM.StatusCurrPosTypeText("GRID") m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos) ' modo di visualizzazione Dim nShowMode As Integer = GetPrivateProfileInt(S_SCENE, K_SHOWMODE, SM.SHADING) Map.refShowPanelVM.ShowModeState(nShowMode) ' visualizzazione direzione curve Dim nShowCurveDir As Integer = GetPrivateProfileInt(S_SCENE, K_CURVEDIR, 0) Map.refShowPanelVM.ShowCurveDir(nShowCurveDir) ' visualizzazione avanzata dei triangoli costituenti le superfici Dim bShowTriaAdv As Boolean = (GetPrivateProfileInt(S_SCENE, K_SHOWTRIAADV, 1) <> 0) EgtSetShowTriaAdv(bShowTriaAdv) ' tipo visualizzazione per Zmap Dim nShowZmap As Integer = GetPrivateProfileInt(S_SCENE, K_SHOWZMAP, 1) EgtSetShowZmap(nShowZmap, False) ' dimensione lineare max in pixel delle textures Dim nTxrMaxLinPix As Integer = GetPrivateProfileInt(S_SCENE, K_TEXMAXLINPIX, 4096) EgtSetTextureMaxLinPixels(nTxrMaxLinPix) ' stile corrente delle quotature OptionModule.m_dExtLineLen = GetPrivateProfileDouble(S_DIMENSIONSTYLE, K_EXTLINELEN, 5) OptionModule.m_dArrowLen = GetPrivateProfileDouble(S_DIMENSIONSTYLE, K_ARROWLEN, 5) OptionModule.m_dTextDist = GetPrivateProfileDouble(S_DIMENSIONSTYLE, K_TEXTDIST, 2) OptionModule.m_nLenIsMM = GetPrivateProfileInt(S_DIMENSIONSTYLE, K_LENISMM, 2) OptionModule.m_nDecDigit = GetPrivateProfileInt(S_DIMENSIONSTYLE, K_DECDIGIT, -2) OptionModule.m_sFont = "" : GetPrivateProfileStringUtf8(S_DIMENSIONSTYLE, K_DIMFONT, "ModernPropS.Nfe", m_sFont) OptionModule.m_dTextHeight = GetPrivateProfileDouble(S_DIMENSIONSTYLE, K_TEXTHEIGHT, 2) EgtSetCurrDimensionStyle(m_dExtLineLen, m_dArrowLen, m_dTextDist, m_nLenIsMM, m_nDecDigit, m_sFont, m_dTextHeight) ' lettura da ini della variabile che abilita i gruppi di lavorazione IniFile.m_bMachiningGroup = (GetPrivateProfileInt(S_MACH, K_MACHININGGROUP, 0) <> 0) Map.refTopCommandBarVM.DrawMode_IsChecked() ' lettura flag visualizzazione solo tavola in definizione lavorazioni IniFile.m_bShowOnlyTable = (GetPrivateProfileInt(S_MACH, K_SHOWONLYTABLE, 1) <> 0) ' ObjTree non selezionato If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.UpdateObjTreeOldId(GDB_ID.NULL) ' nascondo input box If Not IsNothing(Map.refInputExpanderVM) Then Map.refInputExpanderVM.ResetInputBox() ' Imposto stato filtro selezione m_ProjectScene.GetObjFilterForSel(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) m_Controller.MouseSetObjFilterForSelect(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) ' Imposto default per import m_Controller.SetScaleForDxfImport(OptionModule.m_dDxfScaleFactor) m_Controller.SetScaleForStlImport(OptionModule.m_dStlScaleFactor) m_Controller.SetScaleForImageImport(OptionModule.m_dImgScaleFactor) ' Imposto default per export m_Controller.SetDefaultForDxfExport(OptionModule.m_nExportDxfFlag) m_Controller.SetDefaultForImageExport(OptionModule.m_nImgWidth, OptionModule.m_nImgHeight) End Sub Friend Shared Function GetAppToShow() As Boolean ' Se non ci sono veri parametri su linea di comando, visualizzazione standard If Environment.GetCommandLineArgs.Count() <= 1 Then Return True ' Recupero il primo vero parametro che dovrebbe essere il nome con estensione di un file Dim sFile As String = Environment.GetCommandLineArgs(1) Dim sExt As String = Path.GetExtension(sFile).ToLower() ' Analizzo i parametri If sExt = ".btl" And Environment.GetCommandLineArgs.Count() > 2 Then ' Flag Dim nFlag As Integer = 1 If Environment.GetCommandLineArgs.Count() > 3 Then Integer.TryParse(Environment.GetCommandLineArgs(3), nFlag) ' Modalità cieco con valori 0, 3 e 4 Return (nFlag <> 0 And nFlag <> 3 And nFlag <> 4) End If If sExt = ".bwe" And Environment.GetCommandLineArgs.Count() > 2 Then ' Flag Dim nFlag As Integer = 1 If Environment.GetCommandLineArgs.Count() > 4 Then Integer.TryParse(Environment.GetCommandLineArgs(4), nFlag) ' Modalità cieco con valori 0, 3 e 4 Return (nFlag <> 0 And nFlag <> 3 And nFlag <> 4) End If If sExt = ".ddf" And Environment.GetCommandLineArgs.Count() > 2 Then ' Flag Dim nFlag As Integer = 1 If Environment.GetCommandLineArgs.Count() > 2 Then Integer.TryParse(Environment.GetCommandLineArgs(2), nFlag) ' Modalità cieco con valori 0, 3 e 4 Return Not nFlag >= 2 End If Return True End Function Friend Sub ProcessCommandLine() ' Se non ci sono veri parametri su linea di comando, esco (il primo è sempre il nome del programma) If Environment.GetCommandLineArgs.Count() <= 1 Then Return ' Recupero il primo vero parametro che dovrebbe essere il nome con estensione di un file Dim sFile As String = Environment.GetCommandLineArgs(1) Dim sExt As String = Path.GetExtension(sFile).ToLower() If String.IsNullOrWhiteSpace(sFile) OrElse String.IsNullOrWhiteSpace(sExt) Then Return ' Se file btl con opzioni, gestione lavorazione travi If sExt = ".btl" And Environment.GetCommandLineArgs.Count() > 2 Then ' Nome macchina Dim sMachine As String = "" If Environment.GetCommandLineArgs.Count() > 2 Then sMachine = Environment.GetCommandLineArgs(2) ' Flag Dim nFlag As Integer = 1 If Environment.GetCommandLineArgs.Count() > 3 Then Integer.TryParse(Environment.GetCommandLineArgs(3), nFlag) Dim bOk As Boolean = False ' Verifico se travi o pareti (dal nome della macchina) Dim sBeamMachines As String = "" GetPrivateProfileString(S_BEAM, K_BEAMMACHINES, "", sBeamMachines) Dim vsBMachs() As String = sBeamMachines.Split(","c) Dim bBeam As Boolean = False For Each sBMach In vsBMachs If Not String.IsNullOrWhiteSpace(sBMach) AndAlso sMachine.StartsWith(sBMach, True, CultureInfo.InvariantCulture) Then bBeam = True Exit For End If Next ' Forzatura da eventuale parametro aggiuntivo (0=automatico, 1=forza Beam, 2= forza Wall) Dim nForceBW As Integer = 0 If Environment.GetCommandLineArgs.Count() > 4 Then Integer.TryParse(Environment.GetCommandLineArgs(4), nForceBW) If nForceBW = 1 Then bBeam = True ElseIf nForceBW = 2 Then bBeam = False End If ' Se Travi If bBeam Then ' Verifica abilitazione elaborazione travi If Not VerifyBeam(sFile, sMachine, nFlag) Then Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Esecuzione bOk = ExecBeam(sFile, sMachine, nFlag, True) ' altrimenti pareti Else ' Verifica abilitazione elaborazione pareti If Not VerifyWall(sFile, sMachine, nFlag) Then Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Esecuzione bOk = ExecWall(sFile, sMachine, nFlag, True) End If ' Se richiesta uscita immediata If nFlag = 0 Or nFlag = 3 Or nFlag = 4 Then Map.refMachinePanelVM.SaveCurrentMachine() Map.refMainWindowVM.CloseApplicationCmd() ' Altrimenti se richiesta visualizzazione DB utensili ElseIf nFlag = 11 And bOk Then MyMachinePanelVM.ToolDb() Map.refMachinePanelVM.SaveCurrentMachine() Map.refMainWindowVM.CloseApplicationCmd() ' Altrimenti se richiesta visualizzazione DB lavorazioni ElseIf nFlag = 12 And bOk Then MyMachinePanelVM.MachDb() If bBeam Then Beam.BeamMachDb() Else Wall.WallMachDb() End If Map.refMachinePanelVM.SaveCurrentMachine() Map.refMainWindowVM.CloseApplicationCmd() ' Altrimenti se errore ElseIf Not bOk Then EgtZoom(ZM.ALL) End If ' Altrimenti si prosegue nel programma Return End If ' Se file ddf, gestione creazione porta con Doors If sExt = ".ddf" Then ' Se manca direttorio uso quello di default If String.IsNullOrWhiteSpace(Path.GetDirectoryName(sFile)) Then Dim sDefDir As String = String.Empty GetPrivateProfileString(S_DOORS, K_DDFDEFAULTDIR, "", sDefDir) sFile = sDefDir & "\" & sFile End If ' Ricoscimento flag Dim nFlag As Integer = 0 If Environment.GetCommandLineArgs.Count() > 2 Then Integer.TryParse(Environment.GetCommandLineArgs(2), nFlag) Dim bNcGen As Boolean = (nFlag >= 1) Dim bExit As Boolean = (nFlag >= 2) Dim nProbing As Integer = If(nFlag > 2, nFlag - 2, 0) ' Esecuzione OpenDoorFile(sFile, bNcGen, bExit, nProbing) ' Se richiesta uscita immediata If bExit Then Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Se file tol, gestione aggiornamento dei dati degli utensili If sExt = ".tol" Then ' Recupero nome macchina Dim sMachine As String = String.Empty If Environment.GetCommandLineArgs.Count() > 2 Then sMachine = Environment.GetCommandLineArgs(2) ' Recupero flag Dim nFlag As Integer = 0 If Environment.GetCommandLineArgs.Count() > 3 Then Integer.TryParse(Environment.GetCommandLineArgs(3), nFlag) Dim bTest As Boolean = (nFlag = 0) ' Esecuzione UpdateTools(sFile, sMachine, bTest) ' Uscita immediata Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Se file bwe, gestione file da calcolare per Beam&Wall If sExt = ".bwe" And Environment.GetCommandLineArgs.Count() > 2 Then ' recupero tipo di progetto : 1 = travi, 2 = pareti, 3 = sandwich Dim nBWType As Integer = 0 If Environment.GetCommandLineArgs.Count() > 2 Then Integer.TryParse(Environment.GetCommandLineArgs(2), nBWType) ' recupero nome macchina Dim sMachine As String = "" If Environment.GetCommandLineArgs.Count() > 3 Then sMachine = Environment.GetCommandLineArgs(3) '' Flag Dim nFlag As Integer = 0 If Environment.GetCommandLineArgs.Count() > 4 Then Integer.TryParse(Environment.GetCommandLineArgs(4), nFlag) Dim bOk As Boolean = False If nBWType = 1 Then ' Verifica abilitazione elaborazione travi If Not VerifyBeam(sFile, sMachine, nFlag) Then Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Esecuzione bOk = ExecBeam(sFile, sMachine, nFlag, False) ' altrimenti pareti ElseIf nBWType = 2 Then ' Verifica abilitazione elaborazione pareti If Not VerifyWall(sFile, sMachine, nFlag) Then Map.refMainWindowVM.CloseApplicationCmd() Return End If ' Esecuzione bOk = ExecWall(sFile, sMachine, nFlag, False) End If ' Se richiesta uscita immediata If nFlag = 0 Or nFlag = 3 Or nFlag = 4 Then Map.refMachinePanelVM.SaveCurrentMachine() Map.refMainWindowVM.CloseApplicationCmd() ' Altrimenti se errore ElseIf Not bOk Then EgtZoom(ZM.ALL) End If ' Altrimenti si prosegue nel programma Return End If ' Altrimenti gestione file standard OpenStdFile(sFile) End Sub Friend Function OpenStdFile(sFile As String) As Boolean Dim nFileType As Integer = EgtGetFileType(sFile) Select Case nFileType Case FT.NGE, FT.NFE Return m_Controller.OpenProject(sFile, False) Case FT.DXF, FT.STL, FT._3MF, FT.OBJ, FT.CNC, FT.CSF, FT.BTL, FT.BTLX, FT.IMG, FT.PNT, FT.IGES, FT.STEP_, FT.ACIS, FT.PARASOLID, FT.JT, FT.VRML, FT.C3D Return m_Controller.ImportProject(sFile, False) Case FT.TSC, FT.LUA Return m_Controller.Exec(sFile, False) End Select Return False End Function Friend Function OpenDoorFile(sFile As String, Optional bNcGen As Boolean = False, Optional bBatch As Boolean = False, Optional nProbing As Integer = 0) As Boolean Dim nErr As Integer = 0 ' Formato descrizione porte If Path.GetExtension(sFile).ToLower() = ".ddf" Then nErr = ExecDoors(m_ProjectScene, sFile, bNcGen, bBatch, nProbing) 'CreateDoors(sFile, bNcGen, bBatch, nProbing) Map.refProjectVM.EmitTitle() Return True End If Return False End Function Friend Sub EmitTitle() ' nome file Dim sTitle As String = m_Controller.GetCurrFile() If String.IsNullOrEmpty(sTitle) Then sTitle = EgtMsg(MSG_TOPCOMMANDBAR + 1) & IniFile.m_nInstance.ToString() End If ' indicazione di modificato If m_Controller.GetModified() Then sTitle += "*" End If ' dati del prodotto sTitle += " - EgtCAM5" ' emissione del titolo Map.refMainWindowVM.UpdateMainWindowTitle(sTitle) End Sub Friend Sub LoadGridData() IniFile.dSnapStepMm = GetPrivateProfileDouble(S_GRID, K_SNAPSTEP, 10) IniFile.dSnapStepInch = GetPrivateProfileDouble(S_GRID, K_SNAPSTEPINCH, 10) IniFile.nMinLineSStep = GetPrivateProfileInt(S_GRID, K_MINLINESSTEP, 1) IniFile.nMajLineSStep = GetPrivateProfileInt(S_GRID, K_MAJLINESSTEP, 10) IniFile.nExtSStep = GetPrivateProfileInt(S_GRID, K_EXTSSTEP, 50) IniFile.MinLnColor = New Color3d(160, 160, 160) GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, IniFile.MinLnColor) IniFile.MajLnColor = New Color3d(160, 160, 160) GetPrivateProfileColor(S_GRID, K_MAJLNCOLOR, IniFile.MajLnColor) EgtSetGridFrame(Frame3d.GLOB) UpdateGridData() End Sub Private Sub UpdateGridData() If IniFile.m_bMmUnits Then EgtSetGridGeo(IniFile.dSnapStepMm, IniFile.nMinLineSStep, IniFile.nMajLineSStep, IniFile.nExtSStep) Else EgtSetGridGeo(IniFile.dSnapStepInch, IniFile.nMinLineSStep, IniFile.nMajLineSStep, IniFile.nExtSStep) End If EgtSetGridColor(IniFile.MinLnColor, IniFile.MajLnColor) End Sub Friend Sub UpdateProjectUI(bReloadUI As Boolean) OnUpdateUI(Nothing, bReloadUI) End Sub Friend Sub SetMoveInDisposition(bMoveInDisposition As Boolean) Me.bMoveInDisposition = bMoveInDisposition End Sub Friend Sub DrawMode_IsChecked() ' Ripristino il riferimento della griglia di disegno EgtSetGridFrame(m_GridDrawFrame3d) m_ProjectScene.SetObjFilterForSel(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) Map.refStatusBarVM.UpdateStatusGrid(New UpdateStatusGridParam(IniFile.m_bDrawShowGrid, IniFile.m_bShowGridFrame)) End Sub Friend Sub MachiningMode_IsChecked() ' Salvo il Frame3d di disegno m_GridDrawFrame3d = EgtGetGridFrame() ' sposto la griglia sulla tavola di lavorazione Dim TableRef As Point3d EgtGetTableRef(1, TableRef) EgtSetGridFrame(New Frame3d(TableRef)) m_ProjectScene.GetObjFilterForSel(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) Map.refStatusBarVM.UpdateStatusGrid(New UpdateStatusGridParam(IniFile.m_bMachiningShowGrid, IniFile.m_bShowGridFrame)) End Sub #Region "Manage TopCommandBar" ' NON USATO!!!! Friend Sub OpenProject(sFilePath As String) If String.IsNullOrEmpty(sFilePath) Then Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sDir) m_Controller.OpenProject(sDir) Else m_Controller.OpenProject(sFilePath, False) End If Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) End Sub Friend Sub SaveProject() Dim nType As NGE = DirectCast(GetPrivateProfileInt(S_GEOMDB, K_SAVETYPE, NGE.CMPTEXT), NGE) 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" & IniFile.m_nInstance.ToString() & ".nge" m_Controller.SaveAsProject(sFile, nType) End If End Sub Friend Sub SaveAsProject() Dim nType As NGE = DirectCast(GetPrivateProfileInt(S_GEOMDB, K_SAVETYPE, NGE.CMPTEXT), NGE) Dim sFile As String = m_Controller.GetCurrFile() If String.IsNullOrWhiteSpace(sFile) Then GetPrivateProfileString(S_GENERAL, K_LASTNGEDIR, "", sFile) sFile.TrimEnd("\"c) sFile += "\New" & IniFile.m_nInstance.ToString() & ".nge" End If m_Controller.SaveAsProject(sFile, nType) End Sub Friend Sub InsertProject() ' eseguo Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTNGEINSDIR, "", sDir) m_Controller.InsertProject(sDir) End Sub Friend Sub ImportProject() Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTIMPDIR, "", sDir) m_Controller.ImportProject(sDir) Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) End Sub Friend Sub ExportProject() m_Controller.ExportProject(Path.ChangeExtension(m_Controller.GetCurrFile(), "dxf")) End Sub Friend Sub PreExecScript(bScriptInMru As Boolean) m_bScriptInMru = bScriptInMru End Sub Friend Sub ExecScript(sFilePath As String, Optional bRaiseEvent As Boolean = False) If String.IsNullOrEmpty(sFilePath) Then Dim sDir As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LASTLUADIR, "", sDir) m_Controller.Exec(sDir) Else If bRaiseEvent Then RaiseEvent OnPreControllerExec(sFilePath) m_Controller.Exec(sFilePath, False) If bRaiseEvent Then RaiseEvent OnPostControllerExec() End If Dim bMachiningMode As Boolean = EgtGetCurrMachGroup() <> GDB_ID.NULL If Not bMachiningMode And EgtGetCurrLayer() = GDB_ID.NULL Then Dim nCurrPart As Integer = EgtGetCurrPart() If nCurrPart = GDB_ID.NULL Or Not EgtSetCurrPartLayer(nCurrPart, EgtGetFirstLayer(nCurrPart, True)) Then EgtResetCurrPartLayer() End If EmitCurrPartLayer() End If Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) If bMachiningMode Then Map.refTopCommandBarVM.SetMachiningMode() End Sub Friend Sub DoorsScript(sFilePath As String) Dim nErr As Integer If String.IsNullOrEmpty(sFilePath) Then nErr = ExecDoors(m_ProjectScene, String.Empty) Else nErr = ExecDoors(m_ProjectScene, sFilePath) End If 'EgtResetCurrPartLayer() 'OnUpdateUI(Nothing, True) 'Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) IniFile.m_MruDoors.Add(IniFile.m_DDFFilePath) Dim sFile As String = String.Empty If EgtGetCurrFilePath(sFile) Then IniFile.m_MruFiles.Add(sFile) End Sub Friend Sub DMachScript() Dim bOk As Boolean = ExecDoorsMachining(m_ProjectScene) OnUpdateUI(Nothing, True) If EgtGetCurrMachGroup() <> GDB_ID.NULL Then Map.refTopCommandBarVM.SetMachiningMode() End If If Not bOk Then Map.refStatusBarVM.NotifyStatusOutput(EgtMsg(MSG_DOORSERRORS + 2)) End Sub Friend Sub GunStockNew(sFilePath As String) Dim bOk As Boolean If String.IsNullOrEmpty(sFilePath) Then bOk = ExecGunStockMod(m_ProjectScene, String.Empty) Else bOk = ExecGunStockMod(m_ProjectScene, sFilePath) End If EgtResetCurrPartLayer() OnUpdateUI(Nothing, True) Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) If EgtGetCurrMachGroup() <> GDB_ID.NULL Then Map.refTopCommandBarVM.SetMachiningMode() End If If bOk Then IniFile.m_MruNewGunStock.Add(IniFile.m_MODFilePath) IniFile.m_MruModifyGunStock.Add(IniFile.m_PEZFilePath) Dim sFile As String = String.Empty If EgtGetCurrFilePath(sFile) Then IniFile.m_MruFiles.Add(sFile) End If Else IniFile.m_MruNewGunStock.Remove(IniFile.m_MODFilePath) If Not String.IsNullOrEmpty(IniFile.m_PEZFilePath) Then Try Dim sErrFilePath As String = Path.ChangeExtension(IniFile.m_PEZFilePath, ".txt") Dim Lines() As String = File.ReadAllLines(sErrFilePath) Dim values() As String = Lines(0).Split("="c) Lines(0) = EgtMsg(MSG_DOORSERRORS + 1) & " " & Convert.ToInt32(values(1)) Dim sErrMsg As String = String.Empty For Index = 1 To Lines.Count - 1 If Not String.IsNullOrWhiteSpace(Lines(Index)) Then sErrMsg &= Lines(Index) & vbCrLf Next MessageBox.Show(sErrMsg, Lines(0).ToUpper, MessageBoxButton.OK, MessageBoxImage.Error) Catch ex As Exception MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 7)) End Try End If End If End Sub Friend Sub GunStockModif(sFilePath As String) Dim bOk As Boolean If String.IsNullOrEmpty(sFilePath) Then bOk = ExecGunStockPez(m_ProjectScene, String.Empty) Else bOk = ExecGunStockPez(m_ProjectScene, sFilePath) End If EgtResetCurrPartLayer() OnUpdateUI(Nothing, True) Map.refManageLayerExpanderVM.SelectIdInObjTreeNoMark(EgtGetCurrLayer()) If EgtGetCurrMachGroup() <> GDB_ID.NULL Then Map.refTopCommandBarVM.SetMachiningMode() End If If bOk Then IniFile.m_MruModifyGunStock.Add(IniFile.m_PEZFilePath) Dim sFile As String = String.Empty If EgtGetCurrFilePath(sFile) Then IniFile.m_MruFiles.Add(sFile) End If Else IniFile.m_MruModifyGunStock.Remove(IniFile.m_PEZFilePath) Try Dim sErrFilePath As String = Path.ChangeExtension(IniFile.m_PEZFilePath, ".txt") Dim Lines() As String = File.ReadAllLines(sErrFilePath) Dim values() As String = Lines(0).Split("="c) Lines(0) = EgtMsg(MSG_DOORSERRORS + 1) & " " & Convert.ToInt32(values(1)) Dim sErrMsg As String = String.Empty For Index = 1 To Lines.Count - 1 If Not String.IsNullOrWhiteSpace(Lines(Index)) Then sErrMsg &= Lines(Index) & vbCrLf Next MessageBox.Show(sErrMsg, Lines(0).ToUpper, MessageBoxButton.OK, MessageBoxImage.Error) Catch ex As Exception MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 7)) End Try End If End Sub Friend Sub GunStockCopy(sFilePath As String, sDirDest As String) Dim bOk As Boolean bOk = ExecGunStockCopy(m_ProjectScene, sFilePath, sDirDest) If bOk Then ' Copia dei file terminata con successo ... Dim sMsg As String = EgtMsg(8216) & vbCrLf & sFilePath & vbCrLf & "->" & sDirDest MessageBox.Show(sMsg, EgtMsg(8214), MessageBoxButton.OK, MessageBoxImage.Information) Else ' Errore nella copia dei file ... Dim sMsg As String = EgtMsg(8255) & vbCrLf & sFilePath & vbCrLf & "->" & sDirDest MessageBox.Show(sMsg, EgtMsg(8251), MessageBoxButton.OK, MessageBoxImage.Error) End If End Sub #End Region #Region "DrawOptionPanel Commands" Friend Sub NotifyInputText(sInputText As String) m_InputText = sInputText End Sub Friend Sub SetLastBoolean(bBoolean As Boolean) m_Controller.SetLastBoolean(bBoolean) End Sub Friend Sub SetLastInteger(nInteger As Integer) m_Controller.SetLastInteger(nInteger) End Sub Friend Sub Show(sString As String) m_Controller.Show(sString) End Sub Friend Sub Done(sString As String) m_Controller.Done(sString) End Sub Friend Sub SaveObject(SaveObjectParam As SaveObjectParam) m_Controller.SaveObject(SaveObjectParam.nId, SaveObjectParam.sDir, SaveObjectParam.nType) End Sub #End Region #Region "StatusBar Commands" Friend Sub StatusCurrPosTypeCommand() m_bCPlaneTypePos = Not m_bCPlaneTypePos If m_bCPlaneTypePos Then Map.refStatusBarVM.StatusCurrPosTypeText("GRID") Else Map.refStatusBarVM.StatusCurrPosTypeText("WORLD") End If m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos) End Sub Friend Sub StatusUnitsCommand() IniFile.m_bMmUnits = Not IniFile.m_bMmUnits Map.refStatusBarVM.UpdateStatusUnits(IniFile.m_bMmUnits) UpdateGridData() EgtDraw() End Sub #End Region #Region "Controller Commands" Friend Sub ExecuteCommand(nCmd As Controller.CMD) m_Controller.ExecuteCommand(nCmd) End Sub Friend Sub ManageModified() Dim AllowClose = m_Controller.ManageModified() Map.refMainWindowVM.AllowWindowToClose(AllowClose) End Sub #End Region #Region "MainWindow Commands" Friend Sub ResetStatus() m_Controller.ResetStatus() End Sub #End Region #End Region #Region "SCENE EVENTS" Private Sub OnCursorPos(ByVal sender As Object, ByVal sCursorPos As String) Handles m_ProjectScene.OnCursorPos Map.refStatusBarVM.NotifyCurrPos(sCursorPos) End Sub Private Sub OnMouseSetObjFilterForSelect(sender As Object, bZeroDim As Boolean, bCurve As Boolean, bSurf As Boolean, bVolume As Boolean, bExtra As Boolean) Handles m_ProjectScene.OnMouseSetObjFilterForSelect m_Controller.MouseSetObjFilterForSelect(bZeroDim, bCurve, bSurf, bVolume, bExtra) End Sub Private Sub OnMouseSelectedAll(ByVal sender As Object, bOnlyVisble As Boolean) Handles m_ProjectScene.OnMouseSelectedAll ' Se in modalità Draw seleziono tutto If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then m_Controller.MouseSelectedAll(bOnlyVisble) Return End If ' Sono in modalità Machining, se la modalità di selezione è NULL non seleziono nulla ed esco If m_SceneSelMode = SceneSelModeOpt.NULL Then Return Select Case m_SceneSelType Case SceneSelTypeOpt.MACHINING ' Cerco i pezzi all'interno dei grezzi Dim nRawPart As Integer = EgtGetFirstRawPart() While nRawPart <> GDB_ID.NULL Dim nPart As Integer = EgtGetFirstPartInRawPart(nRawPart) While nPart <> GDB_ID.NULL Dim nLayer As Integer = EgtGetFirstGroupInGroup(nPart) While nLayer <> GDB_ID.NULL Dim nObj As Integer = EgtGetFirstInGroup(nLayer) While nObj <> GDB_ID.NULL EgtSelectObj(nObj) nObj = EgtGetNext(nObj) End While nLayer = EgtGetNextGroup(nLayer) End While nPart = EgtGetNextPartInRawPart(nPart) End While nRawPart = EgtGetNextRawPart(nRawPart) End While Case SceneSelTypeOpt.FIXTURE Dim nFixtureId As Integer = EgtGetFirstFixture() While nFixtureId <> GDB_ID.NULL EgtSelectObj(nFixtureId) nFixtureId = EgtGetNextFixture(nFixtureId) End While Dim SelCount As Integer = EgtGetSelectedObjCount() If SelCount > 1 Then EgtSetMark(EgtGetFirstSelectedObj) End If Case SceneSelTypeOpt.RAWPART Dim nRawPartId As Integer = EgtGetFirstRawPart() While nRawPartId <> GDB_ID.NULL If EgtVerifyRawPartCurrPhase(nRawPartId) Then EgtSelectObj(nRawPartId) End If nRawPartId = EgtGetNextRawPart(nRawPartId) End While Dim SelCount As Integer = EgtGetSelectedObjCount() If SelCount > 1 Then EgtSetMark(EgtGetFirstSelectedObj) End If Case SceneSelTypeOpt.RAWPARTWITHFIXTURE Dim nRawPartCount As Integer = 0 Dim nRawPartId As Integer = EgtGetFirstRawPart() While nRawPartId <> GDB_ID.NULL If EgtVerifyRawPartCurrPhase(nRawPartId) Then nRawPartCount += 1 EgtSelectObj(nRawPartId) DispositionUtility.SelectRawPartFixture(nRawPartId) End If nRawPartId = EgtGetNextRawPart(nRawPartId) End While If nRawPartCount > 1 Then EgtSetMark(EgtGetFirstSelectedObj) End If End Select EgtDraw() End Sub Private Sub OnMouseDeselectedAll(ByVal sender As Object) Handles m_ProjectScene.OnMouseDeselectedAll ' Se in modalità Draw deseleziono tutto If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then m_Controller.MouseDeselectedAll(True) Return End If ' Sono in modalità Machining, se la modalità di selezione è NULL non deseleziono nulla ed esco If m_SceneSelMode = SceneSelModeOpt.NULL Then Return ' Se sono in lavorazione If IniFile.m_ProjectMode = ProjectModeOpt.MACHINING Then If (m_SceneSelType = SceneSelTypeOpt.RAWPART OrElse m_SceneSelType = SceneSelTypeOpt.FIXTURE OrElse m_SceneSelType = SceneSelTypeOpt.RAWPARTWITHFIXTURE) Then EgtResetMark(EgtGetFirstSelectedObj()) ElseIf m_SceneSelType = SceneSelTypeOpt.MACHINING Then SelData.ClearIdSub() ElseIf m_SceneSelType = SceneSelTypeOpt.NULL Then Return End If End If ' deseleziono tutto m_Controller.MouseDeselectedAll() End Sub ' Identificativi per elemento da selezionare/deselezionare Private m_nIdToSel As Integer = GDB_ID.NULL Private m_SelType As DispositionUtility.SelType = DispositionUtility.SelType.NULL Private m_nIdToDesel As Integer = GDB_ID.NULL Private m_nSelOpeId As Integer = GDB_ID.NULL ' Dati per Drag Private m_nRestRadius As Integer = 3 Private m_bDrag As Boolean = False Private m_bDragToStart As Boolean = False Private m_bDragging As Boolean = False Private m_locPrev As System.Drawing.Point Private m_ptPrev As Point3d Private Sub OnStartingMouseDown(ByVal sender As Object, e As System.Windows.Forms.MouseEventArgs, ByRef bContinue As Boolean) Handles m_ProjectScene.OnStartingMouseDownScene ' Se in modalità Draw accetto tutto If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then Return ' Sono in modalità Machining ' se non posso selezionare nulla o in lavorazione esco If m_SceneSelType = SceneSelTypeOpt.NULL OrElse m_SceneSelType = SceneSelTypeOpt.MACHINING OrElse m_SceneSelType = SceneSelTypeOpt.MACHPATH Then Return ' Si può selezionare solo con il tasto sinistro If e.Button <> Forms.MouseButtons.Left Then Return ' Si Sostituisce completamente la gestione dell'evento chiamante bContinue = False ' Dati per drag Dim TableRef As Point3d EgtGetTableRef(1, TableRef) ' Per default no drag m_bDrag = False Dim nSel As Integer EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel) Dim nId As Integer = EgtGetFirstObjInSelWin() While nId <> GDB_ID.NULL Select Case m_SceneSelType Case SceneSelTypeOpt.FIXTURE Dim nFixtureId As Integer = EgtGetParent(EgtGetParent(nId)) Dim sName As String = "" EgtGetName(EgtGetParent(nId), sName) If EgtVerifyFixture(nFixtureId) Then m_SelType = DispositionUtility.SelType.FIXTURE ' Se già selezionato If EgtIsSelectedObj(nFixtureId) Then ' Memorizzo Id da deselezionare m_nIdToDesel = nFixtureId Else ' Memorizzo Id da selezionare m_nIdToSel = nFixtureId End If ' Drag possibile m_bDrag = True ' salvo vettore click rispetto a punto hook della ventosa Dim ptCurr As Point3d EgtGetPlaneSnapPoint(e.Location, Vector3d.Z_AX, TableRef.z, ptCurr) DispositionUtility.VtHookFinder(nFixtureId, ptCurr) Exit While ElseIf sName.Contains(DispositionUtility.MOBILE) Then Dim sInfo As String = "" If EgtGetInfo(EgtGetParent(nId), "MDir", sInfo) Then m_SelType = DispositionUtility.SelType.BARS m_nIdToSel = EgtGetParent(nId) ' Drag possibile m_bDrag = True End If End If Case SceneSelTypeOpt.RAWPART, SceneSelTypeOpt.RAWPARTWITHFIXTURE Dim nRawPartId As Integer = EgtGetParent(nId) If EgtVerifyRawPartCurrPhase(nRawPartId) Then m_SelType = DispositionUtility.SelType.RAWPART ' Se già selezionato If EgtIsSelectedObj(nRawPartId) Then ' Memorizzo Id da deselezionare m_nIdToDesel = nRawPartId Else ' Memorizzo Id da selezionare m_nIdToSel = nRawPartId End If ' Drag possibile m_bDrag = True Exit While End If End Select nId = EgtGetNextObjInSelWin() End While ' Dati per drag m_locPrev = e.Location EgtGetTableRef(1, TableRef) m_bDrag = m_bDrag AndAlso EgtGetPlaneSnapPoint(e.Location, Vector3d.Z_AX, TableRef.z, m_ptPrev) m_bDragToStart = m_bDrag End Sub Private Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_ProjectScene.OnMouseMoveScene ' Se in modalità Draw esco If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then Return End If ' Sono in modalità Machining ' Si può selezionare solo con il tasto sinistro se la selezione non è impostata a NULL If e.Button <> Forms.MouseButtons.Left OrElse m_SceneSelType = SceneSelTypeOpt.NULL Then Return ' se non sono in modalità muovi esco If Not m_bMoveInDisposition Then Return ' Se drag non abilitato o già in esecuzione, esco If Not m_bDrag Or m_bDragging Then Return ' Se primo movimento di drag, verifico di aver superato la soglia di movimento in pixel If m_bDragToStart Then If Math.Abs(e.Location.X - m_locPrev.X) < m_nRestRadius And Math.Abs(e.Location.Y - m_locPrev.Y) < m_nRestRadius Then Return End If m_bDragToStart = False End If ' Determino cosa muovere Dim nMoveId = If(m_nIdToSel <> GDB_ID.NULL, m_nIdToSel, GDB_ID.SEL) ' Inizio esecuzione di drag m_bDragging = True ' Ricavo il punto corrente in coordinate mondo Dim ptCurr As Point3d Dim TableRef As Point3d EgtGetTableRef(1, TableRef) EgtGetPlaneSnapPoint(e.Location, Vector3d.Z_AX, TableRef.z, ptCurr) ' Ricavo il vettore di movimento (tengo solo XY) Dim vtMove As Vector3d = ptCurr - m_ptPrev vtMove.z = 0 ' Muovo gli oggetti selezionati se consentito DispositionUtility.MoveRawPartPartAndFixture(nMoveId, vtMove, m_SelType, ptCurr) 'EgtSaveFile("c:\Temp\ProveMovimentoVentose\Prova1.nge", NGE.BIN) EgtDraw() ' Aggiorno il punto precedente m_ptPrev = ptCurr ' Terminata esecuzione di drag m_bDragging = False End Sub Private Sub OnMyMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_ProjectScene.OnMouseUpScene ' Se in modalità Draw esco If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then Return End If ' Sono in modalità Machining ' Se eseguito drag If Not m_bDragToStart Then ' Basta reset alla fine ' se sono in modalità movimento barre ElseIf m_SelType = DispositionUtility.SelType.BARS Then ' Basta reset alla fine ' Se selezione da eseguire ElseIf m_nIdToSel <> GDB_ID.NULL Then ' se sono in modalità sottopezzi If m_SceneSelType = SceneSelTypeOpt.FIXTURE Then ' se il sottopezzo da selezionare è un riferimento e ci sono altri oggetti selezionati resetto lo stato di selezione ed esco If DispositionUtility.FixtureType(m_nIdToSel) = DispositionUtility.FIX_TYPE.REFERENCE AndAlso EgtGetSelectedObjCount() > 0 Then m_bDrag = False m_nIdToSel = GDB_ID.NULL m_nIdToDesel = GDB_ID.NULL EgtDraw() Return ' altrimenti verifico il tipo del primo oggetto selezionato Else Dim nFirstSelId As Integer = EgtGetFirstSelectedObj() ' se è un riferimento resetto lo stato di selezione ed esco If DispositionUtility.FixtureType(nFirstSelId) = DispositionUtility.FIX_TYPE.REFERENCE Then m_bDrag = False m_nIdToSel = GDB_ID.NULL m_nIdToDesel = GDB_ID.NULL EgtDraw() Return End If End If End If ' marco il primo elemento se questo è il secondo If EgtGetSelectedObjCount() = 1 Then ' marco il primo tra i selezionati Dim nFirstSelObj As Integer = EgtGetFirstSelectedObj() EgtSetMark(nFirstSelObj) End If ' se sono in modalità grezzo con relativi sottopezzi If m_SceneSelType = SceneSelTypeOpt.RAWPARTWITHFIXTURE Then ' seleziono tutti i sottopezzi sotto il grezzo da selezionare DispositionUtility.SelectRawPartFixture(m_nIdToSel) End If ' Eseguo la selezione EgtSelectObj(m_nIdToSel) ' Se deselezione da eseguire ElseIf m_nIdToDesel <> GDB_ID.NULL Then ' se l'elemento da deselezionare è marcato Dim bMarked As Boolean = False EgtGetMark(m_nIdToDesel, bMarked) If bMarked Then ' smarco l'oggetto deselezionato EgtResetMark(m_nIdToDesel) End If ' se sono in modalità ventose o grezzi If m_SceneSelType = SceneSelTypeOpt.RAWPARTWITHFIXTURE Then ' deseleziono tutti i sottopezzi sotto il grezzo da deselezionare DispositionUtility.DeselectRawPartFixture(m_nIdToDesel) End If ' Eseguo la deselezione EgtDeselectObj(m_nIdToDesel) If EgtGetSelectedObjCount() > 1 Then ' marco il primo Dim nFirstSelObj As Integer = EgtGetFirstSelectedObj() EgtSetMark(nFirstSelObj) Else ' smarco il primo ed unico oggetto selezionato Dim nFirstSelObj As Integer = EgtGetFirstSelectedObj() EgtResetMark(nFirstSelObj) End If End If ' Reset m_bDrag = False m_nIdToSel = GDB_ID.NULL m_nIdToDesel = GDB_ID.NULL EgtDraw() End Sub Private Sub OnStartingMouseSelectingObj(ByVal sender As Object) Handles m_ProjectScene.OnStartingMouseSelectingObj m_nSelOpeId = GDB_ID.NULL End Sub Private Sub OnMouseSelectingObj(ByVal sender As Object, ByVal nId As Integer, ByRef bOk As Boolean) Handles m_ProjectScene.OnMouseSelectingObj ' Se oggetto già rifiutato non faccio le verifiche If Not bOk Then Return ' Impedisco la selezione di oggetti in modo Locked o Hidden Dim nMode As Integer = GDB_MD.STD EgtGetCalcMode(nId, nMode) If nMode <> GDB_MD.STD Then bOk = False Return End If ' Se in modalità Draw accetto tutto If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then Return ' Sono in modalità Machining Select Case m_SceneSelType Case SceneSelTypeOpt.NULL bOk = False Case SceneSelTypeOpt.MACHINING Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId)) If Not IsPartInRaw(nPartId) Then bOk = False End If Case SceneSelTypeOpt.MACHPATH Dim nCurrOpeId As Integer = Map.refOperationsListExpanderVM.GetOperationId(nId) bOk = (nCurrOpeId <> GDB_ID.NULL AndAlso nCurrOpeId <> m_nSelOpeId) If m_nSelOpeId = GDB_ID.NULL Then m_nSelOpeId = nCurrOpeId Case Else bOk = False End Select End Sub Private Sub OnMouseSelectedObj(ByVal sender As Object, ByVal nId As Integer, ByVal bLast As Boolean) Handles m_ProjectScene.OnMouseSelectedObj If IniFile.m_ProjectMode = ProjectModeOpt.MACHINING And m_SceneSelType = SceneSelTypeOpt.MACHPATH Then Map.refOperationsListExpanderVM.SelOperationItemFromId(nId) ElseIf IniFile.m_ProjectMode = ProjectModeOpt.MACHINING And m_SceneSelType = SceneSelTypeOpt.MACHINING And (EgtGetType(nId) = GDB_TY.SRF_MESH Or EgtGetType(nId) = GDB_TY.SRF_FRGN) Then If Not EgtIsSelectedObj(nId) Then m_Controller.MouseSelectedObj(nId, bLast) Else m_Controller.MouseSelectedObj(nId, bLast) End If 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) If IniFile.m_ProjectMode = ProjectModeOpt.MACHINING And m_SceneSelType = SceneSelTypeOpt.MACHINING And (EgtGetType(nId) = GDB_TY.SRF_MESH Or EgtGetType(nId) = GDB_TY.SRF_FRGN) Then If EgtIsSelectedObj(nId) Then Dim nFac As Integer = If(EgtGetType(nId) = GDB_TY.SRF_MESH, Math.Max(EgtSurfTmFacetFromTria(nId, nAux), 0), nAux) If Not SelData.FindIdSub(nId, nFac) Then SelData.AddIdSub(nId, nFac) Else SelData.RemoveIdSub(nId, nFac) If Not SelData.FindId(nId) Then EgtDeselectObj(nId) End If End If Else SelData.RemoveId(nId) End If EgtDraw() End If 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 OnMouseAnalyzedEx(sender As Object, nId As Integer, nSub As Integer, ptSel As Point3d) Handles m_ProjectScene.OnMouseAnalyzedEx Map.refManageLayerExpanderVM.UpdateObjInObjTree(nId) Map.refManageLayerExpanderVM.SelectIdInObjTree(nId) ' Cancello geometria e info di eventuale precedente analisi Analyze.ClearAnalyzeGroup() Map.refStatusBarVM.NotifyStatusOutput("") ' Se curva composita, visualizzo numerazione curve semplici If EgtGetType(nId) = GDB_TY.CRV_COMPO Then ' Visualizzo numerazione Analyze.CreateAnalyzeGroup() Analyze.CreateCurveCompoPntNbrs(nId) ' Se superficie trimesh, visualizzo dati faccetta toccata ElseIf EgtGetType(nId) = GDB_TY.SRF_MESH Then Dim nFac As Integer = EgtSurfTmFacetFromTria(nId, nSub) If nFac <> -1 Then ' Visualizzo la normale e il contorno della faccia Analyze.CreateAnalyzeGroup() Analyze.CreateNormal(nId, nFac) Analyze.CreateFacetLoops(nId, nFac) ' Recupero i dati (in globale o griglia a seconda della impostazione) Dim ptC As Point3d Dim vtN As Vector3d EgtSurfTmFacetCenter(nId, nFac, If(m_bCPlaneTypePos, GDB_ID.GRID, GDB_ID.ROOT), ptC, vtN) Dim dLen, dPhi, dTheta As Double vtN.ToSpherical(dLen, dTheta, dPhi) ' Emetto info sulla barra di stato Dim sOut As String = "Facet " + nFac.ToString() + " : C(" + LenToString(ptC.x, 3) + "," + LenToString(ptC.y, 3) + "," + LenToString(ptC.z, 3) + ")" + " N(" + DoubleToString(vtN.x, 4) + "," + DoubleToString(vtN.y, 4) + "," + DoubleToString(vtN.z, 4) + ")" + " / φ=" + DoubleToString(dPhi, 2) + " θ=" + DoubleToString(dTheta, 2) Map.refStatusBarVM.NotifyStatusOutput(sOut) End If End If ' Aggiorno la visualizzazione EgtDraw() End Sub Private Sub OnShowDistance(ByVal sender As Object, ByVal sDistance As String) Handles m_ProjectScene.OnShowDistance Map.refStatusBarVM.NotifyStatusOutput(sDistance) End Sub Private Sub OnSceneKeyDown(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 AndAlso Map.refTopCommandBarVM.DrawIsChecked Then m_Controller.SetLastInteger(GDB_ID.SEL) m_Controller.ExecuteCommand(Controller.CMD.DELETE) ' Con END eseguo deselezione di tutto ElseIf e.KeyData = System.Windows.Forms.Keys.End Then m_Controller.MouseDeselectedAll(True) ' 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 AndAlso 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 AndAlso m_Controller.GetContinue() Then m_Controller.ContinueLine2P() ' Con 'V' cambio lo stato del check ElseIf e.KeyData = System.Windows.Forms.Keys.V Then Map.refInputExpanderVM.ChangeInputBoxCheck() End If End Sub Private Sub OnSceneCloseAnalyze(sender As System.Object) Handles m_ProjectScene.OnCloseAnalyze Map.refInstrumentPanelVM.Analyze_IsChecked(False) End Sub Private Sub OnSceneCloseGetDist(sender As System.Object) Handles m_ProjectScene.OnCloseGetDist Map.refInstrumentPanelVM.GetDistance_IsChecked(False) End Sub #End Region #Region "CONTROLLER EVENTS" Private Sub OnNewProject(ByVal sender As Object, ByVal bOk As Boolean) Handles m_Controller.OnNewProject EgtZoom(ZM.ALL) If Not bOk Then MessageBox.Show(Application.Current.MainWindow, 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 If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.ClearObjTree() End Sub Private Sub OnOpenProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnOpenProject EgtZoom(ZM.ALL) WritePrivateProfileString(S_GENERAL, K_LASTNGEDIR, Path.GetDirectoryName(sFile)) If bOk Then IniFile.m_MruFiles.Add(sFile) Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String If My.Computer.FileSystem.FileExists(sFile) Then sMsg = EgtMsg(10003) & " '" & sFile & "'" 'Error opening file Else sMsg = EgtMsg(10009) & " '" & sFile & "'" 'Missing file End If MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error End If End Sub Private Sub OnInsertedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnInsertedProject EgtZoom(ZM.ALL) WritePrivateProfileString(S_GENERAL, K_LASTNGEINSDIR, Path.GetDirectoryName(sFile)) End Sub Private Sub OnSavingProject(ByVal sender As Object, ByVal sFile As String) 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 IniFile.m_MruFiles.Add(sFile) Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub Private Sub OnSavingObject(ByVal sender As Object, ByVal sFile As String) 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 IniFile.m_MruFiles.Add(sFile) Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub Private Sub OnImportingProject(sender As Object, nType As Integer, ByRef nFlag As Integer) Handles m_Controller.OnImportingProject If nType <> FT.NULL Then Map.refManageLayerExpanderVM.ClearObjTree() If nType = FT.CNC Then nFlag = GetPrivateProfileInt(S_IMPORT, K_CNCFLAG, EIC_FL.NONE) ElseIf nType = FT.BTL Or nType = FT.BTLX Then nFlag = GetPrivateProfileInt(S_IMPORT, K_BTLFLAG, EIB_FL.NONE) Else nFlag = 0 End If ' Abilito progress e bottone stop Map.refStatusBarVM.NotifyStatusProgress(0) Map.refStatusBarVM.NotifyStatusStop(True) Else MessageBox.Show(Application.Current.MainWindow, 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 EgtZoom(ZM.ALL) ' Disabilito progress e bottone stop Map.refStatusBarVM.NotifyStatusProgress(0) Map.refStatusBarVM.NotifyStatusStop(False) ' Salvo path WritePrivateProfileString(S_GENERAL, K_LASTIMPDIR, Path.GetDirectoryName(sFile)) ' Segnalo eventuale errore If Not bOk Then Dim sMsg As String = EgtMsg(10006) & " '" & sFile & "'" 'Error importing file MessageBox.Show(Application.Current.MainWindow, 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(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub Private Sub OnExecutingScript(ByVal sender As Object) Handles m_Controller.OnExecutingScript ' Abilito progress e bottone stop Map.refStatusBarVM.NotifyStatusProgress(0) Map.refStatusBarVM.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 If bOk Then If m_bScriptInMru Then IniFile.m_MruScripts.Add(sFile) WritePrivateProfileString(S_GENERAL, K_LASTLUADIR, Path.GetDirectoryName(sFile)) End If Else If m_bScriptInMru Then If File.Exists(sFile) Then IniFile.m_MruScripts.Add(sFile) WritePrivateProfileString(S_GENERAL, K_LASTLUADIR, Path.GetDirectoryName(sFile)) Else IniFile.m_MruScripts.Remove(sFile) End If End If MessageBox.Show(Application.Current.MainWindow, sError, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If ' Disabilito progress e bottone stop Map.refStatusBarVM.NotifyStatusProgress(0) Map.refStatusBarVM.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 Map.refInputExpanderVM.PrepareInputBox(New PrepareInputBoxParam(sTitle, sLabel, sCheckLabel, bShowCombo, bShowBtn)) End Sub Private Sub OnSetInputBoxText(ByVal sText As String) Handles m_Controller.SetInputBoxText Map.refInputExpanderVM.SetInputBoxText(sText) End Sub Private Sub OnSetInputBoxCheck(ByVal bCheck As Boolean) Handles m_Controller.SetInputBoxCheck Map.refInputExpanderVM.SetInputBoxCheck(bCheck) End Sub Private Sub OnAddInputBoxCombo(ByVal sText As String, ByVal bSelected As Boolean) Handles m_Controller.AddInputBoxCombo Map.refInputExpanderVM.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 If Not IsNothing(Map.refInputExpanderVM) Then Map.refInputExpanderVM.ResetInputBox() If m_Controller.GetContinue() Then Map.refStatusBarVM.NotifyStatusOutput((EgtMsg(399))) ' Continue : 'L' with line, 'A' with arc Else Map.refStatusBarVM.NotifyStatusOutput(("")) End If ' aggiorno dati correnti EmitTitle() EmitCurrPartLayer() If bReloadUI Then If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.LoadObjTree() Else If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.UpdateObjTree() End If ' aggiorno macchina corrente Map.refMachinePanelVM.UpdateCurrentMachine() End Sub Private Sub OutputInfo(ByVal sender As Object, ByVal sText As String) Handles m_Controller.OutputInfo Map.refStatusBarVM.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 Map.refStatusBarVM.StatusSnapPointTypeBackground(New SolidColorBrush(SystemColors.ControlColor)) Else Map.refStatusBarVM.StatusSnapPointTypeBackground(Brushes.Bisque) End If Select Case nSpType Case SP.PT_SKETCH Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1102)) 'Sketch Point Case SP.PT_GRID Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1104)) 'Grid Point Case SP.PT_END Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1106)) 'End Point Case SP.PT_MID Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1108)) 'Mid Point Case SP.CENTER Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1110)) 'Center Case SP.CENTROID Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1112)) 'Centroid Case SP.PT_NEAR Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1114)) 'Near Point Case SP.PT_INTERS Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1116)) 'Inters Point Case SP.PT_TANGENT Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1118)) 'Tang Point Case SP.PT_PERPENDICULAR Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1120)) 'Perp Point Case SP.PT_MINDIST Map.refStatusBarVM.StatusSnapPointTypeText(EgtMsg(1122)) 'MinDist Point Case Else Map.refStatusBarVM.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 If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.UpdateHeaderName(sText) colObj.A = 100 If Not IsNothing(Map.refManageLayerExpanderVM) Then Map.refManageLayerExpanderVM.UpdateHeaderColor(colObj) End Sub #End Region 'DrawOptionPanel #Region "Scene selection" Private m_SceneSelMode As SceneSelModeOpt Friend Property SceneSelMode As SceneSelModeOpt Get Return m_SceneSelMode End Get Set(value As SceneSelModeOpt) If value <> m_SceneSelMode Then m_SceneSelMode = value Select Case m_SceneSelMode Case SceneSelModeOpt.NULL m_ProjectScene.SetObjFilterForSel(False, False, False, False, False) EgtSetObjFilterForSelect(True, True, True, True, True) Case SceneSelModeOpt.PARTCURVES m_ProjectScene.SetObjFilterForSel(False, True, False, False, True) Case SceneSelModeOpt.PARTSURFACES m_ProjectScene.SetObjFilterForSel(False, False, True, False, False) Case SceneSelModeOpt.PARTCURVESANDSURFACES m_ProjectScene.SetObjFilterForSel(False, True, True, False, True) Case SceneSelModeOpt.ALL m_ProjectScene.SetObjFilterForSel(True, True, True, True, True) Case Else m_ProjectScene.SetObjFilterForSel(False, False, False, False, False) End Select End If End Set End Property Private m_SceneSelType As SceneSelTypeOpt Friend Property SceneSelType As SceneSelTypeOpt Get Return m_SceneSelType End Get Set(value As SceneSelTypeOpt) If value <> m_SceneSelType Then m_SceneSelType = value End If End Set End Property Private m_bMoveInDisposition As Boolean Public Property bMoveInDisposition As Boolean Get Return m_bMoveInDisposition End Get Set(value As Boolean) m_bMoveInDisposition = value End Set End Property Friend Function IsPartInRaw(nSearchedPartId As Integer) As Boolean Dim nRawId As Integer = EgtGetFirstRawPart() While nRawId <> GDB_ID.NULL Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId) While nPartId <> GDB_ID.NULL If nPartId = nSearchedPartId Then Return True End If nPartId = EgtGetNextPartInRawPart(nPartId) End While nRawId = EgtGetNextRawPart(nRawId) End While Return False End Function #End Region ' Scene selection End Class