You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.4 KiB
C++

#include "CommandLineHandler.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
#include "FITK_Kernel/FITKCore/FITKActionOperator.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include <QDir>
#include <QFileInfo>
#include <QCollator>
void CommandLineHandler::exec()
{
//查找参数
int index = _args.indexOf("-i");
if (index >= 0)importVTK(index + 1);
}
void CommandLineHandler::importVTK(const int index)
{
//获取文件名称
QString files = this->argValue(index);
if (files.isEmpty()) return;
QFileInfo fileInfo(files);
if (!fileInfo.exists())return;
//操作器
Core::FITKActionOperator* oper = nullptr;
if (fileInfo.isDir()) {
oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
files = getFilesToPath(files, "vtk");
}
else if (fileInfo.isFile()) {
oper = FITKOPERREPO->getOperatorT<Core::FITKActionOperator>("actionOpen");
}
if (files.isEmpty())return;
if (oper == nullptr) return;
oper->setArgs("files", files);
oper->execProfession();
}
QString CommandLineHandler::getFilesToPath(QString path, QString fileType)
{
QDir dir(path);
// 设置过滤器,过滤出文件
dir.setFilter(QDir::Files | QDir::NoSymLinks);
// 设置名称过滤器,只选择 .vtk 扩展名的文件
QString type = QString("*.%1").arg(fileType);
dir.setNameFilters(QStringList() << type);
// 获取文件信息列表
QFileInfoList fileInfoList = dir.entryInfoList();
if (fileInfoList.isEmpty())return "";
//获取所有的文件
QStringList fileList = {};
for (auto fileInfo : fileInfoList) {
fileList.append(fileInfo.filePath());
}
//对文件进行大小排序
QCollator collator;
collator.setNumericMode(true);
std::sort(fileList.begin(), fileList.end(),
[&collator](const QString & str1, const QString & str2)
{
return collator.compare(str1, str2) < 0;
});
//对文件进行处理
QString fileName = fileList.at(0);
QString fileHead, fileHeadExt, NodeText;
int endPos = fileName.length() - fileType.length() - 2;
int beginPos;
for (beginPos = endPos; beginPos >= 0; --beginPos) {
if (fileName[beginPos] > '9' || fileName[beginPos] < '0') break;
}
fileHead = fileName.mid(0, beginPos + 1);
NodeText = fileHead + "..." + fileType;
return NodeText;
}