Condividi tramite


Procedura: creare una forma composta

In questo esempio viene mostrato come creare forme composte utilizzando gli oggetti Geometry e come visualizzarle tramite un elemento Path. Nell'esempio seguente, vengono utilizzati gli oggetti LineGeometry, EllipseGeometry e RectangleGeometry con GeometryGroup per creare una forma composta. Le geometrie vengono quindi disegnate utilizzando un elemento Path.

Esempio

<!-- Displays the geometry. --> 
<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>

    <!-- Creates a composite shape from three geometries. -->
    <GeometryGroup FillRule="EvenOdd">
      <LineGeometry StartPoint="10,10" EndPoint="50,30" />
      <EllipseGeometry Center="40,70" RadiusX="30" RadiusY="30" />              
      <RectangleGeometry Rect="30,55 100 30" />
    </GeometryGroup>
  </Path.Data>
</Path>
            ' Create a Path to be drawn to the screen.
            Dim myPath As New Path()
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            Dim mySolidColorBrush As New SolidColorBrush()
            mySolidColorBrush.Color = Color.FromArgb(255, 204, 204, 255)
            myPath.Fill = mySolidColorBrush

            ' Create the line geometry to add to the Path
            Dim myLineGeometry As New LineGeometry()
            myLineGeometry.StartPoint = New Point(10, 10)
            myLineGeometry.EndPoint = New Point(50, 30)

            ' Create the ellipse geometry to add to the Path
            Dim myEllipseGeometry As New EllipseGeometry()
            myEllipseGeometry.Center = New Point(40, 70)
            myEllipseGeometry.RadiusX = 30
            myEllipseGeometry.RadiusY = 30

            ' Create a rectangle geometry to add to the Path
            Dim myRectGeometry As New RectangleGeometry()
            myRectGeometry.Rect = New Rect(30, 55, 100, 30)

            ' Add all the geometries to a GeometryGroup.
            Dim myGeometryGroup As New GeometryGroup()
            myGeometryGroup.Children.Add(myLineGeometry)
            myGeometryGroup.Children.Add(myEllipseGeometry)
            myGeometryGroup.Children.Add(myRectGeometry)

            myPath.Data = myGeometryGroup

            ' Add path shape to the UI.
            Dim mainPanel As New StackPanel()
            mainPanel.Children.Add(myPath)
            Me.Content = mainPanel
// Create a Path to be drawn to the screen.
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 204, 204, 255);
myPath.Fill = mySolidColorBrush;

// Create the line geometry to add to the Path
LineGeometry myLineGeometry = new LineGeometry();
myLineGeometry.StartPoint = new Point(10, 10);
myLineGeometry.EndPoint = new Point(50, 30);

// Create the ellipse geometry to add to the Path
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(40, 70);
myEllipseGeometry.RadiusX = 30;
myEllipseGeometry.RadiusY = 30;

// Create a rectangle geometry to add to the Path
RectangleGeometry myRectGeometry = new RectangleGeometry();
myRectGeometry.Rect = new Rect(30, 55, 100, 30);

// Add all the geometries to a GeometryGroup.
GeometryGroup myGeometryGroup = new GeometryGroup();
myGeometryGroup.Children.Add(myLineGeometry);
myGeometryGroup.Children.Add(myEllipseGeometry);
myGeometryGroup.Children.Add(myRectGeometry);

myPath.Data = myGeometryGroup;

// Add path shape to the UI.
StackPanel mainPanel = new StackPanel();
mainPanel.Children.Add(myPath);
this.Content = mainPanel;

Nella figura seguente viene mostrata la forma creata nell'esempio precedente.

Geometria composta

Geometria composta creata con GeometryGroup

Forme più complesse, ad esempio poligoni e forme con segmenti curvi, possono essere create utilizzando PathGeometry. Per un esempio in cui viene mostrato come creare una forma utilizzando PathGeometry, vedere Procedura: creare una forma tramite un oggetto PathGeometry. Sebbene in questo esempio venga eseguito il rendering di una forma sullo schermo utilizzando un elemento Path, è anche possibile utilizzare gli oggetti Geometry per descrivere il contenuto di un oggetto GeometryDrawing o di un oggetto DrawingContext. Tali oggetti possono essere utilizzati anche per ritagliare e per eseguire l'hit test.

Questo esempio è stato estratto da un esempio più ampio; per la versione completa, vedere Esempio di geometrie (la pagina potrebbe essere in inglese).