761 lines
27 KiB
C#
761 lines
27 KiB
C#
using MaterialDesignThemes.Wpf;
|
||
using MetroGauges.General;
|
||
using MetroGauges.Model;
|
||
using MetroGauges.ViewModel;
|
||
using Microsoft.Win32;
|
||
using NPOI.HSSF.UserModel;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.SS.Util;
|
||
using NPOI.XSSF.UserModel;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.ObjectModel;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Media.Imaging;
|
||
using System.Xml.Linq;
|
||
|
||
namespace MetroGauges
|
||
{
|
||
/// <summary>
|
||
/// Curve_of_equipment_gauge.xaml 的交互逻辑
|
||
/// </summary>
|
||
public partial class WpfCurEqui
|
||
{
|
||
DgViewModel<CurEquiModel> vm;
|
||
CurEquiModel curequi;
|
||
private bool isCollasped;
|
||
private bool IsCal=false;
|
||
|
||
public WpfCurEqui()
|
||
{
|
||
curequi = new CurEquiModel();
|
||
vm = new DgViewModel<CurEquiModel>();
|
||
InitializeComponent();
|
||
L.Text = "22.1";
|
||
a.Text = "15.7";
|
||
v.Text = "65";
|
||
hac.Text = "100";
|
||
}
|
||
|
||
#region 窗体
|
||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||
{
|
||
//dataGrid.ItemsSource = vm.Item;
|
||
dataGrid.DataContext = vm;
|
||
}
|
||
private void WindowMinimize_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
this.WindowState = WindowState.Minimized;
|
||
}
|
||
private void WindowClose_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
Hide();
|
||
}
|
||
private void Zone_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
|
||
{
|
||
DragMove();
|
||
}
|
||
private void BtnPalette_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
WpfPalette colorset = new WpfPalette();
|
||
colorset.ShowDialog();
|
||
}
|
||
private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
|
||
{
|
||
dataGrid.Width = this.ActualWidth - 20;
|
||
if (isCollasped)
|
||
{
|
||
dataGrid.Height = this.ActualHeight - 129;
|
||
}
|
||
else
|
||
{
|
||
dataGrid.Height = this.ActualHeight - 253;
|
||
}
|
||
}
|
||
|
||
|
||
#endregion
|
||
#region 参数设置
|
||
private void CbbCx_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
{
|
||
switch (CbbCx.SelectedIndex)
|
||
{
|
||
case 0:
|
||
CurEquiModel.nMetro = NMetro.A;
|
||
break;
|
||
case 1:
|
||
CurEquiModel.nMetro = NMetro.B;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void CbbDc_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
{
|
||
switch (CbbCx.SelectedIndex)
|
||
{
|
||
case 0:
|
||
CurEquiModel.c_Bal = Ballast.Monolithic;
|
||
|
||
break;
|
||
case 1:
|
||
CurEquiModel.c_Bal = Ballast.Gravel;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
private void CbbFx_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
{
|
||
switch (CbbFx.SelectedIndex)
|
||
{
|
||
case 0:
|
||
CurEquiModel.dir = HorizonDirection.Left;
|
||
break;
|
||
case 1:
|
||
CurEquiModel.dir = HorizonDirection.Right;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
private void CbbVc_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||
{
|
||
switch (CbbVc.SelectedIndex)
|
||
{
|
||
case 0:
|
||
CurEquiModel.vc = Vertical.Convex;
|
||
break;
|
||
case 1:
|
||
CurEquiModel.vc = Vertical.Concave;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
//private void RbCx_Checked(object sender, RoutedEventArgs e)
|
||
//{
|
||
// RadioButton rb = sender as RadioButton;
|
||
// if (rb == null)
|
||
// {
|
||
// return;
|
||
// }
|
||
|
||
// CurEquiModel.nMetro = rb == rbA ? NMetro.A : NMetro.B;
|
||
//}
|
||
//private void RbDc_Checked(object sender, RoutedEventArgs e)
|
||
//{
|
||
// if (!(sender is RadioButton rb))
|
||
// {
|
||
// return;
|
||
// }
|
||
// CurEquiModel.c_bal = rb == rbZt ? Ballast.Monolithic : Ballast.Gravel;
|
||
//}
|
||
//private void RbFx_Checked(object sender, RoutedEventArgs e)
|
||
//{
|
||
// if (!(sender is RadioButton rb))
|
||
// {
|
||
// return;
|
||
// }
|
||
// CurEquiModel.dir = rb == rbZz ? HorizonDirection.Left : HorizonDirection.Right;
|
||
//}
|
||
#endregion
|
||
#region 表格操作
|
||
private void BtnDeleteRow_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (dataGrid.SelectedItem != null)
|
||
{
|
||
vm.Items.RemoveAt(dataGrid.SelectedIndex);
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void BtnForwardRow_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
CurEquiModel selecteditem = (CurEquiModel)dataGrid.SelectedItem;
|
||
var index = dataGrid.SelectedIndex;
|
||
if (index > 0)
|
||
{
|
||
vm.Items.RemoveAt(index);
|
||
vm.Items.Insert(index - 1, selecteditem);
|
||
dataGrid.SelectedIndex = index - 1;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void BtnBackwardRow_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
CurEquiModel selecteditem = (CurEquiModel)dataGrid.SelectedItem;
|
||
var index = dataGrid.SelectedIndex;
|
||
if (index < vm.Items.Count - 1 && index != -1)
|
||
{
|
||
vm.Items.RemoveAt(index);
|
||
vm.Items.Insert(index + 1, selecteditem);
|
||
dataGrid.SelectedIndex = index + 1;
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void BtnAddRowAfter_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (dataGrid.SelectedItem != null)
|
||
{
|
||
vm.Items.Insert(dataGrid.SelectedIndex + 1, new CurEquiModel());
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void BtnAddRowBefore_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (dataGrid.SelectedItem != null)
|
||
{
|
||
vm.Items.Insert(dataGrid.SelectedIndex, new CurEquiModel());
|
||
}
|
||
IsCal = false;
|
||
}
|
||
|
||
private void BtnAddRowLast_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
vm.Items.Add(new CurEquiModel()); IsCal = false;
|
||
}
|
||
#endregion
|
||
|
||
#region 工具栏
|
||
private void BtnOpen_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
OpenFileDialog ofd = new OpenFileDialog
|
||
{
|
||
Filter = "XML文件(*.xml)|*.xml",
|
||
Title = "打开文件",
|
||
RestoreDirectory = true
|
||
};
|
||
if (ofd.ShowDialog() == true && ofd.CheckFileExists == true)
|
||
{
|
||
//完整路径
|
||
string file = ofd.FileName;
|
||
vm.Items.Clear();
|
||
XDocument document = XDocument.Load(file);
|
||
XElement root = document.Root;
|
||
if (root.FirstAttribute.Value == "直线设备限界点")
|
||
{
|
||
//获取根元素下的所有子元素
|
||
IEnumerable<XElement> enumerable = root.Elements();
|
||
foreach (var xe in enumerable)
|
||
{
|
||
CurEquiModel data = new CurEquiModel();
|
||
data.StrPosition = xe.Name.LocalName;
|
||
data.Name = (string)xe.Attribute("点号");
|
||
data.X = (double)xe.Attribute("X");
|
||
data.Y = (double)xe.Attribute("Y");
|
||
vm.Items.Add(data);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void RbHeightValve_Checked(object sender, RoutedEventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void BtnCheck_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
|
||
}
|
||
|
||
private void BtnSave_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
SaveFileDialog sfd = new SaveFileDialog();
|
||
sfd.Filter = "文本文件(*.xml)|*.xml";
|
||
sfd.FileName = "直线设备限界数据(已定义点位)";
|
||
sfd.DefaultExt = "xml";
|
||
sfd.AddExtension = true;
|
||
if (sfd.ShowDialog() == true)
|
||
{
|
||
XDocument document = new XDocument();
|
||
XElement root = new XElement("控制点坐标");
|
||
root.SetAttributeValue("车型", CurEquiModel.nMetro.GetDescription());
|
||
root.SetAttributeValue("控制点类型", "直线设备限界点");
|
||
for (int i = 0; i < vm.Items.Count; i++)
|
||
{
|
||
var dm = vm.Items[i];
|
||
XElement childXml = new XElement(dm.Position.GetDescription());
|
||
childXml.SetAttributeValue("点号", dm.Name);
|
||
childXml.SetAttributeValue("X", dm.X);
|
||
childXml.SetAttributeValue("Y", dm.Y);
|
||
root.Add(childXml);
|
||
|
||
}
|
||
root.Save(sfd.FileName);
|
||
}
|
||
}
|
||
private void BtnSaveGauges_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
SaveFileDialog sfd = new SaveFileDialog();
|
||
sfd.Filter = "文本文件(*.xml)|*.xml";
|
||
sfd.FileName = "曲线设备限界数据";
|
||
sfd.DefaultExt = "xml";
|
||
sfd.AddExtension = true;
|
||
if (sfd.ShowDialog() == true)
|
||
{
|
||
XDocument document = new XDocument();
|
||
XElement root = new XElement("控制点坐标");
|
||
root.SetAttributeValue("车型", CurEquiModel.nMetro.GetDescription());
|
||
root.SetAttributeValue("控制点类型", "曲线设备限界点");
|
||
for (int i = 0; i < vm.Items.Count; i++)
|
||
{
|
||
var dm = vm.Items[i];
|
||
XElement childXml = new XElement(dm.Position.GetDescription());
|
||
childXml.SetAttributeValue("点号", dm.Name);
|
||
childXml.SetAttributeValue("X", dm.Xr);
|
||
childXml.SetAttributeValue("Y", dm.Yr);
|
||
root.Add(childXml);
|
||
|
||
}
|
||
root.Save(sfd.FileName);
|
||
}
|
||
}
|
||
|
||
private void BtnExcel_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (vm.Items != null)
|
||
{
|
||
SaveFileDialog sfd = new SaveFileDialog();
|
||
sfd.Filter = "Excel 工作簿(*.xlsx)|*.xlsx|Excel 97-2003 工作簿(*.xls)|*.xls";
|
||
sfd.FileName = "曲线段设备限界";
|
||
//默认保存格式
|
||
sfd.DefaultExt = "xml";
|
||
//自动添加扩展名
|
||
sfd.AddExtension = true;
|
||
if (sfd.ShowDialog() == true)
|
||
{
|
||
IWorkbook workbook;
|
||
string fileExt = System.IO.Path.GetExtension(sfd.FileName).ToLower();
|
||
if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }
|
||
if (workbook == null) { return; }
|
||
//ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("车辆限界计算表") : workbook.CreateSheet(dt.TableName);
|
||
ISheet sheet = workbook.CreateSheet("曲线段设备限界数据表");
|
||
List<string> CommentList = new List<string>();
|
||
CommentList.Add("控制点所在位置");
|
||
CommentList.Add("点号");
|
||
CommentList.Add("横坐标");
|
||
CommentList.Add("纵坐标");
|
||
CommentList.Add("直线设备限界横坐标");
|
||
CommentList.Add("直线设备限界纵坐标");
|
||
CommentList.Add("总横向偏移量");
|
||
CommentList.Add("总竖向偏移量");
|
||
ICellStyle style = workbook.CreateCellStyle();
|
||
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
|
||
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
|
||
//表头
|
||
IRow r0 = sheet.CreateRow(0);
|
||
IDrawing draw = sheet.CreateDrawingPatriarch();
|
||
ICreationHelper help = workbook.GetCreationHelper();
|
||
|
||
for (int i = 0; i < dataGrid.Columns.Count; i++)
|
||
{
|
||
IComment com = draw.CreateCellComment(draw.CreateAnchor(0, 0, 0, 0, 0, 3, 3, 4));
|
||
//IRichTextString str;
|
||
com.String = help.CreateRichTextString(CommentList[i]);
|
||
ICell cell = r0.CreateCell(i);
|
||
cell.SetCellValue(dataGrid.Columns[i].Header.ToString());
|
||
cell.CellComment = com;
|
||
cell.CellStyle = style;
|
||
}
|
||
for (int i = 0; i < vm.Items.Count; i++)
|
||
{
|
||
dataGrid.ScrollIntoView(dataGrid.Items[i]);
|
||
dataGrid.UpdateLayout();
|
||
IRow row = sheet.CreateRow(i + 1);
|
||
for (int j = 0; j < dataGrid.Columns.Count; j++)
|
||
{
|
||
ICell cell = row.CreateCell(j);
|
||
FrameworkElement cellvalue = dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]);
|
||
if (j == 0)
|
||
{
|
||
cell.SetCellValue((cellvalue as ComboBox).Text);
|
||
}
|
||
else
|
||
{
|
||
cell.SetCellValue((cellvalue as TextBlock).Text);
|
||
}
|
||
cell.CellStyle = style;
|
||
sheet.AutoSizeColumn(j);
|
||
}
|
||
}
|
||
dataGrid.ScrollIntoView(dataGrid.Items[0]);
|
||
dataGrid.UpdateLayout();
|
||
//转为字节数组
|
||
MemoryStream stream = new MemoryStream();
|
||
workbook.Write(stream);
|
||
var buf = stream.ToArray();
|
||
|
||
//保存为Excel文件
|
||
using (FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write))
|
||
{
|
||
fs.Write(buf, 0, buf.Length);
|
||
fs.Flush();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void BtnPreview_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (!IsCal)
|
||
{
|
||
MessageBox.Show("请先进行限界计算", "提示");
|
||
return;
|
||
}
|
||
WpfPreview pre = new WpfPreview(vm);
|
||
pre.ShowDialog();
|
||
}
|
||
private void BtnFCAD_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (!IsCal)
|
||
{
|
||
MessageBox.Show("请先进行限界计算", "提示" );
|
||
return;
|
||
}
|
||
ObservableCollection<CurEquiModel> othCoordPoints = new ObservableCollection<CurEquiModel>();
|
||
ObservableCollection<CurEquiModel> pgCoordPoints = new ObservableCollection<CurEquiModel>();
|
||
ObservableCollection<CurEquiModel> dm = vm.Items;
|
||
for (int i = 0; i < dm.Count; i++)
|
||
{
|
||
if (dm[i].Position == PositionI.Pantograph)
|
||
{
|
||
pgCoordPoints.Add(dm[i]);
|
||
}
|
||
else
|
||
{
|
||
othCoordPoints.Add(dm[i]);
|
||
}
|
||
}
|
||
if (pgCoordPoints.Count == 0 || othCoordPoints.Count == 0)
|
||
{
|
||
ParaSetBar.MessageQueue.Enqueue("数据不全");
|
||
return;
|
||
}
|
||
CadHelper cadHelper = new CadHelper();
|
||
|
||
cadHelper.AddLayer("曲线设备限界", CadHelper.CYAN);
|
||
DrawInitCAD(cadHelper, true, pgCoordPoints);
|
||
DrawInitCAD(cadHelper, false, pgCoordPoints);
|
||
DrawInitCAD(cadHelper, true, othCoordPoints);
|
||
DrawInitCAD(cadHelper, false, othCoordPoints);
|
||
|
||
cadHelper.ZoomAll();
|
||
}
|
||
private void BtnBCAD_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
//for (int i = 0; i < dtAll.Rows.Count; i++)
|
||
//{
|
||
// double x = (double)dtAll.Rows[i][1];
|
||
// double y = (double)dtAll.Rows[i][2];
|
||
// DataRow dr;
|
||
// dr = dtTransR.NewRow();
|
||
// dr[0] = dtAll.Rows[i][0];
|
||
// dr[1] = Math.Round(x * Math.Cos(CG.α()) - y * Math.Sin(CG.α()), 1, MidpointRounding.AwayFromZero);
|
||
// dr[2] = Math.Round(y * Math.Cos(CG.α()) + x * Math.Sin(CG.α()), 1, MidpointRounding.AwayFromZero);
|
||
// dtTransR.Rows.Add(dr);
|
||
// //dataGrid1.DataContext = dtTransR;
|
||
//}
|
||
//for (int i = 0; i < dtAll.Rows.Count; i++)
|
||
//{
|
||
// double x = (double)dtAll.Rows[i][1];
|
||
// double y = (double)dtAll.Rows[i][2];
|
||
// DataRow dr;
|
||
// dr = dtTransL.NewRow();
|
||
// dr[0] = dtAll.Rows[i][0];
|
||
// dr[1] = Math.Round(-x * Math.Cos(CG.α()) - y * Math.Sin(CG.α()), 1, MidpointRounding.AwayFromZero);
|
||
// dr[2] = Math.Round(y * Math.Cos(CG.α()) - x * Math.Sin(CG.α()), 1, MidpointRounding.AwayFromZero);
|
||
// dtTransL.Rows.Add(dr);
|
||
//}
|
||
if (!IsCal)
|
||
{
|
||
MessageBox.Show("请先进行限界计算", "提示");
|
||
return;
|
||
}
|
||
ObservableCollection<CurEquiModel> othCoordPoints = new ObservableCollection<CurEquiModel>();
|
||
ObservableCollection<CurEquiModel> pgCoordPoints = new ObservableCollection<CurEquiModel>();
|
||
ObservableCollection<CurEquiModel> dm = vm.Items;
|
||
for (int i = 0; i < dm.Count; i++)
|
||
{
|
||
if (dm[i].Position == PositionI.Pantograph)
|
||
{
|
||
pgCoordPoints.Add(dm[i]);
|
||
}
|
||
else
|
||
{
|
||
othCoordPoints.Add(dm[i]);
|
||
}
|
||
}
|
||
if (pgCoordPoints.Count == 0 || othCoordPoints.Count == 0)
|
||
{
|
||
ParaSetBar.MessageQueue.Enqueue("数据不全");
|
||
return;
|
||
}
|
||
CadHelper cadHelper = new CadHelper();
|
||
|
||
cadHelper.AddLayer("曲线设备限界", CadHelper.CYAN);
|
||
List<string> groups = new List<string>();
|
||
foreach (var item in pgCoordPoints)
|
||
{
|
||
var lastchar = item.Name.Substring(item.Name.Length - 1, 1);
|
||
if (!groups.Contains(lastchar))
|
||
{
|
||
groups.Add(lastchar);
|
||
}
|
||
|
||
}
|
||
List<ObservableCollection<CurEquiModel>> listli = new List<ObservableCollection<CurEquiModel>>();
|
||
for (int i = 0; i < groups.Count; i++)
|
||
{
|
||
List<CurEquiModel> list = new List<CurEquiModel>();
|
||
for (int j = 0; j < pgCoordPoints.Count; j++)
|
||
{
|
||
if (pgCoordPoints[j].Name.EndsWith(groups[i]))
|
||
{
|
||
list.Add(pgCoordPoints[j]);
|
||
}
|
||
}
|
||
var ordered = list.OrderBy(k => k.Name).ToList();
|
||
listli.Add(new ObservableCollection<CurEquiModel>(ordered));
|
||
}
|
||
foreach (var item in listli)
|
||
{
|
||
DrawInitCAD(cadHelper, true, item);
|
||
DrawInitCAD(cadHelper, false, item);
|
||
}
|
||
DrawInitCAD(cadHelper, true, othCoordPoints);
|
||
DrawInitCAD(cadHelper, false, othCoordPoints);
|
||
|
||
cadHelper.ZoomAll();
|
||
}
|
||
|
||
private void BtnTrans_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
|
||
}
|
||
private void DrawInitCAD(CadHelper cadHelper, bool isRight, ObservableCollection<CurEquiModel> models)
|
||
{
|
||
double[] PtSt = new double[2];
|
||
double[] PtEn = new double[2];
|
||
string Corder = models[0].Name;
|
||
PtSt[0] = -models[0].Xr; PtSt[1] = models[0].Yr;
|
||
if (isRight)
|
||
{
|
||
PtSt[0] = models[0].Xr;
|
||
}
|
||
for (int i = 1; i < models.Count; i++)
|
||
{
|
||
PtEn[0] = -models[i].Xr; PtEn[1] = models[i].Yr;
|
||
if (isRight)
|
||
{
|
||
PtEn[0] = models[i].Xr;
|
||
cadHelper.DrawText(Corder + "(" + PtSt[0] + "," + PtSt[1] + ")", PtSt);
|
||
}
|
||
cadHelper.DrawLine(PtSt, PtEn);
|
||
|
||
PtSt[0] = PtEn[0]; PtSt[1] = PtEn[1];
|
||
|
||
Corder = models[i].Name;
|
||
if (models.Count - 1 == i && isRight)
|
||
{
|
||
cadHelper.DrawText(Corder + "(" + PtSt[0] + "," + PtSt[1] + ")", PtEn);
|
||
}
|
||
}
|
||
}
|
||
private void TbPara_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
if (TbPara.IsChecked == false)
|
||
{
|
||
isCollasped = true;
|
||
StackPara.Visibility = Visibility.Collapsed;
|
||
dataGrid.Height = this.ActualHeight - 129;
|
||
}
|
||
else
|
||
{
|
||
isCollasped = false;
|
||
StackPara.Visibility = Visibility.Visible;
|
||
dataGrid.Height = this.ActualHeight - 253;
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
private void Btnclear_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
vm.Items.Clear();
|
||
IsCal=false;
|
||
}
|
||
|
||
private void AddPoints(DataTable dt, XElement root, string child)
|
||
{
|
||
XElement childXml = new XElement(child);
|
||
for (int i = 0; i < dt.Rows.Count; i++)
|
||
{
|
||
XElement point = new XElement("坐标点");
|
||
//设置点节点的属性
|
||
point.SetAttributeValue("点号", dt.Rows[i][0].ToString());
|
||
point.SetAttributeValue("X", dt.Rows[i][1].ToString());
|
||
point.SetAttributeValue("Y", dt.Rows[i][2].ToString());
|
||
//将点的节点添加到上级节点中
|
||
childXml.Add(point);
|
||
}
|
||
//将位置的节点添加到根节点
|
||
root.Add(childXml);
|
||
}
|
||
//车体偏移量
|
||
private void Add2CarDtPyl(double x, double y, DataRow dr1)
|
||
{
|
||
//dr1[0] = kineModel.T_a;
|
||
//dr1[1] = kineModel.T_i;
|
||
//dr1[2] = Cal.ΔX_Qa(y);
|
||
//dr1[3] = Cal.ΔX_Qi(y);
|
||
//dr1[4] = Cal.ΔY_Qa(x);
|
||
//dr1[5] = Cal.ΔY_Qi(x);
|
||
//dr1[6] = Cal.ΔX_ca();
|
||
//dr1[7] = Cal.ΔX_ci();
|
||
//dr1[8] = Cal.ΔX(y);
|
||
//dr1[9] = Cal.ΔY(x);
|
||
//dtPyl.Rows.Add(dr1);
|
||
}
|
||
//转向架偏移量
|
||
private void Add2BogieDtPyl(double x, double y, DataRow dr1)
|
||
{
|
||
//dr1[0] = kineModel.T_ba;
|
||
//dr1[1] = kineModel.T_bi;
|
||
//dr1[2] = Cal.ΔX_Qa(y);
|
||
//dr1[3] = Cal.ΔX_Qi(y);
|
||
//dr1[4] = Cal.ΔY_Qa(x);
|
||
//dr1[5] = Cal.ΔY_Qi(x);
|
||
//dr1[6] = Cal.ΔX_cat();
|
||
//dr1[7] = Cal.ΔX_cit();
|
||
//dr1[8] = Cal.ΔX1(y);
|
||
//dr1[9] = Cal.ΔY(x);
|
||
//dtPyl.Rows.Add(dr1);
|
||
}
|
||
private void BtnCalc_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
//if (L.Text == "" || a.Text == "" || R.Text == ""|| v.Text == "" || hac.Text == "")
|
||
//{
|
||
// //ParaSetBar.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center;
|
||
|
||
// ParaSetBar.MessageQueue.Enqueue("请先设置参数");
|
||
// return;
|
||
//}
|
||
//for (int i = 0; i < vm.Items.Count; i++)
|
||
//{
|
||
// CurEquiModel model = vm.Items[i];
|
||
// switch (model.Position)
|
||
// {
|
||
// case PositionI.Pantograph:
|
||
// break;
|
||
// case PositionI.Body:
|
||
// break;
|
||
// case PositionI.BogieFrame:
|
||
// break;
|
||
// case PositionI.Unsprung:
|
||
|
||
// break;
|
||
// case PositionI.Tread:
|
||
|
||
// break;
|
||
// case PositionI.Rim:
|
||
// break;
|
||
// case PositionI.Collector:
|
||
// break;
|
||
// default:
|
||
// break;
|
||
// }
|
||
//}
|
||
IsCal = true;
|
||
foreach (ColorZone cz in CbbWrap.Children)
|
||
{
|
||
if (cz == null)
|
||
{
|
||
return;
|
||
}
|
||
ComboBox c = (ComboBox)cz.Content;
|
||
if (c != null)
|
||
{
|
||
if (c.SelectedIndex == -1)
|
||
{
|
||
ParaSetBar.MessageQueue.Enqueue("请先选择参数");
|
||
return;
|
||
}
|
||
|
||
}
|
||
}
|
||
foreach (ColorZone cz in TbWrap.Children)
|
||
{
|
||
StackPanel s = (StackPanel)cz.Content;
|
||
foreach (var c in s.Children)
|
||
{
|
||
if (c is TextBox)
|
||
{
|
||
TextBox t = (TextBox)c;
|
||
if (t.Text == "")
|
||
{
|
||
ParaSetBar.MessageQueue.Enqueue("请先输入参数");
|
||
|
||
t.Focus();
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
for (int i = 0; i < vm.Items.Count; i++)
|
||
{
|
||
CurEquiModel model = vm.Items[i];
|
||
switch (model.Position)
|
||
{
|
||
case PositionI.Body:
|
||
model.ΔXr = model.ΔX;
|
||
model.ΔYr = model.ΔY_jg;
|
||
break;
|
||
case PositionI.BogieFrame:
|
||
model.ΔXr = model.ΔX_t;
|
||
model.ΔYr = 0;
|
||
break;
|
||
case PositionI.INVAIL:
|
||
break;
|
||
}
|
||
}
|
||
dataGrid.CommitEdit();
|
||
dataGrid.Items.Refresh();
|
||
}
|
||
|
||
|
||
|
||
|
||
//private async void DialogsBeforeExit(string filename)
|
||
//{
|
||
//MessageDialogResult result = await this.ShowMessageAsync(this.Title, "是否打开文件", MessageDialogStyle.AffirmativeAndNegative);
|
||
//if (result == MessageDialogResult.Negative)
|
||
//{
|
||
// return;
|
||
//}
|
||
//else
|
||
//{
|
||
// Process.Start(filename);
|
||
//}
|
||
//}
|
||
|
||
}
|
||
}
|
||
|