Showing the changes to libraries/shared/src/RegisteredMetaTypes.cpp (1 of 139 files). Show all
Unified · Split
| @@ -639,6 +639,81 @@ void mat4FromScriptValue(const QScriptValue& object, glm::mat4& mat4) { · 638 unmodified lines | |||
| 639 | mat4[3][3] = object.property("r3c3").toVariant().toFloat(); | 639 | mat4[3][3] = object.property("r3c3").toVariant().toFloat(); |
| 640 | } | 640 | } |
| 641 | 641 | ||
| 642 | QVariant mat4ToVariant(const glm::mat4& mat4) { | ||
| 643 | if (mat4 != mat4) { | ||
| 644 | // NaN | ||
| 645 | return QVariant(); | ||
| 646 | } | ||
| 647 | QVariantMap object; | ||
| 648 | |||
| 649 | object["r0c0"] = mat4[0][0]; | ||
| 650 | object["r1c0"] = mat4[0][1]; | ||
| 651 | object["r2c0"] = mat4[0][2]; | ||
| 652 | object["r3c0"] = mat4[0][3]; | ||
| 653 | object["r0c1"] = mat4[1][0]; | ||
| 654 | object["r1c1"] = mat4[1][1]; | ||
| 655 | object["r2c1"] = mat4[1][2]; | ||
| 656 | object["r3c1"] = mat4[1][3]; | ||
| 657 | object["r0c2"] = mat4[2][0]; | ||
| 658 | object["r1c2"] = mat4[2][1]; | ||
| 659 | object["r2c2"] = mat4[2][2]; | ||
| 660 | object["r3c2"] = mat4[2][3]; | ||
| 661 | object["r0c3"] = mat4[3][0]; | ||
| 662 | object["r1c3"] = mat4[3][1]; | ||
| 663 | object["r2c3"] = mat4[3][2]; | ||
| 664 | object["r3c3"] = mat4[3][3]; | ||
| 665 | |||
| 666 | return object; | ||
| 667 | } | ||
| 668 | |||
| 669 | glm::mat4 mat4FromVariant(const QVariant& object, bool& valid) { | ||
| 670 | glm::mat4 mat4; | ||
| 671 | valid = false; | ||
| 672 | if (!object.isValid() || object.isNull()) { | ||
| 673 | return mat4; | ||
| 674 | } else { | ||
| 675 | const static auto getElement = [](const QVariantMap& map, const char * key, float& value, bool& everyConversionValid) { | ||
| 676 | auto variantValue = map[key]; | ||
| 677 | if (variantValue.canConvert<float>()) { | ||
| 678 | value = variantValue.toFloat(); | ||
| 679 | } else { | ||
| 680 | everyConversionValid = false; | ||
| 681 | } | ||
| 682 | }; | ||
| 683 | |||
| 684 | auto map = object.toMap(); | ||
| 685 | bool everyConversionValid = true; | ||
| 686 | |||
| 687 | getElement(map, "r0c0", mat4[0][0], everyConversionValid); | ||
| 688 | getElement(map, "r1c0", mat4[0][1], everyConversionValid); | ||
| 689 | getElement(map, "r2c0", mat4[0][2], everyConversionValid); | ||
| 690 | getElement(map, "r3c0", mat4[0][3], everyConversionValid); | ||
| 691 | getElement(map, "r0c1", mat4[1][0], everyConversionValid); | ||
| 692 | getElement(map, "r1c1", mat4[1][1], everyConversionValid); | ||
| 693 | getElement(map, "r2c1", mat4[1][2], everyConversionValid); | ||
| 694 | getElement(map, "r3c1", mat4[1][3], everyConversionValid); | ||
| 695 | getElement(map, "r0c2", mat4[2][0], everyConversionValid); | ||
| 696 | getElement(map, "r1c2", mat4[2][1], everyConversionValid); | ||
| 697 | getElement(map, "r2c2", mat4[2][2], everyConversionValid); | ||
| 698 | getElement(map, "r3c2", mat4[2][3], everyConversionValid); | ||
| 699 | getElement(map, "r0c3", mat4[3][0], everyConversionValid); | ||
| 700 | getElement(map, "r1c3", mat4[3][1], everyConversionValid); | ||
| 701 | getElement(map, "r2c3", mat4[3][2], everyConversionValid); | ||
| 702 | getElement(map, "r3c3", mat4[3][3], everyConversionValid); | ||
| 703 | |||
| 704 | if (everyConversionValid) { | ||
| 705 | valid = true; | ||
| 706 | } | ||
| 707 | |||
| 708 | return mat4; | ||
| 709 | } | ||
| 710 | } | ||
| 711 | |||
| 712 | glm::mat4 mat4FromVariant(const QVariant& object) { | ||
| 713 | bool valid = false; | ||
| 714 | return mat4FromVariant(object, valid); | ||
| 715 | } | ||
| 716 | |||
| 642 | QScriptValue qVectorVec3ColorToScriptValue(QScriptEngine* engine, const QVector<glm::vec3>& vector) { | 717 | QScriptValue qVectorVec3ColorToScriptValue(QScriptEngine* engine, const QVector<glm::vec3>& vector) { |
| 643 | QScriptValue array = engine->newArray(); | 718 | QScriptValue array = engine->newArray(); |
| 644 | for (int i = 0; i < vector.size(); i++) { | 719 | for (int i = 0; i < vector.size(); i++) { |