Example #1
0
        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;
        }
Example #2
0
        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);
                }
            }
        }