9d43c71eec
- aggiunti treeview degli oggetti e aboutbox.
382 lines
15 KiB
VB.net
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
|