Quellcode durchsuchen

完成矩形 圆角矩形画法

CrazyIter vor 5 Jahren
Ursprung
Commit
372e1e6500

+ 1 - 1
TEAMModelOS.Service/Models/PowerPoint/Border.cs

@@ -7,7 +7,7 @@ namespace HiTeachCC.Model.PowerPoint
     public  class Border
     {
 
-        public int Width { get; set; }
+        public double Width { get; set; }
         public string Color { get; set; }
         public string Type { get; set; }
         /// <summary>

+ 1 - 0
TEAMModelOS.Service/Services/PowerPoint/Implement/PowerPointHelper.cs

@@ -833,6 +833,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
         /// <returns></returns>
         public static string ColorToning(string nodeXml, string colorHex)
         {
+            if (string.IsNullOrEmpty(colorHex)) { return null; }
             TEAMModelOS.SDK.Helper.Common.ColorHelper.ColorConverter converter = new TEAMModelOS.SDK.Helper.Common.ColorHelper.ColorConverter();
             XmlDocument doc = new XmlDocument();
             doc.LoadXml(nodeXml);

+ 522 - 39
TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeGenerator.cs

@@ -24,6 +24,8 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 {
     public class ShapeGenerator : IShapeGenerator
     {
+
+        delegate string GenShapeDelegate(XmlNode node, string shapType, double w, double h, bool imgFillFlg, bool grndFillFlg, int shpId, string fillColor, Border border);
         private string fileShaCode { get; set; }
         private bool isDone = false;
         private List<object> MsgQueue = new List<object>();
@@ -462,7 +464,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 slideXfrmNode = slideMasterXfrmNode;
             }
             var result = "";
-            var shapType = node.GetTextByPath("p:spPr/a:prstGeom/@prst");
+            var shapeType = node.GetTextByPath("p:spPr/a:prstGeom/@prst");
             var custShapType = node.GetTextByPath("p:spPr/a:custGeom");
 
             var isFlipV = 0;
@@ -489,14 +491,22 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             {
                 txtRotate = rotate;
             }
-            if (shapType != null || custShapType != null)
+            Position position = ShapeHelper.GetPosition(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode);
+            position.Rot = rotate;
+            position.FlipH = isFlipH;
+            position.FlipV = isFlipV;
+            var grndFillFlg = false;
+            var imgFillFlg = false;
+            var Fill = await GetShapeFill(node, warpObj);
+            // Border Color
+            var shapeBorder = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent);
+            var headEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:headEnd");
+            var tailEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:tailEnd");
+            if (shapeType != null || custShapType != null)
             {
 
 
-                Position position = ShapeHelper.GetPosition(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode);
-                position.Rot = rotate;
-                position.FlipH = isFlipH;
-                position.FlipV = isFlipV;
+               
 
                 //result += "<svg class='drawing' _id='" + id + "' _idx='" + idx + "' _type='" + type + "' _name='" + name +
                 //        "' style='" +
@@ -507,9 +517,8 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                 //            "'>";
                 //result += "<defs>";
                 // Fill Color
-                var Fill = await GetShapeFill(node, warpObj);
-                var grndFillFlg = false;
-                var imgFillFlg = false;
+               
+              
                 var clrFillType = ShapeHelper.GetFillType(node.GetTextByPath("p:spPr"));
                 /////////////////////////////////////////                    
                 if (clrFillType == "GRADIENT_FILL")
@@ -520,6 +529,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
 
                     var svgGrdnt = ShapeHelper.GetSvgGradient(position.Cx, position.Cy, angl, color_arry, order, slideLayoutClrOvride, warpObj.themeContent);
                     //fill="url(#linGrd)"
+                    Fill.SvgText = svgGrdnt;
                     result += svgGrdnt;
                 }
                 else if (clrFillType == "PIC_FILL")
@@ -528,6 +538,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     var svgBgImg = ShapeHelper.GetSvgImagePattern(Fill.Image, order);
                     //fill="url(#imgPtrn)"
                     //console.log(svgBgImg)
+                    Fill.SvgText = svgBgImg;
                     result += svgBgImg;
                 }
                 else
@@ -536,336 +547,793 @@ namespace HiTeachCC.Service.PowerPoint.Implement
                     {
                         Fill.HtmlText = "none";
                     }
-                    if (shapType != null)
+                    if (shapeType != null)
                     {
-                        if (shapType.Value == "arc" ||
-                            shapType.Value == "bracketPair" ||
-                            shapType.Value == "bracePair" ||
-                            shapType.Value == "leftBracket" ||
-                            shapType.Value == "leftBrace" ||
-                            shapType.Value == "rightBrace" ||
-                            shapType.Value == "rightBracket")
+                        if (shapeType.Value == "arc" ||
+                            shapeType.Value == "bracketPair" ||
+                            shapeType.Value == "bracePair" ||
+                            shapeType.Value == "leftBracket" ||
+                            shapeType.Value == "leftBrace" ||
+                            shapeType.Value == "rightBrace" ||
+                            shapeType.Value == "rightBracket")
                             { //Temp. solution  - TODO
                                 Fill.HtmlText = "none";
                             }
                     }
 
                 }
-                // Border Color
-                var border = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.themeContent);
-
-                var headEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:headEnd");
-                var tailEndNodeAttrs = node.GetTextByPath("p:spPr/a:ln/a:tailEnd");
+              
                 // type: none, triangle, stealth, diamond, oval, arrow
 
                 if ((headEndNodeAttrs != null && (headEndNodeAttrs.GetTextByPath("@type").Value == "triangle" || (headEndNodeAttrs.GetTextByPath("@type").Value == "arrow")) ||
                     (tailEndNodeAttrs != null && (tailEndNodeAttrs.GetTextByPath("@type").Value == "triangle" || (tailEndNodeAttrs.GetTextByPath("@type").Value == "arrow")))))
                 {
-                    var triangleMarker = "<marker id='markerTriangle_" + order + "' viewBox='0 0 10 10' refX='1' refY='5' markerWidth='5' markerHeight='5' stroke='" + border.Color + "' fill='" + border.Color +
+                    var triangleMarker = "<marker id='markerTriangle_" + order + "' viewBox='0 0 10 10' refX='1' refY='5' markerWidth='5' markerHeight='5' stroke='" + shapeBorder.Color + "' fill='" + shapeBorder.Color +
                                     "' orient='auto-start-reverse' markerUnits='strokeWidth'><path d='M 0 0 L 10 5 L 0 10 z' /></marker>";
                     result += triangleMarker;
                 }
                 result += "</defs>";
             }
 
