History

Merge remote-tracking branch 'upstream/master' into stencil2

SamGondelman committed 7 years ago

Commit 06fbc842 parents e7d12dc 2a7ef5c139 files · +5776 −1853Browse files

Showing the changes to libraries/shared/src/RegisteredMetaTypes.cpp (1 of 139 files). Show all

Unified · Split

libraries/shared/src/RegisteredMetaTypes.cpp+75−0
@@ -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
642QVariant 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
669glm::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
712glm::mat4 mat4FromVariant(const QVariant& object) {
713 bool valid = false;
714 return mat4FromVariant(object, valid);
715}
716
642QScriptValue qVectorVec3ColorToScriptValue(QScriptEngine* engine, const QVector<glm::vec3>& vector) {717QScriptValue 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++) {