Sun, 19 Jan 2020 13:53:07 +0200
fixed a pile of nonsense that caused subfiles to go haywire
--- a/locale/fi.ts Sun Jan 19 02:54:48 2020 +0200 +++ b/locale/fi.ts Sun Jan 19 13:53:07 2020 +0200 @@ -189,7 +189,7 @@ <context> <name>PartRenderer</name> <message> - <location filename="../src/gl/partrenderer.cpp" line="155"/> + <location filename="../src/gl/partrenderer.cpp" line="149"/> <source>Rendering error</source> <translation type="unfinished"></translation> </message>
--- a/src/documentmanager.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/documentmanager.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -97,12 +97,13 @@ void DocumentManager::loadDependenciesForModel( const QString& modelName, + const QString& path, const LibraryManager& libraries, QTextStream& errorStream) { QStringList missing; QStringList processed; - loadDependenciesForModel(modelName, libraries, missing, processed, errorStream); + loadDependenciesForModel(modelName, path, libraries, missing, processed, errorStream); if (not missing.empty()) { missing.sort(Qt::CaseInsensitive); @@ -112,8 +113,23 @@ } } +static QString findFile(QString referenceName, const QString& path, const LibraryManager& libraries) +{ + // Try to find the file in the same place as the model itself + referenceName.replace("\\", "/"); + const QDir dir = QFileInfo{path}.dir(); + QString referencedFilePath = dir.filePath(referenceName); + if (not QFileInfo{referencedFilePath}.exists()) + { + // Look for it in the libraries + referencedFilePath = libraries.findFile(referenceName); + } + return referencedFilePath; +} + void DocumentManager::loadDependenciesForModel( const QString& modelName, + const QString &path, const LibraryManager& libraries, QStringList& missing, QStringList& processed, @@ -134,24 +150,24 @@ { try { - const QString path = libraries.findFile(referenceName); - if (path.isEmpty()) + const QString referencedFilePath = findFile(referenceName, path, libraries); + if (referencedFilePath.isEmpty()) { throw LoadingError{utility::format("'%1' was not found.", referenceName)}; } QString errorString; QTextStream localErrorStream{&errorString}; - QString resultName = this->openModel(path, localErrorStream); + QString resultName = this->openModel(referencedFilePath, localErrorStream); if (resultName.isEmpty()) { throw LoadingError{utility::format( "could not load '%1': %2", - path, + referencedFilePath, errorString)}; } if (not processed.contains(referenceName)) { - loadDependenciesForModel(referenceName, libraries, missing, processed, errorStream); + loadDependenciesForModel(referenceName, path, libraries, missing, processed, errorStream); } } catch(const LoadingError& error)
--- a/src/documentmanager.h Sun Jan 19 02:54:48 2020 +0200 +++ b/src/documentmanager.h Sun Jan 19 13:53:07 2020 +0200 @@ -13,12 +13,14 @@ QString openModel(const QString& path, QTextStream& errorStream); QString makeNewModelName(); void loadDependenciesForModel(const QString& modelName, + const QString& path, const LibraryManager& libraries, QTextStream& errorStream); private: int untitledNameCounter = 0; std::map<QString, ModelPointer> openModels; void loadDependenciesForModel(const QString& modelName, + const QString& path, const LibraryManager& libraries, QStringList& missing, QStringList& processed,
--- a/src/gl/partrenderer.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/gl/partrenderer.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -110,17 +110,12 @@ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); break; } - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glMatrixMode(GL_MODELVIEW); - // clear the drawing buffer. glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); - // clear the identity matrix. glLoadIdentity(); - // traslate the draw by z = -4.0 - // Note this when you decrease z like -8.0 the drawing will looks far , or smaller. glTranslatef(0.0, 0.0, -4.5 * this->compiler->modelDistance()); glMultMatrixf(padMatrix(this->rotation.toRotationMatrix()).constData()); xyz(glTranslatef, -this->compiler->modelCenter()); @@ -145,7 +140,6 @@ glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); - //glFlush(); const GLenum glError = this->glGetError(); if (glError != GL_NO_ERROR) {
--- a/src/linetypes/subfilereference.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/linetypes/subfilereference.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -57,9 +57,9 @@ polygons.reserve(polygons.size() + modelPolygons.size()); for (gl::Polygon polygon : modelPolygons) { - for (int i = 0; i < polygon.numPolygonVertices(); i += 1) + for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1) { - polygon.vertices[i] = math::transform(polygon.vertices[1], this->transformation); + polygon.vertices[i] = math::transform(polygon.vertices[i], this->transformation); } if (polygon.color == colors::main) {
--- a/src/mainwindow.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/mainwindow.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -57,7 +57,7 @@ QString modelName = this->documents.openModel(path, errorStream); if (not modelName.isEmpty()) { - this->documents.loadDependenciesForModel(modelName, this->libraries, errorStream); + this->documents.loadDependenciesForModel(modelName, path, this->libraries, errorStream); if (not errorString.isEmpty()) { QMessageBox::warning(
--- a/src/parser.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/parser.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -339,8 +339,8 @@ { Q_UNUSED(line) constexpr int colorPosition = 1; - constexpr int transformPosition = 2; // 2..10 - constexpr int positionPosition = 11; // 11..13 + constexpr int positionPosition = 2; // 2..4 + constexpr int transformPosition = 5; // 5..13 constexpr int namePosition = 14; if (tokens.size() != 15) {
--- a/src/types/boundingbox.cpp Sun Jan 19 02:54:48 2020 +0200 +++ b/src/types/boundingbox.cpp Sun Jan 19 13:53:07 2020 +0200 @@ -41,11 +41,11 @@ { if (box != emptyBoundingBox) { - double dx = box.minimum.x - box.maximum.x; - double dy = box.minimum.y - box.maximum.y; - double dz = box.minimum.z - box.maximum.z; - double size = std::max(std::max(dx, dy), dz); - return std::max(std::abs(size / 2.0), 1.0); + const double dx = std::abs(box.minimum.x - box.maximum.x); + const double dy = std::abs(box.minimum.y - box.maximum.y); + const double dz = std::abs(box.minimum.z - box.maximum.z); + const double size = std::max(std::max(dx, dy), dz); + return std::max(size / 2.0, 1.0); } else {