This repository has been archived on 2026-08-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Course-Project-on-Surveying…/Forms/MainForm.cs
T
2026-06-16 12:36:56 +08:00

232 lines
7.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using kcsj.Models;
using kcsj.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace kcsj.Forms
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnDataInput_Click(object sender, EventArgs e)
{
DataInputForm form = new DataInputForm();
form.ShowDialog();
}
private void MainForm_Load(object sender, EventArgs e)
{
LogService.OnLog += ShowLog;
LogService.AddLog("程序启动成功。");
}
private void ShowLog(string message)
{
LOG.AppendText(message + "\r\n");
LOG.ScrollToCaret();
}
private void ClearLog_Click(object sender, EventArgs e)
{
LOG.Clear();
}
private void 从文件ToolStripMenuItem_Click(object sender, EventArgs e)
{
FileInputForm form = new FileInputForm();
form.ShowDialog();
}
private void 手动输入ToolStripMenuItem_Click(object sender, EventArgs e)
{
ManualInputForm form = new ManualInputForm();
form.ShowDialog();
}
private void 关于ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void 开始平差ToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (!DataStore.HasData)
{
MessageBox.Show("请先导入或输入已知点和观测数据。");
return;
}
LeastSquaresResult result =
LeastSquaresAdjustmentService.Adjust(
DataStore.KnownPoints,
DataStore.Observations);
MessageBox.Show("间接平差计算完成。");
// 示例:把未知点结果输出到日志
foreach (var item in result.UnknownElevations)
{
string pointName = item.Key;
double elevation = item.Value;
double error = result.UnknownElevationErrors[pointName];
LogService.AddLog(
$"{pointName} 平差高程 = {elevation:F4} m,中误差 = ±{error:F4} m");
}
// 示例:输出观测改正数
foreach (var obsResult in result.ObservationResults)
{
LogService.AddLog(
$"第{obsResult.Index}段 {obsResult.FromPoint}->{obsResult.ToPoint}" +
$"v = {obsResult.Residual:F6},平差后高差 = {obsResult.AdjustedHeightDiff:F6}");
}
}
catch (Exception ex)
{
MessageBox.Show("平差失败:" + ex.Message);
LogService.AddLog("平差失败:" + ex.Message);
}
}
private void 查看结果ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void 输出报告ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void btnDataInspect_Click(object sender, EventArgs e)
{
DataCheckResult result = DataCheck.Check(DataStore.KnownPoints, DataStore.Observations);
LogService.AddLog(result.ToLogText());
LogService.AddLog(Environment.NewLine);
if (!result.IsValid)
{
MessageBox.Show(
"数据检查未通过,请查看日志信息。",
"数据检查",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return;
}
MessageBox.Show(
"数据检查通过,可以进行平差计算。",
"数据检查",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
private void btnStartAdjust_Click(object sender, EventArgs e)
{
try
{
if (!DataStore.HasData)
{
MessageBox.Show("请先导入或输入已知点和观测数据。");
return;
}
LeastSquaresResult result =
LeastSquaresAdjustmentService.Adjust(
DataStore.KnownPoints,
DataStore.Observations);
MessageBox.Show("间接平差计算完成。");
// 示例:把未知点结果输出到日志
foreach (var item in result.UnknownElevations)
{
string pointName = item.Key;
double elevation = item.Value;
double error = result.UnknownElevationErrors[pointName];
LogService.AddLog(
$"{pointName} 平差高程 = {elevation:F4} m,中误差 = ±{error:F4} m");
}
// 示例:输出观测改正数
foreach (var obsResult in result.ObservationResults)
{
LogService.AddLog(
$"第{obsResult.Index}段 {obsResult.FromPoint}->{obsResult.ToPoint}" +
$"v = {obsResult.Residual:F6},平差后高差 = {obsResult.AdjustedHeightDiff:F6}");
}
}
catch (Exception ex)
{
MessageBox.Show("平差失败:" + ex.Message);
LogService.AddLog("平差失败:" + ex.Message);
}
}
private void 删除当前数据ToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(
"确定要清空当前数据吗?",
"二次确认",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.Yes)
{
DataStore.Clear();
LogService.AddLog("当前数据已清空");
}
else
{
this.Close();
LogService.AddLog("用户取消清空数据");
}
}
private void 数据检查ToolStripMenuItem_Click(object sender, EventArgs e)
{
DataCheckResult result = DataCheck.Check(DataStore.KnownPoints, DataStore.Observations);
LogService.AddLog(result.ToLogText());
LogService.AddLog(Environment.NewLine);
if (!result.IsValid)
{
MessageBox.Show(
"数据检查未通过,请查看日志信息。",
"数据检查",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
return;
}
MessageBox.Show(
"数据检查通过,可以进行平差计算。",
"数据检查",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}