123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- using DocumentFormat.OpenXml.Presentation;
- using HTEXLib.Animations;
- using HTEXLib.Helpers.ShapeHelpers;
- using HTEXLib.Models;
- using HTEXLib.Models.HTEX;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.Json;
- using System.Text.RegularExpressions;
- namespace HTEXLib.Controller
- {
- public class HtexController
- {
- private List<Item> htexElements;
- private readonly PPTSlide _mSlide;
- public double SlideWidth { get; set; }
- public double SlideHeight { get; set; }
- public HtexController(PPTSlide aSlide, int slideCounter, int slidesNumber)
- {
-
- this._mSlide = aSlide;
- this.htexElements = new List<Item>();
-
- }
- public Slide GenerateHtex() {
- HtexSlide htexSlide = new HtexSlide(_mSlide, _mSlide.slideIndex)
- {
- ContainerShape = _mSlide.ContainerShape,
- };
- Slide slide = new Slide() { id= Guid.NewGuid().ToString()};
- Background background = _mSlide.background;
- if (background != null)
- {
- slide.fill = PPTXHelper.DoBackgroundProperties(background.BackgroundProperties, _mSlide, _mSlide.backgroundFrom);
- };
- Dictionary<string, List<string>> children = new Dictionary<string, List<string>>();
- List<Item> ditems = htexSlide.DrawElement();
- List<Item> items = new List<Item>();
- //处理组合图形在Wpf不能多层嵌套
- int len = ditems.Count;
- for (int i = 0; i < len; i++)
- {
- //if (!(ditems[i] is Group && ditems[i] is Diagram) ) {
- // items.Add(ditems[i]);
- //}
- if (ditems[i] is Group group)
- {
- List<string> GroupItems = new List<string>();
- // ItemGroup itemGroup = new ItemGroup { id = group.uid, items = new List<string>() };
- doGroup(group, items, GroupItems);
- children.Add(group.uid, GroupItems);
- }
- else if (ditems[i] is Diagram diagram)
- {
- List<string> GroupItems = new List<string>();
- // ItemGroup itemGroup = new ItemGroup { id = diagram.uid, items = new List<string>() };
- doDiagram(diagram, items, GroupItems);
- children.Add(diagram.uid, GroupItems);
- }
- else
- {
- items.Add(ditems[i]);
- }
- }
- slide.itemGroup = children;
- htexElements.AddRange(items);
- slide.item = htexElements;
- List<AnimtimeTree> animtimes = DoAnimtime(_mSlide, slide.item);
- slide.animations = animtimes;
- return slide;
- }
- public List<AnimtimeTree> DoAnimtime(PPTSlide slide,List<Item> items) {
- int number = 1;
- Timing SlideMaster_Timing = slide.slideMasterPart.SlideMaster.Descendants<Timing>().FirstOrDefault();
- Timing SlideLayoutPart_Timing = slide.SlideLayoutPart.SlideLayout.Descendants<Timing>().FirstOrDefault();
- Timing Slide_Timing = slide.PSlide.Descendants<Timing>().FirstOrDefault();
- AnimtimeTree master_animtimeTree = null;
- AnimtimeTree layout_animtimeTree = null;
- AnimtimeTree slide_animtimeTree = null;
- Dictionary<string, AnimtimeData> master_dict = new Dictionary<string, AnimtimeData>();
- Dictionary<string, AnimtimeData> layout_dict = new Dictionary<string, AnimtimeData>();
- Dictionary<string, AnimtimeData> slide_dict = new Dictionary<string, AnimtimeData>();
- var SlideMaster_BuildList= SlideMaster_Timing != null ? SlideMaster_Timing.BuildList : null;
- var SlideLayoutPart_BuildList = SlideLayoutPart_Timing != null ? SlideLayoutPart_Timing.BuildList : null;
- var Slide_BuildList = Slide_Timing != null ? Slide_Timing.BuildList : null;
- var Master_spgrp = DoBuildList(SlideMaster_BuildList);
- var Layout_spgrp = DoBuildList(SlideLayoutPart_BuildList);
- var Slide_spgrp = DoBuildList(Slide_BuildList);
- //播放母版的动画
- master_animtimeTree= AnimtimeHelper.AddTimings(SlideMaster_Timing, "master", master_animtimeTree, slide, number, Master_spgrp,items, master_dict);
- //播放样式表的动画
- layout_animtimeTree=AnimtimeHelper.AddTimings(SlideLayoutPart_Timing, "layout", layout_animtimeTree, slide, number, Layout_spgrp, items, layout_dict);
- //播放单页动画
- slide_animtimeTree= AnimtimeHelper.AddTimings(Slide_Timing, "slide", slide_animtimeTree, slide, number, Slide_spgrp, items, slide_dict);
- List<AnimtimeTree> animtimeTrees = new List<AnimtimeTree>();
- if (master_animtimeTree != null)
- {
- foreach (var dict in master_dict) {
- master_animtimeTree.obj_dic.Add(dict);
- }
- animtimeTrees.Add(master_animtimeTree);
- }
- if (layout_animtimeTree != null)
- {
- foreach (var dict in layout_dict)
- {
- layout_animtimeTree.obj_dic.Add(dict);
- }
- animtimeTrees.Add(layout_animtimeTree);
- }
- if (slide_animtimeTree != null)
- {
- foreach (var dict in slide_dict)
- {
- slide_animtimeTree.obj_dic.Add(dict);
- }
- animtimeTrees.Add(slide_animtimeTree);
- }
- return animtimeTrees;
- }
- public List<SpGrp> DoBuildList(BuildList BuildList) {
- List<SpGrp> spGrps = new List<SpGrp>();
- if (BuildList == null) {
- return spGrps;
- }
- var BuildParagraph = BuildList.Descendants<BuildParagraph>();
- if (BuildParagraph != null) {
- BuildParagraph.ToList().ForEach(x=> { spGrps.Add(new SpGrp { spid=x.ShapeId,grpId=x.GroupId}); });
- }
- var BuildDiagram = BuildList.Descendants<BuildDiagram>();
- if (BuildDiagram != null)
- {
- BuildDiagram.ToList().ForEach(x => { spGrps.Add(new SpGrp { spid = x.ShapeId, grpId = x.GroupId }); });
- }
- var BuildOleChart = BuildList.Descendants<BuildOleChart>();
- if (BuildOleChart != null)
- {
- BuildOleChart.ToList().ForEach(x => { spGrps.Add(new SpGrp { spid = x.ShapeId, grpId = x.GroupId }); });
- }
- var BuildGraphics = BuildList.Descendants<BuildGraphics>();
- if (BuildGraphics != null)
- {
- BuildGraphics.ToList().ForEach(x => { spGrps.Add(new SpGrp { spid = x.ShapeId, grpId = x.GroupId }); });
- }
- return spGrps;
- }
- public void doGroup(Group group, List<Item> items, List<string> GroupItems)
- {
- if (group != null && group.shapes != null && group.shapes.Count > 0)
- {
- Shape htexGroup = new Shape
- {
- type = "Sp",
- style = group.style,
- index = group.index,
- uid = group.uid,
- sid = group.sid,
- opacity = group.opacity,
- copy = group.copy,
- @lock = group.@lock,
- //link = group.link,
- //audio = group.audio,
- links = group.links,
- subName = group.subName,
- shapeType = "rect",
- quDesc = group.quDesc,
- textBody = null,
- svg = group.svg
- };
- items.Add(htexGroup);
- List<string> ids = new List<string>();
- int len = group.shapes.Count;
- for(int i= 0; i < len;i++ ){
- if (group.shapes[i] is Group gp)
- {
-
- doGroup(gp, items, GroupItems);
- }
- else if (group.shapes[i] is Diagram diagram)
- {
- doDiagram(diagram, items, GroupItems);
- }
- else {
- items.Add(group.shapes[i]);
- }
- ids.Add(group.shapes[i].uid);
- }
- GroupItems.AddRange(ids);
- }
- }
- public void doDiagram(Diagram group, List<Item> items, List<string> GroupItems)
- {
- if (group != null && group.shapes != null && group.shapes.Count > 0)
- {
- Shape htexGroup = new Shape
- {
- // type = group.type,
- type = "Sp",
- style = group.style,
- index = group.index,
- uid = group.uid,
- sid = group.sid,
- opacity = group.opacity,
- copy = group.copy,
- @lock = group.@lock,
- //link = group.link,
- // audio = group.audio,
- links= group.links,
- subName = group.subName ,
- shapeType = "rect",
- quDesc = group.quDesc,
- textBody = null,
- svg = group.svg
- };
- items.Add(htexGroup);
- List<string> ids = new List<string>();
- int len = group.shapes.Count;
- for (int i = 0; i < len; i++)
- {
- if (group.shapes[i] is Diagram diagram)
- {
- doDiagram(diagram, items, GroupItems);
- }
- else if (group.shapes[i] is Group gp)
- {
- doGroup(gp, items, GroupItems);
- }
- else
- {
- items.Add(group.shapes[i]);
- }
- ids.Add(group.shapes[i].uid);
- }
- GroupItems.AddRange(ids);
- }
- }
- }
- public class SpGrp {
- public string spid { get; set; }
- public string grpId { get; set; }
- }
- }
|