Files
TestEIn/Form1.vb
T
Dario Sassi 9d43c71eec TestEIn 1.5i2 :
- aggiunti treeview degli oggetti e aboutbox.
2014-09-04 12:39:56 +00:00

382 lines
15 KiB
VB.net

Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Math
Imports TestEIn.EgtInterface
Public Class Form1
'-------------------------------- AboutBox -------------------------------------------------------
<DllImport("user32.dll")>
Private Shared Function GetSystemMenu(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr
End Function
<DllImport("user32.dll", CharSet:=CharSet.Auto)>
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