-            if (shapType != null && custShapType == null) {
-                switch (shapType.Value) {
-                    case "rect":
+            if (shapeType != null && custShapType == null) {
+                string shapType = shapeType.Value;
+                double w = position.Cx;
+                double h = position.Cy;
+                GenShapeDelegate genShapeDelegate;
+                string resultSvg ;
+                Border border = new Border
+                {
+                    Type = shapeBorder.Type,
+                    Width = shapeBorder.Width,
+                    Stroke = shapeBorder.Stroke,
+                    Color = shapeBorder.Color,
+                };
+                if (string.IsNullOrEmpty(shapeBorder.Color)) {
+                    border.Color = "FFFFFF";
+                }
+                string fillColor = "#" + Fill.Color;
+                switch (shapType) {
+                    case "rect":  //√
+                        genShapeDelegate = ShapeSvg.Rect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg,order, fillColor, border);
+                        break;
                     case "flowChartProcess":
+                        genShapeDelegate = ShapeSvg.FlowChartProcess;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartPredefinedProcess":
+                        genShapeDelegate = ShapeSvg.FlowChartInternalStorage;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartInternalStorage":
+                        genShapeDelegate = ShapeSvg.FlowChartInternalStorage;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "actionButtonBlank":
+                        genShapeDelegate = ShapeSvg.ActionButtonBlank;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartCollate":
+                        genShapeDelegate = ShapeSvg.FlowChartCollate;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartDocument":
+                        genShapeDelegate = ShapeSvg.FlowChartDocument;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartMultidocument":
+                        genShapeDelegate = ShapeSvg.FlowChartMultidocument;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonBackPrevious":
+                        genShapeDelegate = ShapeSvg.ActionButtonBackPrevious;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonBeginning":
+                        genShapeDelegate = ShapeSvg.ActionButtonBeginning;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonDocument":
+                        genShapeDelegate = ShapeSvg.ActionButtonDocument;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonEnd":
+                        genShapeDelegate = ShapeSvg.ActionButtonEnd;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
-                    case "actionButtonForwardNext": 
+                    case "actionButtonForwardNext":
+                        genShapeDelegate = ShapeSvg.ActionButtonForwardNext;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonHelp":
+                        genShapeDelegate = ShapeSvg.ActionButtonHelp;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonHome":
+                        genShapeDelegate = ShapeSvg.ActionButtonHome;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonInformation":
+                        genShapeDelegate = ShapeSvg.ActionButtonInformation;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonMovie":
+                        genShapeDelegate = ShapeSvg.ActionButtonMovie;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
-                    case "actionButtonReturn": 
+                    case "actionButtonReturn":
+                        genShapeDelegate = ShapeSvg.ActionButtonReturn;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "actionButtonSound":
+                        genShapeDelegate = ShapeSvg.ActionButtonSound;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "irregularSeal1":
+                        genShapeDelegate = ShapeSvg.IrregularSeal1;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "irregularSeal2":
+                        genShapeDelegate = ShapeSvg.IrregularSeal2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartTerminator":
+                        genShapeDelegate = ShapeSvg.FlowChartTerminator;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartPunchedTape":
+                        genShapeDelegate = ShapeSvg.FlowChartPunchedTape;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartOnlineStorage":
+                        genShapeDelegate = ShapeSvg.FlowChartOnlineStorage;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartDisplay":
+                        genShapeDelegate = ShapeSvg.FlowChartDisplay;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartDelay":
+                        genShapeDelegate = ShapeSvg.FlowChartDelay;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "flowChartMagneticTape":
+                        genShapeDelegate = ShapeSvg.FlowChartMagneticTape;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "ellipse":
+                        genShapeDelegate = ShapeSvg.Ellipse;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartConnector":
+                        genShapeDelegate = ShapeSvg.FlowChartConnector;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartSummingJunction":
+                        genShapeDelegate = ShapeSvg.FlowChartSummingJunction;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartOr":
+                        genShapeDelegate = ShapeSvg.FlowChartOr;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "roundRect":
+                        genShapeDelegate = ShapeSvg.RoundRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "round1Rect":
+                        genShapeDelegate = ShapeSvg.Round1Rect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "round2DiagRect":
+                        genShapeDelegate = ShapeSvg.Round2DiagRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "round2SameRect":
+                        genShapeDelegate = ShapeSvg.Round2SameRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "snip1Rect":
+                        genShapeDelegate = ShapeSvg.Snip1Rect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "snip2DiagRect":
+                        genShapeDelegate = ShapeSvg.Snip2DiagRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "snip2SameRect":
+                        genShapeDelegate = ShapeSvg.Snip2SameRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartAlternateProcess":
+                        genShapeDelegate = ShapeSvg.FlowChartAlternateProcess;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartPunchedCard":
+                        genShapeDelegate = ShapeSvg.FlowChartPunchedCard;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "snipRoundRect":
+                        genShapeDelegate = ShapeSvg.SnipRoundRect;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bentConnector2":
+                        resultSvg = ShapeSvg. BentConnector2(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border ,headEndNodeAttrs,tailEndNodeAttrs);
                         break;
                     case "rtTriangle":
+                        genShapeDelegate = ShapeSvg.RtTriangle;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "triangle":
+                        genShapeDelegate = ShapeSvg.Triangle;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartExtract":
+                        genShapeDelegate = ShapeSvg.FlowChartExtract;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartMerge":
+                        genShapeDelegate = ShapeSvg.FlowChartMerge;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "diamond":
+                        genShapeDelegate = ShapeSvg.Diamond;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartDecision":
+                        genShapeDelegate = ShapeSvg.FlowChartDecision;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartSort":
+                        genShapeDelegate = ShapeSvg.FlowChartSort;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "trapezoid":
+                        genShapeDelegate = ShapeSvg.Trapezoid;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartManualOperation":
-                    case "flowChartManualInput":
+                        genShapeDelegate = ShapeSvg.FlowChartManualOperation;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
+                    case "flowChartManualInput":
+                        genShapeDelegate = ShapeSvg.FlowChartManualInput;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break; 
                     case "parallelogram":
-                    case "flowChartInputOutput":
+                        genShapeDelegate = ShapeSvg.Parallelogram;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
+                    case "flowChartInputOutput":
+                        genShapeDelegate = ShapeSvg.FlowChartInputOutput;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break; 
                     case "pentagon":
+                        genShapeDelegate = ShapeSvg.Pentagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "hexagon":
+                        genShapeDelegate = ShapeSvg.Hexagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartPreparation":
+                        genShapeDelegate = ShapeSvg.FlowChartPreparation;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "heptagon":
+                        genShapeDelegate = ShapeSvg.Heptagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "octagon":
+                        genShapeDelegate = ShapeSvg.Octagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "decagon":
+                        genShapeDelegate = ShapeSvg.Decagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "dodecagon":
+                        genShapeDelegate = ShapeSvg.Dodecagon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "star4":
+                        genShapeDelegate = ShapeSvg.Star4;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star5":
+                        genShapeDelegate = ShapeSvg.Star5;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star6":
+                        genShapeDelegate = ShapeSvg.Star6;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star7":
+                        genShapeDelegate = ShapeSvg.Star7;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star8":
+                        genShapeDelegate = ShapeSvg.Star8;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star10":
+                        genShapeDelegate = ShapeSvg.Star10;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star12":
+                        genShapeDelegate = ShapeSvg.Star12;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star16":
+                        genShapeDelegate = ShapeSvg.Star16;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star24":
+                        genShapeDelegate = ShapeSvg.Star24;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "star32":
+                        genShapeDelegate = ShapeSvg.Star32;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "pie":
+                        genShapeDelegate = ShapeSvg.Pie;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "pieWedge":
+                        genShapeDelegate = ShapeSvg.PieWedge;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "arc":
+                        genShapeDelegate = ShapeSvg.Arc;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "chord":
+                        genShapeDelegate = ShapeSvg.Chord;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "frame":
+                        genShapeDelegate = ShapeSvg.Frame;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "donut":
+                        genShapeDelegate = ShapeSvg.Donut;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "noSmoking":
+                        genShapeDelegate = ShapeSvg.NoSmoking;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "halfFrame":
+                        genShapeDelegate = ShapeSvg.HalfFrame;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "blockArc":
+                        genShapeDelegate = ShapeSvg.BlockArc;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bracePair":
+                        genShapeDelegate = ShapeSvg.BracePair;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftBrace":
+                        genShapeDelegate = ShapeSvg.LeftBrace;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "rightBrace":
+                        genShapeDelegate = ShapeSvg.RightBrace;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bracketPair":
+                        genShapeDelegate = ShapeSvg.BracketPair;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftBracket":
+                        genShapeDelegate = ShapeSvg.LeftBracket;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "rightBracket":
+                        genShapeDelegate = ShapeSvg.RightBracket;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "moon":
+                        genShapeDelegate = ShapeSvg.Moon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "corner":
+                        genShapeDelegate = ShapeSvg.Corner;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "diagStripe":
+                        genShapeDelegate = ShapeSvg.DiagStripe;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "gear6":
+                        genShapeDelegate = ShapeSvg.Gear6;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "gear9":
+                        genShapeDelegate = ShapeSvg.Gear9;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bentConnector3":
+                        resultSvg = ShapeSvg.BentConnector3(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
                         break;
                     case "plus":
+                        genShapeDelegate = ShapeSvg.Plus;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "teardrop":
+                        genShapeDelegate = ShapeSvg.Teardrop;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "plaque":
+                        genShapeDelegate = ShapeSvg.Plaque;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "sun":
+                        genShapeDelegate = ShapeSvg.Sun;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "heart":
+                        genShapeDelegate = ShapeSvg.Heart;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "lightningBolt":
+                        genShapeDelegate = ShapeSvg.LightningBolt;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "cube":
+                        genShapeDelegate = ShapeSvg.Cube;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bevel":
+                        genShapeDelegate = ShapeSvg.Bevel;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "foldedCorner":
+                        genShapeDelegate = ShapeSvg.FoldedCorner;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "cloud":
+                        genShapeDelegate = ShapeSvg.Cloud;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "cloudCallout":
+                        genShapeDelegate = ShapeSvg.CloudCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "smileyFace":
+                        genShapeDelegate = ShapeSvg.SmileyFace;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "verticalScroll":
+                        genShapeDelegate = ShapeSvg.VerticalScroll;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "horizontalScroll":
+                        genShapeDelegate = ShapeSvg.HorizontalScroll;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "wedgeEllipseCallout":
+                        genShapeDelegate = ShapeSvg.WedgeEllipseCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "wedgeRectCallout":
+                        genShapeDelegate = ShapeSvg.WedgeRectCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "wedgeRoundRectCallout":
+                        genShapeDelegate = ShapeSvg.WedgeRoundRectCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "accentBorderCallout1":
+                        genShapeDelegate = ShapeSvg.AccentBorderCallout1;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "accentBorderCallout2":
+                        genShapeDelegate = ShapeSvg.AccentBorderCallout2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "accentBorderCallout3":
+                        genShapeDelegate = ShapeSvg.AccentBorderCallout3;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "borderCallout1":
+                        genShapeDelegate = ShapeSvg.BorderCallout1;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "borderCallout2":
+                        genShapeDelegate = ShapeSvg.BorderCallout2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "borderCallout3":
+                        genShapeDelegate = ShapeSvg.BorderCallout3;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "accentCallout1":
+                        genShapeDelegate = ShapeSvg.AccentCallout1;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "accentCallout2":
+                        genShapeDelegate = ShapeSvg.AccentCallout2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "accentCallout3":
+                        genShapeDelegate = ShapeSvg.AccentCallout3;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "callout1":
+                        genShapeDelegate = ShapeSvg.Callout1;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "callout2":
-                    case "callout3":
+                        genShapeDelegate = ShapeSvg.Callout2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
-                    case "leftRightRibbon": 
+                    case "callout3":
+                        genShapeDelegate = ShapeSvg.Callout3;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break; 
+                    case "leftRightRibbon":
+                        genShapeDelegate = ShapeSvg.LeftRightRibbon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "ribbon":
+                        genShapeDelegate = ShapeSvg.Ribbon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "ribbon2":
+                        genShapeDelegate = ShapeSvg.Ribbon2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "doubleWave":
+                        genShapeDelegate = ShapeSvg.DoubleWave;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "wave":
+                        genShapeDelegate = ShapeSvg.Wave;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "ellipseRibbon":
+                        genShapeDelegate = ShapeSvg.EllipseRibbon;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "ellipseRibbon2":
+                        genShapeDelegate = ShapeSvg.EllipseRibbon2;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "line":
+                        resultSvg = ShapeSvg.Line(node, shapType, w, h,isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border,headEndNodeAttrs,tailEndNodeAttrs);
+                        break;
                     case "straightConnector1":
+                        resultSvg = ShapeSvg.StraightConnector1(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "bentConnector4":
+                        resultSvg = ShapeSvg.BentConnector4(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "bentConnector5":
+                        resultSvg = ShapeSvg.BentConnector5(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "curvedConnector2":
+                        resultSvg = ShapeSvg.CurvedConnector2(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "curvedConnector3":
+                        resultSvg = ShapeSvg.CurvedConnector3(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "curvedConnector4":
+                        resultSvg = ShapeSvg.CurvedConnector4(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
+                        break;
                     case "curvedConnector5":
+                        resultSvg = ShapeSvg.CurvedConnector5(node, shapType, w, h, isFlipV, imgFillFlg, grndFillFlg, order,fillColor, border, headEndNodeAttrs, tailEndNodeAttrs);
                         break;
                     case "rightArrow":
+                        genShapeDelegate = ShapeSvg.RightArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftArrow":
+                        genShapeDelegate = ShapeSvg.LeftArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "downArrow":
+                        genShapeDelegate = ShapeSvg.DownArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartOffpageConnector":
+                        genShapeDelegate = ShapeSvg.FlowChartOffpageConnector;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "upArrow":
+                        genShapeDelegate = ShapeSvg.UpArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftRightArrow":
+                        genShapeDelegate = ShapeSvg.LeftRightArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "upDownArrow":
+                        genShapeDelegate = ShapeSvg.UpDownArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "quadArrow":
+                        genShapeDelegate = ShapeSvg.QuadArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftRightUpArrow":
+                        genShapeDelegate = ShapeSvg.LeftRightUpArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftUpArrow":
+                        genShapeDelegate = ShapeSvg.LeftUpArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bentUpArrow":
+                        genShapeDelegate = ShapeSvg.BentUpArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "bentArrow":
+                        genShapeDelegate = ShapeSvg.BentArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "uturnArrow":
+                        genShapeDelegate = ShapeSvg.UturnArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "stripedRightArrow":
+                        genShapeDelegate = ShapeSvg.StripedRightArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "notchedRightArrow":
+                        genShapeDelegate = ShapeSvg.NotchedRightArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "homePlate":
+                        genShapeDelegate = ShapeSvg.HomePlate;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "chevron":
+                        genShapeDelegate = ShapeSvg.Chevron;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "rightArrowCallout":
+                        genShapeDelegate = ShapeSvg.RightArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "downArrowCallout":
+                        genShapeDelegate = ShapeSvg.DownArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftArrowCallout":
+                        genShapeDelegate = ShapeSvg.LeftArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "upArrowCallout":
+                        genShapeDelegate = ShapeSvg.UpArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftRightArrowCallout":
+                        genShapeDelegate = ShapeSvg.LeftRightArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "quadArrowCallout":
+                        genShapeDelegate = ShapeSvg.QuadArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "curvedDownArrow":
+                        genShapeDelegate = ShapeSvg.CurvedDownArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "curvedLeftArrow":
+                        genShapeDelegate = ShapeSvg.CurvedLeftArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "curvedRightArrow":
+                        genShapeDelegate = ShapeSvg.CurvedRightArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "curvedUpArrow":
+                        genShapeDelegate = ShapeSvg.CurvedUpArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "mathDivide":
+                        genShapeDelegate = ShapeSvg.MathDivide;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "mathEqual":
+                        genShapeDelegate = ShapeSvg.MathEqual;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "mathMinus":
+                        genShapeDelegate = ShapeSvg.MathMinus;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "mathMultiply":
+                        genShapeDelegate = ShapeSvg.MathMultiply;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "mathNotEqual":
+                        genShapeDelegate = ShapeSvg.MathNotEqual;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "mathPlus":
+                        genShapeDelegate = ShapeSvg.MathPlus;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "can":
+                        genShapeDelegate = ShapeSvg.Can;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartMagneticDisk":
+                        genShapeDelegate = ShapeSvg.FlowChartMagneticDisk;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartMagneticDrum":
+                        genShapeDelegate = ShapeSvg.FlowChartMagneticDrum;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "swooshArrow":
+                        genShapeDelegate = ShapeSvg.SwooshArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "circularArrow":
+                        genShapeDelegate = ShapeSvg.CircularArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftCircularArrow":
+                        genShapeDelegate = ShapeSvg.LeftCircularArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     case "leftRightCircularArrow":
+                        genShapeDelegate = ShapeSvg.LeftRightCircularArrow;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "chartPlus":
+                        genShapeDelegate = ShapeSvg.ChartPlus;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "chartStar":
+                        genShapeDelegate = ShapeSvg.ChartStar;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "chartX":
+                        genShapeDelegate = ShapeSvg.ChartX;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "cornerTabs":
+                        genShapeDelegate = ShapeSvg.CornerTabs;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "flowChartOfflineStorage":
+                        genShapeDelegate = ShapeSvg.FlowChartOfflineStorage;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "folderCorner":
+                        genShapeDelegate = ShapeSvg.FolderCorner;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "funnel":
+                        genShapeDelegate = ShapeSvg.Funnel;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "lineInv":
+                        genShapeDelegate = ShapeSvg.LineInv;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "nonIsoscelesTrapezoid":
+                        genShapeDelegate = ShapeSvg.NonIsoscelesTrapezoid;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "plaqueTabs":
+                        genShapeDelegate = ShapeSvg.PlaqueTabs;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "squareTabs":
+                        genShapeDelegate = ShapeSvg.SquareTabs;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
+                        break;
                     case "upDownArrowCallout":
+                        genShapeDelegate = ShapeSvg.UpDownArrowCallout;
+                        resultSvg = genShapeDelegate(node, shapType, w, h, imgFillFlg, grndFillFlg, order,fillColor, border);
                         break;
                     default:
                         break;
@@ -1116,14 +1584,16 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             //Fill Type:
             //console.log("ShapeFill: ", node)
             var fillType = ShapeHelper.GetFillType(node.GetTextByPath("p:spPr"));
-            Fill fill = new Fill();
+            Fill fill =null;
             //0
             if (fillType == "NO_FILL")
             {
-                fill.SvgText = "node";
-                fill.Type = 0;
-                fill.HtmlText = "background-color: initial;";
-                return fill;
+                fill = new Fill
+                {
+                    Type = 0,
+                    HtmlText = "background-color: initial;",
+                    SvgText = "node"
+                };
                 //return isSvgMode ? "none" : "background-color: initial;";
             }
             //1纯色填充
@@ -1131,7 +1601,11 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             {
                 XmlNode shpFill = node.GetTextByPath("p:spPr/a:solidFill");// node["p:spPr"]["a:solidFill"];
                 string color = ShapeHelper.GetSolidFill(shpFill, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent);
-                return new Fill { Type = 1, Color = color };
+                fill = new Fill
+                {
+                    Type = 1,
+                    Color = color,
+                };
             }
             //2渐变色填充
             else if (fillType == "GRADIENT_FILL")
@@ -1172,7 +1646,16 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             if (fill == null)
             {
                 var clrName = node.GetTextByPath("p:style/a:fillRef");
+                if (clrName != null) {
+                    fillType = "SOLID_FILL";
+                }
                 string color = ShapeHelper.GetSolidFill(clrName, slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent);
+                color= PowerPointHelper.ColorToning(clrName.OuterXml,color);
+                fill = new Fill
+                {
+                    Type = 1,
+                    Color = color,
+                };
             }
 
             if (fill != null)
@@ -1334,7 +1817,7 @@ namespace HiTeachCC.Service.PowerPoint.Implement
             }
             Fill fill = await GetShapeFill(node, warpObj);
             media.Fill = fill;
-            Border border = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.themeContent);
+            Border border = ShapeHelper.GetBorder(node, true, "shape", slideLayoutClrOvride, warpObj.slideMasterContent, warpObj.themeContent);
             media.Border = border;
             Position position = ShapeHelper.GetPosition(xfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode);
             media.Position = position;

+ 218 - 186
TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeHelper.cs

@@ -14,185 +14,216 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
     {
         private const double px96 = 96.00, px72 = 72.00, px914400 = 914400.00, px12700 = 12700.00;
         private const double rot60000 = 60000.00;
-        public static Border GetBorder(XmlNode node, bool isSvgMode, string bType, Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
+        public static Border GetBorder(XmlNode node, bool isSvgMode, string bType, Dictionary<string, string> slideLayoutClrOvride, XmlNode slideMasterContent ,  XmlNode themeContent)
         {
-
-            Border border = new Border();
+            var borderWidth = 0.0;
+            if (node.Name.Equals("p:cxnSp"))
+            {
+                borderWidth = 0.75;
+            }
+            Border border = new Border() { Width = borderWidth };
            
-                string cssText = "";
-                XmlNode lineNode = null;
-                if (bType == "shape")
-                {
-                    cssText = "border: ";
-                    lineNode = node.GetTextByPath( "p:spPr/a:ln");// node["p:spPr"]["a:ln"];
-                }
-                else if (bType == "text")
-                {
-                    cssText = "";
-                    lineNode = PowerPointHelper.GetTextByPath(node, "a:rPr/a:ln");// node["a:rPr"]["a:ln"];
+            XmlNode lineNode = null;
+            if (bType == "shape")
+            {
+               // cssText = "border: ";
+                lineNode = node.GetTextByPath("p:spPr/a:ln");// node["p:spPr"]["a:ln"];
+            }
+            else if (bType == "text")
+            {
+              //  cssText = "";
+                lineNode = PowerPointHelper.GetTextByPath(node, "a:rPr/a:ln");// node["a:rPr"]["a:ln"];
 
-                }
-                if (lineNode == null)
-                {
-                    return null;
-                }
-                var borderWidth = 0.0;
+            }
+            if (lineNode != null)
+            {
                 XmlNode wnode = lineNode.GetTextByPath("@w");
                 if (wnode != null)
                 {
-                    borderWidth = double.Parse(wnode.Value) / px12700;
+                    border.Width = double.Parse(wnode.Value) / px12700;
                 }
                 // Border width: 1pt = 12700, default = 0.75pt
                 //  borderWidth = double.Parse(PowerPointHelper.GetTextByPath(lineNode, "@w").Value) / px12700;
-                if (wnode != null || borderWidth < 1)
-                {
-                    cssText += "0pt ";
-                }
-                else
-                {
-                    cssText += borderWidth + "pt ";
-                }
-                // Border type
-                var borderType = PowerPointHelper.GetTextByPath(lineNode, "a:prstDash/@val");
-                var strokeDasharray = "0";
-            if (borderType != null) { 
-                switch (borderType.Value)
-                {
-                    case "solid":
-                        cssText += "solid";
-                        strokeDasharray = "0";
-                        break;
-                    case "dash":
-                        cssText += "dashed";
-                        strokeDasharray = "5";
-                        break;
-                    case "dashDot":
-                        cssText += "dashed";
-                        strokeDasharray = "5, 5, 1, 5";
-                        break;
-                    case "dot":
-                        cssText += "dotted";
-                        strokeDasharray = "1, 5";
-                        break;
-                    case "lgDash":
-                        cssText += "dashed";
-                        strokeDasharray = "10, 5";
-                        break;
-                    case "lgDashDotDot":
-                        cssText += "dashed";
-                        strokeDasharray = "10, 5, 1, 5, 1, 5";
-                        break;
-                    case "sysDash":
-                        cssText += "dashed";
-                        strokeDasharray = "5, 2";
-                        break;
-                    case "sysDashDot":
-                        cssText += "dashed";
-                        strokeDasharray = "5, 2, 1, 5";
-                        break;
-                    case "sysDashDotDot":
-                        cssText += "dashed";
-                        strokeDasharray = "5, 2, 1, 5, 1, 5";
-                        break;
-                    case "sysDot":
-                        cssText += "dotted";
-                        strokeDasharray = "2, 5";
-                        break;
-                    case null:
-                    //console.log(borderType);
-                    default:
-                        cssText += "solid";
-                        strokeDasharray = "0";
-                        break;
-                }
+                //if (wnode != null || borderWidth < 1)
+                //{
+                //    cssText += "0pt ";
+                //}
+                //else
+                //{
+                //    borderWidth=
+                //    cssText += borderWidth + "pt ";
+                //}
             }
-            // Border color
-                string borderColorstr = "";
-                var borderColor = PowerPointHelper.GetTextByPath(lineNode, "a:solidFill/a:srgbClr/@val");
-                if (borderColor == null)
-                {
-                    var schemeClrNode = PowerPointHelper.GetTextByPathList(lineNode, "a:solidFill/a:schemeClr");
-                    if (schemeClrNode != null)
-                    {
-                        var schemeClr = PowerPointHelper.GetTextByPath(lineNode, "a:solidFill/a:schemeClr/@val");
-                    borderColorstr = GetSchemeColorFromTheme(schemeClr.Value, null ,slideLayoutClrOvride,themeContent);
-                    }
-                }
 
-                // 2. drawingML namespace
-                if (borderColor == null)
+            // Border type
+            if (lineNode != null)
+            {
+                var borderType = PowerPointHelper.GetTextByPath(lineNode, "a:prstDash/@val");
+                if (borderType != null)
                 {
-                    var schemeClrNode = PowerPointHelper.GetTextByPathList(node, "p:style/a:lnRef/a:schemeClr");
-                    if (schemeClrNode != null)
+                    switch (borderType.Value)
                     {
-                        var schemeClr = PowerPointHelper.GetTextByPath(node, "p:style/a:lnRef/a:schemeClr/@val");
-                        if (schemeClr != null) {
-                            borderColorstr = GetSchemeColorFromTheme(schemeClr.Value, null, slideLayoutClrOvride, themeContent);
-                        }
+                        case "solid":
+                            border.Type = "solid";
+                            border.Stroke = "0";
+                            break;
+                        case "dash":
+                            border.Type += "dashed";
+                            border.Stroke = "5";
+                            break;
+                        case "dashDot":
+                            border.Type = "dashed";
+                            border.Stroke = "5, 5, 1, 5";
+                            break;
+                        case "dot":
+                            border.Type = "dotted";
+                            border.Stroke = "1, 5";
+                            break;
+                        case "lgDash":
+                            border.Type = "dashed";
+                            border.Stroke = "10, 5";
+                            break;
+                        case "lgDashDotDot":
+                            border.Type = "dashed";
+                            border.Stroke = "10, 5, 1, 5, 1, 5";
+                            break;
+                        case "sysDash":
+                            border.Type = "dashed";
+                            border.Stroke = "5, 2";
+                            break;
+                        case "sysDashDot":
+                            border.Type = "dashed";
+                            border.Stroke = "5, 2, 1, 5";
+                            break;
+                        case "sysDashDotDot":
+                            border.Type = "dashed";
+                            border.Stroke = "5, 2, 1, 5, 1, 5";
+                            break;
+                        case "sysDot":
+                            border.Type = "dotted";
+                            border.Stroke = "2, 5";
+                            break;
+                        case null:
+                        //console.log(borderType);
+                        default:
+                            border.Type = "solid";
+                            border.Stroke = "0";
+                            break;
                     }
-                    if (borderColor != null)
-                    {
-                        var shade = PowerPointHelper.GetTextByPath(node, "p:style/a:lnRef/a:schemeClr/a:shade/@val");
-                        if (shade != null)
-                        {
-                            double shaded = double.Parse(shade.Value) / 100000.0;
-                            var color = ColorTranslator.FromHtml("#" + borderColor);
-                            ColorHSL colorHSL = ColorHelper.RgbToHsl(new ColorRGB(color.R, color.G, color.B));
-                            colorHSL.L = colorHSL.L * shaded;
-                            ColorRGB colorRGB = colorHSL.HslToRgb();
-                            borderColorstr = ColorTranslator.ToHtml(Color.FromArgb(colorRGB.R, colorRGB.G, colorRGB.B));
-                            // borderColor = color.hex.replace("#", "");
-                        }
-                    }
-
                 }
+            }
+            else {
+                border.Type = "solid";
+                border.Stroke = "0";
+            }
+            // Border color
+            string borderColorstr = "";
+            if (lineNode != null) {
+                //var borderColor = PowerPointHelper.GetTextByPath(lineNode, "a:solidFill/a:srgbClr/@val");
+                //if (borderColor == null)
+                //{
+                //    var schemeClrNode = PowerPointHelper.GetTextByPathList(lineNode, "a:solidFill/a:schemeClr");
+                //    if (schemeClrNode != null)
+                //    {
+                //        var schemeClr = PowerPointHelper.GetTextByPath(lineNode, "a:solidFill/a:schemeClr/@val");
+                //        borderColorstr = GetSchemeColorFromTheme(schemeClr.Value, null, slideLayoutClrOvride, themeContent);
+                //        borderColorstr = PowerPointHelper.ColorToning(lineNode.OuterXml, borderColorstr);
+                //    }
+                //}
 
-                if (borderColor == null)
-                {
-                    if (isSvgMode)
-                    {
-                    borderColorstr = "none";
-                    }
-                    else
-                    {
-                    borderColorstr = "#000";
-                    }
-                }
-                else
-                {
-                    borderColorstr = "#" + borderColorstr;
+                borderColorstr= GetSolidFill(lineNode, slideLayoutClrOvride, slideMasterContent, themeContent);
+                borderColorstr = PowerPointHelper.ColorToning(lineNode.OuterXml, borderColorstr);
+            }
+            
 
-                }
-                cssText += " " + borderColor + " ";
-            if (borderType != null)
+            // 2. drawingML namespace
+            if (string.IsNullOrEmpty(borderColorstr))
             {
-                if (isSvgMode)
-                {
-                    return new Border { Color = borderColorstr, Width = (int)borderWidth, Type = borderType.Value, Stroke = strokeDasharray };
+               XmlNode lnRefNode =  PowerPointHelper.GetTextByPath(node, "p:style/a:lnRef");
+                if (lnRefNode != null) {
+                    borderColorstr = GetSolidFill(lnRefNode, slideLayoutClrOvride, slideMasterContent, themeContent);
+                    borderColorstr = PowerPointHelper.ColorToning(lnRefNode.OuterXml, borderColorstr);
                 }
-                else
-                {
-                    return border;
-                }
-            }
-            else {
+                //var schemeClrNode = PowerPointHelper.GetTextByPathList(node, "p:style/a:lnRef/a:schemeClr");
+                //if (schemeClrNode != null)
+                //{
+                //    var schemeClr = PowerPointHelper.GetTextByPath(node, "p:style/a:lnRef/a:schemeClr/@val");
+                //    if (schemeClr != null)
+                //    {
+                //        borderColorstr = GetSchemeColorFromTheme(schemeClr.Value, null, slideLayoutClrOvride, themeContent);
+                //    }
+                //}
+                //if (borderColor != null)
+                //{
+                //    var shade = PowerPointHelper.GetTextByPath(node, "p:style/a:lnRef/a:schemeClr/a:shade/@val");
+                //    if (shade != null)
+                //    {
+                //        double shaded = double.Parse(shade.Value) / 100000.0;
+                //        var color = ColorTranslator.FromHtml("#" + borderColor);
+                //        ColorHSL colorHSL = ColorHelper.RgbToHsl(new ColorRGB(color.R, color.G, color.B));
+                //        colorHSL.L = colorHSL.L * shaded;
+                //        ColorRGB colorRGB = colorHSL.HslToRgb();
+                //        borderColorstr = ColorTranslator.ToHtml(Color.FromArgb(colorRGB.R, colorRGB.G, colorRGB.B));
+                //        // borderColor = color.hex.replace("#", "");
+                //    }
+                //}
 
-                if (isSvgMode)
-                {
-                    return new Border { Color = borderColorstr, Width = (int)borderWidth, Type ="", Stroke = strokeDasharray };
-                }
-                else
-                {
-                    return border;
-                }
             }
+            if (!string.IsNullOrEmpty(borderColorstr)) {
+                border.Color = borderColorstr;
+                if (border.Width == 0) {
+                    border.Width = 1;
+                }
+            }
+            return border;
+
+            //if (borderColor == null)
+            //{
+            //    if (isSvgMode)
+            //    {
+            //        borderColorstr = "none";
+            //    }
+            //    else
+            //    {
+            //        borderColorstr = "#000";
+            //    }
+            //}
+            //else
+            //{
+            //    borderColorstr = "#" + borderColorstr;
+
+            //}
+            //cssText += " " + borderColor + " ";
+            //if (borderType != null)
+            //{
+            //    if (isSvgMode)
+            //    {
+            //        return new Border { Color = borderColorstr, Width = (int)borderWidth, Type = borderType.Value, Stroke = strokeDasharray };
+            //    }
+            //    else
+            //    {
+            //        return border;
+            //    }
+            //}
+            //else
+            //{
+
+            //    if (isSvgMode)
+            //    {
+            //        return new Border { Color = borderColorstr, Width = (int)borderWidth, Type = "", Stroke = strokeDasharray };
+            //    }
+            //    else
+            //    {
+            //        return border;
+            //    }
+            //}
+
+
 
-                
-          
 
         }
 
-        public static string GetSchemeColorFromTheme(string schemeClr, XmlNode sldMasterNode ,  Dictionary<string ,string > slideLayoutClrOvride ,XmlNode themeContent)
+        public static string GetSchemeColorFromTheme(string schemeClr, XmlNode sldMasterNode, Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
         {
             //<p:clrMap ...> in slide master
             // e.g. tx2="dk2" bg2="lt2" tx1="dk1" bg1="lt1" slideLayoutClrOvride
@@ -282,7 +313,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             ptrn += "</pattern>";// '';
             return ptrn;
         }
-        public static string GetSvgGradient(double w, double h, double angl, List<string> color_arry, int  shpId, Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
+        public static string GetSvgGradient(double w, double h, double angl, List<string> color_arry, int shpId, Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
         {
 
             var stopsArray = GetMiddleStops(color_arry.Count - 2);
@@ -291,7 +322,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             double svgHeight = h;
             double svgWidth = w;
             string svg = "";
-            List<double> xy_ary = SVGangle(angl, svgHeight, svgWidth,  slideLayoutClrOvride,   themeContent);
+            List<double> xy_ary = SVGangle(angl, svgHeight, svgWidth, slideLayoutClrOvride, themeContent);
             double x1 = xy_ary[0];
             double y1 = xy_ary[1];
             double x2 = xy_ary[2];
@@ -305,7 +336,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
 
             for (var i = 0; i < sal; i++)
             {
-                svg += "<stop offset=\"" + (System.Math.Round(double.Parse(stopsArray[i].Replace("%",""))) / 100 * sr) / sr + "\" stop-color=\"" + color_arry[i] + "\"";
+                svg += "<stop offset=\"" + (System.Math.Round(double.Parse(stopsArray[i].Replace("%", ""))) / 100 * sr) / sr + "\" stop-color=\"" + color_arry[i] + "\"";
                 svg += "/>\n";
             }
 
@@ -339,7 +370,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             sArry.Add("100%");
             return sArry;
         }
-        public static List<double> SVGangle(double deg, double svgHeight, double svgWidth , Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
+        public static List<double> SVGangle(double deg, double svgHeight, double svgWidth, Dictionary<string, string> slideLayoutClrOvride, XmlNode themeContent)
         {
             double w = svgWidth;
             double h = svgHeight;
@@ -417,42 +448,43 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             double y2 = System.Math.Round(ty1 / h * 100 * 100) / 100;
             return new List<double> { x1, y1, x2, y2 };
         }
-        public static Fill GetPatternFill(XmlNode node ,Dictionary<string, string> slideLayoutClrOvride,  XmlNode slideMasterContent, XmlNode themeContent)
+        public static Fill GetPatternFill(XmlNode node, Dictionary<string, string> slideLayoutClrOvride, XmlNode slideMasterContent, XmlNode themeContent)
         {
             Fill fill = new Fill { Type = 4 };
             //处理前景色 
-            var fgClr = node.GetTextByPath( "a:fgClr");
-            string fgclr = GetSolidFill(fgClr, slideLayoutClrOvride,  slideMasterContent, themeContent);
-            fgclr =PowerPointHelper.ColorToning(fgClr.OuterXml, fgclr);
+            var fgClr = node.GetTextByPath("a:fgClr");
+            string fgclr = GetSolidFill(fgClr, slideLayoutClrOvride, slideMasterContent, themeContent);
+            fgclr = PowerPointHelper.ColorToning(fgClr.OuterXml, fgclr);
             fill.gradColor.Add(fgclr);
             // 处理背景色
-            var bgClr = node.GetTextByPath( "a:bgClr");
+            var bgClr = node.GetTextByPath("a:bgClr");
             string bgclr = GetSolidFill(bgClr, slideLayoutClrOvride, slideMasterContent, themeContent);
             bgclr = PowerPointHelper.ColorToning(bgClr.OuterXml, bgclr);
             //处理内置图案属性
             var prst = node.GetTextByPath("@prst");
-            if (prst != null) {
+            if (prst != null)
+            {
                 fill.pattPrst = prst.Value;
             }
             fill.gradColor.Add(bgclr);
             return fill;
         }
 
-        public static  dynamic GetSlideSize(XmlDocument xdoc)
+        public static dynamic GetSlideSize(XmlDocument xdoc)
         {
             var sldSzNode = xdoc.GetTextByPath("//pkg:part[@pkg:name='/ppt/presentation.xml']/pkg:xmlData/p:presentation/p:sldSz");
             double width = double.Parse(sldSzNode.GetTextByPath("@cx").Value) * px96 / px914400;
             double height = double.Parse(sldSzNode.GetTextByPath("@cy").Value) * px96 / px914400;
             return new { width, height };
         }
-        public static Fill GetGradientFill(XmlNode node, Dictionary<string, string> slideLayoutClrOvride,XmlNode slideMasterContent, XmlNode themeContent)
+        public static Fill GetGradientFill(XmlNode node, Dictionary<string, string> slideLayoutClrOvride, XmlNode slideMasterContent, XmlNode themeContent)
         {
             XmlNodeList gsLst = PowerPointHelper.GetTextByPathList(node, "a:gsLst/a:gs");// node["a:gsLst"]["a:gs"];
             //get start color
             var color_ary = new List<string>();
             for (int i = 0; i < gsLst.Count; i++)
             {
-                var lo_color = GetSolidFill(gsLst[i] , slideLayoutClrOvride, slideMasterContent,  themeContent);
+                var lo_color = GetSolidFill(gsLst[i], slideLayoutClrOvride, slideMasterContent, themeContent);
                 lo_color = PowerPointHelper.ColorToning(gsLst[i].OuterXml, lo_color);
                 color_ary.Add(lo_color);
             }
@@ -470,15 +502,15 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                 Rot = rot
             };
         }
-      
+
         public static Position GetPosition(XmlNode slideXfrmNode, XmlNode slideLayoutXfrmNode, XmlNode slideMasterXfrmNode)
         {
 
             XmlNode off = null;
             XmlNode ext = null;
-            double x, y,w,h;
+            double x, y, w, h;
             //ext
-            if(slideXfrmNode != null)
+            if (slideXfrmNode != null)
             {
                 ext = PowerPointHelper.GetTextByPath(slideXfrmNode, "a:ext");
             }
@@ -495,7 +527,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             {
                 off = PowerPointHelper.GetTextByPath(slideXfrmNode, "a:off");
             }
-            else if (slideLayoutXfrmNode != null && off==null)
+            else if (slideLayoutXfrmNode != null && off == null)
             {
                 off = PowerPointHelper.GetTextByPath(slideLayoutXfrmNode, "a:off");
             }
@@ -503,20 +535,20 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             {
                 off = PowerPointHelper.GetTextByPath(slideMasterXfrmNode, "a:off");
             }
-            x = double.Parse(off.GetTextByPath( "@x").Value) * px96 / px914400;
-            y = double.Parse(off.GetTextByPath( "@y").Value) * px96 / px914400;
+            x = double.Parse(off.GetTextByPath("@x").Value) * px96 / px914400;
+            y = double.Parse(off.GetTextByPath("@y").Value) * px96 / px914400;
             w = double.Parse(ext.GetTextByPath("@cx").Value) * px96 / px914400;
             h = double.Parse(ext.GetTextByPath("@cy").Value) * px96 / px914400;
             return new Position()
             {
-                Cx=w,
-                Cy=h,
+                Cx = w,
+                Cy = h,
                 X = x,
                 Y = y
             };
         }
 
-        public static  NodesTable IndexNodes(XmlNode content)
+        public static NodesTable IndexNodes(XmlNode content)
         {
             var idTable = new Dictionary<string, XmlNode>();
             var idxTable = new Dictionary<string, XmlNode>();
@@ -576,7 +608,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return double.Parse(angle.Value) / 60000.00;
         }
 
-        public  static XmlNode GetNodesTable(XmlNode id, XmlNode idx, XmlNode type, WarpObj warpObj, string LayoutOrMaster)
+        public static XmlNode GetNodesTable(XmlNode id, XmlNode idx, XmlNode type, WarpObj warpObj, string LayoutOrMaster)
         {
             XmlNode resNode = null;
             if (resNode == null)
@@ -721,7 +753,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             }
             return opcity;
         }
-        public static  Fill GetBgGradientFill(XmlNode bgPr, string phClr, Dictionary<string ,string > slideLayoutClrOvride, XmlNode slideMasterContent,  XmlNode themeContent)
+        public static Fill GetBgGradientFill(XmlNode bgPr, string phClr, Dictionary<string, string> slideLayoutClrOvride, XmlNode slideMasterContent, XmlNode themeContent)
         {
             if (bgPr != null)
             {
@@ -738,27 +770,27 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             return null;
         }
 
-        public  static string GetSolidFill(XmlNode node, Dictionary<string, string> slideLayoutClrOvride,   XmlNode slideMasterContent, XmlNode themeContent)
+        public static string GetSolidFill(XmlNode node, Dictionary<string, string> slideLayoutClrOvride, XmlNode slideMasterContent, XmlNode themeContent)
         {
 
             if (node == null)
             {
                 return null;
             }
-            string Color = "FFF";
+            string Color =null;
             // Fill fill = new Fill() { Color = "FFF", Type = 1 };
             var srgbClrval = node.GetTextByPath("a:srgbClr/@val");
             var schemeClrval = node.GetTextByPath("a:schemeClr/@val");
             if (srgbClrval != null)
             {
-                 Color = srgbClrval.Value; //#...
+                Color = srgbClrval.Value; //#...
             }
             else if (schemeClrval != null)//node["a:schemeClr"] != null)
             {
                 //a:schemeClr
                 // var schemeClr = PowerPointHelper.GetTextByPath(node, "a:schemeClr/@val");
                 //console.log(schemeClr)
-                 Color = ShapeHelper.GetSchemeColorFromTheme(schemeClrval.Value, slideMasterContent, slideLayoutClrOvride, themeContent); //#...
+                Color = ShapeHelper.GetSchemeColorFromTheme(schemeClrval.Value, slideMasterContent, slideLayoutClrOvride, themeContent); //#...
 
             }
             else if (PowerPointHelper.GetTextByPath(node, "a:scrgbClr") != null)
@@ -772,7 +804,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                 var green = (defBultColorValsG.Value.IndexOf("%") != -1) ? defBultColorValsG.Value.Split("%").First() : defBultColorValsG.Value;
                 var blue = (defBultColorValsB.Value.IndexOf("%") != -1) ? defBultColorValsB.Value.Split("%").First() : defBultColorValsB.Value;
                 var scrgbClr = red + "," + green + "," + blue;
-                 Color = ToHex(255 * (double.Parse(red) / 100)) + ToHex(255 * (double.Parse(green) / 100)) + ToHex(255 * (double.Parse(blue) / 100));
+                Color = ToHex(255 * (double.Parse(red) / 100)) + ToHex(255 * (double.Parse(green) / 100)) + ToHex(255 * (double.Parse(blue) / 100));
                 //console.log("scrgbClr: " + scrgbClr);
 
             }
@@ -780,7 +812,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
             {
                 //<a:prstClr val="black"/>  //Need to test/////////////////////////////////////////////
                 var prstClr = PowerPointHelper.GetTextByPath(node, "a:prstClr/@val");// node["a:prstClr"]["attrs"]["val"];
-               Color = GetColorName2Hex(prstClr.Value);
+                Color = GetColorName2Hex(prstClr.Value);
                 //console.log("prstClr: " + prstClr+" => hexClr: "+color);
             }
             else if (PowerPointHelper.GetTextByPath(node, "a:hslClr") != null)
@@ -795,7 +827,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                 var lum = double.Parse((defBultColorVals_lum.Value.IndexOf("%") != -1) ? defBultColorVals_lum.Value.Split("%").First() : defBultColorVals_lum.Value) / 100;
                 var hslClr = defBultColorVals_hue.Value.ToString() + "," + defBultColorVals_sat.Value.ToString() + "," + defBultColorVals_lum.Value.ToString();
                 var hsl2rgb = HslToRgb(hue, sat, lum);
-                 Color = ToHex(hsl2rgb.r) + ToHex(hsl2rgb.g) + ToHex(hsl2rgb.b);
+                Color = ToHex(hsl2rgb.r) + ToHex(hsl2rgb.g) + ToHex(hsl2rgb.b);
                 //defBultColor = cnvrtHslColor2Hex(hslClr); //TODO
                 // console.log("hslClr: " + hslClr);
             }
@@ -805,7 +837,7 @@ namespace TEAMModelOS.Service.Services.PowerPoint.Implement
                 var sysClr = PowerPointHelper.GetTextByPath(node, "a:sysClr/@lastClr").Value;
                 if (sysClr != null)
                 {
-                  Color = sysClr;
+                    Color = sysClr;
                 }
             }
             return Color;

Datei-Diff unterdrückt, da er zu groß ist
+ 316 - 311
TEAMModelOS.Service/Services/PowerPoint/Implement/ShapeSvg.cs