Imports System.Runtime.InteropServices Imports System.Text Imports System.Math Imports TestEIn.EgtInterface Public Class Form1 '-------------------------------- AboutBox ------------------------------------------------------- Private Shared Function GetSystemMenu(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr End Function Private Shared Function AppendMenu(ByVal hMenu As IntPtr, ByVal uFlags As Integer, ByVal uIDNewItem As Integer, ByVal lpNewItem As String) As Boolean End Function Private Const MF_STRING As UInt32 = &H0 Private Const MF_SEPARATOR As UInt32 = &H800 Private Const WM_SYSCOMMAND As UInt32 = &H112 Private Const IDM_ABOUTBOX As UInt32 = &H10 '-------------------------------- Form ------------------------------------------------------------ Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Text = "EgalTech TestEIn" rbtShading.Checked = True Scene1.Init() m_nOldIdTree = GDB_ID_NULL ' aggiungo voce per about box nel menù di sistema Dim hSysMenu As IntPtr = GetSystemMenu(Handle, False) If hSysMenu <> IntPtr.Zero Then AppendMenu(hSysMenu, MF_SEPARATOR, 0, "") AppendMenu(hSysMenu, MF_STRING, IDM_ABOUTBOX, "About TestEIn...") End If End Sub Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) MyBase.WndProc(m) If m.Msg = WM_SYSCOMMAND Then If m.WParam.ToInt32 = IDM_ABOUTBOX Then AboutBox1.Show() End If End If End Sub Private Sub CursorPos(ByVal sender As Object, ByVal sCursorPos As String) Handles Scene1.CursorPos ToolStripStatusLabel1.Text = sCursorPos End Sub '-------------------------------- Buttons -------------------------------------------------------- Private Sub btnNew_Click(sender As System.Object, e As System.EventArgs) Handles btnNew.Click If EgtNewFile(Scene1.GetCtx) Then ClearObjTree() EgtZoom(Scene1.GetCtx, ZM_ALL) End If End Sub Private Sub btnOpen_Click(sender As System.Object, e As System.EventArgs) Handles btnOpen.Click OpenFileDialog.Title = "Open" OpenFileDialog.Filter = "New geometry EgalTech(*.nge)|*.nge|New font EgalTech(*.nfe)|*.nfe|All Files (*.*)|*.*" OpenFileDialog.FilterIndex = 1 If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then Cursor = Cursors.WaitCursor If EgtOpenFile(Scene1.GetCtx, OpenFileDialog.FileName) Then EgtZoom(Scene1.GetCtx, ZM_ALL) LoadObjTree() End If Cursor = Cursors.Default End If End Sub Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click SaveFileDialog.Title = "Save" SaveFileDialog.Filter = "New geometry EgalTech(*.nge)|*.nge" SaveFileDialog.FilterIndex = 1 If SaveFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then Cursor = Cursors.WaitCursor ' ripristino stato oggetto marcato Dim nIdOld As Integer = RevertOldIdInObjTree() ' eseguo salvataggio EgtSaveFile(Scene1.GetCtx, SaveFileDialog.FileName, NGE_CMPTEXT) ' rimarco oggetto SelectIdInObjTree(nIdOld) Cursor = Cursors.Default End If End Sub Private Sub btnImport_Click(sender As System.Object, e As System.EventArgs) Handles btnImport.Click OpenFileDialog.Title = "Import" OpenFileDialog.Filter = "Drawing Exchange Fmt(*.dxf)|*.dxf|Stereolithography (*.stl)|*.stl|All Files (*.*)|*.*" OpenFileDialog.FilterIndex = 1 If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then Dim nFileType As Integer = EgtGetFileType(OpenFileDialog.FileName) If nFileType = FT_DXF Then Cursor = Cursors.WaitCursor EgtNewFile(Scene1.GetCtx) If EgtImportDxf(Scene1.GetCtx, OpenFileDialog.FileName) Then EgtZoom(Scene1.GetCtx, ZM_ALL) LoadObjTree() End If Cursor = Cursors.Default ElseIf nFileType = FT_STL Then Cursor = Cursors.WaitCursor EgtNewFile(Scene1.GetCtx) If EgtImportStl(Scene1.GetCtx, OpenFileDialog.FileName) Then EgtZoom(Scene1.GetCtx, ZM_ALL) LoadObjTree() End If Cursor = Cursors.Default Else MessageBox.Show("File type unknown", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub Private Sub btnExport_Click(sender As System.Object, e As System.EventArgs) Handles btnExport.Click SaveFileDialog.Title = "Export" SaveFileDialog.Filter = "Drawing Exchange Fmt(*.dxf)|*.dxf|Stereolithography (*.stl)|*.stl|All Files (*.*)|*.*" SaveFileDialog.FilterIndex = 1 If SaveFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then Dim nFileType As Integer = EgtGetFileType(SaveFileDialog.FileName) If nFileType = FT_DXF Then Cursor = Cursors.WaitCursor EgtExportDxf(Scene1.GetCtx, GDB_ID_ROOT, SaveFileDialog.FileName) Cursor = Cursors.Default ElseIf nFileType = FT_STL Then Cursor = Cursors.WaitCursor EgtExportStl(Scene1.GetCtx, GDB_ID_ROOT, SaveFileDialog.FileName) Cursor = Cursors.Default Else MessageBox.Show("File type unknown", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End If End Sub Private Sub btnExec_Click(sender As System.Object, e As System.EventArgs) Handles btnExec.Click OpenFileDialog.Title = "Exec TSC" OpenFileDialog.Filter = "Test commands(*.tsc)|*.tsc" OpenFileDialog.FilterIndex = 1 If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then Cursor = Cursors.WaitCursor ' pulisco albero degli oggetti ClearObjTree() ' eseguo If EgtTscFileExec(Scene1.GetCtx, OpenFileDialog.FileName) Then EgtZoom(Scene1.GetCtx, ZM_ALL) LoadObjTree() End If ' ricarico albero degli oggetti LoadObjTree() Cursor = Cursors.Default End If End Sub Private Sub rbtWireFrame_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbtWireFrame.CheckedChanged EgtSetShowMode(Scene1.GetCtx, SM_WIREFRAME) End Sub Private Sub rbtHiddenLine_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbtHiddenLine.CheckedChanged EgtSetShowMode(Scene1.GetCtx, SM_HIDDENLINE) End Sub Private Sub rbtShading_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbtShading.CheckedChanged EgtSetShowMode(Scene1.GetCtx, SM_SHADING) End Sub Private Sub chkCurveDir_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkCurveDir.CheckedChanged EgtSetShowCurveDirection(Scene1.GetCtx, chkCurveDir.Checked) End Sub Private Sub btnZoomAll_Click(sender As System.Object, e As System.EventArgs) Handles btnZoomAll.Click EgtZoom(Scene1.GetCtx, ZM_ALL) End Sub Private Sub btnZoomIn_Click(sender As System.Object, e As System.EventArgs) Handles btnZoomIn.Click EgtZoom(Scene1.GetCtx, ZM_IN) End Sub Private Sub btnZoomOut_Click(sender As System.Object, e As System.EventArgs) Handles btnZoomOut.Click EgtZoom(Scene1.GetCtx, ZM_OUT) End Sub Private Sub btnTop_Click(sender As System.Object, e As System.EventArgs) Handles btnTop.Click EgtSetView(Scene1.GetCtx, CT_TOP) End Sub Private Sub btnFront_Click(sender As System.Object, e As System.EventArgs) Handles btnFront.Click EgtSetView(Scene1.GetCtx, CT_FRONT) End Sub Private Sub btnLeft_Click(sender As System.Object, e As System.EventArgs) Handles btnLeft.Click EgtSetView(Scene1.GetCtx, CT_LEFT) End Sub Private Sub btnBack_Click(sender As System.Object, e As System.EventArgs) Handles btnBack.Click EgtSetView(Scene1.GetCtx, CT_BACK) End Sub Private Sub btnRight_Click(sender As System.Object, e As System.EventArgs) Handles btnRight.Click EgtSetView(Scene1.GetCtx, CT_RIGHT) End Sub Private Sub btnIso_Click(sender As System.Object, e As System.EventArgs) Handles btnIso.Click EgtSetView(Scene1.GetCtx, CT_ISO_SW) End Sub '-------------------------------- Command Box ---------------------------------------------------- Private Sub tboxCmd_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles tboxCmd.KeyDown If (e.KeyCode = Keys.Enter) Then Dim nLine As Integer = tboxCmd.GetLineFromCharIndex(tboxCmd.GetFirstCharIndexOfCurrentLine) Dim sCmd As String = tboxCmd.Lines(nLine).ToString If Not String.IsNullOrEmpty(sCmd) Then ' ripristino stato oggetto marcato Dim nIdOld As Integer = RevertOldIdInObjTree() ' eseguo comando If EgtTscLineExec(Scene1.GetCtx, sCmd) Then Scene1.Invalidate() ToolStripStatusLabel3.Text = " " Else ToolStripStatusLabel3.Text = "Error executing command" End If ' ricarico albero degli oggetti LoadObjTree() SelectIdInObjTree(nIdOld) End If End If End Sub '-------------------------------- Tree View ------------------------------------------------------ Private m_nOldIdTree As Integer Private Sub LoadObjTree() ClearObjTree() TreeView1.BeginUpdate() TreeView1.Nodes.Add(GDB_ID_NULL.ToString, "No Selection", 0, 0) AddGroupInObjTree(GDB_ID_ROOT, TreeView1.Nodes) TreeView1.EndUpdate() End Sub Private Sub ClearObjTree() RevertOldIdInObjTree() TreeView1.Nodes.Clear() End Sub Private Sub AddGroupInObjTree(ByVal nGroupId As Integer, ByRef PrevNodColl As TreeNodeCollection) Dim CurrNodColl As TreeNodeCollection If nGroupId = GDB_ID_ROOT Then CurrNodColl = PrevNodColl Else Dim sName As String = String.Empty Dim sText As String = String.Empty If EgtGetName(Scene1.GetCtx, nGroupId, sName) Then sText = sName + " (Group " + nGroupId.ToString + ")" Else sText = "Group " + nGroupId.ToString End If Dim nImage As Integer = TypeToImageInObjTree(TY_GROUP) CurrNodColl = PrevNodColl.Add(nGroupId.ToString, sText, nImage, nImage).Nodes End If Dim nId As Integer = EgtGetFirstInGroup(Scene1.GetCtx, nGroupId) While nId <> GDB_ID_NULL 'recupero il tipo di nodo Dim nType As Integer = EgtGetType(Scene1.GetCtx, nId) 'se gruppo If nType = TY_GROUP Then AddGroupInObjTree(nId, CurrNodColl) 'se oggetto geometrico ElseIf nType >= TY_GEO_VECTOR Then Dim sTitle As String = String.Empty EgtGetTitle(Scene1.GetCtx, nId, sTitle) Dim sName As String = String.Empty Dim sText As String = String.Empty If EgtGetName(Scene1.GetCtx, nId, sName) Then sText = sName + " (" + sTitle + " " + nId.ToString + ")" Else sText = sTitle + " " + nId.ToString End If Dim nImage As Integer = TypeToImageInObjTree(nType) CurrNodColl.Add(nId.ToString, sText, nImage, nImage) End If 'passo al successivo nId = EgtGetNext(Scene1.GetCtx, nId) End While End Sub Private Function TypeToImageInObjTree(ByVal nType As Integer) As Integer Select Case nType Case TY_GROUP Return 2 Case TY_GEO_VECTOR Return 3 Case TY_GEO_POINT Return 4 Case TY_GEO_FRAME Return 5 Case TY_CRV_LINE Return 6 Case TY_CRV_ARC Return 7 Case TY_CRV_BEZ Return 8 Case TY_CRV_COMPO Return 9 Case TY_SRF_MESH Return 10 Case TY_EXT_TEXT Return 11 End Select Return 1 End Function Private Sub ObjTree_AfterSelect(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterSelect ' recupero l'Id del nuovo oggetto selezionato Dim nId As Integer If Not Int32.TryParse(e.Node.Name, nId) Then Return End If ' ripristino eventuale vecchio oggetto selezionato RevertOldIdInObjTree() ' recupero il tipo del nuovo oggetto Dim nType As Integer = EgtGetType(Scene1.GetCtx, nId) ' stampa dei dati del nuovo oggetto Dim sDump As String = String.Empty If nType = TY_NONE Then tBoxInfo.Text = String.Empty ElseIf nType = TY_GROUP Then If EgtGroupDump(Scene1.GetCtx, nId, sDump) Then tBoxInfo.Text = sDump Else tBoxInfo.Text = String.Empty End If Else If EgtGeoObjDump(Scene1.GetCtx, nId, sDump) Then tBoxInfo.Text = sDump Else tBoxInfo.Text = String.Empty End If End If ' permetto in ogni caso la visualizzazione dell'oggetto e lo evidenzio Dim nOldMode As Integer = GDB_MD_STD EgtGetMode(Scene1.GetCtx, nId, nOldMode) Dim nMode As Integer = IIf((nOldMode = GDB_MD_HIDDEN), GDB_MD_STD, nOldMode) EgtSetMode(Scene1.GetCtx, nId, nMode) Dim nOldStatus As Integer = GDB_ST_ON EgtGetStatus(Scene1.GetCtx, nId, nOldStatus) Dim nStat As Integer = IIf((nOldStatus = GDB_ST_OFF), GDB_ST_ON, nOldStatus) EgtSetStatus(Scene1.GetCtx, nId, nStat) EgtSetMark(Scene1.GetCtx, nId) m_nOldIdTree = nId ' imposto il ridisegno della scena Scene1.Invalidate() End Sub Private Function RevertOldIdInObjTree() As Integer ' salvo il vecchio Id Dim nOldId As Integer = m_nOldIdTree ' se non nullo... If EgtExistsObj(Scene1.GetCtx, m_nOldIdTree) Then ' ripristino il modo e lo stato precedente dell'oggetto e lo smarco EgtRevertMode(Scene1.GetCtx, m_nOldIdTree) EgtRevertStatus(Scene1.GetCtx, m_nOldIdTree) EgtResetMark(Scene1.GetCtx, m_nOldIdTree) ' annullo oggetto da ripristinare m_nOldIdTree = GDB_ID_NULL End If Return nOldId End Function Private Function SelectIdInObjTree(ByVal nId As Integer) As Boolean Dim tNode() As TreeNode = TreeView1.Nodes.Find(nId.ToString, True) If tNode.Length > 0 Then TreeView1.SelectedNode = tNode(0) Return True Else Return False End If End Function End Class