add,计划采集13:

优化逻辑
This commit is contained in:
tangchao0503
2026-06-16 15:31:06 +08:00
parent d9f1ed922b
commit fc3853c3ca
15 changed files with 626 additions and 223 deletions

View File

@ -544,51 +544,15 @@ void TwoMotorControl::on_rangeMeasurement()
void TwoMotorControl::onAddRecordLine_btn()
{
//准备数据:获取y马达的当前位置,获取x马达的当前位置和最大位置
// 准备数据:获取y马达的当前位置,获取x马达的当前位置和最大位置
double currentPosOfYmotor = 15;
double currentPosOfXmotor = 0;
double maxRangeOfXmotor = 50;
//获取选中行的索引
int currentRow = ui.recordLine_tableWidget->currentRow();
std::cout << "currentRow:" << currentRow << std::endl;
QTableWidgetItem* Item1 = new QTableWidgetItem(QString::number(currentPosOfYmotor, 10, 2));
QTableWidgetItem* Item2 = new QTableWidgetItem(QString::number(1, 10, 2));
QTableWidgetItem* Item3 = new QTableWidgetItem(QString::number(currentPosOfXmotor, 10, 2));
QTableWidgetItem* Item4 = new QTableWidgetItem(QString::number(1, 10, 2));
QTableWidgetItem* Item5 = new QTableWidgetItem(QString::number(maxRangeOfXmotor, 10, 2));
QTableWidgetItem* Item6 = new QTableWidgetItem(QString::number(1, 10, 2));
Item1->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Item2->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Item3->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Item4->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Item5->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
Item6->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
if (currentRow == -1)//当没有选中行时
{
int RowCount = ui.recordLine_tableWidget->rowCount();//Returns the number of rows. 从1开始的
ui.recordLine_tableWidget->insertRow(RowCount);//增加一行,形参是从0开始的
ui.recordLine_tableWidget->setItem(RowCount, 0, Item1);
ui.recordLine_tableWidget->setItem(RowCount, 1, Item2);
ui.recordLine_tableWidget->setItem(RowCount, 2, Item3);
ui.recordLine_tableWidget->setItem(RowCount, 3, Item4);
ui.recordLine_tableWidget->setItem(RowCount, 4, Item5);
ui.recordLine_tableWidget->setItem(RowCount, 5, Item6);
}
else
{
ui.recordLine_tableWidget->insertRow(currentRow + 1);//增加一行,形参是从0开始的
ui.recordLine_tableWidget->setItem(currentRow + 1, 0, Item1);
ui.recordLine_tableWidget->setItem(currentRow + 1, 1, Item2);
ui.recordLine_tableWidget->setItem(currentRow + 1, 2, Item3);
ui.recordLine_tableWidget->setItem(currentRow + 1, 3, Item4);
ui.recordLine_tableWidget->setItem(currentRow + 1, 4, Item5);
ui.recordLine_tableWidget->setItem(currentRow + 1, 5, Item6);
}
PathLineManager::addRecordLine(ui.recordLine_tableWidget,
currentPosOfYmotor, 1.0,
currentPosOfXmotor, 1.0,
maxRangeOfXmotor, 1.0);
}
void TwoMotorControl::onRemoveRecordLine_btn()
@ -609,106 +573,40 @@ void TwoMotorControl::onDeleteRecordLine_btn()
void TwoMotorControl::onSaveRecordLine2File_btn()
{
//确保采集线存在
// 确保采集线存在
if (ui.recordLine_tableWidget->rowCount() <= 0)
{
QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("请先生成轨迹!"));
QMessageBox::information(this, QString::fromLocal8Bit("提示"),
QString::fromLocal8Bit("请先生成轨迹!"));
return;
}
FileOperation* fileOperation = new FileOperation();
string directory = fileOperation->getDirectoryOfExe();
QString RecordLineFilePath = QFileDialog::getSaveFileName(this, tr("Save RecordLine3 File"),
QString::fromStdString(directory),
tr("RecordLineFile3 (*.RecordLine3)"));
if (RecordLineFilePath.isEmpty())
{
return;
}
FILE* RecordLineFileHandle = fopen(RecordLineFilePath.toStdString().c_str(), "wb+");
double number = ui.recordLine_tableWidget->rowCount() * ui.recordLine_tableWidget->columnCount();
fwrite(&number, sizeof(double), 1, RecordLineFileHandle);
double* data = new double[number];
//double data[number];
for (size_t i = 0; i < ui.recordLine_tableWidget->rowCount(); i++)
{
for (size_t j = 0; j < ui.recordLine_tableWidget->columnCount(); j++)
{
data[i * ui.recordLine_tableWidget->columnCount() + j] = ui.recordLine_tableWidget->item(i, j)->text().toDouble();
}
}
fwrite(data, sizeof(double), number, RecordLineFileHandle);
fclose(RecordLineFileHandle);
delete[] data;
//QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("保存成功!"));
PathLineManager::saveToFile(RecordLineFilePath, ui.recordLine_tableWidget);
}
void TwoMotorControl::onReadRecordLineFile_btn()
{
//打开文件
FileOperation* fileOperation = new FileOperation();
string directory = fileOperation->getDirectoryOfExe();
QString RecordLineFilePath = QFileDialog::getOpenFileName(this, tr("Open RecordLine3 File"),
QString::fromStdString(directory),
tr("RecordLineFile (*.RecordLine3)"));
if (RecordLineFilePath.isEmpty())
{
return;
}
readRecordLineFile(RecordLineFilePath);
}
void TwoMotorControl::readRecordLineFile(QString RecordLineFilePath)
{
FILE* RecordLineFileHandle = fopen(RecordLineFilePath.toStdString().c_str(), "rb");
double number;
//读取数据
fread(&number, sizeof(double), 1, RecordLineFileHandle);
double* data = new double[number];
for (size_t i = 0; i < number; i++)
{
fread(data + i, sizeof(double), 1, RecordLineFileHandle);
//std::cout << *(data + i) << std::endl;
}
//向tableWidget添加采集线
//(1)去掉tableWidget中所有的行
int rowCount = ui.recordLine_tableWidget->rowCount();
for (size_t i = 0; i < rowCount; i++)
{
ui.recordLine_tableWidget->removeRow(0);
}
//(2)添加行(采集线)
int RecordLineCount = number / ui.recordLine_tableWidget->columnCount();
for (size_t i = 0; i < RecordLineCount; i++)
{
ui.recordLine_tableWidget->insertRow(0);
}
//(3)向tableWidget填充数据
for (size_t i = 0; i < ui.recordLine_tableWidget->rowCount(); i++)
{
for (size_t j = 0; j < ui.recordLine_tableWidget->columnCount(); j++)
{
QTableWidgetItem* tmp = new QTableWidgetItem(QString::number(data[i * ui.recordLine_tableWidget->columnCount() + j], 10, 5));
tmp->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
ui.recordLine_tableWidget->setItem(i, j, tmp);
}
}
fclose(RecordLineFileHandle);
delete[] data;
//QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("读取成功!"));
PathLineManager::readFromFile(RecordLineFilePath, ui.recordLine_tableWidget);
}