public static string GenerateSVGXml(SizeF scale, DrawObjectList list) { string s = ""; s += GetDefXML(); //得到定义 s += GetGroupXML(scale, list); //得到生成的设备实体 s += GetConnectXML(scale, list); s += GetAnimationXml(scale, list); return(s); }
private static string GetAnimationXml(SizeF scale, DrawObjectList list) { string s = "<g id=\"" + SVGDefine.AnimationClass + "\">"; s += Environment.NewLine; foreach (var obj in list.GetAnimaitionArrayList()) { var drawobj = obj as DrawObject; if (drawobj.AnimationBases == null || drawobj.AnimationBases.Count == 0) { continue; } s += drawobj.GetXmlStr(scale, false); foreach (var anim in drawobj.AnimationBases) { s += " <"; switch (anim.AnimationType) { case AnimationType.None: s += "animate"; break; case AnimationType.Animation: s += "animate"; break; case AnimationType.AnimationColor: s += "animateColor"; break; case AnimationType.AnimationPath: s += "animateMotion"; break; default: throw new ArgumentOutOfRangeException(); } s += anim.GetXmlStr(); s += " />"; s += Environment.NewLine; } s += drawobj.GetXmlEnd(); } s += Environment.NewLine; s += "</g>"; return(s); }
private static string GetConnectXML(SizeF scale, DrawObjectList list) { string connect = "<g id=\"" + SVGDefine.ConnectLineClass + "\">"; connect += Environment.NewLine; foreach (var drawObj in list.GraphicsList) { if (drawObj is DrawConnectObject) { var dco = drawObj as DrawConnectObject; connect += "<g id=\"" + dco.Id + "\">"; connect += Environment.NewLine; connect += dco.GetXmlStr(scale); connect += "</g>"; connect += Environment.NewLine; } } connect += "</g>"; return(connect); }
private static string GetGroupXML(SizeF scale, DrawObjectList list) { string s = ""; s += "<g>"; foreach (var drawObj in list.GraphicsList) { if (drawObj is DrawConnectObject) { continue;; } else { s += (drawObj as DrawObject)?.GetXmlStr(scale, true); s += Environment.NewLine; } } s += "</g>"; s += Environment.NewLine; return(s); }
/// <summary> /// 根据读取的xml生成项目 /// </summary> /// <param name="svg"></param> public static void CreateProjectFromXML(SVGUnit svg, DrawObjectList list) { while (svg != null) { switch (svg.getElementType()) { case SVGUnit.SVGUnitType.def: //将所有symbol读取 SVGUnit defchild = svg.getChild(); while (defchild != null) { if (defchild.getElementType() == SVGUnit.SVGUnitType.symbol) { CreateSysmbolUnit(defchild as SVGSymbol); } defchild = defchild.getNext(); } break; case SVGUnit.SVGUnitType.typeGroup: if (svg.Id == SVGDefine.ConnectLineClass) { SVGGroup group = svg.getChild() as SVGGroup; DrawConnectObject drawConnectObject = DrawConnectObject.Create(group.getChild() as SVGPath); SVGCN_Ref svgcnRef = group.getChild().getNext().getChild() as SVGCN_Ref; var linkDnd = svgcnRef.LinkObjecttlDnd.Split('@'); drawConnectObject.SetConnectDeviceFromXml(linkDnd[0], 1, int.Parse(linkDnd[1]), list.GetDeviceList()); linkDnd = svgcnRef.LinkObjectIDznd.Split('@'); drawConnectObject.SetConnectDeviceFromXml(linkDnd[0], 2, int.Parse(linkDnd[1]), list.GetDeviceList()); drawConnectObject.Id = int.Parse(group.Id); list.Add(drawConnectObject); group = group.getNext() as SVGGroup; } else if (svg.Id == SVGDefine.AnimationClass) { } else { SVGGroup group = svg.getChild() as SVGGroup; while (group != null) { var gchild = group.getChild(); switch (gchild.getElementType()) { case SVGUnit.SVGUnitType.use: SVGUse use = gchild as SVGUse; var gDevice = CreateDeviceDrawObjectBase(use, group.Id); //TODO 后期添加到工作组中 list.Add(gDevice); break; default: //TODO 未编排为设备的图素集合,暂时用临时分组表示 var o = SVGDrawFactory.CreateDrawObject(svg); list.Add(o); //vBase = new DeviceDrawObjectBase(0f, 0f, 0f, 0f, group.Id, drawObjects, null, ""); break; } group = group.getNext() as SVGGroup; //获取下一个 } } break; default: break; } svg = svg.getNext(); } }