internal static ShapeCollection CreateForSlide(SlidePart slidePart, SCSlide slide) { var phService = new PlaceholderService(slidePart.SlideLayoutPart); var transformFactory = new LocationParser(phService); var geometryFactory = new GeometryFactory(phService); var shapeContextBuilder = new ShapeContext.Builder(slidePart); var chartGrFrameHandler = new ChartGraphicFrameHandler(); var tableGrFrameHandler = new TableGraphicFrameHandler(shapeContextBuilder, transformFactory); var oleGrFrameHandler = new OleGraphicFrameHandler(shapeContextBuilder, transformFactory); var pShapeHandler = new AutoShapeCreator(shapeContextBuilder, transformFactory); var pictureHandler = new PictureHandler(shapeContextBuilder, transformFactory, geometryFactory); var sdkGroupShapeHandler = new PGroupShapeHandler(shapeContextBuilder, transformFactory, geometryFactory, slidePart); pShapeHandler.Successor = sdkGroupShapeHandler; sdkGroupShapeHandler.Successor = oleGrFrameHandler; oleGrFrameHandler.Successor = pictureHandler; pictureHandler.Successor = chartGrFrameHandler; chartGrFrameHandler.Successor = tableGrFrameHandler; P.ShapeTree shapeTree = slidePart.Slide.CommonSlideData.ShapeTree; var shapes = new List <IShape>(shapeTree.Count()); foreach (OpenXmlCompositeElement compositeElement in shapeTree.OfType <OpenXmlCompositeElement>()) { IShape shape = pShapeHandler.Create(compositeElement, slide); if (shape != null) { shapes.Add(shape); } } return(new ShapeCollection(shapes)); }
internal static ShapeCollection CreateForSlideLayout(P.ShapeTree pShapeTree, SCSlideLayout slideLayout) { var shapeList = new List <IShape>(); foreach (OpenXmlCompositeElement compositeElement in pShapeTree.OfType <OpenXmlCompositeElement>()) { switch (compositeElement) { case P.Shape pShape: shapeList.Add(new LayoutAutoShape(slideLayout, pShape)); continue; case P.GraphicFrame pGraphicFrame: { A.GraphicData aGraphicData = pGraphicFrame.GetFirstChild <A.Graphic>().GetFirstChild <A.GraphicData>(); if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/presentationml/2006/ole", StringComparison.Ordinal)) { shapeList.Add(new LayoutOLEObject(slideLayout, pGraphicFrame)); continue; } if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/drawingml/2006/chart", StringComparison.Ordinal)) { shapeList.Add(new LayoutChart(slideLayout, pGraphicFrame)); continue; } if (aGraphicData.Uri.Value.Equals("http://schemas.openxmlformats.org/drawingml/2006/table", StringComparison.Ordinal)) { shapeList.Add(new LayoutTable(slideLayout, pGraphicFrame)); continue; } break; } } // OLE Objects should be parsed before pictures, since OLE containers can contain p:pic elements, // thus OLE objects can be parsed as a picture by mistake. P.Picture pPicture; if (compositeElement is P.Picture treePicture) { pPicture = treePicture; } else { P.Picture framePicture = compositeElement.Descendants <P.Picture>().FirstOrDefault(); pPicture = framePicture; } if (pPicture != null) { shapeList.Add(new LayoutPicture(slideLayout, pPicture)); } } return(new ShapeCollection(shapeList)); }