Wed, 08 Jun 2022 19:33:00 +0300
Concentrate model editing into one coroutine inside main()
/* * LDForge: LDraw parts authoring CAD * Copyright (C) 2013 - 2020 Teemu Piippo * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #pragma once #include "basics.h" // http://stackoverflow.com/a/18204188/3629665 template<typename T> inline T rotl10(T x) { return (x << 10) | ((x >> 22) & 0x000000ff); } template<typename T> inline T rotl20(T x) { return (x << 20) | ((x >> 12) & 0x000000ff); } inline QString format(const QString& format_string) { return format_string; } template<typename T, typename... Rest> QString format(const QString& format_string, T&& arg, Rest&&... rest) { return format(format_string.arg(arg), std::forward<Rest>(rest)...); } inline QString quoted(QString string) { if (string.contains("'")) { string.replace("\"", "\\\""); string = "\"" + string + "\""; } else { string = "'" + string + "'"; } return string; } /** * @brief Converts the specified vertex to a simple string * @param vertex vertex to convert * @return "x y z"-formatted string */ inline QString vertexToString(const glm::vec3& vertex) { return format("%1 %2 %3", vertex.x, vertex.y, vertex.z); } inline QString vertexToStringParens(const glm::vec3& vertex) { return format("(%1, %2, %3)", vertex.x, vertex.y, vertex.z); } inline QString transformToString(const glm::mat4& matrix) { return format( "%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12", matrix[3][0], matrix[3][1], matrix[3][2], matrix[0][0], matrix[1][0], matrix[2][0], matrix[0][1], matrix[1][1], matrix[2][1], matrix[0][2], matrix[1][2], matrix[2][2]); } template<typename T, glm::qualifier Q> constexpr unsigned int qHash(const glm::vec<3, T, Q>& key) { return qHash(key.x) ^ rotl10(qHash(key.y)) ^ rotl20(qHash(key.z)); }