Files
EgtCAM5/ProjectPage/ProjectViewModel.vb
T
Dario Sassi c19dabea52 EgtCAM5 1.8j6 :
- per default in lavorazione si carica solo la tavola
- non si salvano più in MRU i comandi lua dei bottoni Special.
2017-10-30 19:26:46 +00:00

1497 lines
84 KiB
VB.net

Imports System.Windows.Forms.Integration
Imports System.Windows.Interop
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtWPFLib5.EgtFloating
Namespace EgtCAM5
Public Class ProjectViewModel
Inherits TabViewModel
#Region "FIELDS"
' 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
#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
EgtCAM5Map.SetRefProjectVM(Me)
' Creo classe di supporto per la visualizzazione dei parametri utensile e di lavorazione per Db e operazioni
SharedFieldsClass.bFirst = True
ManageClosingApplication()
RegisterMainWindowCommands()
' Inizializza i parametri della scena
'InitializeEgtProject()
RegisterControllerCommands()
ManageTopCommandBar()
' Funzione che contiene la registrazione di tutti i comandi del DrawOptionPanel
RegisterDrawOptionPanelCommands()
' Funzione che contiene la registrazione di tutti i comandi della StatusBar
RegisterStatusBarCommands()
' Cambio impostazioni griglia a seconda che sia in modalità Draw o Machining
Application.Msn.Register(Application.MACHININGMODE_ISCHECKED, Sub()
' 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)
Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(IniFile.m_bMachiningShowGrid, IniFile.m_bShowGridFrame))
End Sub)
Application.Msn.Register(Application.DRAWMODE_ISCHECKED, Sub()
' Ripristino il riferimento della griglia di disegno
EgtSetGridFrame(m_GridDrawFrame3d)
m_ProjectScene.SetObjFilterForSel(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra)
Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(IniFile.m_bDrawShowGrid, IniFile.m_bShowGridFrame))
End Sub)
Application.Msn.Register(Application.SETSCENESELMODE, Sub(nSceneSelMode As SceneSelModeOpt)
Me.SceneSelMode = nSceneSelMode
End Sub)
Application.Msn.Register(Application.SETSCENESELTYPE, Sub(nSceneSelType As SceneSelTypeOpt)
Me.SceneSelType = nSceneSelType
End Sub)
Application.Msn.Register(Application.SETMOVEINDISPOSITION, Sub(bMoveInDisposition As Boolean)
Me.bMoveInDisposition = bMoveInDisposition
End Sub)
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"
''' <summary>
''' Returns a command that do Point.
''' </summary>
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
''' <summary>
''' Execute the Point. This method is invoked by the PointCommand.
''' </summary>
Public Sub Loaded(ByVal param As Object)
If m_bLoaded Then Return
m_bLoaded = True
' Creazione scena
PreInitializeScene()
If Not m_ProjectScene.Init() Then
EgtOutLog("Error in Project scene creation")
SceneHost.Child = Nothing
' Box di avviso chiave mancante
MsgBox(EgtMsg(MSG_MISSINGKEYWD + 2) & vbCrLf & EgtMsg(MSG_MISSINGKEYWD + 3), MsgBoxStyle.OkOnly, EgtMsg(MSG_MISSINGKEYWD + 1))
' Chiudo il programma
IniFile.m_bFailedRun = True
Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND)
' Verifico abilitazione prodotto
ElseIf (IniFile.m_nKeyOptions And KEY_OPT.BASE) = 0 Then
MsgBox(EgtMsg(MSG_MISSINGKEYWD + 5), MsgBoxStyle.OkOnly, EgtMsg(MSG_MISSINGKEYWD + 1))
' Chiudo il programma
IniFile.m_bFailedRun = True
Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND)
Else
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
EgtInitMachMgr(IniFile.m_sMachinesRoot)
' Apro progetto vuoto
EgtCAM5Map.refTopCommandBarVM.NewCmd()
End If
' Seleziono la macchina impostata nel file ini
Application.Msn.NotifyColleagues(Application.LOADCURRENTMACHINE)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
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 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", "TestEIn Warning",
MessageBoxButton.OK, MessageBoxImage.Warning)
End If
End If
' imposto unità di misura per interfaccia utente
IniFile.m_bMmUnits = (GetPrivateProfileInt(S_SCENE, K_MMUNITS, 1) <> 0)
Application.Msn.NotifyColleagues(Application.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)
Application.Msn.NotifyColleagues(Application.UPDATESTATUSGRID, New UpdateStatusGridParam(IniFile.m_bDrawShowGrid, IniFile.m_bShowGridFrame))
' imposto tipo coordinate
m_bCPlaneTypePos = True
Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPETEXT, "GRID")
m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos)
' modo di visualizzazione
Dim nShowMode As Integer = GetPrivateProfileInt(S_SCENE, K_SHOWMODE, SM.SHADING)
Application.Msn.NotifyColleagues(Application.SHOWMODESTATE, nShowMode)
' visualizzazione direzione curve
Dim nShowCurveDir As Integer = GetPrivateProfileInt(S_SCENE, K_CURVEDIR, 0)
Application.Msn.NotifyColleagues(Application.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)
' lettura da ini della variabile che abilita i gruppi di lavorazione
IniFile.m_bMachiningGroup = (GetPrivateProfileInt(S_MACH, K_MACHININGGROUP, 0) <> 0)
Application.Msn.NotifyColleagues(Application.DRAWMODE_ISCHECKED)
' lettura flag visualizzazione solo tavola in definizione lavorazioni
IniFile.m_bShowOnlyTable = (GetPrivateProfileInt(S_MACH, K_SHOWONLYTABLE, 1) <> 0)
' ObjTree non selezionato
Application.Msn.NotifyColleagues(Application.UPDATEOBJTREEOLDID, GDB_ID.NULL)
' nascondo input box
Application.Msn.NotifyColleagues(Application.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 export
m_Controller.SetDefaultForImageExport(OptionModule.m_nImgWidth, OptionModule.m_nImgHeight)
End Sub
Private Sub ProcessCommandLine()
' Recupero eventuali parametri da linea di comando
Dim bOpen As Boolean = False
If Environment.GetCommandLineArgs.Count() > 1 Then
Dim sFile As String = Environment.GetCommandLineArgs(1)
If Not String.IsNullOrWhiteSpace(sFile) Then
Dim nFileType As Integer = EgtGetFileType(sFile)
Select Case nFileType
Case FT.NGE, FT.NFE
m_Controller.OpenProject(sFile, False)
bOpen = True
Case FT.DXF, FT.STL, FT.CNC, FT.CSF, FT.BTL
m_Controller.ImportProject(sFile, False)
bOpen = True
Case FT.TSC, FT.LUA
m_Controller.Exec(sFile, False)
bOpen = True
End Select
If IO.Path.GetExtension(sFile).ToLower() = ".ddf" Then
' Se manca direttorio uso quello di default
If String.IsNullOrWhiteSpace(IO.Path.GetDirectoryName(sFile)) Then
Dim sDefDir As String = String.Empty
GetPrivateProfileString(S_DOORS, K_DDFDEFAULTDIR, "", sDefDir)
sFile = sDefDir & "\" & sFile
End If
' Ricoscimento flag
Dim nPar2 As Integer = 0
If Environment.GetCommandLineArgs.Count() > 2 Then
nPar2 = CInt(Environment.GetCommandLineArgs(2))
End If
Dim bNcGen As Boolean = (nPar2 >= 1)
Dim bExit As Boolean = (nPar2 >= 2)
' Esecuzione
CreateDoors(sFile, bNcGen, bExit)
EgtZoom(ZM.ALL)
Application.Msn.NotifyColleagues(Application.EMITTITLE)
' Se richiesta uscita immediata
If bExit Then
Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND)
End If
End If
End If
End If
End Sub
Private 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
Application.Msn.NotifyColleagues(Application.UPDATEMAINWINDOWTITLE, sTitle)
End Sub
Private 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
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)
Application.Msn.Register(Application.SAVEOBJECT, Sub(SaveObjectParam As SaveObjectParam)
m_Controller.SaveObject(SaveObjectParam.nId, SaveObjectParam.sDir, SaveObjectParam.nType)
End Sub)
End Sub
Sub RegisterStatusBarCommands()
Application.Msn.Register(Application.STATUSCURRPOSTYPECOMMAND, Sub()
m_bCPlaneTypePos = Not m_bCPlaneTypePos
If m_bCPlaneTypePos Then
Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPETEXT, "GRID")
Else
Application.Msn.NotifyColleagues(Application.STATUSCURRPOSTYPETEXT, "WORLD")
End If
m_ProjectScene.SetGridCursorPos(m_bCPlaneTypePos)
End Sub)
Application.Msn.Register(Application.STATUSUNITSCOMMAND, Sub()
IniFile.m_bMmUnits = Not IniFile.m_bMmUnits
Application.Msn.NotifyColleagues(Application.UPDATESTATUSUNITS, IniFile.m_bMmUnits)
UpdateGridData()
EgtDraw()
End Sub)
End Sub
Sub RegisterControllerCommands()
Application.Msn.Register(Application.EXECUTECOMMAND, Sub(nCmd As Controller.CMD)
m_Controller.ExecuteCommand(nCmd)
End Sub)
Application.Msn.Register(Application.MANAGEMODIFIED, Sub()
Dim AllowClose = m_Controller.ManageModified()
Application.Msn.NotifyColleagues(Application.ALLOWWINDOWTOCLOSE, AllowClose)
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)
Application.Msn.Register(Application.EMITTITLE, Sub()
EmitTitle()
End Sub)
Application.Msn.Register(Application.MAINWINDOW_CONTENTRENDERED, Sub()
ProcessCommandLine()
End Sub)
End Sub
Private Sub ManageTopCommandBar()
Application.Msn.Register(Application.OPENPROJECT, Sub(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
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
End Sub)
Application.Msn.Register(Application.SAVEPROJECT, Sub()
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)
Application.Msn.Register(Application.SAVEASPROJECT, Sub()
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)
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)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
End Sub)
Application.Msn.Register(Application.EXPORTPROJECT, Sub()
m_Controller.ExportProject(Path.ChangeExtension(m_Controller.GetCurrFile(), "dxf"))
End Sub)
Application.Msn.Register(Application.PREEXECSCRIPT, Sub(bScriptInMru As Boolean)
m_bScriptInMru = bScriptInMru
End Sub)
Application.Msn.Register(Application.EXECSCRIPT, Sub(sFilePath As String)
If String.IsNullOrEmpty(sFilePath) Then
Dim sDir As String = String.Empty
GetPrivateProfileString(S_GENERAL, K_LASTLUADIR, "", sDir)
m_Controller.Exec(sDir)
Else
m_Controller.Exec(sFilePath, False)
End If
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
If EgtGetCurrMachGroup() <> GDB_ID.NULL Then
Application.Msn.NotifyColleagues(Application.SETMACHININGMODE)
End If
End Sub)
Application.Msn.Register(Application.DOORSSCRIPT, Sub(sFilePath As String)
Dim bOk As Boolean
If String.IsNullOrEmpty(sFilePath) Then
bOk = ExecDoors(m_ProjectScene, String.Empty)
Else
bOk = ExecDoors(m_ProjectScene, sFilePath)
End If
EgtResetCurrPartLayer()
OnUpdateUI(Nothing, True)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
If bOk Then
IniFile.m_MruDoors.Add(IniFile.m_DDFFilePath)
Dim sFile As String = String.Empty
If EgtGetCurrFilePath(sFile) Then
IniFile.m_MruFiles.Add(sFile)
End If
Else
Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, EgtMsg(MSG_DOORSERRORS + 2))
IniFile.m_MruDoors.Remove(IniFile.m_DDFFilePath)
Try
Dim sErrFilePath As String = Path.ChangeExtension(IniFile.m_DDFFilePath, ".txt")
Dim fileReader As String = My.Computer.FileSystem.ReadAllText(sErrFilePath)
Dim Lines() As String = fileReader.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Dim values() As String = Lines(0).Split(CChar("=")).ToArray
Lines(0) = EgtMsg(MSG_DOORSERRORS + 1) & " " & Convert.ToInt32(values(1))
fileReader = String.Empty
For Index = 1 To Lines.Count - 1
fileReader &= (Lines(Index) + ControlChars.CrLf.ToCharArray())
Next
MessageBox.Show(fileReader, Lines(0).ToUpper, MessageBoxButton.OK, MessageBoxImage.Error)
Catch ex As Exception
MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 7))
End Try
End If
End Sub)
Application.Msn.Register(Application.DMACHSCRIPT, Sub()
Dim bOk As Boolean = ExecDoorsMachining(m_ProjectScene)
OnUpdateUI(Nothing, True)
If EgtGetCurrMachGroup() <> GDB_ID.NULL Then
Application.Msn.NotifyColleagues(Application.SETMACHININGMODE)
End If
If Not bOk Then Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, EgtMsg(MSG_DOORSERRORS + 2))
End Sub)
Application.Msn.Register(Application.GUNSTOCKNEW, Sub(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)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
If EgtGetCurrMachGroup() <> GDB_ID.NULL Then
Application.Msn.NotifyColleagues(Application.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 fileReader As String = My.Computer.FileSystem.ReadAllText(sErrFilePath)
Dim Lines() As String = fileReader.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Dim values() As String = Lines(0).Split(CChar("=")).ToArray
Lines(0) = EgtMsg(MSG_DOORSERRORS + 1) & " " & Convert.ToInt32(values(1))
fileReader = String.Empty
For Index = 1 To Lines.Count - 1
fileReader &= (Lines(Index) + ControlChars.CrLf.ToCharArray())
Next
MessageBox.Show(fileReader, 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)
Application.Msn.Register(Application.GUNSTOCKMODIF, Sub(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)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
If EgtGetCurrMachGroup() <> GDB_ID.NULL Then
Application.Msn.NotifyColleagues(Application.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 fileReader As String = My.Computer.FileSystem.ReadAllText(sErrFilePath)
Dim Lines() As String = fileReader.Split(ControlChars.CrLf.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
Dim values() As String = Lines(0).Split(CChar("=")).ToArray
Lines(0) = EgtMsg(MSG_DOORSERRORS + 1) & " " & Convert.ToInt32(values(1))
fileReader = String.Empty
For Index = 1 To Lines.Count - 1
fileReader &= (Lines(Index) + ControlChars.CrLf.ToCharArray())
Next
MessageBox.Show(fileReader, Lines(0).ToUpper, MessageBoxButton.OK, MessageBoxImage.Error)
Catch ex As Exception
MessageBox.Show(EgtMsg(MSG_DOORSERRORS + 7))
End Try
End If
End Sub)
End Sub
Private Sub ManageClosingApplication()
Application.Msn.Register(Application.CLOSEAPPLICATION, Sub()
If Not IniFile.m_bFailedRun Then
' 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_DRAWSHOWGRID, If(IniFile.m_bDrawShowGrid, 1, 0).ToString)
WritePrivateProfileString(S_GRID, K_MACHININGSHOWGRID, If(IniFile.m_bMachiningShowGrid, 1, 0).ToString)
' Salvo stato unità di misura per interfaccia utente
WritePrivateProfileString(S_SCENE, K_MMUNITS, If(IniFile.m_bMmUnits, 1, 0).ToString)
' Salvo dimensioni griglie in Mm e Inch
WritePrivateProfileString(S_GRID, K_SNAPSTEP, DoubleToString(IniFile.dSnapStepMm, 4))
WritePrivateProfileString(S_GRID, K_SNAPSTEPINCH, DoubleToString(IniFile.dSnapStepInch, 4))
End If
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 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) 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()
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 seleziono tutto
If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then
m_Controller.MouseDeselectedAll()
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
' 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.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_nIdToDesel As Integer = GDB_ID.NULL
'Private m_nFirstRawPartId 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 OnMouseDown(ByVal sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_ProjectScene.OnMouseDownScene
' 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 Then Return
' Si può selezionare solo con il tasto sinistro
If e.Button <> Forms.MouseButtons.Left Then Return
' 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))
If EgtVerifyFixture(nFixtureId) Then
' 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
Exit While
End If
Case SceneSelTypeOpt.RAWPART, SceneSelTypeOpt.RAWPARTWITHFIXTURE
Dim nRawPartId As Integer = EgtGetParent(nId)
If EgtVerifyRawPartCurrPhase(nRawPartId) Then
' 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
Dim TableRef As Point3d
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
If bEnhancedSelIsActive Then
EnhancedMouseMoveScene(e)
End If
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)
EgtDraw()
' Aggiorno il punto precedente
m_ptPrev = ptCurr
' Terminata esecuzione di drag
m_bDragging = False
End Sub
Dim bEnhancedSelecting As Boolean = False
Dim nMarkedEntityId As Integer = GDB_ID.NULL
' creo liste in cui mettere curve e superfici
Dim CurvesIdList As New List(Of Integer)
Dim SurfacesIdList As New List(Of Integer)
Dim bEnhancedSelIsActive As Boolean = False
Private Sub EnhancedMouseMoveScene(e As System.Windows.Forms.MouseEventArgs)
' se un tasto di modifica è premuto
If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control OrElse (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift OrElse _
(Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt Then
' verifico se c'è un elemento rimasto evidenziato
If nMarkedEntityId <> GDB_ID.NULL Then
' lo deevidenzio
EgtResetMark(nMarkedEntityId)
nMarkedEntityId = GDB_ID.NULL
EgtDraw()
End If
Return
End If
If bEnhancedSelecting Then Return
bEnhancedSelecting = True
' recupero elementi presenti nel quadratino di selezione
Dim nSel As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
Dim nId As Integer = EgtGetFirstObjInSelWin()
' se esiste almeno un elemento nel quadratino di selezione
Dim TempGroup As Integer
Dim vtZView As Vector3d
Dim vtYView As Vector3d
Dim vtXView As Vector3d
Dim frView As Frame3d
If nId <> GDB_ID.NULL Then
' creo un gruppo temporaneo in cui mettere la proiezione sul piano della vista
TempGroup = EgtCreateGroup(GDB_ID.ROOT)
EgtSetMode(TempGroup, GDB_MD.HIDDEN)
EgtSetLevel(TempGroup, GDB_LV.TEMP)
'EgtSetMode(TempGroup, GDB_MD.STD)
'EgtSetLevel(TempGroup, GDB_LV.USER)
CurvesIdList.Clear()
SurfacesIdList.Clear()
' calcolo vettori e riferimento del punto di vista corrente
Dim dAngVertDeg As Double
Dim dAngOrizDeg As Double
EgtGetGenericView(dAngVertDeg, dAngOrizDeg)
vtZView = Vector3d.FromSpherical(1, dAngVertDeg, dAngOrizDeg)
EgtGetViewUp(vtYView)
vtXView = vtYView ^ vtZView
frView = New Frame3d(Point3d.ORIG, vtXView, vtYView, vtZView)
Else
If nMarkedEntityId <> GDB_ID.NULL Then
EgtResetMark(nMarkedEntityId)
nMarkedEntityId = GDB_ID.NULL
EgtDraw()
End If
bEnhancedSelecting = False
Return
End If
While nId <> GDB_ID.NULL
' li metto nelle due liste a seconda del tipo di entità
Select Case EgtGetType(nId)
Case GDB_TY.CRV_ARC, GDB_TY.CRV_COMPO, GDB_TY.CRV_LINE, GDB_TY.EXT_TEXT
Dim nCopyId As Integer = EgtCopyGlob(nId, TempGroup)
EgtSetInfo(nCopyId, "OriginalId", nId)
CurvesIdList.Add(nCopyId)
Case Else
' non faccio nulla
End Select
nId = EgtGetNextObjInSelWin()
End While
' Ricavo il punto corrente in coordinate mondo
Dim ptSel As Point3d
EgtUnProjectPoint(e.Location, ptSel)
Dim ToMarkEntityId As Integer = GDB_ID.NULL
' se la lista di curve non è vuota
If CurvesIdList.Count > 0 Then
Dim dCurrDist As Double
Dim dMinDist As Double
' proietto le curve sul piano di vista
'Dim dAngVertDeg As Double
'Dim dAngOrizDeg As Double
'EgtGetGenericView(dAngVertDeg, dAngOrizDeg)
'Dim vtZView As Vector3d = Vector3d.FromSpherical(1, dAngVertDeg, dAngOrizDeg)
'Dim vtYView As Vector3d
'EgtGetViewUp(vtYView)
'Dim vtXView As Vector3d
'vtXView = vtYView ^ vtZView
'Dim frView As New Frame3d(Point3d.ORIG, vtXView, vtYView, vtZView)
EgtScaleGroup(TempGroup, frView, 1, 1, 0)
' ciclo sulle proiezioni
Dim bFirst As Boolean = True
For Index = 0 To CurvesIdList.Count - 1
' calcolo la distanza della curva dal punto di selezione per trovare quella a distanza minima
If EgtGetMinDistPntSidePointCurve(ptSel, CurvesIdList(Index), vtZView, dCurrDist, New Point3d, New Integer) Then
EgtOutLog(CurvesIdList(Index) & " " & dCurrDist)
If bFirst OrElse dCurrDist < dMinDist Then
dMinDist = dCurrDist
EgtGetInfo(CurvesIdList(Index), "OriginalId", ToMarkEntityId)
bFirst = False
End If
End If
Next
If ToMarkEntityId <> nMarkedEntityId Then
EgtResetMark(nMarkedEntityId)
EgtSetMark(ToMarkEntityId)
nMarkedEntityId = ToMarkEntityId
End If
Else
' Verifico se sono presenti superfici nell'area di selezione
nId = EgtGetFirstObjInSelWin()
' se ne esiste almeno una, creo il vettore normale
If nId <> GDB_ID.NULL Then
' ciclo sugli elementi nell'area di selezione per crearne il bordo
While nId <> GDB_ID.NULL
' li metto nelle due liste a seconda del tipo di entità
Select Case EgtGetType(nId)
Case GDB_TY.SRF_FRGN, GDB_TY.SRF_MESH, GDB_TY.VOL_ZMAP
Dim nCount As Integer = 0
' ne calcolo il contorno
Dim nSilhouetteId As Integer = EgtGetSurfTmSilhouette(nId, vtZView, TempGroup, GDB_RT.GLOB, nCount)
EgtSetInfo(nSilhouetteId, "OriginalId", nId)
SurfacesIdList.Add(nSilhouetteId)
Case Else
' non faccio nulla
End Select
nId = EgtGetNextObjInSelWin()
End While
End If
If SurfacesIdList.Count > 0 Then
' lo porto nel punto di vista
' verifico se una di quelle prese è contenuta nelle altre
' se si intersecano solamente calcolo il centro di ciascuna
' e prendo quella con il centro più vicina al punto di selezione
' proietto i contorni sul piano di vista
EgtScaleGroup(TempGroup, frView, 1, 1, 0)
' se sono contenuti uno nell'altro, seleziono quello contenuto,
' altrimenti quello dietro
EgtGetInfo(SurfacesIdList(0), "OriginalId", ToMarkEntityId)
If ToMarkEntityId <> nMarkedEntityId Then
EgtResetMark(nMarkedEntityId)
EgtSetMark(ToMarkEntityId)
nMarkedEntityId = ToMarkEntityId
End If
Else
EgtResetMark(nMarkedEntityId)
nMarkedEntityId = GDB_ID.NULL
End If
End If
EgtSaveFile("c:\EgtData\Varie\Temp\ProveSelezione.nge", NGE.CMPTEXT)
' cancello gruppo temporaneo
EgtErase(TempGroup)
EgtDraw()
bEnhancedSelecting = False
End Sub
Private Sub EnhancedMouseUpScene(e As System.Windows.Forms.MouseEventArgs)
' Se già selezionato
If EgtIsSelectedObj(nMarkedEntityId) Then
EgtDeselectObj(nMarkedEntityId)
Else
EgtSelectObj(nMarkedEntityId)
End If
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
If bEnhancedSelIsActive Then
EnhancedMouseUpScene(e)
End If
Return
End If
' Sono in modalità Machining
' Se eseguito drag
If Not m_bDragToStart 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
' verifico se il sottopezzo da selezionare è un riferimento
If DispositionUtility.FixtureType(m_nIdToSel) = DispositionUtility.FIX_TYPE.REFERENCE _
AndAlso EgtGetSelectedObjCount() > 0 Then
' se ci sono altri oggetti selezionati resetto lo stato di selezione ed esco
m_bDrag = False
m_nIdToSel = GDB_ID.NULL
m_nIdToDesel = GDB_ID.NULL
EgtDraw()
Return
Else
' altrimenti verifico il tipo del primo oggetto selezionato
Dim nFirstSelId As Integer = EgtGetFirstSelectedObj()
If DispositionUtility.FixtureType(nFirstSelId) = DispositionUtility.FIX_TYPE.REFERENCE Then
' se è un riferimento resetto lo stato di selezione ed esco
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 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
' Se in modalità Draw accetto tutto
If IniFile.m_ProjectMode = ProjectModeOpt.DRAW OrElse IniFile.m_ProjectMode = ProjectModeOpt.ONLYDRAW Then
' Se attiva enhanced selection rifiuto tutto
If bEnhancedSelIsActive Then
bOk = False
End If
Return
End If
' 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 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
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)
IniFile.m_LastSubEntityId = 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
EgtZoom(ZM.ALL)
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
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 = EgtMsg(10003) & " '" & sFile & "'" 'Error opening file
MessageBox.Show(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)
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(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(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
Application.Msn.NotifyColleagues(Application.CLEAROBJTREE)
If nType = FT.CNC Then
nFlag = GetPrivateProfileInt(S_IMPORT, K_CNCFLAG, EIC_FL.NONE)
Else
nFlag = 0
End If
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
EgtZoom(ZM.ALL)
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
If m_bScriptInMru Then IniFile.m_MruScripts.Add(sFile)
Else
If m_bScriptInMru Then IniFile.m_MruScripts.Remove(sFile)
MessageBox.Show(sError, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.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
' aggiorno macchina corrente
Application.Msn.NotifyColleagues(Application.UPDATECURRENTMACHINE)
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
#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, False)
Case SceneSelModeOpt.PARTSURFACES
m_ProjectScene.SetObjFilterForSel(False, False, True, False, False)
Case SceneSelModeOpt.PARTCURVESANDSURFACES
m_ProjectScene.SetObjFilterForSel(False, True, True, False, False)
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
End Namespace