fixed a pile of nonsense that caused subfiles to go haywire

Sun, 19 Jan 2020 13:53:07 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Sun, 19 Jan 2020 13:53:07 +0200
changeset 23
3387a84ddaba
parent 22
6da867fa5429
child 24
1a0faaaceb84

fixed a pile of nonsense that caused subfiles to go haywire

locale/fi.ts file | annotate | diff | comparison | revisions
src/documentmanager.cpp file | annotate | diff | comparison | revisions
src/documentmanager.h file | annotate | diff | comparison | revisions
src/gl/partrenderer.cpp file | annotate | diff | comparison | revisions
src/linetypes/subfilereference.cpp file | annotate | diff | comparison | revisions
src/mainwindow.cpp file | annotate | diff | comparison | revisions
src/parser.cpp file | annotate | diff | comparison | revisions
src/types/boundingbox.cpp file | annotate | diff | comparison | revisions
--- 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
 	{

mercurial