Imports System.Windows.Forms.Integration
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
#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()
'Me.sTabName = EgtMsg(MSG_MAINWINDOW + 1)
' 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 le funzioni del DrawPanel
RegisterGridViewPanelCommands()
RegisterDrawPanelCommands()
' Funzione che contiene la registrazione di tutti i comandi del DrawOptionPanel
RegisterDrawOptionPanelCommands()
' Funzione che contiene la registrazione di tutti i comandi della StatusBar
RegisterStatusBarCommands()
' 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 "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, AddressOf CanLoaded)
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)
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
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
Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND)
Else
IniFile.m_ProjectSceneContext = m_ProjectScene.GetCtx
PostInitializeScene()
' inizializzo gestore lavorazioni
EgtInitMachMgr(IniFile.m_sMachinesRoot)
' Apro progetto vuoto
Application.Msn.NotifyColleagues(Application.NEWPROJECT)
End If
' Seleziono la macchina impostata nel file ini
Application.Msn.NotifyColleagues(Application.LOADCURRENTMACHINE)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
End Sub
'''
''' Returns always true.
'''
Private Function CanLoaded(ByVal param As Object) As Boolean
Return True
End Function
#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("#", 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)
' 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) & 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
'''
''' Method that manage the visibility of the ProjectPage's Panels
'''
Sub RegisterGridViewPanelCommands()
Application.Msn.Register(Application.WIREFRAME, Sub()
m_ProjectScene.WireFrame()
End Sub)
Application.Msn.Register(Application.HIDDENLINE, Sub()
m_ProjectScene.HiddenLine()
End Sub)
Application.Msn.Register(Application.SHADING, Sub()
m_ProjectScene.Shading()
End Sub)
Application.Msn.Register(Application.ZOOMALL, Sub()
m_ProjectScene.ZoomAll()
End Sub)
Application.Msn.Register(Application.ZOOMIN, Sub()
m_ProjectScene.ZoomIn()
End Sub)
Application.Msn.Register(Application.ZOOMOUT, Sub()
m_ProjectScene.ZoomOut()
End Sub)
Application.Msn.Register(Application.TOPVIEW, Sub()
m_ProjectScene.TopView()
End Sub)
Application.Msn.Register(Application.FRONTVIEW, Sub()
m_ProjectScene.FrontView()
End Sub)
Application.Msn.Register(Application.LEFTVIEW, Sub()
m_ProjectScene.LeftView()
End Sub)
Application.Msn.Register(Application.BACKVIEW, Sub()
m_ProjectScene.BackView()
End Sub)
Application.Msn.Register(Application.RIGHTVIEW, Sub()
m_ProjectScene.RightView()
End Sub)
Application.Msn.Register(Application.ISOVIEWSW, Sub()
m_ProjectScene.IsoViewSW()
End Sub)
Application.Msn.Register(Application.ISOVIEWSE, Sub()
m_ProjectScene.IsoViewSE()
End Sub)
Application.Msn.Register(Application.ISOVIEWNE, Sub()
m_ProjectScene.IsoViewNE()
End Sub)
Application.Msn.Register(Application.ISOVIEWNW, Sub()
m_ProjectScene.IsoViewNW()
End Sub)
Application.Msn.Register(Application.VIEWTOCPLANE, Sub()
m_ProjectScene.CPlaneView()
End Sub)
Application.Msn.Register(Application.SETSTATUSANALYZE, Sub()
m_ProjectScene.SetStatusAnalyze()
End Sub)
Application.Msn.Register(Application.RESETSTATUSANALYZE, Sub()
m_ProjectScene.ResetStatusAnalyze()
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREE, GDB_ID.NULL)
End Sub)
Application.Msn.Register(Application.SETSTATUSGETDISTANCE, Sub()
m_ProjectScene.SetStatusGetDistance()
End Sub)
Application.Msn.Register(Application.RESETSTATUSGETDISTANCE, Sub()
m_ProjectScene.ResetStatusGetDistance()
Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSOUTPUT, String.Empty)
End Sub)
Application.Msn.Register(Application.CPLANETOP, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.TOP)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANEFRONT, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.FRONT)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANERIGHT, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.RIGHT)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANEBACK, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.BACK)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANELEFT, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.LEFT)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANEBOTTOM, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.BOTTOM)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANEVIEW, Sub()
m_Controller.SetLastInteger(Controller.GRID_TYPE.VIEW)
m_Controller.ExecuteCommand(Controller.CMD.GRID)
End Sub)
Application.Msn.Register(Application.CPLANEELEVATION, Sub()
m_Controller.ExecuteCommand(Controller.CMD.GRID_ELEVATION)
End Sub)
Application.Msn.Register(Application.CPLANEORIGIN, Sub()
m_Controller.ExecuteCommand(Controller.CMD.GRID_ORIGIN)
End Sub)
Application.Msn.Register(Application.CPLANEROTATE, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.GRID_ROTATE)
Else
m_Controller.ExecuteCommand(Controller.CMD.GRID_ROTATE3D)
End If
End Sub)
Application.Msn.Register(Application.CPLANE3P, Sub()
m_Controller.ExecuteCommand(Controller.CMD.GRID_3P)
End Sub)
Application.Msn.Register(Application.CPLANEPERPOBJ, Sub()
m_Controller.ExecuteCommand(Controller.CMD.GRID_PERPCURVE)
End Sub)
Application.Msn.Register(Application.CPLANEOBJ, Sub()
m_Controller.ExecuteCommand(Controller.CMD.GRID_OBJ)
End Sub)
End Sub
Sub RegisterDrawPanelCommands()
Application.Msn.Register(Application.GETCURRLAYER, Sub()
If IniFile.m_ProjectSceneContext = 0 Then Return
Dim CurrLayer As Integer = m_Controller.GetCurrLayer()
Application.Msn.NotifyColleagues(Application.SETCURRLAYER, CurrLayer)
End Sub)
Application.Msn.Register(Application.POINT, Sub()
If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then
m_Controller.ExecuteCommand(Controller.CMD.FRAME)
ElseIf (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.VECTOR)
Else
m_Controller.ExecuteCommand(Controller.CMD.POINT)
End If
End Sub)
Application.Msn.Register(Application.LINE2P, Sub()
If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then
m_Controller.SetContinue()
'EmitStripStatusOutput(EgtMsg(399)) ' Continue : 'L' with line, 'A' with arc
End If
m_Controller.ExecuteCommand(Controller.CMD.LINE2P)
End Sub)
Application.Msn.Register(Application.LINEPDL, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.LINEPDL)
Else
m_Controller.ExecuteCommand(Controller.CMD.LINEPVL)
End If
End Sub)
Application.Msn.Register(Application.ARCPDP, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then
m_Controller.SetContinue()
'EmitStripStatusOutput(EgtMsg(399)) ' Continue : 'L' with line, 'A' with arc
End If
m_Controller.ExecuteCommand(Controller.CMD.ARCPDP)
Else
m_Controller.ExecuteCommand(Controller.CMD.ARCPVP)
End If
End Sub)
Application.Msn.Register(Application.POLYGON, Sub()
'If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.POLYGON)
'Else
' m_Controller.ExecuteCommand(Controller.CMD.POLYGONSIDE)
'End If
End Sub)
Application.Msn.Register(Application.TEXT, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.TEXT)
Else
m_Controller.ExecuteCommand(Controller.CMD.TEXTPLUS)
End If
End Sub)
Application.Msn.Register(Application.PLANE, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then
m_Controller.ExecuteCommand(Controller.CMD.REGION)
Else
m_Controller.ExecuteCommand(Controller.CMD.PLANE)
End If
End Sub)
Application.Msn.Register(Application.DELETE, Sub()
m_Controller.SetLastInteger(GDB_ID.SEL)
m_Controller.ExecuteCommand(Controller.CMD.DELETE)
End Sub)
Application.Msn.Register(Application.JOINCURVE, Sub()
If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then
m_Controller.SetLastBoolean(False)
Else
m_Controller.SetLastBoolean(True)
End If
m_Controller.ExecuteCommand(Controller.CMD.JOINCURVE)
End Sub)
End Sub
Sub RegisterDrawOptionPanelCommands()
Application.Msn.Register(Application.NOTIFYINPUTTEXT, Sub(sInputText As String)
m_InputText = sInputText
End Sub)
Application.Msn.Register(Application.SETLASTBOOLEAN, Sub(bBoolean As Boolean)
m_Controller.SetLastBoolean(bBoolean)
End Sub)
Application.Msn.Register(Application.SETLASTINTEGER, Sub(nInteger As Integer)
m_Controller.SetLastInteger(nInteger)
End Sub)
Application.Msn.Register(Application.SHOW, Sub(sString As String)
m_Controller.Show(sString)
End Sub)
Application.Msn.Register(Application.DONE, Sub(sString As String)
m_Controller.Done(sString)
End Sub)
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.NEWPROJECT, Sub()
m_Controller.NewProject(True)
Application.Msn.NotifyColleagues(Application.SELECTIDINOBJTREENOMARK, EgtGetCurrLayer())
End Sub)
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" & 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" & 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.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()
' 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 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 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 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 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 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 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 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
If Not bOk Then
MessageBox.Show(EgtMsg(10002), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error on new file - Error
End If
End Sub
Private Sub OnOpeningProject(ByVal sender As Object) Handles m_Controller.OnOpeningProject
Application.Msn.NotifyColleagues(Application.CLEAROBJTREE)
End Sub
Private Sub OnOpenProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnOpenProject
WritePrivateProfileString(S_GENERAL, K_LASTNGEDIR, Path.GetDirectoryName(sFile))
If bOk Then
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 OnSavingProject(ByVal sender As Object) Handles m_Controller.OnSavingProject
End Sub
Private Sub OnSavedProject(ByVal sender As Object, ByVal sFile As String, ByVal bOk As Boolean) Handles m_Controller.OnSavedProject
WritePrivateProfileString(S_GENERAL, K_LASTNGEDIR, Path.GetDirectoryName(sFile))
If bOk Then
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) 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
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
IniFile.m_MruScripts.Add(sFile)
Else
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