/// <summary> /// 转换所有Project /// </summary> /// <param name="bll"></param> public static void GenerateXinHuaProjects(BllManager bll, string outPath) { session = bll.manager.session; IList<Prj_Project> projects = bll.manager.ProjectCRUD.GetPrj_Projects(); // 加载全部工程列表 GenerateXinHuaControls(bll, projects[0], outPath); }
private static int maxPage = 0; // 输出的页面数量(生成画面时),0:不限制 /// <summary> /// 生成页面目录文件 /// </summary> /// <param name="bll"></param> /// <param name="outPath">项目输出路径,页面文件的输出路径为:outPath + "\\data\\xinhua"</param> public static void GenerateXinHuaPageList(BllManager bll, string outPath) { string filePath = outPath + "\\data\\xinhua\\"; if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } XmlTextWriter listWriter = new XmlTextWriter(filePath + "PageList.xml", Encoding.UTF8); listWriter.Indentation = 4; listWriter.Formatting = Formatting.Indented; IList<Prj_Project> projects = bll.manager.ProjectCRUD.GetPrj_Projects(); listWriter.WriteStartElement("XDPS"); listWriter.WriteAttributeString("Describe", projects[0].ProjectName); IList<Prj_Network> networks = bll.manager.NetworkCRUD.GetPrj_Networks_By_Prj_Project_ID(projects[0].ID); IList<Prj_Unit> units = bll.manager.UnitCRUD.GetPrj_Units_By_Prj_Network_ID(networks[0].ID); IList<Prj_Controller> controllers = bll.manager.ControllerCRUD.GetPrj_Controllers_By_Prj_Unit_ID(units[0].ID); foreach (Prj_Controller controller in controllers) { listWriter.WriteStartElement("DPU"); listWriter.WriteAttributeString("Drop", controller.ControllerAddress); listWriter.WriteAttributeString("Name", controller.ControllerName); listWriter.WriteAttributeString("Describe", controller.Description); listWriter.WriteAttributeString("Version", controller.Version); IList<Prj_Document> documents = bll.manager.DocumentCRUD.GetPrj_Documents_By_Prj_Controller_ID(controller.ID); foreach (Prj_Document document in documents) { listWriter.WriteStartElement("Page"); listWriter.WriteAttributeString("PageNum", document.DocumentName.Substring(document.DocumentName.LastIndexOf('-') + 1)); listWriter.WriteAttributeString("Describe", document.DocumentCaption); listWriter.WriteEndElement(); } listWriter.WriteEndElement(); } listWriter.WriteEndElement(); listWriter.Close(); }
/// <summary> /// 转换所有Control /// </summary> /// <param name="bll"></param> /// <param name="project"></param> public static void GenerateXinHuaControls(BllManager bll, Prj_Project project, string outPath) { // 新华系统中,每个Project仅包含一个Network,每个Network仅包含一个Unit IList<Prj_Network> networks = bll.manager.NetworkCRUD.GetPrj_Networks_By_Prj_Project_ID(project.ID); IList<Prj_Unit> units = networks.Count > 0 ? bll.manager.UnitCRUD.GetPrj_Units_By_Prj_Network_ID(networks[0].ID) : new List<Prj_Unit>(); IList<Prj_Controller> controllers = units.Count > 0 ? bll.manager.ControllerCRUD.GetPrj_Controllers_By_Prj_Unit_ID(units[0].ID) : new List<Prj_Controller>(); for (int i = 0; i < controllers.Count; i++) { GeneralXinHuaDocuments(bll, controllers[i], outPath); } }
/// <summary> /// Prj_Sheet to Xml /// </summary> /// <param name="sheet"></param> public static void GenerateXinHuaSheets(BllManager bll, Prj_Document documet, string outPath) { string pagesPath = outPath + "\\data\\xinhua\\Pages\\"; if (!Directory.Exists(pagesPath)) { Directory.CreateDirectory(pagesPath); } if (session == null) { session = bll.manager.session; } try { // 每个Document只包含一个Sheet int sheetID = bll.manager.SheetCRUD.GetPrj_Sheets_By_Prj_Document_ID(documet.ID)[0].ID; Prj_Sheet sheet = bll.manager.SheetCRUD.Load_Sheet(sheetID); ArrayList symbols = new ArrayList(); // 算法块 foreach (Cld_FCBlock block in sheet.Cld_FCBlock_List) { #region if(特殊块) if (block.FunctionName == "XAI") { GenerateXAIBlock(block, symbols); } else if (block.FunctionName == "XAO") { GenerateXAOBlock(block, symbols); } else if (block.FunctionName == "XDI") { GenerateXDIBlock(block, symbols); } else if (block.FunctionName == "XDO") { GenerateXDOBlock(block, symbols); } else if (block.FunctionName == "XPI") { GenerateXPIBlock(block, symbols); } else if (block.FunctionName == "XPgAI") { GenerateXPgAIBlock(block, symbols); } else if (block.FunctionName == "XPgAO") { GenerateXPgAOBlock(block, symbols); } else if (block.FunctionName == "XPgDI") { GenerateXPgDIBlock(block, symbols); } else if (block.FunctionName == "XPgDO") { GenerateXPgDOBlock(block, symbols); } else if (block.FunctionName == "XNetAI") { GenerateXNetAIBlock(block, symbols); } else if (block.FunctionName == "XNetAO") { GenerateXNetAOBlock(block, symbols); } else if (block.FunctionName == "XNetDI") { GenerateXNetDIBlock(block, symbols); } else if (block.FunctionName == "XNetDO") { GenerateXNetDOBlock(block, symbols); } #endregion else { bll.generate_Rec_symbol(block, BllManager.rela_pos.UPLEFT); GenerateCommonBlock(block, symbols); } } // 文本块 foreach (Cld_Graphic graphic in sheet.Cld_Graphic_List) { if (graphic.Type == "Text") { GenerateText(graphic, symbols); } } //IList constants = sheet.Cld_Constant_List; // 信号线 IDictionary<string, Cld_Signal> signalTable = bll.GenerateSignalLines(sheet); foreach (Cld_Signal signal in signalTable.Values) { string[] signalDataList = signal.Data.TrimEnd(' ', ';').Split(';'); foreach (string signalData in signalDataList) { LogicSignalLine signalline = new LogicSignalLine(signalData, signal.Name, signal.SignalType); symbols.Add(signalline); } } // 创建XmlTextWriter类的实例对象 XmlTextWriter textWriter = new XmlTextWriter(pagesPath + documet.DocumentName.Replace('-', '_') + ".xfig", Encoding.UTF8); textWriter.Indentation = 4; textWriter.Formatting = Formatting.Indented; textWriter.WriteStartElement("document"); textWriter.WriteAttributeString("Type", "BeginNode"); textWriter.WriteAttributeString("GraphicName", documet.DocumentCaption); textWriter.WriteAttributeString("BackColor", "FF FF FF FF"); textWriter.WriteAttributeString("width", Convert.ToString(sheet.Width * 10)); textWriter.WriteAttributeString("heigth", Convert.ToString(sheet.Height * 10)); LogicRectangle pageBounds0 = new LogicRectangle(); pageBounds0.Location = new PointF(0, 0); pageBounds0.Size = new SizeF(sheet.Width, sheet.Height); pageBounds0.LineWidth = 1; pageBounds0.GetXinhuaGraphicXml(textWriter); LogicRectangle pageBounds1 = new LogicRectangle(); pageBounds1.Location = new PointF(30, 30); pageBounds1.Size = new SizeF(sheet.Width - 60f, sheet.Height - 60f); pageBounds1.LineWidth = 2; pageBounds1.GetXinhuaGraphicXml(textWriter); foreach (object obj in symbols) { ((ILogicGraphicFormat)obj).GetXinhuaGraphicXml(textWriter); } textWriter.WriteEndElement(); textWriter.Close(); } catch (System.Exception e) { Console.WriteLine(e.ToString()); } }
/// <summary> /// 转换所有Document /// </summary> /// <param name="bll"></param> /// <param name="path"></param> /// <param name="listWriter"></param> /// <param name="controller"></param> public static void GeneralXinHuaDocuments(BllManager bll, Prj_Controller controller, string outPath) { IList<Prj_Document> documents = bll.manager.DocumentCRUD.GetPrj_Documents_By_Prj_Controller_ID(controller.ID); for (int i = 0; i < documents.Count; i++) { Prj_Document document = documents[i]; string pageNum = document.DocumentName.Substring(document.DocumentName.LastIndexOf('-') + 1); // 生成页面文件 GenerateXinHuaSheets(bll, document, outPath); } }
/// <summary> /// Prj_Sheet To Xml /// </summary> /// <param name="sheet"></param> public static void Generate_Sheet_Xml(Prj_Sheet sheet, BllManager bll) { //因为此方法采用反射来获取类中的所有共有属性进行输出,因此这里屏蔽对象中的某些不需要输出的属性 List<string> myclass = new List<string>(); myclass.Add("Prj_Project"); myclass.Add("Prj_Network"); myclass.Add("Prj_Unit"); myclass.Add("Prj_Controller"); myclass.Add("Prj_Document"); myclass.Add("Prj_Sheet"); myclass.Add("Cld_FCBlock"); myclass.Add("Cld_Signal"); myclass.Add("Cld_Constant"); myclass.Add("Cld_Graphic"); myclass.Add("X"); myclass.Add("Y"); myclass.Add("PinIndex"); try { // 创建XmlTextWriter类的实例对象 XmlTextWriter textWriter = new XmlTextWriter(sheet.ID.ToString() + ".xml", null); textWriter.Formatting = Formatting.Indented; // 开始写过程,调用WriteStartDocument方法 textWriter.WriteStartDocument(); // 写入说明 textWriter.WriteComment("First Comment XmlTextWriter Sample Example"); textWriter.WriteComment("w3sky.xml in root dir"); Type sheet_type = typeof(Prj_Sheet); Type fcblock_type = typeof(Cld_FCBlock); Type fcconst_type = typeof(Cld_Constant); Type fcgraphic_type = typeof(Cld_Graphic); Type fcsignal_type = typeof(Cld_Signal); Type fcinput_type = typeof(Cld_FCInput); Type fcoutput_type = typeof(Cld_FCOutput); Type fcpara_type = typeof(Cld_FCParameter); //创建sheet结点 textWriter.WriteStartElement("sheet"); foreach (PropertyInfo pi in sheet_type.GetProperties()) { object value_object = pi.GetValue(sheet, null); string value_string = ""; if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) { continue; } if (value_object != null) { value_string = value_object.ToString(); } textWriter.WriteAttributeString(pi.Name, value_string); } //fcblock foreach (Cld_FCBlock fcblock in sheet.Cld_FCBlock_List) { textWriter.WriteStartElement("element"); textWriter.WriteAttributeString("type", "Cld_FCBlock"); bll.generate_Rec_symbol(fcblock, TDK.Core.Logic.BLL.BllManager.rela_pos.UPLEFT); foreach (PropertyInfo pi in fcblock_type.GetProperties()) { object value_object = pi.GetValue(fcblock, null); string value_string = ""; if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) { continue; } if (value_object != null) { value_string = value_object.ToString(); } textWriter.WriteAttributeString(pi.Name, value_string); } foreach (Cld_FCInput input in fcblock.Cld_FCInput_List) { textWriter.WriteStartElement("element"); textWriter.WriteAttributeString("type", "Cld_FCInput"); foreach (PropertyInfo pi in fcinput_type.GetProperties()) { object value_object = pi.GetValue(input, null); string value_string = ""; if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) { continue; } if (value_object != null) { value_string = value_object.ToString(); } textWriter.WriteAttributeString(pi.Name, value_string); } textWriter.WriteEndElement(); } //foreach (Cld_FCOutput output in fcblock.Cld_FCOutput_List) //{ // textWriter.WriteStartElement("element"); // textWriter.WriteAttributeString("type", "FCOutput"); // foreach (PropertyInfo pi in fcoutput_type.GetProperties()) // { // object value_object = pi.GetValue(output, null); // string value_string = ""; // if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) // { // continue; // } // if (value_object != null) // { // value_string = value_object.ToString(); // } // textWriter.WriteAttributeString(pi.Name, value_string); // } // textWriter.WriteEndElement(); //} //foreach (Cld_FCParameter para in fcblock.Cld_FCParameter_List) //{ // textWriter.WriteStartElement("element"); // textWriter.WriteAttributeString("type", "Cld_FCParameter"); // foreach (PropertyInfo pi in fcpara_type.GetProperties()) // { // object value_object = pi.GetValue(para, null); // string value_string = ""; // if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) // { // continue; // } // if (value_object != null) // { // value_string = value_object.ToString(); // } // textWriter.WriteAttributeString(pi.Name, value_string); // } // textWriter.WriteEndElement(); //} textWriter.WriteEndElement(); } ////const //foreach (Cld_Constant cldconst in sheet.Cld_Constant_List) //{ // textWriter.WriteStartElement("element"); // textWriter.WriteAttributeString("type", "Cld_Constant"); // foreach (PropertyInfo pi in fcconst_type.GetProperties()) // { // object value_object = pi.GetValue(cldconst, null); // string value_string = ""; // if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) // { // continue; // } // if (value_object == null) // { // value_string = value_object.ToString(); // } // textWriter.WriteAttributeString(pi.Name, value_string); // } // textWriter.WriteEndElement(); //} ////graphic //foreach (Cld_Graphic graphic in sheet.Cld_Graphic_List) //{ // textWriter.WriteStartElement("element"); // textWriter.WriteAttributeString("type", "Cld_Graphic"); // foreach (PropertyInfo pi in fcgraphic_type.GetProperties()) // { // object value_object = pi.GetValue(graphic, null); // string value_string = ""; // if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) // { // continue; // } // if (value_object == null) // { // value_string = value_object.ToString(); // } // textWriter.WriteAttributeString(pi.Name, value_string); // } // textWriter.WriteEndElement(); //} ////signal //foreach (Cld_Signal signal in sheet.Cld_Signal_List) //{ // textWriter.WriteStartElement("element"); // textWriter.WriteAttributeString("type", "Cld_Signal"); // foreach (PropertyInfo pi in fcsignal_type.GetProperties()) // { // object value_object = pi.GetValue(signal, null); // string value_string = ""; // if (pi.PropertyType.Name.Equals("IList") || myclass.Contains(pi.PropertyType.Name)) // { // continue; // } // if (value_object == null) // { // value_string = value_object.ToString(); // } // textWriter.WriteAttributeString(pi.Name, value_string); // } // textWriter.WriteEndElement(); //} textWriter.WriteEndElement(); // 关闭textWriter textWriter.Close(); } catch (System.Exception e) { Console.WriteLine(e.ToString()); } }