void initializeShapesTree(pdf.Page page) { ShapeCollectionConverter.Reset(); pdf.Shapes.ShapeCollection shapes = page.CreateShapes(); pdf.Shapes.ShapeCollection root = new pdf.Shapes.ShapeCollection(); root.Add(shapes); (shapesTree.Items[0] as TreeViewItem).ItemsSource = root; (shapesTree.Items[0] as TreeViewItem).IsExpanded = true; }
private void shapesTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { overlay.Children.Clear(); pdf.Shapes.ContentShape shape = shapesTree.SelectedItem as pdf.Shapes.ContentShape; if (null != shape) { TransformGroup group = new TransformGroup(); Matrix matrix = shape.Transform.CreateWpfMatrix(); group.Children.Add(new MatrixTransform(matrix)); pdf.Shapes.ShapeCollection parent = ShapeCollectionConverter.GetParent(shape); while (null != parent) { matrix = parent.Transform.CreateWpfMatrix(); group.Children.Add(new MatrixTransform(matrix)); parent = ShapeCollectionConverter.GetParent(parent); } System.Windows.Shapes.Rectangle rectangle = new System.Windows.Shapes.Rectangle(); rectangle.RenderTransform = group; rectangle.Fill = new SolidColorBrush(Color.FromArgb(64, 255, 0, 0)); if (shape is pdf.Shapes.TextShape) { pdf.Shapes.TextShape text = shape as pdf.Shapes.TextShape; rectangle.Width = text.MeasuredWidth; rectangle.Height = text.MeasuredHeight; overlay.Children.Add(rectangle); } else if (shape is pdf.Shapes.ImageShape) { pdf.Shapes.ImageShape image = shape as pdf.Shapes.ImageShape; rectangle.Width = image.Width; rectangle.Height = image.Height; overlay.Children.Add(rectangle); } else if (shape is pdf.Shapes.FreeHandShape) { pdf.Shapes.FreeHandShape freehand = shape as pdf.Shapes.FreeHandShape; System.Windows.Shapes.Path path = new System.Windows.Shapes.Path(); PathGeometry geometry = new PathGeometry(); path.Data = geometry; foreach (pdf.Shapes.FreeHandPath freehandPath in freehand.Paths) { PathFigure figure = new PathFigure(); figure.IsClosed = freehandPath.Closed; foreach (pdf.Shapes.FreeHandSegment segment in freehandPath.Segments) { if (segment is pdf.Shapes.FreeHandStartSegment) { pdf.Shapes.FreeHandStartSegment start = segment as pdf.Shapes.FreeHandStartSegment; figure.StartPoint = new Point(start.X, start.Y); } else if (segment is pdf.Shapes.FreeHandLineSegment) { pdf.Shapes.FreeHandLineSegment line = segment as pdf.Shapes.FreeHandLineSegment; figure.Segments.Add(new LineSegment(new Point(line.X1, line.Y1), true)); } else if (segment is pdf.Shapes.FreeHandBezierSegment) { pdf.Shapes.FreeHandBezierSegment bezier = segment as pdf.Shapes.FreeHandBezierSegment; figure.Segments.Add(new BezierSegment( new Point(bezier.X1, bezier.Y1), new Point(bezier.X2, bezier.Y2), new Point(bezier.X3, bezier.Y3), true)); } } geometry.Figures.Add(figure); } path.Fill = new SolidColorBrush(Colors.Red); path.Stroke = new SolidColorBrush(Colors.Green); path.StrokeThickness = 1; path.RenderTransform = group; overlay.Children.Add(path); } } }