using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace TEAMModelOS.SDK.Module.PowerPointX.Model
{
    public class PPTXContainer : PPTXPosition
    {

        public PPTXContainer() {
            Paragraphs = new List<PPTXParagraph>();
            Paths = new List<PPTXPath>();
            ShapeGuides = new List<PPTXShapeGuide>();
        }
        /// <summary>
        /// p:sp
        /// </summary>
        public string Type { get; set; }

        //文字排版 横版horz  垂直vert
        public string TextLayout { get; set; } = "horz";
        //图形是否闭合
        public bool Close { get; set; } = false;
        public List<PPTXParagraph> Paragraphs{ get; set; }
        public List<PPTXPath> Paths { get; set; }
        //容器填充颜色
        public string FillColor { get; set; }
        //是否有填充色
        public bool Fill { get; set; } = true;
        //轮廓填充
        public string LineColor { get; set; }
        //效果填充
        public string EffectColor { get; set; }
        /// <summary>
        /// 换行
        /// </summary>
        public string Wrap { get; set; } = "none"; //默认不换行
        //Top Center Bottom
        public string Align { get; set; } = "Center";
        public List<PPTXShapeGuide> ShapeGuides { get; set; }

    }
    public class PPTXShapeGuide
    {
        public string Name { get; set; }
        public string Fmla { get; set; }

    }
    public class PPTXParagraph
    {
        public PPTXParagraph() {
            Texts = new List<PPTXText>();
        }
        public List<PPTXText> Texts { get; set; }

    }
    public abstract class PPTXPath
    {
        public string Type { get; set; }

    }
    //public abstract class PPTXClosePath :PPTXPath
    //{
    //    public bool Close { get; set; } = false;
    //}

    /// <summary>
    /// 起点 <a:moveTo>
    /// </summary>
    public class PPTXMoveToPath : PPTXPath
    {
        public PPTXMoveToPath()
        {
            Pts = new List<Point> { };
        }
        public List<Point> Pts { get; set; }
    }
    /// <summary>
    /// 弧形 <a:arcTo>
    /// </summary>
    public class PPTXArcToPath : PPTXPath
    {
        public string WidthRadius { get; set; }
        public string HeightRadius { get; set; }
        public string StartAngle { get; set; }
        public string SwingAngle { get; set; }
    }


    /// <summary>
    /// 画线 <a:lnTo>
    /// </summary>
    public class PPTXLineToPath : PPTXPath
    {
        public PPTXLineToPath()
        {
            Pts = new List<Point> { };
        }
        public List<Point> Pts { get; set; }
    }
    /// <summary>
    /// 三次贝塞尔曲线<a:cubicBezTo>
    /// </summary>
    public class PPTXCubicBezPath : PPTXPath
    {
        public PPTXCubicBezPath()
        {
            Pts = new List<Point> { };
        }
        public List<Point> Pts { get; set; }
    }/// <summary>
     /// 二次贝塞尔曲线  <a:quadBezTo>
     /// </summary>
    public class PPTXQuadBezPath : PPTXPath
    {
        public PPTXQuadBezPath()
        {
            Pts = new List<Point> { };
        }
        public List<Point> Pts { get; set; }
    }
 
    public class Point{
        public double X { get; set; }
        public double Y { get; set; }
    }
}
/**
 * 
 * 
accentBorderCallout1线形标注 1(带边框和强调线) 
accentBorderCallout2线形标注 2(带边框和强调线) 
accentBorderCallout3线形标注 3(带边框和强调线) 
accentCallout1线形标注 1(带强调线)
accentCallout2线形标注 2(带强调线)
accentCallout3线形标注 3(带强调线)
actionButtonBackPrevious
actionButtonBeginning
actionButtonBlank
actionButtonDocument
actionButtonEnd
actionButtonForwardNext
actionButtonHelp
actionButtonHome
actionButtonInformation
actionButtonMovie
actionButtonReturn
actionButtonSound
arc 弧形  圆弧 弧线
    <p:spPr>
        <a:xfrm>
            <a:off x="3501081" y="2183027"/>
            <a:ext cx="914400" cy="922638"/>
        </a:xfrm>
        <a:prstGeom prst="arc">
            <a:avLst>
                <a:gd name="adj1" fmla="val 16200000"/>起点 270°
                <a:gd name="adj2" fmla="val 5400000"/> 终点 90°
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
bentArrow圆角右箭头 
bentConnector2
bentConnector3肘形连接符
bentConnector4
bentConnector5
bentUpArrow直角上箭头
bevel  //棱台  TODO
      <p:spPr>
        <a:xfrm>
            <a:off x="7946899" y="367284"/>
            <a:ext cx="1042416" cy="1042416"/>
        </a:xfrm>
        <a:prstGeom prst="bevel">
            <a:avLst>
                <a:gd name="adj" fmla="val 27120"/>
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
blockArc  空心弧 TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="9140764" y="176212"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="blockArc">
            <a:avLst>
                <a:gd name="adj1" fmla="val 10800000"/> 起点180°
                <a:gd name="adj2" fmla="val 5073580"/> 终点正的84.55966666666667°
                <a:gd name="adj3" fmla="val 28026"/>  最小半径 外圆- 内圆 半径 
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
borderCallout1线形标注 1
borderCallout2线形标注 2
borderCallout3线形标注 3
bracePair
bracketPair
callout1线形标注 1(无边框)
callout2线形标注 2(无边框) 
callout3线形标注 3(无边框)
can  //圆柱型  TODO暂不解析
     <p:spPr>
        <a:xfrm>
            <a:off x="5674519" y="3104293"/>
            <a:ext cx="914400" cy="1216152"/>
        </a:xfrm>
        <a:prstGeom prst="can">
            <a:avLst>
                <a:gd name="adj" fmla="val 57292"/>
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
chartPlus
chartStar
chartX
chevron燕尾形 长：3：1  左边缺一个单位的三角形 右边多一个单位三角形
chord  弦形
<p:nvSpPr>
    <p:cNvPr id="2" name="弦形 1"/>
    <p:cNvSpPr/>
    <p:nvPr/>
</p:nvSpPr>
<p:spPr>
    <a:xfrm>
        <a:off x="3220995" y="2413686"/>
        <a:ext cx="914400" cy="914400"/>
    </a:xfrm>
    <a:prstGeom prst="chord">
        <a:avLst>                                   默认16200000  ---> 0
            <a:gd name="adj1" fmla="val 21566571"/>   start 弧度：x=adj1/21600000*360
            <a:gd name="adj2" fmla="val 16200000"/>     end 弧度：x=adj2/21600000*360 
        </a:avLst>
    </a:prstGeom>
</p:spPr>
circularArrow环形箭头
cloud  云形 宽高比例拉伸
cloudCallout云形标注 
corner
    L 形
    <p:spPr>
        <a:xfrm>
            <a:off x="7554097" y="4349578"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="corner">
            <a:avLst>
                <a:gd name="adj1" fmla="val 35586"/>
                <a:gd name="adj2" fmla="val 100000"/>  百分比  默认  50000 50000
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
cornerTabs
cube  //立方体 TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="4369594" y="4838700"/>
            <a:ext cx="1304925" cy="1530477"/>
        </a:xfrm>
        <a:prstGeom prst="cube">
            <a:avLst>
                <a:gd name="adj" fmla="val 50995"/> 初步对角线比例
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
curvedConnector2
curvedConnector3曲线连接符
curvedConnector4
curvedConnector5
curvedDownArrow上弧形箭头 弧形向上 箭头右下
curvedLeftArrow右弧形箭头 弧形向右 箭头向左下
curvedRightArrow左弧形箭头 弧形向左 箭头向右下
curvedUpArrow下弧形箭头 弧形向下 箭头右上
decagon  //十边形
diagStripe//斜纹 斜梯形
    <p:spPr>
        <a:xfrm>
            <a:off x="3340227" y="4895850"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="diagStripe">
            <a:avLst>
                <a:gd name="adj" fmla="val 19792"/>  最小宽度的比例 
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
diamond //菱形
dodecagon//十二边形
donut //同心圆 TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="5692346" y="4011827"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="donut">
            <a:avLst>
                <a:gd name="adj" fmla="val 49874"/>  半径比例  最小半径-val 得到内圆  外圆-内圆
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
doubleWave双波形
downArrow  下箭头
downArrowCallout下箭头标注 
ellipse //椭圆或者圆形
ellipseRibbon前凸弯带形 
ellipseRibbon2上凸弯带形 8
flowChartAlternateProcess 可选过程 圆角矩形
flowChartCollate对照 长宽2：1 两个等腰三角形 上下尖对尖
flowChartConnector接点 原型
flowChartDecision 决策  菱形
flowChartDelay 延期正方形右侧多个半圆
flowChartDisplay显示  正方形 左侧1/4高度等腰三角形 1/4右侧弧形
flowChartDocument 文档 矩形 下面部分波浪
flowChartExtract摘录  正方形里面的等腰三角形 向上
flowChartInputOutput 数据  平行四边形
flowChartInternalStorage 内部贮存 左上角横竖各一条线
flowChartMagneticDisk 磁盘 圆柱体 向上 宽高 2：1 压扁
flowChartMagneticDrum直接访问存储器 圆柱体 平躺 宽高 2：1 拉长
flowChartMagneticTape顺序访问存储器 圆形  小猪佩奇 下面多个矩形
flowChartManualInput 手动输入  矩形 上面部分向左倾斜一点 倾斜高度四分之一
flowChartManualOperation 手动操作 倒等腰梯形
flowChartMerge 合并 正方形里面的等腰三角形 向下
flowChartMultidocument 多文档 3个矩形 下面部分波浪 叠加
flowChartOfflineStorage
flowChartOffpageConnector 离页连接符 正方形 左下角右下角各缺角一边高度为四分之一，一边长为一半的的三角形
flowChartOnlineStorage存储数据  矩形  左侧多个半圆 右侧缺半圆
flowChartOr或者 圆形经过圆形 两条横竖交叉的直线
flowChartPredefinedProcess 预定义过程  矩形 左右部分各有一条竖线
flowChartPreparation 准备 六边形 上下被压缩变长2倍边
flowChartProcess  流程图  矩形
flowChartPunchedCard 卡片 矩形右上角剪角最小宽度的1/4的三角形
flowChartPunchedTape  资料带 波浪形
flowChartSort 排序 两个等腰三角形 背对背 长宽2：1
flowChartSummingJunction汇总连接 圆形经过圆形 两条斜交叉的直线
flowChartTerminator 终止 最小边半径圆角矩形
folderCorner
frame
    图文框框
    <p:spPr>
        <a:xfrm>
            <a:off x="5585255" y="733167"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="frame">
            <a:avLst>
                <a:gd name="adj1" fmla="val 14302"/>
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
funnel
gear6
gear9
halfFrame  半闭框
    <p:spPr>
        <a:xfrm>
            <a:off x="3023286" y="3797643"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="halfFrame">
            <a:avLst>
                <a:gd name="adj1" fmla="val 0"/>
                <a:gd name="adj2" fmla="val 100000"/>  百分比 默认30000 30000 
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
heart  心形  宽高拉伸
heptagon //七边形
hexagon  //六边形1060704 *96/914400=111.36
<p:spPr>
    <a:xfrm>
        <a:off x="3381375" y="1905000"/>
        <a:ext cx="1060704" cy="914400"/>
    </a:xfrm>
    <a:prstGeom prst="hexagon">
        <a:avLst>58000*2*0.96/1000
            <a:gd name="adj" fmla="val 58000"/>
            <a:gd name="vf" fmla="val 115470"/>
        </a:avLst>
    </a:prstGeom>
</p:spPr>
homePlate五边形  长高 2：1 矩形加右侧1一个宽的三角形
horizontalScroll横卷形
irregularSeal2爆炸形2
leftArrow  //左箭头
leftArrowCallout
leftBrace
leftBracket
leftCircularArrow
leftRightArrow  //左右箭头
leftRightArrowCallout左右箭头标注
leftRightCircularArrow
leftRightRibbon
irregularSeal1爆炸形1
leftRightUpArrow丁字箭头
leftUpArrow直角双向箭头 向左 向上
lightningBolt  闪电 宽高拉伸
line直接连接符 线
lineInv
mathDivide除号
mathEqual等号
mathMinus减号
mathMultiply乘号
mathNotEqual不等号
mathPlus加号
moon 新月形  TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="2693773" y="1713470"/>
            <a:ext cx="457200" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="moon">
            <a:avLst>
                <a:gd name="adj" fmla="val 87500"/>0-87500
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
nonIsoscelesTrapezoid
noSmoking  默认就行  TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="5941220" y="5314950"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="noSmoking">
            <a:avLst>
                <a:gd name="adj" fmla="val 11444"/>
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
notchedRightArrow燕尾形箭头
octagon  八边形
<p:spPr>
    <a:xfrm>
        <a:off x="5219700" y="1671638"/>
        <a:ext cx="914400" cy="914400"/>
    </a:xfrm>
    <a:prstGeom prst="octagon">
        <a:avLst>
            <a:gd name="adj" fmla="val 39705"/>  //TODO
        </a:avLst>
    </a:prstGeom>
</p:spPr>
parallelogram //平行四边形   
     <a:avLst>
    <a:gd name="adj" fmla="val 128833"/>  val*0.96/1000 得到像素
    </a:avLst>
pentagon  //正五边形  宽高决定形变
pie //饼图  21600000   16200000    默认16200000  ---> 0
    <p:spPr>
        <a:xfrm>
            <a:off x="3381373" y="952499"/>
            <a:ext cx="1726085" cy="1726085"/>
        </a:xfrm>
        <a:prstGeom prst="pie">
            <a:avLst> 16200000/21600000 =3/4  
                <a:gd name="adj1" fmla="val 21600000"/>     start 弧度：x=adj1/21600000*360
                <a:gd name="adj2" fmla="val 10800000"/>     end   弧度：x=adj2/21600000*360
            </a:avLst>
        </a:prstGeom>
    </p:spPr>

pieWedge
plaque 缺角圆角矩形
    <p:spPr>
        <a:xfrm>
            <a:off x="6597013" y="1778125"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="plaque">
            <a:avLst>
                <a:gd name="adj" fmla="val 37500"/> 最小边0-50 比例 作为缺角半径
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
plaqueTabs
plus 十字加形
    <p:spPr>
        <a:xfrm>
            <a:off x="6520053" y="419100"/>
            <a:ext cx="1085850" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="plus">
            <a:avLst>
                <a:gd name="adj" fmla="val 31250"/> 最小边比例  0-50
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
quadArrow
    十字箭头  TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="1658493" y="132778"/>
            <a:ext cx="1216152" cy="1216152"/>
        </a:xfrm>
        <a:prstGeom prst="quadArrow">
            <a:avLst>
                <a:gd name="adj1" fmla="val 13101"/>
                <a:gd name="adj2" fmla="val 14668"/>
                <a:gd name="adj3" fmla="val 22500"/>
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
quadArrowCallout十字箭头标注
rect  矩形
ribbon前凸带形 
ribbon2上凸带形 6"
rightArrow
    右箭头
    <p:spPr>
        <a:xfrm>
            <a:off x="1466335" y="2702011"/>
            <a:ext cx="978408" cy="484632"/>
        </a:xfrm>
        <a:prstGeom prst="rightArrow">
            <a:avLst>
                <a:gd name="adj1" fmla="val 100000"/>   控制粗细  粗细的百分比=val/100000 *cy
                <a:gd name="adj2" fmla="val 201887"/>   控制箭头长短  粗细的百分比=val/100000 *cy
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
rightArrowCallout右箭头标注
rightBrace
rightBracket
round1Rect单圆角矩形
<p:spPr>
<a:xfrm>
<a:off x="742949" y="3971926"/>
<a:ext cx="1247775" cy="914400"/>
</a:xfrm>
<a:prstGeom prst="round1Rect">
<a:avLst>
<a:gd name="adj" fmla="val 50000"/>  右上角圆角缺角 0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
round2DiagRect 对角圆角矩形 
    <p:spPr>
<a:xfrm>
<a:off x="4481513" y="3971926"/>
<a:ext cx="914400" cy="914400"/>
</a:xfrm>
<a:prstGeom prst="round2DiagRect">
<a:avLst>
<a:gd name="adj1" fmla="val 50000"/> 左上角 右下角 圆角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
<a:gd name="adj2" fmla="val 20833"/> 右上角 左下角 圆角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
round2SameRect 同侧圆角矩形
<p:spPr>
<a:xfrm>
<a:off x="2724150" y="3971926"/>
<a:ext cx="1371600" cy="914400"/>
</a:xfrm>
<a:prstGeom prst="round2SameRect">
<a:avLst>
<a:gd name="adj1" fmla="val 31250"/> 上侧圆角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
<a:gd name="adj2" fmla="val 50000"/> 下侧圆角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
roundRect  圆角矩形
<p:spPr>
<a:xfrm>
<a:off x="2647950" y="1085848"/>
<a:ext cx="1685925" cy="828675"/>
</a:xfrm>
<a:prstGeom prst="roundRect">   
<a:avLst>
<a:gd name="adj" fmla="val 50000"/> 0-50000 = 50% 最小宽度的 百分比 作为半径
</a:avLst>
</a:prstGeom>
</p:spPr>
rtTriangle  //直角三角形  宽高决定形变
smileyFace  笑脸  TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="10238424" y="257175"/>
            <a:ext cx="914400" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="smileyFace">
            <a:avLst>
                <a:gd name="adj" fmla="val -4653"/> 负数哭脸  正数笑脸 
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
snip1Rect 剪去单角的矩形 右上角  0-50000 = 50% 最小宽度的 百分比作为缺角
snip2DiagRect剪去对角的矩形  
<p:spPr>
<a:xfrm>
<a:off x="2857500" y="2571750"/>
<a:ext cx="914400" cy="914400"/>
</a:xfrm>
<a:prstGeom prst="snip2DiagRect">
<a:avLst>
<a:gd name="adj1" fmla="val 32292"/> 左上角和右下角 0-50000 = 50% 最小宽度的 百分比作为缺角
<a:gd name="adj2" fmla="val 25000"/> 右上角和左下角 0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
snip2SameRect剪去同侧角的矩形
<p:spPr>
<a:xfrm>
<a:off x="742949" y="2571750"/>
<a:ext cx="1381125" cy="914400"/>
</a:xfrm>
<a:prstGeom prst="snip2SameRect">
<a:avLst>
<a:gd name="adj1" fmla="val 32292"/>  上侧 0-50000 = 50% 最小宽度的 百分比作为缺角
<a:gd name="adj2" fmla="val 50000"/>  下侧 0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
snipRoundRect 单圆角矩形
<p:spPr>
<a:xfrm>
<a:off x="4572000" y="2571750"/>
<a:ext cx="914400" cy="838200"/>
</a:xfrm>
<a:prstGeom prst="snipRoundRect">
<a:avLst>
<a:gd name="adj1" fmla="val 50000"/> 左上角圆角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
<a:gd name="adj2" fmla="val 50000"/> 右上角剪角缺角0-50000 = 50% 最小宽度的 百分比作为缺角
</a:avLst>
</a:prstGeom>
</p:spPr>
squareTabs
star10  十角星
star12  十二角星
star16  十六角星
star24  二十四角星
star32  三十二角星
star4   四角星
star5   五角星
star6   六角星
star7   七角星
star8   八角星
straightConnector1直接箭头连接符
stripedRightArrow  虚尾箭头
sun 太阳 TODO
    <p:spPr>
        <a:xfrm>
            <a:off x="7269289" y="4165855"/>
            <a:ext cx="2397635" cy="914400"/>
        </a:xfrm>
        <a:prstGeom prst="sun">
            <a:avLst>
                <a:gd name="adj" fmla="val 34375"/>12500 至 46875
            </a:avLst>
        </a:prstGeom>
    </p:spPr>
swooshArrow
teardrop  //泪滴型 暂不不解析 //TODO
trapezoid  //等腰梯形
<p:spPr>
    <a:xfrm>
        <a:off x="8953500" y="2819400"/>
        <a:ext cx="914400" cy="1216152"/>
    </a:xfrm>
    <a:prstGeom prst="trapezoid">
        <a:avLst>
            <a:gd name="adj" fmla="val 50000"/> //移动百分比  0-50  默认25    val/100000
        </a:avLst>
    </a:prstGeom>
</p:spPr>
triangle  三角形
<a:prstGeom prst="triangle">
<a:avLst>
    <a:gd name="adj" fmla="val 100000"/>  //移动百分比   默认50  0-50-100%    val/100000
</a:avLst>
</a:prstGeom>
upArrow   //上箭头
upArrowCallout
upDownArrow  上下箭头
upDownArrowCallout
uturnArrow手杖形箭头 向右调头
verticalScroll竖卷形 
wave 波浪形
wedgeEllipseCallout 椭圆形标注
wedgeRectCallout  矩形标注
wedgeRoundRectCallout 圆角矩形标注
 */
