RootNode Class
Represents the top ContextNode for the tree of nodes that describes the results of ink analysis.
Assembly: Microsoft.Ink.Analysis (in Microsoft.Ink.Analysis.dll)
The RootNode is accessed by the InkAnalyzer.RootNode property.
A RootNode object can contain the following types of children:
Any number of UnclassifiedInkNode objects.
Any number of WritingRegionNode objects.
Any number of InkDrawingNode objects.
Any number of ImageNode objects.
Any number of AnalysisHintNode objects.
Any number of CustomRecognizerNode objects.
The following example takes an InkAnalyzer, theInkAnalyzer, and uses its ContextNode tree to fill a TreeView, theTreeView, starting with the RootNode. When a node in the tree view is selected, the strokes are set to display in red. The Tag property is used to map between tree nodes and the context nodes that they represent.
Private Sub BuildTree() Me.theTreeView.Nodes.Clear() Dim rootNode As New TreeNode(Me.theInkAnalyzer.RootNode.ToString()) Me.theTreeView.Nodes.Add(rootNode) rootNode.Tag = Me.theInkAnalyzer.RootNode WalkTree(Me.theInkAnalyzer.RootNode, rootNode) End Sub 'BuildTree Private Sub WalkTree(ByVal parentContextNode As Microsoft.Ink.ContextNode, _ ByVal parentTreeNode As TreeNode) Dim cNode As ContextNode For Each cNode In parentContextNode.SubNodes Dim newTNode As New TreeNode(cNode.ToString()) If TypeOf cNode Is Microsoft.Ink.InkWordNode Then newTNode.Text = newTNode.Text + _ ": " + CType(cNode, InkWordNode).GetRecognizedString() ElseIf TypeOf cNode Is Microsoft.Ink.InkDrawingNode Then Dim shapeName As String = CType(cNode, InkDrawingNode).GetShapeName() If shapeName <> "" Then newTNode.Text = newTNode.Text + ": " + shapeName End If End If WalkTree(cNode, newTNode) parentTreeNode.Nodes.Add(newTNode) ' Add the context node as a tag of the tree node newTNode.Tag = cNode Next cNode End Sub 'WalkTree Private Sub theTreeView_AfterSelect(ByVal sender As Object, _ ByVal e As System.Windows.Forms.TreeViewEventArgs) _ Handles theTreeView.AfterSelect ' Get the context node Dim selectedNode As ContextNode = CType(e.Node.Tag, ContextNode) MarkNodeAsRed(selectedNode) timeStampLabel.Text = "" ' Show selected results If Not (selectedNode Is Nothing) Then Select Case selectedNode.Type Case Microsoft.Ink.ContextNodeType.WritingRegion Dim writingRegion As WritingRegionNode = _ CType(selectedNode, WritingRegionNode) selectedResultsTextBox.Text = writingRegion.GetRecognizedString() Case Microsoft.Ink.ContextNodeType.Paragraph Dim paragraph As ParagraphNode = _ CType(selectedNode, ParagraphNode) selectedResultsTextBox.Text = paragraph.GetRecognizedString() Case Microsoft.Ink.ContextNodeType.Line Dim line As LineNode = _ CType(selectedNode, LineNode) selectedResultsTextBox.Text = line.GetRecognizedString() Case Microsoft.Ink.ContextNodeType.InkWord Dim inkWord As InkWordNode = _ CType(selectedNode, InkWordNode) Dim parentNode As ContextNode = inkWord.ParentNode If TypeOf parentNode Is LineNode Then Dim parentLine As LineNode = CType(parentNode, LineNode) ' Put parent line's recognized string into the text box selectedResultsTextBox.Text = parentLine.GetRecognizedString() ' Select the text that corresponds to the ink word Dim subNodes As New ContextNodeCollection(theInkAnalyzer) subNodes.Add(inkWord) Dim start As Integer Dim length As Integer parentLine.GetTextRangeFromNodes(subNodes, start, length) If start >= 0 AndAlso length > 0 Then selectedResultsTextBox.Select(start, length) End If End If ' Show the time stamp If inkWord.ContainsPropertyData(Me.timeStampGuid) Then Dim timeStamp As DateTime = _ CType(inkWord.GetPropertyData(Me.timeStampGuid), DateTime) timeStampLabel.Text = timeStamp.ToShortTimeString() End If ' Snippet to demonstrate GetPropertyDataIds Dim propertyDataIds() As Guid = inkWord.GetPropertyDataIds() ' Snippets to demonstrate loading and saving Dim data As Byte() = inkWord.SavePropertiesData() If (Not inkWord.LoadPropertiesData(data)) Then MessageBox.Show("Cannot load property data") End If Case Microsoft.Ink.ContextNodeType.InkDrawing Dim drawingNode As InkDrawingNode = CType(selectedNode, InkDrawingNode) selectedResultsTextBox.Text = drawingNode.GetShapeName() Case Microsoft.Ink.ContextNodeType.InkBullet Dim bulletNode As InkBulletNode = CType(selectedNode, InkBulletNode) selectedResultsTextBox.Text = bulletNode.GetRecognizedString() Case Microsoft.Ink.ContextNodeType.Object Dim selectedObject As ObjectNode = selectedNode selectedResultsTextBox.Text = selectedObject.GetRecognizedString() Case Microsoft.Ink.ContextNodeType.CustomRecognizer Dim customRecognizer As CustomRecognizerNode = selectedNode selectedResultsTextBox.Text = customRecognizer.GetRecognizedString() Case Else selectedResultsTextBox.Text = String.Empty End Select End If Me.currentNode = selectedNode End Sub 'theTreeView_AfterSelect Private Sub MarkNodeAsRed(ByVal selectedNode As ContextNode) ' Set all node strokes to black, but this one to red Dim inkStroke As Stroke For Each inkStroke In Me.theInkCollector.Ink.Strokes If Not (selectedNode Is Nothing) AndAlso _ selectedNode.Strokes.Contains(inkStroke) Then inkStroke.DrawingAttributes = New DrawingAttributes(Color.Red) Else inkStroke.DrawingAttributes = Me.theInkCollector.DefaultDrawingAttributes End If Next inkStroke theNotesPanel.Refresh() End Sub 'MarkNodeAsRed
Windows 7, Windows Vista, Windows Server 2008 R2, Windows Server 2008
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.