LAMPCAE/src/PluginWBFZExchangePlugin/SharedModuleLib/BaseUiTool.cpp

183 lines
4.3 KiB
C++
Raw Normal View History

2024-03-18 01:05:42 +00:00
#include "BaseUiTool.h"
#include <QTextStream>
#include <stdlib.h>
#include <stdio.h>
#include <QString>
#include <iostream>
#include <vector>
#include <algorithm>
#include <QDebug>
QString TopAbs_ShapeEnum2QString(TopAbs_ShapeEnum v)
{
switch (v)
{
case TopAbs_COMPOUND:
return QString("TopAbs_COMPOUND");
break;
case TopAbs_COMPSOLID:
return QString("TopAbs_COMPSOLID");
break;
case TopAbs_SOLID:
return QString("TopAbs_SOLID");
break;
case TopAbs_SHELL:
return QString("TopAbs_SHELL");
break;
case TopAbs_FACE:
return QString("TopAbs_FACE");
break;
case TopAbs_WIRE:
return QString("TopAbs_WIRE");
break;
case TopAbs_EDGE:
return QString("TopAbs_EDGE");
break;
case TopAbs_VERTEX:
return QString("TopAbs_VERTEX");
break;
case TopAbs_SHAPE:
return QString("TopAbs_SHAPE");
break;
default:
return QString("");
break;
}
}
int findStdVectordouble(const std::vector<double>& sortedVector, double target, double precision)
{
int low = 0;
int high = sortedVector.size() - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
double midValue = sortedVector[mid];
// Check if the difference between target and midValue is smaller than precision
if (std::abs(target - midValue) <= precision) {
return mid; // Found a match
}
// Decide whether to search in the left half or right half of the vector
if (target < midValue) {
high = mid - 1; // Target is in the left half
}
else {
low = mid + 1; // Target is in the right half
}
}
return -1; // Target not found
}
int messageLog(QString logtext, int value)
{
QMessageBox msgBox;
QString messagestr = logtext;
msgBox.setText(messagestr);
msgBox.exec();
return -1;
}
QString writeUTF8StringFile(QString path,QString unicodeString) {
QFile fileOut(path);
if (!fileOut.open(QIODevice::WriteOnly | QIODevice::Text))
{
return "";
}
QTextStream streamFileOut(&fileOut);
streamFileOut.setCodec("UTF-8");
streamFileOut << unicodeString;
streamFileOut.flush();
fileOut.close();
return path;
}
bool isNumeric(const QString& str)
{
bool isNumber = false;
str.toDouble(&isNumber);
return isNumber;
}
std::complex<double> QVariant2Complex(const QVariant& variant)
{
QVariantList list = variant.toList();
if (list.size() >= 2) {
double real = list[0].toDouble();
double imag = list[1].toDouble();
return std::complex<double>(real, imag);
}
else {
2024-03-18 01:05:42 +00:00
// 默认返回值或错误处理
return std::complex<double>();
}
}
QVariant Complex2QVariant(const std::complex<double>& value)
{
QVariantList list;
list << value.real() << value.imag();
return QVariant::fromValue(list);
}
QMap<QString, int> QStringVector2QMapIndex(std::vector<QString>& vlist)
{
QMap<QString, int> result;
for (size_t i = 0; i < vlist.size(); i++) {
result.insert(vlist[i], i);
}
return result;
}
int QAbstracmodel2CsvFile(QString filepath, const QAbstractItemModel* model)
{
2024-03-18 01:05:42 +00:00
qDebug() << u8"正在保存为 csv文件中";
QFile file(filepath);
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
{
QTextStream stream(&file);
size_t columnCount = model->columnCount();
size_t rowCount = model->rowCount();
2024-03-18 01:05:42 +00:00
// 获取文件头
for (size_t column = 0; column < columnCount; ++column) {
QString title = model->headerData(column, Qt::Horizontal, Qt::DisplayRole).toString();
stream << title;
if (column < columnCount - 1) {
stream << ",";
}
else {}
}
stream << "\n";
//
for (size_t i = 0; i < rowCount; ++i) {
for (size_t j = 0; j < columnCount; j++) {
QString title = model->index(i, j).data().toString();
stream << title;
if (j < columnCount - 1) {
stream << ",";
}
else {}
}
stream << "\n";
}
file.close();
}
qDebug() << filepath;
return 0;
}