Esempio n. 1
0
        /// <summary>
        /// 获取一个实体类中所有字段信息
        /// </summary>
        /// <param name="paraType">实体类类型</param>
        /// <param name="paraData"></param>
        private static void GetOneTypeParaInfo(Type paraType, ParaData paraData)
        {
            PropertyInfo[] PropertyList = paraType.GetProperties();
            if (PropertyList == null || PropertyList.Length <= 0)
            {
                return;
            }
            paraData.SubseriesList = new List <ParaData>();

            for (int i = 0; i < PropertyList.Length; i++)
            {
                var item    = PropertyList[i];
                var onePara = new ParaData();

                onePara.ParaName = item.Name;
                var oneType = item.PropertyType;
                onePara.ParaTypeName = oneType.Name;
                if ((oneType.IsGenericType && oneType.GetGenericTypeDefinition().Equals(typeof(Nullable <>))))
                {
                    oneType = oneType.GetGenericArguments()[0];
                    onePara.ParaTypeName = oneType.Name + "?";
                }


                onePara.ParaPosition = i;

                GetParaTypeInfo(oneType, onePara);

                /*这里应该再加上,去那个类文件,找到对应的类注释的方法*/
                paraData.SubseriesList.Add(onePara);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 获取类中所有属性
        /// </summary>
        /// <param name="paraType"></param>
        private static void GetTypeAllProperties(Type paraType, ParaData paraData)
        {
            PropertyInfo[] properties = paraType.GetProperties();
            if (properties.Length <= 0)
            {
                return;
            }
            paraData.SubseriesList = new List <ParaData>();


            //遍历方法下的参数
            for (int k = 0; k < properties.Length; k++)
            {
                var item = properties[k];

                var onePara = new ParaData();

                //方法位置
                onePara.ParaPosition = k;
                onePara.ParaTypeName = item.PropertyType.Name;
                onePara.ParaName     = item.Name;

                GetParaTypeInfo(item.PropertyType, onePara);

                paraData.SubseriesList.Add(onePara);
            }
        }
        private List <ParaData> GetParaData(string strPath)
        {
            List <ParaData> lstTempData = new List <ParaData>();

            if (!File.Exists(strPath))
            {
                return(lstTempData);
            }

            string  path = string.Empty;
            XmlNode node = null;

            XmlDocument doc = new XmlDocument();

            doc.Load(strPath);

            //工程名称
            path = "PMC/参数列表";
            node = doc.SelectSingleNode(path);


            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                ParaData para = new ParaData();

                para.paraName  = node.ChildNodes[i].ChildNodes[0].InnerText;
                para.paraUnit  = node.ChildNodes[i].ChildNodes[1].InnerText;
                para.paraType  = int.Parse(node.ChildNodes[i].ChildNodes[2].InnerText);
                para.paraValue = Convert.ToDouble(node.ChildNodes[i].ChildNodes[3].InnerText);
                para.strRemark = node.ChildNodes[i].ChildNodes[4].InnerText;

                lstTempData.Add(para);
            }
            return(lstTempData);
        }
        private void TreeSelNode(ParaData para)
        {
            TreeNode rootNode = null;

            if (treeViewParameterList.Nodes.Count > 0)
            {
                rootNode = treeViewParameterList.Nodes[0];

                if (rootNode != null && rootNode.Nodes.Count > 0)
                {
                    foreach (TreeNode parentNode in rootNode.Nodes)
                    {
                        if (parentNode.Nodes.Count > 0 && para.paraType.ToString() == parentNode.Name)
                        {
                            foreach (TreeNode node in parentNode.Nodes)
                            {
                                if (para.paraName == node.Name)
                                {
                                    treeViewParameterList.SelectedNode = node;
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 获取此类型下包含的其它类型的详细信息
        /// </summary>
        /// <param name="paraType">要获取此类型下包含的其它类型的信息的类型</param>
        /// <param name="paraData">已保存当前类型信息的参数实体</param>
        private static void GetParaTypeInfo(Type paraType, ParaData paraData)
        {
            /*
             * 1.首先,判断参数类型是否为泛型
             *
             */
            if (!paraType.IsGenericType)
            {
                //不是泛型
                if (!IsUserType(paraType))
                {
                    return;
                }

                /*以下为其它类型,有可能是自定义实体,有可能是第三方*/

                GetOneTypeParaInfo(paraType, paraData);
                return;
            }
            /*以下就都是泛型的处理了*/

            /*2.判断此类型是否为用户自定义类型*/

            if (IsUserType(paraType))
            {
                //是用户定义的类型
                GetTypeAllProperties(paraType, paraData);
            }
        }
        /// <summary>
        /// 获取页面数据
        /// </summary>
        /// <returns></returns>
        private ParaData GetPageData()
        {
            ParaData paraData = new ParaData();

            paraData.paraName  = txtParameterName.Text.Trim();
            paraData.paraUnit  = cmbUnit.Text;
            paraData.paraType  = int.Parse(cmbParameterType.SelectedIndex.ToString());
            paraData.strRemark = txtParameterRemark.Text;

            return(paraData);
        }
        /// <summary>
        /// 获取参数表数据转换成ListParaData
        /// </summary>
        /// <returns></returns>
        public static List <ParaData> GetListParaData()
        {
            List <ParaData> lstPara = null;

            if (PubSyswareCom.IsRuntimeServerStarted())
            {
                //获取参数的值
                object obj = null;

                PubSyswareCom.GetParameterNames(string.Empty, ref obj);

                //转换为字符串数组
                if (obj is Object[])
                {
                    lstPara = new List <ParaData>();

                    object[] objName = obj as Object[];
                    for (int i = 0; i < objName.Count(); i++)
                    {
                        Object objValue = null;
                        PubSyswareCom.mGetParameter(string.Empty, objName[i].ToString(), ref objValue);

                        if (objValue != null)
                        {
                            //参数
                            if (objName[i].ToString() != "weightData" && objName[i].ToString() != "coreEnvelopeData")
                            {
                                ParaData data = new ParaData();
                                data.paraName = objName[i].ToString();
                                try
                                {
                                    data.paraValue = Convert.ToDouble(objValue.ToString());
                                }
                                catch (Exception e)
                                {
                                    data.paraValue = 0;
                                    XLog.Write(e.Message);
                                }


                                lstPara.Add(data);
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("TDE/IDE 没有启动成功");
            }

            return(lstPara);
        }
    private ParaData CreatePara()
    {
        ParaData paraData = new ParaData
        {
            Name          = Name,
            ParaModel     = ParaMesh,
            Texture       = ParaTexture,
            ParaOffsetPos = Para.ParaModel.transform.localPosition,
            RiserModel    = RiserMesh
        };

        return(paraData);
    }
    void OnWizardOtherButton()
    {
        if (ParaData)
        {
            Name         = ParaData.Name;
            ParaTexture  = ParaData.Texture;
            ParaMesh     = ParaData.ParaModel;
            RiserMesh    = ParaData.RiserModel;
            Icon         = ParaData.Icon;
            ParaLocalPos = ParaData.ParaOffsetPos;

            ParaData = null;
            _data    = null;
        }
    }
Esempio n. 10
0
        /// <summary>
        /// 获取方法中的参数
        /// </summary>
        /// <param name="oneMethod">正在操作的方法实体</param>
        /// <param name="methodInfo">方法信息封装类</param>
        private static void GetParaList(MethodData oneMethod, MethodInfo methodInfo)
        {
            //获取方法下的参数
            ParameterInfo[] parameters = methodInfo.GetParameters();

            if (parameters.Length <= 0)
            {
                return;
            }


            //遍历方法下的参数
            for (int k = 0; k < parameters.Length; k++)
            {
                var onePara = new ParaData();

                /*
                 * parameters[k].ParameterType.Namespace
                 * "TestAutoApiDoc.Controllers"
                 * parameters[k].ParameterType.Name
                 * "UserModel"
                 */

                var oneType = parameters[k].ParameterType;
                onePara.ParaTypeName = oneType.Name;
                if ((oneType.IsGenericType && oneType.GetGenericTypeDefinition().Equals(typeof(Nullable <>))))
                {
                    oneType = oneType.GetGenericArguments()[0];
                    onePara.ParaTypeName = oneType.Name + "?";
                }

                onePara.ParaName = parameters[k].Name;


                //方法位置
                onePara.ParaPosition = parameters[k].Position;

                GetParaTypeInfo(oneType, onePara);

                oneMethod.ParaList.Add(onePara);
            }
        }
Esempio n. 11
0
    void OnWizardCreate()
    {
        CreatIcons();
        ParaData para = CreatePara();


        string path = "Assets/BattleRoyale/_Para/Data/" + Name + ".asset";

        if (File.Exists(path))
        {
            if (!EditorUtility.DisplayDialog("ParaData Over Write",
                                             "Are you sure you want to Over write " + Name
                                             + " ?", "Replace", "Do Not Replace"))
            {
                return;
            }
        }
        AssetDatabase.CreateAsset(para, path);
        Repaint();
    }
        /// <summary>
        /// 获取excle文件数据
        /// </summary>
        /// <param name="strFilePath"></param>
        /// <returns></returns>
        private List <ParaData> GetFileParaData(string strFilePath)
        {
            List <ParaData> lstParaData = new List <ParaData>();

            if (File.Exists(strFilePath))
            {
                ExcelLib OpExcel = new ExcelLib();
                //指定操作的文件
                OpExcel.OpenFileName = strFilePath;
                //打开文件
                if (OpExcel.OpenExcelFile() == false)
                {
                    return(lstParaData);
                }
                //取得所有的工作表名称
                string[] strSheetsName = OpExcel.getWorkSheetsName();

                //默认操作第一张表
                OpExcel.SetActiveWorkSheet(1);
                System.Data.DataTable table;
                table = OpExcel.getAllCellsValue();
                OpExcel.CloseExcelApplication();

                int count = table.Rows.Count;

                for (int i = 0; i < count; i++)
                {
                    ParaData para = new ParaData();

                    para.paraName  = table.Rows[i][0].ToString();
                    para.paraUnit  = table.Rows[i][1].ToString();
                    para.paraType  = Convert.ToInt32(table.Rows[i][2].ToString());
                    para.paraValue = Convert.ToDouble(table.Rows[i][3].ToString());
                    para.strRemark = table.Rows[i][4].ToString();

                    lstParaData.Add(para);
                }
            }

            return(lstParaData);
        }
        /// <summary>
        /// 获取参数表数据转换成ListParaData
        /// </summary>
        /// <returns></returns>
        public static List <ParaData> GetListParaData()
        {
            List <ParaData> lstPara = null;

            if (PubSyswareCom.IsRuntimeServerStarted())
            {
                //获取参数的值
                object obj = null;
                PubSyswareCom.GetParameterNames(string.Empty, ref obj);

                //转换为字符串数组
                if (obj is Object[])
                {
                    lstPara = new List <ParaData>();

                    object[] objName = obj as Object[];
                    for (int i = 0; i < objName.Count(); i++)
                    {
                        Object objValue = null;
                        PubSyswareCom.mGetParameter(string.Empty, objName[i].ToString(), ref objValue);

                        if (objValue != null)
                        {
                            //参数
                            if (objName[i].ToString() != "weightData" && objName[i].ToString() != "coreEnvelopeData")
                            {
                                ParaData data = new ParaData();
                                data.paraName  = objName[i].ToString();
                                data.paraValue = Convert.ToDouble(objValue.ToString());

                                lstPara.Add(data);
                            }
                        }
                    }
                }
            }

            return(lstPara);
        }
Esempio n. 14
0
    void OnWizardUpdate()
    {
        if (!Para)
        {
            Para = _para;
        }

        if (!Equals(Para, _para))
        {
            _para = Para;
        }

        if (ParaData && ParaData != _data)
        {
            _data = ParaData;
            OnWizardOtherButton();
        }

        Para.ParaModel.mesh = ParaMesh;
        Para.ParaModel.transform.localPosition = ParaLocalPos;
        Para.ParaModel.GetComponent <Renderer>().material.mainTexture = ParaTexture;
        Para.RiserModel.mesh = RiserMesh;
    }
        /// <summary>
        /// 确定事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnParameterConfirm_Click(object sender, EventArgs e)
        {
            string strErroInfo = GetPageVerification();

            if (strErroInfo != string.Empty)
            {
                XLog.Write(strErroInfo);
                return;
            }

            ParaData paraData  = GetPageData();
            bool     IsRecover = false;

            if (strType == "new" || strType == "JYNew")
            {
                for (int i = 0; i < lstAllParaData.Count; i++)
                {
                    //新建参数名重复提示覆盖
                    if (paraData.paraType == lstAllParaData[i].paraType && paraData.paraName == lstAllParaData[i].paraName)
                    {
                        DialogResult result = MessageBox.Show("参数名称" + paraData.paraName + "同名是否覆盖?", "覆盖提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                        if (result == DialogResult.Yes)
                        {
                            lstAllParaData[i] = paraData;
                            IsRecover         = true;
                        }
                        else
                        {
                            return;
                        }
                    }
                }

                if (IsRecover == false)
                {
                    lstAllParaData.Add(paraData);
                }
            }
            if (strType == "edit")
            {
                // 先删除
                ParaData tempPara = new ParaData();

                string[] strArray = selNode.ToolTipText.Split('|');
                int      paraType = -1;
                if (strArray != null && strArray.Length > 2)
                {
                    paraType = int.Parse(strArray[2]);
                }
                for (int j = 0; j < lstAllParaData.Count; j++)
                {
                    if (lstAllParaData[j].paraType == paraType && selNode.Name == lstAllParaData[j].paraName)
                    {
                        tempPara = lstAllParaData[j];
                        lstAllParaData.Remove(lstAllParaData[j]);
                    }
                }


                bool IsSame = false;
                // 在已有的参数列表中查找当前同名同类型参数
                foreach (ParaData para in lstAllParaData)
                {
                    if (para.paraName == paraData.paraName && para.paraType == paraData.paraType)
                    {
                        MessageBox.Show("当前存在同类型同名称参数,请修改!");
                        IsSame = true;
                        lstAllParaData.Add(tempPara);
                        return;
                    }
                }
                // 没有便进行修改
                if (IsSame == false)
                {
                    lstAllParaData.Add(paraData);
                }
            }

            //lst排序
            List <ParaData> lstTemp = GetSelParaData();

            lstTemp = lstTemp.OrderBy(s => s.paraType).ToList();

            BindTreeParaData(lstTemp);

            SetingPageButton("confirm");
            SettingTitle("confirm");

            TreeSelNode(paraData);
        }
        private List<ParaData> GetXmlListRatioData(string strFilePath)
        {
            List<ParaData> lstParaData = null;
            try
            {
                XmlDocument xdoc = new XmlDocument();

                xdoc.Load(strFilePath);

                string strPath = "修正因子数据/参数列表";
                XmlNode node = xdoc.SelectSingleNode(strPath);
                XmlNodeList nodeList = node.ChildNodes;

                if (nodeList != null && nodeList.Count > 0)
                {
                    lstParaData = new List<ParaData>();
                    foreach (XmlNode childNode in nodeList)
                    {
                        ParaData data = new ParaData();
                        data.paraName = childNode.ChildNodes[0].InnerText;
                        data.paraEnName = childNode.ChildNodes[1].InnerText;
                        data.paraUnit = childNode.ChildNodes[2].InnerText;
                        data.paraType = Convert.ToInt32(childNode.ChildNodes[3].InnerText);
                        data.paraValue = Convert.ToDouble(childNode.ChildNodes[4].InnerText);
                        data.strRemark = childNode.ChildNodes[5].InnerText;

                        lstParaData.Add(data);
                    }
                }
            }
            catch
            {
                XLog.Write("导入文件\"" + strFilePath + "\"格式错误");
                MessageBox.Show("导入文件\"" + strFilePath + "\"格式错误");
                return null;
            }

            return lstParaData;
        }
        /// <summary>
        /// 同步参数到参数列表
        /// </summary>
        private void SynchronizationWeightPara()
        {
            string          msg     = "";
            List <ParaData> lstPara = new List <ParaData>();

            if (lstAllParaData != null && lstAllParaData.Count > 0)
            {
                foreach (ParaData para in lstAllParaData)
                {
                    ParaData data = new ParaData();
                    data.paraName = para.paraName;
                    try
                    {
                        data.paraUnit = dicUnits[para.paraUnit];
                    }
                    catch
                    {
                        //data.paraUnit = para.paraUnit;
                        msg += data.paraName + "单位值'" + para.paraUnit + "'不在IDE已有单位范围中;\n";
                    }

                    data.paraType  = para.paraType;
                    data.paraValue = para.paraValue;
                    data.strRemark = para.strRemark;

                    lstPara.Add(data);
                }
            }

            //参数表中的参数
            List <ParaData> lstTdePara = WeightEstimateForm.GetListParaData();

            if (lstPara != null && lstPara.Count > 0)
            {
                foreach (ParaData para in lstPara)
                {
                    if (MainForm.IsExitPara(para.paraName, lstTdePara) == false)
                    {
                        PubSyswareCom.CreateDoubleParameter(para.paraName, para.paraValue, true, true, false);

                        //设置分组
                        if (para.paraType == 0)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "指标参数");
                        }
                        if (para.paraType == 1)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "构型和总体参数");
                        }
                        if (para.paraType == 2)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "旋翼参数");
                        }
                        if (para.paraType == 3)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "机身翼面参数");
                        }
                        if (para.paraType == 4)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "着陆装置参数");
                        }
                        if (para.paraType == 5)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "动力系统参数");
                        }
                        if (para.paraType == 6)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "传动系统参数");
                        }
                        if (para.paraType == 7)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "操纵系统参数");
                        }
                        if (para.paraType == 8)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "人工参数");
                        }
                        if (para.paraType == 9)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "其他类型参数");
                        }
                        if (para.paraType == 10)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "临时参数");
                        }
                    }
                    MainForm.SetParameterUnit(para.paraName, para.paraUnit);
                }
            }

            /*------------------------------------------删除文件中没有的参数-----------------------------*/

            List <string> lstName = new List <string>();

            for (int i = 0; i < lstTdePara.Count; i++)
            {
                bool IsExit = false;
                foreach (ParaData data in lstPara)
                {
                    if (data.paraName == lstTdePara[i].paraName)
                    {
                        IsExit = true;
                        break;
                    }
                }
                if (IsExit == false)
                {
                    lstName.Add(lstTdePara[i].paraName);
                }
            }

            //删除参数
            foreach (string str in lstName)
            {
                PubSyswareCom.DeleteParameter(string.Empty, str);
            }

            if (msg != "")
            {
                XLog.Write(msg);
                //MessageBox.Show(msg);
            }
            //----------------------------------------------------------------------------------------------//
            XLog.Write("同步参数表成功");
        }
        /// <summary>
        /// 确定事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnParameterConfirm_Click(object sender, EventArgs e)
        {
            string strErroInfo = GetPageVerification();
            if (strErroInfo != string.Empty)
            {
                XLog.Write(strErroInfo);
                return;
            }

            ParaData paraData = GetPageData();
            bool IsRecover = false;

            if (strType == "new" || strType == "JYNew")
            {
                for (int i = 0; i < lstAllParaData.Count; i++)
                {
                    //新建参数名重复提示覆盖
                    if (//paraData.paraType == lstAllParaData[i].paraType &&
                        paraData.paraName == lstAllParaData[i].paraName)
                    {
                        DialogResult result = MessageBox.Show("参数名称" + paraData.paraName + "同名是否覆盖?", "覆盖提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);

                        if (result == DialogResult.Yes)
                        {
                            lstAllParaData[i] = paraData;
                            IsRecover = true;
                        }
                        else
                        {
                            return;
                        }
                    }
                }

                if (IsRecover == false)
                {
                    lstAllParaData.Add(paraData);
                }
            }
            if (strType == "edit")
            {
                // 先删除
                ParaData tempPara = new ParaData();

                //string[] strArray = selNode.ToolTipText.Split('|');
                //int paraType = -1;
                //if (strArray != null && strArray.Length > 2)
                //{
                //    paraType = int.Parse(strArray[2]);
                //}
                for (int j = 0; j < lstAllParaData.Count; j++)
                {
                    if (//lstAllParaData[j].paraType == paraType &&
                        selNode.Name == lstAllParaData[j].paraName)
                    {
                        tempPara = lstAllParaData[j];
                        lstAllParaData.Remove(lstAllParaData[j]);
                    }
                }

                //bool IsSame = false;
                //// 在已有的参数列表中查找当前同名同类型参数
                //foreach (ParaData para in lstAllParaData)
                //{
                //    if (para.paraName == paraData.paraName && para.paraType == paraData.paraType)
                //    {
                //        MessageBox.Show("当前存在同类型同名称参数,请修改!");
                //        IsSame = true;
                //        lstAllParaData.Add(tempPara);
                //        return;
                //    }
                //}
                //// 没有便进行修改
                //if (IsSame == false)
                //{
                    lstAllParaData.Add(paraData);
                //}
            }

            //lst排序
            List<ParaData> lstTemp = GetSelParaData();
            lstTemp = lstTemp.OrderBy(s => s.paraType).ToList();

            BindTreeParaData(lstTemp);

            SetingPageButton("confirm");
            SettingTitle("confirm");

            TreeSelNode(paraData);
        }
        /// <summary>
        /// 更新修正因子数据
        /// </summary>
        private void UpDateModifyRatioData()
        {
            lstRatio = new List<ParaData>();

            if (cmbCurrentSel.Text == "校核因子和技术因子")
            {
                string strParaName1 = string.Empty;
                string strParaName2 = string.Empty;

                if (lstJHRatio != null && lstTeachRatio != null && lstJHRatio.Count > 0 && lstTeachRatio.Count > 0)
                {
                    foreach (ParaData data1 in lstJHRatio)
                    {
                        strParaName1 = data1.paraName.Substring(5, data1.paraName.Length - 5);
                        foreach (ParaData data2 in lstTeachRatio)
                        {
                            strParaName2 = data2.paraName.Substring(5, data2.paraName.Length - 5);

                            if (strParaName1 == strParaName2 && data1.strRemark == data2.strRemark)
                            {
                                ParaData data = new ParaData();
                                data.paraName = "修正因子-" + strParaName2;
                                data.paraType = 8;
                                data.strRemark = data1.strRemark;
                                data.paraValue = data1.paraValue * data2.paraValue;

                                lstRatio.Add(data);
                                break;
                            }
                        }
                    }
                }
            }
            else if (cmbCurrentSel.Text == "校核因子")
            {
                if (lstJHRatio != null && lstJHRatio.Count > 0)
                {
                    string strParaName = string.Empty;
                    foreach (ParaData data in lstJHRatio)
                    {
                        strParaName = data.paraName.Substring(5, data.paraName.Length - 5);
                        data.paraName = "修正因子-" + strParaName;
                        lstRatio.Add(data);
                    }
                }
            }
            else if (cmbCurrentSel.Text == "技术因子")
            {
                if (lstTeachRatio != null && lstTeachRatio.Count > 0)
                {
                    string strParaName = string.Empty;
                    foreach (ParaData data in lstTeachRatio)
                    {
                        strParaName = data.paraName.Substring(5, data.paraName.Length - 5);
                        data.paraName = "修正因子-" + strParaName;
                        lstRatio.Add(data);
                    }
                }
            }
        }
        /// <summary>
        /// 更新技术因子
        /// </summary>
        private void UpDateTechRatioData()
        {
            double dValue = 0;
            if (lstTeachRatio != null && lstTeachRatio.Count > 0)
            {
                for (int i = 1; i < dgvCorrectFactor.ColumnCount; i++)
                {
                    if (cmbCurrentSel.Text == "技术因子")
                    {
                        dValue = dgvCorrectFactor.Rows[0].Cells[i].Value == null ? 0 : Convert.ToDouble(dgvCorrectFactor.Rows[0].Cells[i].Value.ToString());
                        lstTeachRatio[i - 1].paraValue = dValue;
                    }

                    if (cmbCurrentSel.Text == "校核因子和技术因子")
                    {
                        dValue = dgvCorrectFactor.Rows[1].Cells[i].Value == null ? 0 : Convert.ToDouble(dgvCorrectFactor.Rows[1].Cells[i].Value.ToString());
                        lstTeachRatio[i - 1].paraValue = dValue;
                    }
                }
            }
            else
            {
                if (lstTeachRatio == null)
                {
                    lstTeachRatio = new List<ParaData>();
                }

                for (int i = 1; i < dgvCorrectFactor.ColumnCount; i++)
                {
                    if (cmbCurrentSel.Text == "技术因子")
                    {
                        dValue = dgvCorrectFactor.Rows[0].Cells[i].Value == null ? 0 : Convert.ToDouble(dgvCorrectFactor.Rows[0].Cells[i].Value.ToString());
                    }

                    if (cmbCurrentSel.Text == "校核因子和技术因子")
                    {
                        dValue = dgvCorrectFactor.Rows[1].Cells[i].Value == null ? 0 : Convert.ToDouble(dgvCorrectFactor.Rows[1].Cells[i].Value.ToString());
                    }

                    ParaData data = new ParaData();
                    data.paraName = "技术因子-" + dgvCorrectFactor.Columns[i].HeaderText;
                    data.paraUnit = "无量纲";
                    data.paraValue = dValue;
                    data.paraType = 8;

                    //获取路径
                    data.strRemark = dgvCorrectFactor.Columns[i].ToolTipText;

                    lstTeachRatio.Add(data);
                }
            }
        }
        /// <summary>
        /// 从数据文件导入修正因子
        /// </summary>
        private void FormDataFileImportRatio(string strImportType)
        {
            if (basicWeightData == null || basicWeightData.lstWeightData.Count == 0)
            {
                MessageBox.Show("请先导入基础重量数据");
                return;
            }

            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Filter = "xml文件 (*.xml)|*.xml|Excle文件 (*.xls)|*.xls|All File (*.*)|*.*";
            fileDialog.RestoreDirectory = true;
            fileDialog.FilterIndex = 1;

            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                string strFilePath = fileDialog.FileName;

                //if (IsRatioDataFileFormat(strFilePath) == false)
                //{
                //    XLog.Write("导入文件\"" + strFilePath + "\"格式错误");
                //    return;
                //}

                //获取重量设计数据
                List<ParaData> lstPara = null;
                if (strFilePath.EndsWith(".xls"))
                {
                    lstPara = GetExcelRatioData(strFilePath);
                }
                else if (strFilePath.EndsWith(".xml"))
                {
                    lstPara = GetXmlListRatioData(strFilePath);
                }
                else
                {
                    XLog.Write("导入文件\"" + strFilePath + "\"格式错误");
                    MessageBox.Show("导入文件\"" + strFilePath + "\"格式错误");
                    return;
                }

                if (lstPara == null)
                {
                    return;
                }
                if (lstPara != null && lstPara.Count == 0)
                {
                    MessageBox.Show("导入的文件没有数据");
                    return;
                }

                string str = ImportRatioType(lstPara, strImportType);
                if (str != string.Empty)
                {
                    MessageBox.Show(str);
                    return;
                }

                //判断导入修正因子是否与重量基础数据一致
                if (WeightSortData.blIsFit(basicWeightData, lstPara) == false)
                {
                    MessageBox.Show("导入的修正因子与基础数据不一致");
                    return;
                }

                if (lstPara != null && lstPara.Count > 0)
                {
                    string strTrype = lstPara[0].paraName.Substring(0, 4);
                    if (strTrype == "校核因子")
                    {
                        SetJHRatioData(lstPara);
                    }
                    if (strTrype == "技术因子")
                    {
                        SetTechRatioData(lstPara);
                    }
                    XLog.Write("导入文件\"" + strFilePath + "\"成功");
                }

                if (cmbCurrentSel.Text == "校核因子")
                {
                    lstRatio = new List<ParaData>();

                    if (lstJHRatio != null && lstJHRatio.Count > 0)
                    {
                        foreach (ParaData data in lstJHRatio)
                        {
                            lstRatio.Add(data);
                        }
                    }
                }
                else if (cmbCurrentSel.Text == "技术因子")
                {
                    lstRatio = new List<ParaData>();

                    if (lstTeachRatio != null && lstTeachRatio.Count > 0)
                    {
                        foreach (ParaData data in lstTeachRatio)
                        {
                            lstRatio.Add(data);
                        }
                    }
                }
                else
                {
                    lstRatio = new List<ParaData>();
                    string strParaName1 = string.Empty;
                    string strParaName2 = string.Empty;

                    if (lstJHRatio != null && lstTeachRatio != null && lstJHRatio.Count > 0 && lstTeachRatio.Count > 0)
                    {
                        foreach (ParaData data1 in lstJHRatio)
                        {
                            strParaName1 = data1.paraName.Substring(5, data1.paraName.Length - 5);
                            foreach (ParaData data2 in lstTeachRatio)
                            {
                                strParaName2 = data2.paraName.Substring(5, data2.paraName.Length - 5);

                                if (strParaName1 == strParaName2 && data1.strRemark == data2.strRemark)
                                {
                                    ParaData data = new ParaData();
                                    data.paraName = data1.paraName;
                                    data.paraType = 8;
                                    data.strRemark = data1.strRemark;
                                    data.paraValue = data1.paraValue * data2.paraValue;

                                    lstRatio.Add(data);
                                    break;
                                }
                            }
                        }
                    }
                }

                //设置修正因子
                SetRatioData(lstRatio);

                //显示柱状图
                //DisplayInPicture(lstJHRatio, lstTeachRatio, lstRatio);
                DisplayAdjustmentInPic(lstJHRatio, lstTeachRatio, lstRatio);
            }
        }
        private void buttonApply_Click(object sender, EventArgs e)
        {
            string errmsg;
            ZstExpression.CExpression expr = ZstExpression.CExpression.Parse(textBoxFormulaEdit.Text, out errmsg);

            if (expr == null)
            {
                MessageBox.Show(errmsg);
                return;
            }
            textBoxFormulaEdit.Text = expr.GetExpression();

            TreeNode node = treeViewWeightSortNode.SelectedNode;
            NodeFormula nf = (NodeFormula)node.Tag;
            WeightFormula wf = nf[nEditFormulaIndex];

            wf.Formula = textBoxFormulaEdit.Text;
            List<string> paras = new List<string>();
            expr.GetVariables(ref paras);

            wf.ParaList.Clear();

            foreach (string paraname in paras)
            {
                ParaData wp = null;
                if (dictTempPara.ContainsKey(paraname))
                {
                    wp = FindParameter(paraname, dictTempPara[paraname]);
                }
                else
                {
                    wp = FindParameter(paraname, null);
                }
                if (wp == null)
                {
                    wp = new ParaData();
                    wp.paraName = paraname;
                    wp.paraType = 10;
                }
                wf.ParaList.Add(wp);
            }
            HashSet<ParaData> wpSet = new HashSet<ParaData>();
            foreach (ParaData wp in nf.XFormula.ParaList)
            {
                wpSet.Add(wp);
            }
            foreach (ParaData wp in nf.YFormula.ParaList)
            {
                wpSet.Add(wp);
            }
            SetParaList(wpSet);

            if (nEditFormulaIndex == 0)
            {
                textBoxFormulaX.Text = wf.Formula;
                textBoxFormulaX.Modified = false;
            }
            else
            {
                textBoxFormulaY.Text = wf.Formula;
                textBoxFormulaY.Modified = false;
            }

            SetEditMode(1);

            dateTimePickerLastModifyTime.Value = DateTime.Today;
        }
        private void buttonApply_Click(object sender, EventArgs e)
        {
            WeightFormula wf = null;
            if (groupBoxSelectFormula.Visible)
            {
                TreeNode node = treeViewWeightSortNode.SelectedNode;

                WeightFormula oldwf = (WeightFormula)node.Tag;
                oldwf.nAttach = 0;
                wf = mapCandidateFormula.First(temppair => temppair.Value == (string)listBoxCandidateFormula.SelectedItem).Key;
                node.Tag = wf;
                wf.NodePath = node.Name;
                wf.nAttach = 1;
                textBoxFormula.Text = wf.Formula;
                listBoxCandidateFormula.Items.Remove(listBoxCandidateFormula.SelectedItem);

                if (mapCandidateFormula.ContainsKey(oldwf))
                {
                    listBoxCandidateFormula.Items.Add(mapCandidateFormula[oldwf]);
                }
            }
            else
            {
                string errmsg;
                ZstExpression.CExpression expr = ZstExpression.CExpression.Parse(textBoxFormula.Text, out errmsg);

                if (expr == null)
                {
                    MessageBox.Show(errmsg);
                    return;
                }
                textBoxFormula.Text = expr.GetExpression();

                TreeNode node = treeViewWeightSortNode.SelectedNode;
                wf = (WeightFormula)node.Tag;

                wf.Formula = textBoxFormula.Text;
                List<string> paras = new List<string>();
                expr.GetVariables(ref paras);

                wf.ParaList.Clear();

                foreach (string paraname in paras)
                {
                    ParaData wp = null;
                    if (dictTempPara.ContainsKey(paraname))
                    {
                        wp = FindParameter(paraname, dictTempPara[paraname]);
                    }
                    else
                    {
                        wp = FindParameter(paraname, null);
                    }
                    if (wp == null)
                    {
                        wp = new ParaData();
                        wp.paraName = paraname;
                        wp.paraType = 10;
                    }
                    wf.ParaList.Add(wp);
                }
            }
            SetParaList(wf.ParaList);
            textBoxFormula.Modified = false;
            SetEditMode(1);

            dateTimePickerLastModifyTime.Value = DateTime.Today;
        }
        private void TreeSelNode(ParaData para)
        {
            TreeNode rootNode = null;
            if (treeViewParameterList.Nodes.Count > 0)
            {
                rootNode = treeViewParameterList.Nodes[0];

                if (rootNode != null && rootNode.Nodes.Count > 0)
                {
                    foreach (TreeNode parentNode in rootNode.Nodes)
                    {
                        if (parentNode.Nodes.Count > 0 && para.paraType.ToString() == parentNode.Name)
                        {
                            foreach (TreeNode node in parentNode.Nodes)
                            {
                                if (para.paraName == node.Name)
                                {
                                    treeViewParameterList.SelectedNode = node;
                                }
                            }
                        }
                    }
                }
            }
        }
        private void btnCompute_Click(object sender, EventArgs e)
        {
            if (!bEditProject)
            {
                txtWeightEstName.Text = txtWeightEstName.Text.Trim();
                if (txtWeightEstName.Text.Length == 0)
                {
                    MessageBox.Show("设计数据名称不能为空!");
                    return;
                }

                if (Verification.IsCheckString(txtWeightEstName.Text))
                {
                    MessageBox.Show("设计数据名称含有非法字符");
                    return;
                }
                curWa.DataName = txtWeightEstName.Text;
            }

            for (int i = 0; i < curWa.FormulaList.Count; ++i)
            {
                CExpression expr = curExprList[i];
                foreach (ParaData wp in curWa.FormulaList[i].ParaList)
                {
                    expr.SetVariableValue(wp.paraName, wp.paraValue);
                }

                double value = expr.Run();
                if (double.IsInfinity(value) || double.IsNaN(value))
                {
                    MessageBox.Show("参数值或公式有误!节点: " + curWa.FormulaList[i].NodePath);
                    return;
                }
                curWa.FormulaList[i].Value = value;
            }

            //curWa.WriteArithmeticFile("test.xml", true);

            if (mainForm.designProjectData == null)
            {
                CoreDesignProject coreForm = new CoreDesignProject(mainForm, "new");
                coreForm.ShowDialog();
            }

            if (mainForm.designProjectData.lstWeightArithmetic == null)
            {
                mainForm.designProjectData.lstWeightArithmetic = new List<WeightArithmetic>();
            }

            //计算
            Dictionary<ParaData, ParaData> wpDict = new Dictionary<ParaData, ParaData>();

            List<WeightFormula> FormulaList = new List<WeightFormula>();
            foreach (WeightFormula formula in curWa.FormulaList)
            {
                List<ParaData> ParaList = new List<ParaData>();
                foreach (ParaData para in formula.ParaList)
                {
                    ParaData tempWp = null;
                    if (!wpDict.ContainsKey(para))
                    {
                        tempWp = new ParaData(para);
                        wpDict.Add(para, tempWp);
                    }
                    else
                    {
                        tempWp = wpDict[para];
                    }
                    ParaList.Add(tempWp);
                }
                formula.ParaList = ParaList;
            }

            if (!bEditProject)
            {
                mainForm.designProjectData.lstWeightArithmetic.Add(curWa);
                mainForm.BindProjectTreeData(mainForm.designProjectData);
                mainForm.SetWeightDesignTab(curWa, mainForm.designProjectData.lstWeightArithmetic.Count - 1);

                XLog.Write("设计数据\"" + txtWeightEstName.Text + "\"计算完成!");
            }
            else
            {
                //刷新页面
                mainForm.SetWeightDesignReuslt(curWa);
                XLog.Write("设计数据\"" + txtWeightEstName.Text + "\"重新计算完成!");
            }

            DialogResult = DialogResult.OK;
            Close();
        }
        /// <summary>
        /// 获取excle文件数据
        /// </summary>
        /// <param name="strFilePath"></param>
        /// <returns></returns>
        private List<ParaData> GetFileParaData(string strFilePath)
        {
            List<ParaData> lstParaData = new List<ParaData>();

            if (File.Exists(strFilePath))
            {
                ExcelLib OpExcel = new ExcelLib();
                //指定操作的文件
                OpExcel.OpenFileName = strFilePath;
                //打开文件
                if (OpExcel.OpenExcelFile() == false)
                {
                    return lstParaData;
                }
                //取得所有的工作表名称
                string[] strSheetsName = OpExcel.getWorkSheetsName();

                //默认操作第一张表
                OpExcel.SetActiveWorkSheet(1);
                System.Data.DataTable table;
                table = OpExcel.getAllCellsValue();
                OpExcel.CloseExcelApplication();

                int count = table.Rows.Count;

                for (int i = 0; i < count; i++)
                {
                    ParaData para = new ParaData();

                    para.paraName = table.Rows[i][0].ToString();
                    para.paraEnName = table.Rows[i][1].ToString();
                    para.paraUnit = table.Rows[i][2].ToString();
                    para.paraType = Convert.ToInt32(table.Rows[i][3].ToString());
                    para.paraValue = Convert.ToDouble(table.Rows[i][4].ToString());
                    para.strRemark = table.Rows[i][5].ToString();

                    lstParaData.Add(para);
                }
            }

            return lstParaData;
        }
        private List<ParaData> GetExcelRatioData(string strFilePath)
        {
            List<ParaData> lstParaData = null;
            try
            {
                if (File.Exists(strFilePath))
                {
                    ExcelLib OpExcel = new ExcelLib();
                    //指定操作的文件
                    OpExcel.OpenFileName = strFilePath;
                    //打开文件
                    if (OpExcel.OpenExcelFile() == false)
                    {
                        return lstParaData;
                    }
                    //取得所有的工作表名称
                    string[] strSheetsName = OpExcel.getWorkSheetsName();

                    //默认操作第一张表
                    OpExcel.SetActiveWorkSheet(1);
                    System.Data.DataTable table;
                    table = OpExcel.getAllCellsValue();
                    OpExcel.CloseExcelApplication();

                    int count = table.Rows.Count;
                    if (count > 0)
                    {
                        lstParaData = new List<ParaData>();
                        for (int i = 0; i < count; i++)
                        {
                            ParaData data = new ParaData();

                            data.paraName = table.Rows[i][0].ToString();
                            data.paraEnName = table.Rows[i][1].ToString();
                            data.paraUnit = table.Rows[i][2].ToString();
                            data.paraType = Convert.ToInt32(table.Rows[i][3].ToString());
                            data.paraValue = Convert.ToDouble(table.Rows[i][4].ToString());
                            data.strRemark = table.Rows[i][5].ToString();

                            lstParaData.Add(data);
                        }
                    }
                }
            }
            catch
            {
                XLog.Write("导入文件\"" + strFilePath + "\"格式错误");
                MessageBox.Show("导入文件\"" + strFilePath + "\"格式错误");
                return null;
            }

            return lstParaData;
        }
        /// <summary>
        /// 获取页面数据
        /// </summary>
        /// <returns></returns>
        private ParaData GetPageData()
        {
            ParaData paraData = new ParaData();

            paraData.paraName = textBoxParaName.Text.Trim();
            paraData.paraEnName = textBoxParaEnName.Text.Trim();
            paraData.paraUnit = cmbUnit.Text;
            paraData.paraType = int.Parse(cmbParameterType.SelectedIndex.ToString());
            paraData.strRemark = txtParameterRemark.Text;

            return paraData;
        }
        private List<ParaData> GetParaData(string strPath)
        {
            List<ParaData> lstTempData = new List<ParaData>();

            if (!File.Exists(strPath))
            {
                return lstTempData;
            }

            string path = string.Empty;
            XmlNode node = null;

            XmlDocument doc = new XmlDocument();
            doc.Load(strPath);

            //工程名称
            path = "PMC/参数列表";
            node = doc.SelectSingleNode(path);

            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                ParaData para = new ParaData();

                //para.paraName = node.ChildNodes[i].ChildNodes[0].InnerText;
                //para.paraUnit = node.ChildNodes[i].ChildNodes[1].InnerText;
                //para.paraType = int.Parse(node.ChildNodes[i].ChildNodes[2].InnerText);
                //para.paraValue = Convert.ToDouble(node.ChildNodes[i].ChildNodes[3].InnerText);
                //para.strRemark = node.ChildNodes[i].ChildNodes[4].InnerText;
                para.paraName = node.ChildNodes[i].ChildNodes[0].InnerText;
                para.paraEnName = node.ChildNodes[i].ChildNodes[1].InnerText;
                para.paraUnit = node.ChildNodes[i].ChildNodes[2].InnerText;
                para.paraType = int.Parse(node.ChildNodes[i].ChildNodes[3].InnerText);
                para.paraValue = Convert.ToDouble(node.ChildNodes[i].ChildNodes[4].InnerText);
                para.strRemark = node.ChildNodes[i].ChildNodes[5].InnerText;

                lstTempData.Add(para);
            }
            return lstTempData;
        }
        /// <summary>
        /// 获取参数表数据转换成ListParaData
        /// </summary>
        /// <returns></returns>
        public static List<ParaData> GetListParaData()
        {
            List<ParaData> lstPara = null;
            if (PubSyswareCom.IsRuntimeServerStarted())
            {
                //获取参数的值
                object obj = null;

                PubSyswareCom.GetParameterNames(string.Empty, ref obj);

                //转换为字符串数组
                if (obj is Object[])
                {
                    lstPara = new List<ParaData>();

                    object[] objName = obj as Object[];
                    for (int i = 0; i < objName.Count(); i++)
                    {
                        Object objValue = null;
                        PubSyswareCom.mGetParameter(string.Empty, objName[i].ToString(), ref objValue);

                        if (objValue != null)
                        {
                            //参数
                            if (objName[i].ToString() != "weightData" && objName[i].ToString() != "coreEnvelopeData")
                            {
                                ParaData data = new ParaData();
                                data.paraName = objName[i].ToString();
                                try
                                {
                                    data.paraValue = Convert.ToDouble(objValue.ToString());
                                }
                                catch(Exception e)
                                {
                                    data.paraValue = 0;
                                    XLog.Write(e.Message);
                                }

                                lstPara.Add(data);
                            }
                        }

                    }
                }
            }
            else
            {
                MessageBox.Show("TDE/IDE 没有启动成功");
            }

            return lstPara;
        }
        /// <summary>
        /// 同步参数到参数列表
        /// </summary>
        private void SynchronizationWeightPara()
        {
            string msg = "";
            List<ParaData> lstPara = new List<ParaData>();
            if (lstAllParaData != null && lstAllParaData.Count > 0)
            {
                foreach (ParaData para in lstAllParaData)
                {
                    ParaData data = new ParaData();
                    data.paraName = para.paraName;
                    data.paraEnName = para.paraEnName;
                    try
                    {
                        data.paraUnit = dicUnits[para.paraUnit];
                    }
                    catch
                    {
                        //data.paraUnit = para.paraUnit;
                        msg += data.paraName + "单位值'" + para.paraUnit + "'不在IDE已有单位范围中;\n";
                    }

                    data.paraType = para.paraType;
                    data.paraValue = para.paraValue;
                    data.strRemark = para.strRemark;

                    lstPara.Add(data);
                }
            }

            //参数表中的参数
            List<ParaData> lstTdePara = WeightEstimateForm.GetListParaData();

            if (lstPara != null && lstPara.Count > 0)
            {
                foreach (ParaData para in lstPara)
                {

                    if (MainForm.IsExitPara(para.paraName, lstTdePara) == false)
                    {
                        PubSyswareCom.CreateDoubleParameter(para.paraName, para.paraValue, true, true, false);

                        //设置分组
                        if (para.paraType == 0)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "指标参数");
                        }
                        if (para.paraType == 1)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "构型和总体参数");
                        }
                        if (para.paraType == 2)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "旋翼参数");
                        }
                        if (para.paraType == 3)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "机身翼面参数");
                        }
                        if (para.paraType == 4)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "着陆装置参数");
                        }
                        if (para.paraType == 5)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "动力系统参数");
                        }
                        if (para.paraType == 6)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "传动系统参数");
                        }
                        if (para.paraType == 7)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "操纵系统参数");
                        }
                        if (para.paraType == 8)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "人工参数");
                        }
                        if (para.paraType == 9)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "其他类型参数");
                        }
                        if (para.paraType == 10)
                        {
                            PubSyswareCom.SetParameterGroup(para.paraName, "临时参数");
                        }
                    }
                    MainForm.SetParameterUnit(para.paraName, para.paraUnit);
                }

            }

            /*------------------------------------------删除文件中没有的参数-----------------------------*/

            List<string> lstName = new List<string>();

            for (int i = 0; i < lstTdePara.Count; i++)
            {
                bool IsExit = false;
                foreach (ParaData data in lstPara)
                {
                    if (data.paraName == lstTdePara[i].paraName)
                    {
                        IsExit = true;
                        break;
                    }
                }
                if (IsExit == false)
                {
                    lstName.Add(lstTdePara[i].paraName);
                }
            }

            //删除参数
            foreach (string str in lstName)
            {
                PubSyswareCom.DeleteParameter(string.Empty, str);
            }

            if (msg != "")
            {
                XLog.Write(msg);
                //MessageBox.Show(msg);
            }
            //----------------------------------------------------------------------------------------------//
            XLog.Write("同步参数表成功");
        }