Imports System.Math Imports System.IO Imports System.Globalization Imports TestEIn.EgtInterface Public Class Scene '---- Constants ------- Public Const DIM_SEL As Integer = 13 '---- Members --------- Private m_nGseContext As Integer Private m_nStatus As Integer Private m_nOldStatus As Integer Private Enum ST As Integer NULL = 0 PAN = 1 ROT = 2 ZOOMWIN = 3 ANALYZE = 4 GETDIST = 5 GETDIST2 = 6 SELPOINT = 7 End Enum Private m_nSnapType As Integer Private m_PrevPoint As Point Private m_ptPrev As Point3d Private m_nDriver As Integer Private m_b2Buff As Boolean Private m_nColorBits As Integer Private m_nDepthBits As Integer Private m_BackTopColor As Color Private m_BackBotColor As Color Private m_DefColor As Color Private m_MarkColor As Color Private m_bZwOutline As Boolean Private m_ZwColor As Color Private m_DstLnColor As Color '---- Constructor ----- Sub New() ' Chiamata richiesta dalla finestra di progettazione. InitializeComponent() ' Istruzioni di inizializzazione. Me.BorderStyle = Windows.Forms.BorderStyle.FixedSingle SetStyle(ControlStyles.Opaque, True) SetStyle(ControlStyles.UserPaint, True) SetStyle(ControlStyles.AllPaintingInWmPaint, True) m_nGseContext = 0 m_nStatus = ST.NULL m_nOldStatus = ST.NULL m_nSnapType = SP_END m_PrevPoint = Point.Empty m_nDriver = 3 m_b2Buff = True m_nColorBits = 24 m_nDepthBits = 32 m_BackTopColor.Setup(140, 154, 168) m_BackBotColor.Setup(40, 44, 48) m_DefColor.Setup(255, 165, 0) m_MarkColor.Setup(255, 255, 0) m_bZwOutline = True m_ZwColor.Setup(0, 0, 0) m_DstLnColor.Setup(255, 0, 0) Cursor = Cursors.Default End Sub '---- Initials -------- Public Sub SetViewAttributes(ByVal nDriver As Integer, ByVal b2Buff As Boolean, ByVal nColorBits As Integer, ByVal nDepthBits As Integer) m_nDriver = nDriver m_b2Buff = b2Buff m_nColorBits = nColorBits m_nDepthBits = nDepthBits End Sub Public Sub SetViewBackground(ByRef BackTopColor As Color, ByRef BackBotColor As Color) m_BackTopColor = BackTopColor m_BackBotColor = BackBotColor End Sub Public Sub SetDefaultMaterial(ByRef DefColor As Color) m_DefColor = DefColor End Sub Public Sub SetMarkMaterial(ByRef DefColor As Color) m_MarkColor = DefColor End Sub Public Sub SetZoomWinAttribs(ByVal bZwOutline As Boolean, ByRef ZwColor As Color) m_bZwOutline = bZwOutline m_ZwColor = ZwColor End Sub Public Sub SetDistLineMaterial(ByRef DstLnColor As Color) m_DstLnColor = DstLnColor End Sub 'Mettere EgtInit, EgtSetKey e EgtSetFont nell'evento Load del Form, prima di inizializzare la o le Scene 'Mettere EgtExit nell'evento FormClosing Public Sub Init() m_nGseContext = EgtInitGeomDB() EgtSetDefaultMaterial(m_DefColor.R, m_DefColor.G, m_DefColor.B) EgtInitScene(Handle, m_nDriver, m_b2Buff, m_nColorBits, m_nDepthBits) EgtSetBackground(m_BackTopColor.R, m_BackTopColor.G, m_BackTopColor.B, m_BackBotColor.R, m_BackBotColor.G, m_BackBotColor.B) EgtSetMarkAttribs(m_MarkColor.R, m_MarkColor.G, m_MarkColor.B) EgtSetWinRectAttribs(m_bZwOutline, m_ZwColor.R, m_ZwColor.G, m_ZwColor.B, m_ZwColor.A) EgtSetGeoLineAttribs(m_DstLnColor.R, m_DstLnColor.G, m_DstLnColor.B) EgtInitTscExec() End Sub Public Function GetCtx() As Integer Return m_nGseContext End Function Protected Overrides Sub OnHandleDestroyed(e As EventArgs) 'EgtExit va spostata nell'evento FormClosing del Form 'EgtExit() End Sub Protected Overrides Sub OnPaint(e As PaintEventArgs) MyBase.OnPaint(e) ' Salvo il contesto corrente e imposto quello della scena Dim nOldGseCtx = EgtGetCurrentContext() If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(m_nGseContext) End If ' Eseguo il disegno EgtDraw() ' Ripristino il contesto originale If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(nOldGseCtx) End If End Sub Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs) MyBase.OnPaintBackground(pevent) End Sub Protected Overrides Sub OnResize(e As System.EventArgs) MyBase.OnResize(e) ' Salvo il contesto corrente e imposto quello della scena Dim nOldGseCtx = EgtGetCurrentContext() If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(m_nGseContext) End If ' Eseguo ridimensionamento vista EgtResize(Width, Height) ' Ripristino il contesto originale If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(nOldGseCtx) End If End Sub '---- Events ---------- Public Event OnMouseSelected(ByVal sender As Object, ByVal nId As Integer) Public Event OnMouseAnalyzed(ByVal sender As Object, ByVal nId As Integer) Public Event OnMouseDownScene(ByVal sender As Object) Public Event OnCursorPos(ByVal sender As Object, ByVal sCursorPos As String) Public Event OnShowDistance(ByVal sender As Object, ByVal sDistance As String) Public Event OnCloseGetDist(ByVal sender As Object) Public Event OnMouseSelectedPoint(ByVal sender As Object, ByVal PtP As Point3d) Public Event OnMouseMoveSelPoint(ByVal sender As Object, ByVal PtP As Point3d) Public Event OnNewProject(ByVal sender As Object) Public Event OnOpeningProject(ByVal sender As Object) Public Event OnOpenProject(ByVal sender As Object, ByVal sFile As String) Public Event OnSavingProject(ByVal sender As Object, ByVal sFile As String) Public Event OnSavedProject(ByVal sender As Object) Public Event OnImportingProject(ByVal sender As Object) Public Event OnImportedProject(ByVal sender As Object, ByVal sFile As String) Public Event OnExportingProject(ByVal sender As Object, ByVal sFile As String) Public Event OnExportedProject(ByVal sender As Object) Public Event OnExecutingScript(ByVal sender As Object, ByVal sFile As String) Public Event OnExecutedScript(ByVal sender As Object) '---- Mouse ----------- Protected Overrides Sub OnMouseEnter(e As System.EventArgs) MyBase.OnMouseEnter(e) Focus() End Sub Protected Overrides Sub OnMouseDown(e As System.Windows.Forms.MouseEventArgs) ' Imposto il contesto della scena come corrente EgtSetCurrentContext(m_nGseContext) If e.Button = Windows.Forms.MouseButtons.Left Then If m_nStatus = ST.NULL Or m_nStatus = ST.ANALYZE Then If m_nStatus = ST.NULL Then Cursor = New Cursor(Me.GetType(), "Select.cur") Else Cursor = New Cursor(Me.GetType(), "Analyze.cur") End If Dim nId As Integer = GDB_ID_NULL Dim nSel As Integer EgtSelect(e.Location, DIM_SEL, DIM_SEL, nSel) If nSel = 1 Then nId = EgtGetFirstObjInSelWin() ElseIf nSel > 1 Then Dim MselDlg As New SelectMulti MselDlg.StartPosition = System.Windows.Forms.FormStartPosition.Manual Dim ptScreen As Point = PointToScreen(e.Location) ptScreen.Offset(10, 0) MselDlg.Location = ptScreen If MselDlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then nId = MselDlg.GetId() End If End If If nId <> GDB_ID_NULL Then If m_nStatus = ST.NULL Then RaiseEvent OnMouseSelected(Me, nId) Else RaiseEvent OnMouseAnalyzed(Me, nId) End If End If ElseIf m_nStatus = ST.GETDIST Then If EgtGetSelectedSnapPoint(m_nSnapType, e.Location.X, e.Location.Y, DIM_SEL, DIM_SEL, m_ptPrev) Then ' salvo il punto di riferimento Dim ptWin As Point3d EgtProjectPoint(m_ptPrev, ptWin) m_PrevPoint = New Point(ptWin.x, ptWin.y) m_nStatus = ST.GETDIST2 End If ElseIf m_nStatus = ST.GETDIST2 Then Dim ptSel As Point3d If EgtGetSelectedSnapPoint(m_nSnapType, e.Location.X, e.Location.Y, DIM_SEL, DIM_SEL, ptSel) Then ' disegno la linea (coordinate geo globali) EgtSetGeoLine(m_ptPrev, ptSel) ' calcolo la distanza e il delta e li visualizzo Dim dX As Double = ptSel.x - m_ptPrev.x Dim dY As Double = ptSel.y - m_ptPrev.y Dim dZ As Double = ptSel.z - m_ptPrev.z Dim dDist As Double = Sqrt(dX * dX + dY * dY + dZ * dZ) Dim sOut As New System.Text.StringBuilder sOut.Append("Dist=") sOut.Append(dDist.ToString("F4", CultureInfo.InvariantCulture)) sOut.Append(" dX=") sOut.Append(dX.ToString("F4", CultureInfo.InvariantCulture)) sOut.Append(" dY=") sOut.Append(dY.ToString("F4", CultureInfo.InvariantCulture)) sOut.Append(" dZ=") sOut.Append(dZ.ToString("F4", CultureInfo.InvariantCulture)) ' lancio l'evento per visualizzare la distanza RaiseEvent OnShowDistance(Me, sOut.ToString()) m_nStatus = ST.NULL m_nOldStatus = ST.NULL End If ElseIf m_nStatus = ST.SELPOINT Then If EgtGetSelectedSnapPoint(m_nSnapType, e.Location.X, e.Location.Y, DIM_SEL, DIM_SEL, m_ptPrev) Then RaiseEvent OnMouseSelectedPoint(Me, m_ptPrev) End If End If ElseIf e.Button = Windows.Forms.MouseButtons.Middle Then If (Control.ModifierKeys And Keys.Shift) = Keys.Shift Then If m_nStatus = ST.ANALYZE Or m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Or m_nStatus = ST.SELPOINT Then m_nOldStatus = m_nStatus End If m_nStatus = ST.ZOOMWIN Cursor = New Cursor(Me.GetType(), "ZoomWin.cur") ElseIf (Control.ModifierKeys And Keys.Control) = Keys.Control Then If m_nStatus = ST.ANALYZE Or m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Or m_nStatus = ST.SELPOINT Then m_nOldStatus = m_nStatus End If m_nStatus = ST.ROT Cursor = New Cursor(Me.GetType(), "Rotate.cur") Else If m_nStatus = ST.ANALYZE Or m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Or m_nStatus = ST.SELPOINT Then m_nOldStatus = m_nStatus End If m_nStatus = ST.PAN Cursor = New Cursor(Me.GetType(), "Pan.cur") End If m_PrevPoint = e.Location Else MyBase.OnMouseDown(e) End If Focus() RaiseEvent OnMouseDownScene(Me) End Sub Protected Overrides Sub OnMouseUp(e As System.Windows.Forms.MouseEventArgs) ' salvo il contesto corrente e imposto quello della scena Dim nOldGseCtx = EgtGetCurrentContext() If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(m_nGseContext) End If ' rilascio tasto medio (rotella) If e.Button = Windows.Forms.MouseButtons.Middle Then If m_nStatus = ST.ZOOMWIN Then EgtResetWinRect(False) EgtZoomWin(m_PrevPoint, e.Location, True) End If ' eventuale ripristino vecchio stato If m_nOldStatus = ST.ANALYZE Then m_nStatus = m_nOldStatus Cursor = New Cursor(Me.GetType(), "Analyze.cur") ElseIf m_nOldStatus = ST.GETDIST Or m_nOldStatus = ST.GETDIST2 Then m_nStatus = m_nOldStatus Cursor = New Cursor(Me.GetType(), "GetDist.cur") ElseIf m_nOldStatus = ST.SELPOINT Then m_nStatus = m_nOldStatus Cursor = New Cursor(Me.GetType(), "Select.cur") ' reset dello stato se non NULL ElseIf m_nStatus <> ST.NULL Then m_nStatus = ST.NULL Cursor = New Cursor(Me.GetType(), "Select.cur") End If ' rilascio tasto destro ElseIf e.Button = Windows.Forms.MouseButtons.Right Then If m_nStatus = ST.NULL Then MenuScene.Visible = True For Each i As ToolStripMenuItem In MenuScene.Items If i.Name = "cmdDeselectAll" Then i.Visible = True Else i.Visible = False End If Next ElseIf m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Or m_nStatus = ST.SELPOINT Then MenuScene.Visible = True For Each i As ToolStripMenuItem In MenuScene.Items If i.Name = "cmdEndPoint" Then i.Visible = True i.Checked = (m_nSnapType = SP_END) ElseIf i.Name = "cmdMidPoint" Then i.Visible = True i.Checked = (m_nSnapType = SP_MID) ElseIf i.Name = "cmdCenterPoint" Then i.Visible = True i.Checked = (m_nSnapType = SP_CENTER) ElseIf i.Name = "cmdNearPoint" Then i.Visible = True i.Checked = (m_nSnapType = SP_NEAR) Else i.Visible = False End If Next Else MenuScene.Visible = False End If ' tutti gli altri casi Else MyBase.OnMouseUp(e) End If ' Ripristino il contesto originale If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(nOldGseCtx) End If End Sub Protected Overrides Sub OnMouseMove(e As System.Windows.Forms.MouseEventArgs) ' salvo il contesto corrente e imposto quello della scena Dim nOldGseCtx = EgtGetCurrentContext() If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(m_nGseContext) End If 'Visualizzo le coordinate del mouse ShowCursorPos(e.Location) 'In base allo stato... If e.Button = Windows.Forms.MouseButtons.Middle Then If m_nStatus = ST.ZOOMWIN Then Cursor = New Cursor(Me.GetType(), "ZoomWin.cur") EgtSetWinRect(m_PrevPoint, e.Location, True) 'Il punto di riferimento deve rimanere quello originale ElseIf m_nStatus = ST.ROT Then Cursor = New Cursor(Me.GetType(), "Rotate.cur") EgtRotateCamera(m_PrevPoint, e.Location, True) m_PrevPoint = e.Location ElseIf m_nStatus = ST.PAN Then Cursor = New Cursor(Me.GetType(), "Pan.cur") EgtPanCamera(m_PrevPoint, e.Location, True) m_PrevPoint = e.Location Else m_nStatus = ST.NULL Cursor = New Cursor(Me.GetType(), "Select.cur") End If ElseIf m_nStatus = ST.ANALYZE Then Cursor = New Cursor(Me.GetType(), "Analyze.cur") ElseIf m_nStatus = ST.GETDIST Then Cursor = New Cursor(Me.GetType(), "GetDist.cur") ElseIf m_nStatus = ST.GETDIST2 Then Cursor = New Cursor(Me.GetType(), "GetDist.cur") Dim ptP As Point3d EgtUnProjectPoint(e.Location, ptP) EgtSetGeoLine(m_ptPrev, ptP) ElseIf m_nStatus = ST.SELPOINT Then Cursor = New Cursor(Me.GetType(), "Select.cur") Dim ptP As Point3d EgtUnProjectPoint(e.Location, ptP) RaiseEvent OnMouseMoveSelPoint(Me, ptP) Else MyBase.OnMouseMove(e) End If If m_nStatus = ST.NULL Then Cursor = New Cursor(Me.GetType(), "Select.cur") End If ' Ripristino il contesto originale If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(nOldGseCtx) End If End Sub Protected Overrides Sub OnMouseWheel(e As System.Windows.Forms.MouseEventArgs) ' devo essere nello stato NULL o ANALYZE o GETDIST o SELPOINT If m_nStatus <> ST.NULL And m_nStatus <> ST.ANALYZE And m_nStatus <> ST.GETDIST And m_nStatus <> ST.GETDIST2 And m_nStatus <> ST.SELPOINT Then Return End If ' trascuro rotazioni molto piccole If Abs(e.Delta) < 30 Then Return End If ' calcolo coefficiente Const WHEEL_DELTA As Double = 120 Dim dCoeff As Double = 1 - 0.1 * Abs(e.Delta) / WHEEL_DELTA If e.Delta < 0 Then dCoeff = 1 / dCoeff End If ' salvo il contesto corrente e imposto quello della scena Dim nOldGseCtx = EgtGetCurrentContext() If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(m_nGseContext) End If ' eseguo zoom EgtZoomOnPoint(e.Location, dCoeff, True) ' Ripristino il contesto originale If nOldGseCtx <> m_nGseContext Then EgtSetCurrentContext(nOldGseCtx) End If End Sub Private Sub ShowCursorPos(ByVal WinXY As Point) 'ricavo punto 3d Dim ptWorld As Point3d EgtUnProjectPoint(WinXY, ptWorld) 'ricavo direzione di vista Dim nDir As Integer EgtGetCameraDir(nDir) 'costruisco stringa con dati Dim sCursorPos As New System.Text.StringBuilder Select Case nDir Case CT_TOP, CT_BOTTOM sCursorPos.Append("X=") sCursorPos.Append(ptWorld.x.ToString("F4", CultureInfo.InvariantCulture)) sCursorPos.Append(" Y=") sCursorPos.Append(ptWorld.y.ToString("F4", CultureInfo.InvariantCulture)) Case CT_FRONT, CT_BACK sCursorPos.Append("X=") sCursorPos.Append(ptWorld.x.ToString("F4", CultureInfo.InvariantCulture)) sCursorPos.Append(" Z=") sCursorPos.Append(ptWorld.z.ToString("F4", CultureInfo.InvariantCulture)) Case CT_LEFT, CT_RIGHT sCursorPos.Append("Y=") sCursorPos.Append(ptWorld.y.ToString("F4", CultureInfo.InvariantCulture)) sCursorPos.Append(" Z=") sCursorPos.Append(ptWorld.z.ToString("F4", CultureInfo.InvariantCulture)) Case Else sCursorPos.Append(" ") End Select ' lancio l'evento per visualizzare la stringa RaiseEvent OnCursorPos(Me, sCursorPos.ToString) End Sub Private Sub MenuScene_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles MenuScene.ItemClicked If e.ClickedItem.Name = "cmdDeselectAll" Then EgtDeselectAll() EgtDraw() ElseIf e.ClickedItem.Name = "cmdEndPoint" Then m_nSnapType = SP_END ElseIf e.ClickedItem.Name = "cmdMidPoint" Then m_nSnapType = SP_MID ElseIf e.ClickedItem.Name = "cmdCenterPoint" Then m_nSnapType = SP_CENTER ElseIf e.ClickedItem.Name = "cmdNearPoint" Then m_nSnapType = SP_NEAR End If End Sub '---- Drag Group ------ Private m_nDragGroup As Integer = GDB_ID_NULL Public Function CreateDragGroup() As Boolean m_nDragGroup = EgtCreateGroup(GDB_ID_ROOT) If m_nDragGroup = GDB_ID_NULL Then Return False End If EgtSetLevel(m_nDragGroup, GDB_LV_TEMP) EgtUnselectableAdd(m_nDragGroup) Return True End Function Public Function EraseDragGroup() As Boolean EgtErase(m_nDragGroup) EgtUnselectableRemove(m_nDragGroup) m_nDragGroup = GDB_ID_NULL Return True End Function Public Function AddToDragGroup(ByVal nId As Integer) As Boolean Return EgtCopyGlob(nId, m_nDragGroup, GDB_SON) <> GDB_ID_NULL End Function Public Function GetDragGroup() As Integer Return m_nDragGroup End Function '---- Main Buttons ---- Public Function NewProject() As Boolean Dim bOk As Boolean = EgtNewFile() EgtZoom(ZM_ALL) If bOk Then RaiseEvent OnNewProject(Me) Else MessageBox.Show("Error on new file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function Public Function OpenProject(Optional ByVal sDir As String = "", Optional ByVal bWithDlg As Boolean = True) As Boolean Dim sFile As String = sDir ' Scelta file con dialogo If bWithDlg Then Dim OpenFileDialog As New OpenFileDialog OpenFileDialog.Title = "Open" OpenFileDialog.Filter = "New geometry EgalTech(*.nge)|*.nge" & "|New font EgalTech(*.nfe)|*.nfe" & "|All Files (*.*)|*.*" OpenFileDialog.FilterIndex = 1 OpenFileDialog.InitialDirectory = sDir If OpenFileDialog.ShowDialog <> Windows.Forms.DialogResult.OK Then Return True End If sFile = OpenFileDialog.FileName End If 'Prima del caricamento RaiseEvent OnOpeningProject(Me) 'Caricamento del progetto Cursor = Cursors.WaitCursor Dim bOk As Boolean = EgtOpenFile(sFile) EgtZoom(ZM_ALL) Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnOpenProject(Me, sFile) Else MessageBox.Show("Error opening file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function Public Function SaveProject(Optional ByVal sFile As String = "") As Boolean If String.IsNullOrEmpty(sFile) Or EgtGetFileType(sFile) <> FT_NGE Then Return SaveAsProject(sFile) Else 'Prima del salvataggio RaiseEvent OnSavingProject(Me, sFile) 'Salvataggio del progetto Cursor = Cursors.WaitCursor Dim bOk As Boolean = EgtSaveFile(sFile, NGE_CMPTEXT) Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnSavedProject(Me) Else MessageBox.Show("Error saving file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End If End Function Public Function SaveAsProject(Optional ByVal sFile As String = "") As Boolean 'Eventuale sistemazione estensione sFile = Path.ChangeExtension(sFile, "nge") 'Assegnazione nome file con dialogo Dim SaveFileDialog As New SaveFileDialog SaveFileDialog.Title = "Save" SaveFileDialog.Filter = "New geometry EgalTech(*.nge)|*.nge" SaveFileDialog.FileName = sFile If SaveFileDialog.ShowDialog <> Windows.Forms.DialogResult.OK Then Return True End If 'Prima del salvataggio RaiseEvent OnSavingProject(Me, SaveFileDialog.FileName) 'Salvataggio del progetto Cursor = Cursors.WaitCursor Dim bOk As Boolean = EgtSaveFile(SaveFileDialog.FileName, NGE_CMPTEXT) Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnSavedProject(Me) Else MessageBox.Show("Error saving file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function Public Function ImportProject(Optional ByVal sDir As String = "", Optional ByVal bWithDlg As Boolean = True) As Boolean Dim sFile As String = sDir 'Scelta file con dialogo If bWithDlg Then Dim OpenFileDialog As New OpenFileDialog OpenFileDialog.Title = "Import" OpenFileDialog.Filter = "Drawing Exchange Fmt(*.dxf)|*.dxf" & "|Stereolithography (*.stl)|*.stl" & "|Part program ISO (*.cnc)|*.cnc" & "|All Files (*.*)|*.*" OpenFileDialog.FilterIndex = 4 OpenFileDialog.InitialDirectory = sDir If OpenFileDialog.ShowDialog <> Windows.Forms.DialogResult.OK Then Return True End If sFile = OpenFileDialog.FileName End If 'Riconoscimento tipo file Dim nFileType As Integer = EgtGetFileType(sFile) If nFileType <> FT_DXF And nFileType <> FT_STL And nFileType <> FT_CNC Then MessageBox.Show("File type unknown", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End If 'Prima del caricamento RaiseEvent OnImportingProject(Me) 'Pulizia GeomDB Cursor = Cursors.WaitCursor Dim bOk As Boolean = EgtNewFile() 'Importazione If nFileType = FT_DXF Then bOk = bOk And EgtImportDxf(sFile) ElseIf nFileType = FT_STL Then bOk = bOk And EgtImportStl(sFile) ElseIf nFileType = FT_CNC Then bOk = bOk And EgtImportCnc(sFile) End If EgtZoom(ZM_ALL) Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnImportedProject(Me, sFile) Else MessageBox.Show("Error importing file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function Public Function ExportProject(Optional ByVal sFile As String = "") As Boolean 'Assegnazione nome file con dialogo Dim SaveFileDialog As New SaveFileDialog SaveFileDialog.Title = "Export" SaveFileDialog.Filter = "Drawing Exchange Fmt(*.dxf)|*.dxf" & "|Stereolithography (*.stl)|*.stl" & "|All Files (*.*)|*.*" SaveFileDialog.FilterIndex = 3 SaveFileDialog.FileName = sFile If SaveFileDialog.ShowDialog <> Windows.Forms.DialogResult.OK Then Return True End If 'Riconoscimento tipo file Dim nFileType As Integer = EgtGetFileType(SaveFileDialog.FileName) If nFileType <> FT_DXF And nFileType <> FT_STL Then MessageBox.Show("File type unknown", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End If 'Prima dell'esportazione RaiseEvent OnExportingProject(Me, SaveFileDialog.FileName) 'Esportazione del progetto Cursor = Cursors.WaitCursor Dim bOk As Boolean = False If nFileType = FT_DXF Then bOk = EgtExportDxf(GDB_ID_ROOT, SaveFileDialog.FileName) ElseIf nFileType = FT_STL Then bOk = EgtExportStl(GDB_ID_ROOT, SaveFileDialog.FileName) End If Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnExportedProject(Me) Else MessageBox.Show("Error exporting file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function Public Function Exec(Optional ByVal sDir As String = "", Optional ByVal bWithDlg As Boolean = True) As Boolean Dim sFile As String = sDir 'Scelta file con dialogo If bWithDlg Then Dim OpenFileDialog As New OpenFileDialog OpenFileDialog.Title = "Exec Script" OpenFileDialog.Filter = "Lua commands(*.lua)|*.lua" & "|Test commands(*.tsc)|*.tsc" & "|All Files (*.*)|*.*" OpenFileDialog.FilterIndex = 1 OpenFileDialog.InitialDirectory = sDir If OpenFileDialog.ShowDialog <> Windows.Forms.DialogResult.OK Then Return True End If sFile = OpenFileDialog.FileName End If 'Ne verifico il tipo Dim sExt As String = UCase(Path.GetExtension(sFile)) If (sExt <> ".LUA" And sExt <> ".TSC") Then MessageBox.Show("Script type unknow", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End If 'Prima dell'esecuzione RaiseEvent OnExecutingScript(Me, sFile) 'Esecuzione Cursor = Cursors.WaitCursor Dim bOk As Boolean = False If (sExt = ".LUA") Then bOk = EgtLuaExecFile(sFile) Else bOk = EgtTscExecFile(sFile) End If EgtZoom(ZM_ALL) Cursor = Cursors.Default 'Gestione risultato If bOk Then RaiseEvent OnExecutedScript(Me) ElseIf (sExt = ".LUA") Then Dim sError As String = String.Empty EgtLuaGetLastError(sError) MessageBox.Show(sError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Error executing file", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Return bOk End Function '---- Analyze Operations ------------- Public Sub SetStatusAnalyze() m_nStatus = ST.ANALYZE End Sub Public Sub ResetStatusAnalyze() If m_nStatus = ST.ANALYZE Then m_nStatus = ST.NULL m_nOldStatus = ST.NULL End If End Sub '---- Distance Operations ------------- Public Sub SetStatusGetDistance() m_nStatus = ST.GETDIST End Sub Public Sub ResetStatusGetDistance() If m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Then m_nStatus = ST.NULL m_nOldStatus = ST.NULL End If EgtResetGeoLine() RaiseEvent OnCloseGetDist(Me) End Sub '---- Distance Operations ------------- Public Sub SetStatusSelPoint() m_nStatus = ST.SELPOINT End Sub Public Sub ResetStatusSelPoint() If m_nStatus = ST.SELPOINT Then m_nStatus = ST.NULL m_nOldStatus = ST.NULL End If End Sub '---- Zoom Buttons ---- Public Sub ZoomAll() EgtZoom(ZM_ALL) End Sub Public Sub ZoomIn() EgtZoom(ZM_IN) End Sub Public Sub ZoomOut() EgtZoom(ZM_OUT) End Sub '---- Rendering Buttons ---- Public Sub WireFrame() EgtSetShowMode(SM_WIREFRAME) End Sub Public Sub HiddenLine() EgtSetShowMode(SM_HIDDENLINE) End Sub Public Sub Shading() EgtSetShowMode(SM_SHADING) End Sub '---- LookFrom Buttons ---- Public Sub TopView() EgtSetView(CT_TOP) End Sub Public Sub IsoViewSW() EgtSetView(CT_ISO_SW) End Sub Public Sub IsoViewSE() EgtSetView(CT_ISO_SE) End Sub Public Sub IsoViewNE() EgtSetView(CT_ISO_NE) End Sub Public Sub IsoViewNW() EgtSetView(CT_ISO_NW) End Sub Public Sub FrontView() EgtSetView(CT_FRONT) End Sub Public Sub BackView() EgtSetView(CT_BACK) End Sub Public Sub LeftView() EgtSetView(CT_LEFT) End Sub Public Sub RightView() EgtSetView(CT_RIGHT) End Sub End Class