Export (0) Print
Expand All

StreamGeometry.Open Method

Opens a StreamGeometryContext that can be used to describe this StreamGeometry object's contents.

Namespace:  System.Windows.Media
Assembly:  PresentationCore (in PresentationCore.dll)

'Declaration
Public Function Open As StreamGeometryContext

Return Value

Type: System.Windows.Media.StreamGeometryContext
A StreamGeometryContext that can be used to describe this StreamGeometry object's contents.

StreamGeometry is light-weight alternative to PathGeometry for creating geometric shapes. Use a StreamGeometry when you need to describe a complex geometry but do not want the overhead of supporting data binding, animation, or modification. For example, because of its efficiency, the StreamGeometry class is a good choice for describing adorners.

The following example uses attribute syntax to create a triangular StreamGeometry in XAML.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>

    <Path Data="F0 M10,100 L100,100 100,50Z" 
      StrokeThickness="1" Stroke="Black"/>

  </StackPanel>
</Page>

For more information about StreamGeometry attribute syntax, see the Path Markup Syntax page.

The next example uses a StreamGeometry to define a triangle in code. First, the example creates a StreamGeometry, then obtains a StreamGeometryContext and uses it to describe the triangle.


Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes

Namespace SDKSample
	' Use StreamGeometry with StreamGeometryContext to define a triangle shape.
	Partial Public Class StreamGeometryTriangleExample
		Inherits Page
		Public Sub New()
			' Create a path to draw a geometry with.
			Dim myPath As New Path()
			myPath.Stroke = Brushes.Black
			myPath.StrokeThickness = 1

			' Create a StreamGeometry to use to specify myPath.
			Dim geometry As New StreamGeometry()
			geometry.FillRule = FillRule.EvenOdd

			' Open a StreamGeometryContext that can be used to describe this StreamGeometry 
			' object's contents.
			Using ctx As StreamGeometryContext = geometry.Open()

				' Begin the triangle at the point specified. Notice that the shape is set to 
				' be closed so only two lines need to be specified below to make the triangle.
				ctx.BeginFigure(New Point(10, 100), True, True) ' is closed  -  is filled 

				' Draw a line to the next specified point.
				ctx.LineTo(New Point(100, 100), True, False) ' is smooth join  -  is stroked 

				' Draw another line to the next specified point.
				ctx.LineTo(New Point(100, 50), True, False) ' is smooth join  -  is stroked 
			End Using

			' Freeze the geometry (make it unmodifiable)
			' for additional performance benefits.
			geometry.Freeze()

			' Specify the shape (triangle) of the Path using the StreamGeometry.
			myPath.Data = geometry

			' Add path shape to the UI.
			Dim mainPanel As New StackPanel()
			mainPanel.Children.Add(myPath)
			Me.Content = mainPanel
		End Sub
	End Class
End Namespace

The next example creates a method that uses a StreamGeometry and StreamGeometryContext to define a geometric shape based on specified parameters.


Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Shapes

Namespace SDKSample
	Partial Public Class StreamGeometryExample
		Inherits Page
		Public Sub New()
			' Create a path to draw a geometry with.
			Dim myPath As New Path()
			myPath.Stroke = Brushes.Black
			myPath.StrokeThickness = 1

			' Create a StreamGeometry to use to specify myPath.
			Dim theGeometry As StreamGeometry = BuildRegularPolygon(New Point(200, 200), 200, 8, 0)
			theGeometry.FillRule = FillRule.EvenOdd

			' Freeze the geometry (make it unmodifiable)
			' for additional performance benefits.
			theGeometry.Freeze()

			' Use the StreamGeometry returned by the BuildRegularPolygon to 
			' specify the shape of the path.
			myPath.Data = theGeometry

			' Add path shape to the UI.
			Dim mainPanel As New StackPanel()
			mainPanel.Children.Add(myPath)
			Me.Content = mainPanel
		End Sub

		Private Function BuildRegularPolygon(ByVal c As Point, ByVal r As Double, ByVal numSides As Integer, ByVal offsetDegree As Double) As StreamGeometry
			' c is the center, r is the radius,
			' numSides the number of sides, offsetDegree the offset in Degrees.
			' Do not add the last point.

			Dim geometry As New StreamGeometry()

			Using ctx As StreamGeometryContext = geometry.Open()
				ctx.BeginFigure(New Point(), True, True) ' is closed  -  is filled 

				Dim [step] As Double = 2 * Math.PI / Math.Max(numSides, 3)
				Dim cur As Point = c

				Dim a As Double = Math.PI * offsetDegree / 180.0
				Dim i As Integer = 0
				Do While i < numSides
					cur.X = c.X + r * Math.Cos(a)
					cur.Y = c.Y + r * Math.Sin(a)
					ctx.LineTo(cur, True, False) ' is smooth join  -  is stroked 
					i += 1
					a += [step]
				Loop
			End Using

			Return geometry
		End Function
	End Class
End Namespace

.NET Framework

Supported in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft