public static string GetCoreEstimatedDataToString(CoreAssessResult result) { StringBuilder strBulider = new StringBuilder(); if (result.assessCoreDataList != null && result.assessCoreDataList.Count > 0) { string str = "、"; foreach (CorePointExt core in result.assessCoreDataList) { if (core != result.assessCoreDataList.First()) { strBulider.Append("|"); } strBulider.Append(core.pointName + ":"); strBulider.Append("横坐标(毫米)" + str); strBulider.Append("纵坐标(千克)" + str); strBulider.Append(core.pointXValue.ToString() + str); strBulider.Append(core.pointYValue.ToString() + str); strBulider.Append(core.isAssess.ToString() + str); strBulider.Append(core.weightedValue.ToString() + str); strBulider.Append(core.assessValue.ToString()); } } return(strBulider.ToString()); }
private void btnConfirm_Click(object sender, EventArgs e) { ownerForm.saveCoreGridView(this.assessCoreDatas, "1"); CoreAssessResult car = this.ownerForm.coreAssessResult; car.topMarginMin = Convert.ToDouble(this.txtTopMarginMin.Text); car.topMarginMax = Convert.ToDouble(this.txtTopMarginMax.Text); car.downMarginMin = Convert.ToDouble(this.txtDownMarginMin.Text); car.downMarginMax = Convert.ToDouble(this.txtDownMarginMax.Text); this.Close(); }
public void ExportCoreEstimatedToExcle(string strFileName, CoreAssessResult result) { Excel.Application app = new Excel.ApplicationClass(); try { Object missing = System.Reflection.Missing.Value; app.Visible = false; Excel.Workbook wBook = app.Workbooks.Add(missing); Excel.Worksheet wSheet = wBook.Worksheets[1] as Excel.Worksheet; Excel.Range DataCell = wSheet.get_Range("A1", "A1"); DataCell.Value2 = "重心坐标点名称"; DataCell.Next.Value2 = "横轴单位"; DataCell.Next.Next.Value2 = "纵轴单位"; DataCell.Next.Next.Next.Value2 = "横轴数值"; DataCell.Next.Next.Next.Next.Value2 = "纵轴数值"; DataCell.Next.Next.Next.Next.Next.Value2 = "是否评估"; DataCell.Next.Next.Next.Next.Next.Next.Value2 = "权重"; DataCell.Next.Next.Next.Next.Next.Next.Next.Value2 = "评估结果"; List <CorePointExt> lstCorePoint = result.assessCoreDataList; for (int i = 0; i < lstCorePoint.Count; ++i) { CorePointExt core = lstCorePoint[i]; string cellid = "A" + (i + 2).ToString(); DataCell = wSheet.get_Range(cellid, cellid); DataCell.Value2 = core.pointName; DataCell.Next.Value2 = "毫米"; DataCell.Next.Next.Value2 = "千克"; DataCell.Next.Next.Next.Value2 = core.pointXValue; DataCell.Next.Next.Next.Next.Value2 = core.pointYValue; DataCell.Next.Next.Next.Next.Next.Value2 = core.isAssess; DataCell.Next.Next.Next.Next.Next.Next.Value2 = core.weightedValue; DataCell.Next.Next.Next.Next.Next.Next.Next.Value2 = core.assessValue; } //设置禁止弹出保存和覆盖的询问提示框 app.DisplayAlerts = false; app.AlertBeforeOverwriting = false; //保存工作簿 wBook.SaveAs(strFileName, Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); wBook.Close(false, missing, missing); app.Quit(); app = null; } catch (Exception err) { MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
private void btnConfirm_Click(object sender, EventArgs e) { if (txtResultName.Text == "") { MessageBox.Show("请输入重心包线评估结果名称"); return; } else { this.coreAssessResult.resultName = txtResultName.Text; } if (this.coreAssessResult.assessCoreDataList.Count == 0 || this.coreAssessResult.datumCoreDataList.Count == 0) { MessageBox.Show("请加载基准/评估重心包线数据"); return; } //if (this.coreAssessResult == null) //{ // this.coreAssessResult = new CoreAssessResult(); //} CoreAssessResult car = this.coreAssessResult; //重心包线评估 if (!evaluationCoreMethod01(car)) { this.saveCoreGridView(this.coreAssessResult.assessCoreDataList, "1"); return; } ; //add if (IsEdit == false) { if (mainForm.designProjectData.CoreAssessResultList == null) { mainForm.designProjectData.CoreAssessResultList = new List <CoreAssessResult>(); } mainForm.designProjectData.CoreAssessResultList.Add(car); mainForm.BindProjectTreeData(mainForm.designProjectData);//用于绑定主窗口的工程树结点 mainForm.SetCoreEstimatedTab(car, mainForm.designProjectData.CoreAssessResultList.Count - 1); } else { mainForm.SetCoreEstimatedTab(car); } this.Close(); }
private void btnConfirm_Click(object sender, EventArgs e) { int[] i = { Convert.ToInt32(this.txtTopMarginMin.Text), Convert.ToInt32(this.txtTopMarginMax.Text), Convert.ToInt32(this.txtDownMarginMin.Text), Convert.ToInt32(this.txtDownMarginMax.Text) }; if (!(i[0] < i[1] && i[1] < i[2] && i[2] < i[3])) { MessageBox.Show("请按前限前裕度<前限后裕度<后限前裕度<后限后裕度"); return; } ownerForm.saveCoreGridView(this.assessCoreDatas, "1"); CoreAssessResult car = this.ownerForm.coreAssessResult; car.topMarginMin = Convert.ToDouble(this.txtTopMarginMin.Text) / 100; car.topMarginMax = Convert.ToDouble(this.txtTopMarginMax.Text) / 100; car.downMarginMin = Convert.ToDouble(this.txtDownMarginMin.Text) / 100; car.downMarginMax = Convert.ToDouble(this.txtDownMarginMax.Text) / 100; this.Close(); }
/// <summary> /// 重心包线评估 /// </summary> /// <param name="resut"></param> public bool evaluationCoreMethod01(CoreAssessResult result) { // 查看基准重心包线是否完备 if (result.datumCoreDataList == null) { return false; } else if (result.datumCoreDataList.Count == 0) { return false; } // 查看待评估重心包线是否完备 if (result.assessCoreDataList == null) { return false; } else if (result.assessCoreDataList.Count == 0) { return false; } foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { // 交点X Y坐标列表 List<double> lstPointX = new List<double>(); List<double> lstPointY = new List<double>(); // 找出该点水平线与包线所有交点 for (int i = 0; i < result.datumCoreDataList.Count; i = i + 1) { double fStartX; double fStartY; double fEndX; double fEndY; if (i != result.datumCoreDataList.Count - 1) { fStartX = result.datumCoreDataList[i].pointXValue; fStartY = result.datumCoreDataList[i].pointYValue; fEndX = result.datumCoreDataList[i + 1].pointXValue; fEndY = result.datumCoreDataList[i + 1].pointYValue; } else { fStartX = result.datumCoreDataList[i].pointXValue; fStartY = result.datumCoreDataList[i].pointYValue; fEndX = result.datumCoreDataList[0].pointXValue; fEndY = result.datumCoreDataList[0].pointYValue; } // 超出Y范围 if (cp.pointYValue > fStartY && cp.pointYValue > fEndY) { continue; } else if (cp.pointYValue < fStartY && cp.pointYValue < fEndY) { continue; } else// 处理 { // 若直线水平,则有两点相交 if (fStartY == fEndY) { lstPointX.Add(fStartX); lstPointY.Add(fStartY); lstPointX.Add(fEndX); lstPointY.Add(fEndY); } // 若直线非水平,则只有一点相交 if (fStartY != fEndY) { // 若直线垂直,获得交点 if (fStartX == fEndX) { lstPointX.Add(fStartX); lstPointY.Add(cp.pointYValue); } else // 若直线不垂直,使用直线方程获得交点 { lstPointX.Add((fEndX - fStartX) / (fEndY - fStartY) * (cp.pointYValue - fStartY) + fStartX); lstPointY.Add(cp.pointYValue); } } } } // 找完交点后,根据交点求评估结果 // 排除Y值超限的点 if (lstPointX.Count == 0) { MessageBox.Show("待评估重心点" + cp.pointName + "的重量坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; cp.assessValue = 0; continue; } else { double fMaxX = lstPointX[0]; double fMinX = lstPointX[0]; //查找最大、最小横坐标 for (int i = 0; i < lstPointX.Count; i++) { if (fMaxX < lstPointX[i]) { fMaxX = lstPointX[i]; } if (fMinX > lstPointX[i]) { fMinX = lstPointX[i]; } } // 排除范围外的点 if (cp.pointXValue < fMaxX && cp.pointXValue < fMinX) { MessageBox.Show("待评估重心点" + cp.pointName + "的横坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; cp.assessValue = 0; continue; } else if (cp.pointXValue > fMaxX && cp.pointXValue > fMinX) { MessageBox.Show("待评估重心点" + cp.pointName + "的横坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; cp.assessValue = 0; continue; } // 判断是否为定顶点 if (fMaxX == fMinX) { // 评估点位于顶点 评估结果为0 cp.assessValue = 0.0; } else// 非顶点 { double fLength = (fMaxX - fMinX) * ((result.downMarginMax + result.downMarginMin) * 0.5 - (result.topMarginMax + result.topMarginMin) * 0.5); //double fMidX = fMinX + (fMaxX - fMinX) * ((result.topMarginMax - result.topMarginMin) * 0.5) + fLength / 2.0; double fMidX = fMinX + (fMaxX - fMinX) * (result.downMarginMax + result.downMarginMin + result.topMarginMax + result.topMarginMin) / 4; if (fLength <= 0) cp.assessValue = 0.0; else cp.assessValue = 1 - Math.Abs(cp.pointXValue - fMidX) / fLength * 2.0; } } } } // 根据修改后的待评估重心,重新设定权重,计算最终结果 // 求和权重 double fSum = 0.0; foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { fSum = cp.weightedValue + fSum; } } if (fSum <= 0.0) { MessageBox.Show("权重设置有误"); return false; } // 重新分配权重 foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { cp.weightedValue = cp.weightedValue / fSum; } } // 计算评估结果 result.evaluationResult = 0.0; foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { result.evaluationResult = result.evaluationResult + cp.weightedValue * cp.assessValue; } } return true; }
public CoreEnvelopeAssessForm(CoreAssessResult coreAssessResult) { IsEdit = true; InitializeComponent(); this.coreAssessResult = coreAssessResult; }
public void ExportCoreEstimatedToExcle(string strFileName, CoreAssessResult result) { Excel.Application app = new Excel.ApplicationClass(); try { Object missing = System.Reflection.Missing.Value; app.Visible = false; Excel.Workbook wBook = app.Workbooks.Add(missing); Excel.Worksheet wSheet = wBook.Worksheets[1] as Excel.Worksheet; Excel.Range DataCell = wSheet.get_Range("A1", "A1"); DataCell.Value2 = "重心坐标点名称"; DataCell.Next.Value2 = "横轴单位"; DataCell.Next.Next.Value2 = "纵轴单位"; DataCell.Next.Next.Next.Value2 = "横轴数值"; DataCell.Next.Next.Next.Next.Value2 = "纵轴数值"; DataCell.Next.Next.Next.Next.Next.Value2 = "是否评估"; DataCell.Next.Next.Next.Next.Next.Next.Value2 = "权重"; DataCell.Next.Next.Next.Next.Next.Next.Next.Value2 = "评估结果"; List<CorePointExt> lstCorePoint = result.assessCoreDataList; for (int i = 0; i < lstCorePoint.Count; ++i) { CorePointExt core = lstCorePoint[i]; string cellid = "A" + (i + 2).ToString(); DataCell = wSheet.get_Range(cellid, cellid); DataCell.Value2 = core.pointName; DataCell.Next.Value2 = "毫米"; DataCell.Next.Next.Value2 = "千克"; DataCell.Next.Next.Next.Value2 = core.pointXValue; DataCell.Next.Next.Next.Next.Value2 = core.pointYValue; DataCell.Next.Next.Next.Next.Next.Value2 = core.isAssess; DataCell.Next.Next.Next.Next.Next.Next.Value2 = core.weightedValue; DataCell.Next.Next.Next.Next.Next.Next.Next.Value2 = core.assessValue; } //设置禁止弹出保存和覆盖的询问提示框 app.DisplayAlerts = false; app.AlertBeforeOverwriting = false; //保存工作簿 wBook.SaveAs(strFileName, Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); wBook.Close(false, missing, missing); app.Quit(); app = null; } catch (Exception err) { MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
public static string GetCoreEstimatedDataToString(CoreAssessResult result) { StringBuilder strBulider = new StringBuilder(); if (result.assessCoreDataList != null && result.assessCoreDataList.Count > 0) { string str = "、"; foreach (CorePointExt core in result.assessCoreDataList) { if (core != result.assessCoreDataList.First()) { strBulider.Append("|"); } strBulider.Append(core.pointName + ":"); strBulider.Append("横坐标(毫米)" + str); strBulider.Append("纵坐标(千克)" + str); strBulider.Append(core.pointXValue.ToString() + str); strBulider.Append(core.pointYValue.ToString() + str); strBulider.Append(core.isAssess.ToString() + str); strBulider.Append(core.weightedValue.ToString() + str); strBulider.Append(core.assessValue.ToString()); } } return strBulider.ToString(); }
public void ExportCoreEstimatedToXml(string strFileName, CoreAssessResult result) { if (result.assessCoreDataList != null && result.assessCoreDataList.Count > 0) { XmlDocument xmldoc = new XmlDocument(); XmlTextWriter writeXml = null; try { writeXml = new XmlTextWriter(strFileName, Encoding.GetEncoding("gb2312")); } catch { MessageBox.Show("创建或写入文件失败!"); return; } writeXml.Formatting = Formatting.Indented; writeXml.Indentation = 5; writeXml.WriteStartDocument(); writeXml.WriteStartElement("重心评估"); writeXml.WriteStartElement("重心评估参数列表"); foreach (CorePointExt core in result.assessCoreDataList) { writeXml.WriteStartElement("重心评估数据"); { writeXml.WriteStartElement("重心坐标点名称"); writeXml.WriteString(core.pointName); writeXml.WriteEndElement(); writeXml.WriteStartElement("横轴单位"); writeXml.WriteString("毫米"); writeXml.WriteEndElement(); writeXml.WriteStartElement("纵轴单位"); writeXml.WriteString("千克"); writeXml.WriteEndElement(); writeXml.WriteStartElement("横轴数值"); writeXml.WriteString(core.pointXValue.ToString()); writeXml.WriteEndElement(); writeXml.WriteStartElement("纵轴数值"); writeXml.WriteString(core.pointYValue.ToString()); writeXml.WriteEndElement(); writeXml.WriteStartElement("是否评估"); writeXml.WriteString(core.isAssess.ToString()); writeXml.WriteEndElement(); writeXml.WriteStartElement("权重"); writeXml.WriteString(core.weightedValue.ToString()); writeXml.WriteEndElement(); writeXml.WriteStartElement("评估结果"); writeXml.WriteString(core.assessValue.ToString()); writeXml.WriteEndElement(); } writeXml.WriteEndElement(); } writeXml.WriteEndElement(); writeXml.WriteEndElement(); writeXml.WriteEndDocument(); writeXml.Close(); } }
/// <summary> /// 重心包线评估 /// </summary> /// <param name="resut"></param> public void evaluationCoreMethod01(CoreAssessResult result) { // 查看基准重心包线是否完备 if (result.datumCoreDataList == null) { return; } else if (result.datumCoreDataList.Count == 0) { return; } // 查看待评估重心包线是否完备 if (result.assessCoreDataList == null) { return; } else if (result.assessCoreDataList.Count == 0) { return; } foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { // 交点X Y坐标列表 List <double> lstPointX = new List <double>(); List <double> lstPointY = new List <double>(); // 找出该点水平线与包线所有交点 for (int i = 0; i < result.datumCoreDataList.Count; i = i + 1) { double fStartX; double fStartY; double fEndX; double fEndY; if (i != result.datumCoreDataList.Count - 1) { fStartX = result.datumCoreDataList[i].pointXValue; fStartY = result.datumCoreDataList[i].pointYValue; fEndX = result.datumCoreDataList[i + 1].pointXValue; fEndY = result.datumCoreDataList[i + 1].pointYValue; } else { fStartX = result.datumCoreDataList[i].pointXValue; fStartY = result.datumCoreDataList[i].pointYValue; fEndX = result.datumCoreDataList[0].pointXValue; fEndY = result.datumCoreDataList[0].pointYValue; } // 超出Y范围 if (cp.pointYValue > fStartY && cp.pointYValue > fEndY) { continue; } else if (cp.pointYValue < fStartY && cp.pointYValue < fEndY) { continue; } else// 处理 { // 若直线水平,则有两点相交 if (fStartY == fEndY) { lstPointX.Add(fStartX); lstPointY.Add(fStartY); lstPointX.Add(fEndX); lstPointY.Add(fEndY); } // 若直线非水平,则只有一点相交 if (fStartY != fEndY) { // 若直线垂直,获得交点 if (fStartX == fEndX) { lstPointX.Add(fStartX); lstPointY.Add(cp.pointYValue); } else // 若直线不垂直,使用直线方程获得交点 { lstPointX.Add((fEndX - fStartX) / (fEndY - fStartY) * (cp.pointYValue - fStartY) + fStartX); lstPointY.Add(cp.pointYValue); } } } } // 找完交点后,根据交点求评估结果 // 排除Y值超限的点 if (lstPointX.Count == 0) { MessageBox.Show("待评估重心点" + cp.pointName + "的重量坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; continue; } else { double fMaxX = lstPointX[0]; double fMinX = lstPointX[0]; //查找最大、最小横坐标 for (int i = 0; i < lstPointX.Count; i++) { if (fMaxX < lstPointX[i]) { fMaxX = lstPointX[i]; } if (fMinX > lstPointX[i]) { fMinX = lstPointX[i]; } } // 排除范围外的点 if (cp.pointXValue < fMaxX && cp.pointXValue < fMinX) { MessageBox.Show("待评估重心点" + cp.pointName + "的横坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; continue; } else if (cp.pointXValue > fMaxX && cp.pointXValue > fMinX) { MessageBox.Show("待评估重心点" + cp.pointName + "的横坐标位于基准评估重心范围外,自动剔除并平衡权重"); cp.isAssess = false; cp.weightedValue = 0.0; continue; } // 判断是否为定顶点 if (fMaxX == fMinX) { // 评估点位于顶点 评估结果为0 cp.assessValue = 0.0; } else// 非顶点 { double fLength = (fMaxX - fMinX) * ((result.downMarginMax + result.downMarginMin) * 0.5 - (result.topMarginMax + result.topMarginMin) * 0.5); double fMidX = fMinX + (fMaxX - fMinX) * ((result.topMarginMax - result.topMarginMin) * 0.5) + fLength / 2.0; if (fLength <= 0) { cp.assessValue = 0.0; } else { cp.assessValue = 1 - Math.Abs(cp.pointXValue - fMidX) / fLength; } } } } } // 根据修改后的待评估重心,重新设定权重,计算最终结果 // 求和权重 double fSum = 0.0; foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { fSum = cp.weightedValue + fSum; } } if (fSum <= 0.0) { MessageBox.Show("权重设置有误"); return; } // 重新分配权重 foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { cp.weightedValue = cp.weightedValue / fSum; } } // 计算评估结果 result.evaluationResult = 0.0; foreach (CorePointExt cp in result.assessCoreDataList) { if (cp.isAssess == true) { result.evaluationResult = result.evaluationResult + cp.weightedValue * cp.assessValue; } } }
/// <summary> /// 重心包线评估结果到SyswareDataObject.xml /// </summary> /// <param name="result"></param> /// <param name="isAddChildren">是否增加子结点</param> /// <returns></returns> public static string saveCoreEnvelopeAssessDataObjectToXml(CoreAssessResult result, bool isAddChildren) { string path = null; try { SyswareDataObject sdo = new SyswareDataObject(); SyswareDataObject subSdo = new SyswareDataObject(); subSdo.id = result.resultID; subSdo.name = result.resultName; SyswareDataObject cSdo = new SyswareDataObject(); cSdo.name = "基准重心包线数据"; cSdo.children = transFormCoreEnvelopeCutToDataObject(result.datumCoreDataList); subSdo.children.Add(cSdo); cSdo = new SyswareDataObject(); cSdo.name = "重心包线评估数据"; cSdo.children = transFormCoreEnvelopeCutToDataObject(result.assessCoreDataList); subSdo.children.Add(cSdo); cSdo = new SyswareDataObject(); cSdo.name = "合理性评估数据"; cSdo.value = Math.Round(result.evaluationResult, 6).ToString(); foreach (CorePointExt cpdEx in result.assessCoreDataList) { SyswareDataObject nSdo = new SyswareDataObject(); nSdo.name = cpdEx.pointName; SyswareDataObject aSdo = new SyswareDataObject(); aSdo.name = "评估结果"; aSdo.value = Math.Round(Convert.ToDouble(cpdEx.assessValue), 6).ToString(); //aSdo.unit = "Kilogram"; nSdo.children.Add(aSdo); SyswareDataObject wSdo = new SyswareDataObject(); wSdo.name = "权重结果"; wSdo.value = Math.Round(Convert.ToDouble(cpdEx.weightedValue), 6).ToString(); //aSdo.unit = "Kilogram"; nSdo.children.Add(wSdo); cSdo.children.Add(nSdo); } subSdo.children.Add(cSdo); if (isAddChildren) { sdo = subSdo; } else { sdo.name = "重心包线评估结果"; sdo.children.Add(subSdo); } XmlDocument myXmlDoc = saveSyswareDataObjectToXML(null, null, sdo); path = System.IO.Path.GetTempPath() + System.IO.Path.GetRandomFileName() + ".xml"; //将xml文件保存到临时路径下 myXmlDoc.Save(path); } catch { //XLog.Write("无法保存重心包线评估XML." + e.Message); return(null); } return(path); }