读写矩阵
vtkSmartPointer<vtkMatrix4x4> QtResourceSupport::LoadMatrixWithQtResourceSupport(const QString & pathOrResource)
{
QString realPath = pathOrResource;
QTemporaryFile tmp;
if (pathOrResource.startsWith(":/")) {
QFile f(pathOrResource);
if (!f.open(QIODevice::ReadOnly)) {
return nullptr;
}
tmp.setFileTemplate(QDir::tempPath() + "/XXXXXX");
if (!tmp.open()) {
return nullptr;
}
tmp.write(f.readAll());
tmp.flush();
realPath = tmp.fileName();
}
QFile file(realPath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return nullptr;
}
QTextStream in(&file);
in.setRealNumberNotation(QTextStream::SmartNotation);
in.setRealNumberPrecision(15);
double vals[16];
for (int k = 0; k < 16; ++k) {
if (in.atEnd()) {
file.close();
return nullptr;
}
in >> vals[k];
}
file.close();
vtkSmartPointer<vtkMatrix4x4> mat = vtkSmartPointer<vtkMatrix4x4>::New();
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
mat->SetElement(i, j, vals[4 * i + j]);
}
}
return mat;
}
bool QtResourceSupport::SaveMatrixWithQtResourceSupport(const QString & pathOrResource, vtkSmartPointer<vtkMatrix4x4> mat)
{
QString realPath = pathOrResource;
QTemporaryFile tmp;
bool wroteToTemp = false;
if (pathOrResource.startsWith(":/")) {
tmp.setFileTemplate(QDir::tempPath() + "/XXXXXX");
if (!tmp.open()) {
return false;
}
realPath = tmp.fileName();
wroteToTemp = true;
}
QFile file(realPath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
return false;
}
QTextStream out(&file);
out.setRealNumberNotation(QTextStream::FixedNotation);
out.setRealNumberPrecision(15);
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
out << mat->GetElement(i, j);
if (!(i == 3 && j == 3)) {
out << ' ';
}
}
}
out << '\n';
file.close();
(void)wroteToTemp;
return true;
}