From ae09aec5d9c57ed42a214115e626f4bc02ac47b0 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Thu, 31 Jan 2019 13:36:53 -0800 Subject: [PATCH 1/5] embedded model geometry --- libraries/fbx/src/GLTFSerializer.cpp | 18 +++++++++++++++--- libraries/fbx/src/GLTFSerializer.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) mode change 100644 => 100755 libraries/fbx/src/GLTFSerializer.cpp mode change 100644 => 100755 libraries/fbx/src/GLTFSerializer.h diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp old mode 100644 new mode 100755 index 96c236f703..6db298ae58 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -939,10 +939,15 @@ HFMModel::Pointer GLTFSerializer::read(const QByteArray& data, const QVariantHas } bool GLTFSerializer::readBinary(const QString& url, QByteArray& outdata) { - QUrl binaryUrl = _url.resolved(url); - bool success; - std::tie(success, outdata) = requestData(binaryUrl); + + if (url.contains("data:application/octet-stream;base64,") || url.contains("data:image/png;base64,") || url.contains("data:image/jpeg;base64,")) { + QString binaryUrl = url.split(",")[1]; + std::tie(success, outdata) = requestEmbeddedData(binaryUrl); + } else { + QUrl binaryUrl = _url.resolved(url); + std::tie(success, outdata) = requestData(binaryUrl); + } return success; } @@ -975,6 +980,13 @@ std::tuple GLTFSerializer::requestData(QUrl& url) { } } +std::tuple GLTFSerializer::requestEmbeddedData(QString binaryUrl) { + QByteArray urlBin = binaryUrl.toUtf8(); + QByteArray result = QByteArray::fromBase64(urlBin); + + return std::make_tuple(true, result); +} + QNetworkReply* GLTFSerializer::request(QUrl& url, bool isTest) { if (!qApp) { diff --git a/libraries/fbx/src/GLTFSerializer.h b/libraries/fbx/src/GLTFSerializer.h old mode 100644 new mode 100755 index 5fca77c4fd..fba03caa6b --- a/libraries/fbx/src/GLTFSerializer.h +++ b/libraries/fbx/src/GLTFSerializer.h @@ -772,6 +772,7 @@ private: QVector& out_vertices, QVector& out_normals); std::tuple requestData(QUrl& url); + std::tuple requestEmbeddedData(QString binaryUrl); QNetworkReply* request(QUrl& url, bool isTest); bool doesResourceExist(const QString& url); From d1d8832e7a9a9c32791c2f153738bf2dbc360f39 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Fri, 1 Feb 2019 11:27:43 -0800 Subject: [PATCH 2/5] read in embedded data --- libraries/fbx/src/GLTFSerializer.cpp | 29 ++++++++++++++++++++-------- libraries/fbx/src/GLTFSerializer.h | 3 ++- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index 6db298ae58..2ffcd2c728 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -352,9 +352,15 @@ bool GLTFSerializer::addImage(const QJsonObject& object) { QString mime; getStringVal(object, "uri", image.uri, image.defined); + if (image.uri.contains("data:image/png;base64,")) { + image.mimeType = getImageMimeType("image/png"); + } + if (image.uri.contains("data:image/jpeg;base64,")) { + image.mimeType = getImageMimeType("image/jpeg"); + } if (getStringVal(object, "mimeType", mime, image.defined)) { image.mimeType = getImageMimeType(mime); - } + } getIntVal(object, "bufferView", image.bufferView, image.defined); _file.images.push_back(image); @@ -941,9 +947,8 @@ HFMModel::Pointer GLTFSerializer::read(const QByteArray& data, const QVariantHas bool GLTFSerializer::readBinary(const QString& url, QByteArray& outdata) { bool success; - if (url.contains("data:application/octet-stream;base64,") || url.contains("data:image/png;base64,") || url.contains("data:image/jpeg;base64,")) { - QString binaryUrl = url.split(",")[1]; - std::tie(success, outdata) = requestEmbeddedData(binaryUrl); + if (url.contains("data:application/octet-stream;base64,")) { + std::tie(success, outdata) = std::make_tuple(true, requestEmbeddedData(url)); } else { QUrl binaryUrl = _url.resolved(url); std::tie(success, outdata) = requestData(binaryUrl); @@ -980,11 +985,13 @@ std::tuple GLTFSerializer::requestData(QUrl& url) { } } -std::tuple GLTFSerializer::requestEmbeddedData(QString binaryUrl) { - QByteArray urlBin = binaryUrl.toUtf8(); - QByteArray result = QByteArray::fromBase64(urlBin); +QByteArray GLTFSerializer::requestEmbeddedData(const QString& url) { + QString binaryUrl = url.split(",")[1]; - return std::make_tuple(true, result); + QByteArray urlBin = binaryUrl.toUtf8(); + QByteArray data = QByteArray::fromBase64(urlBin); + + return data; } @@ -1018,11 +1025,17 @@ HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) { if (texture.defined["source"]) { QString url = _file.images[texture.source].uri; + QString fname = QUrl(url).fileName(); QUrl textureUrl = _url.resolved(url); qCDebug(modelformat) << "fname: " << fname; fbxtex.name = fname; fbxtex.filename = textureUrl.toEncoded(); + + if (url.contains("data:image/jpeg;base64,") || url.contains("data:image/png;base64,")) { + QByteArray result = requestEmbeddedData(url); + fbxtex.content = result; + } } return fbxtex; } diff --git a/libraries/fbx/src/GLTFSerializer.h b/libraries/fbx/src/GLTFSerializer.h index fba03caa6b..57ea126a7b 100755 --- a/libraries/fbx/src/GLTFSerializer.h +++ b/libraries/fbx/src/GLTFSerializer.h @@ -772,7 +772,8 @@ private: QVector& out_vertices, QVector& out_normals); std::tuple requestData(QUrl& url); - std::tuple requestEmbeddedData(QString binaryUrl); + QByteArray requestEmbeddedData(const QString& url); + QNetworkReply* request(QUrl& url, bool isTest); bool doesResourceExist(const QString& url); From d109c0fb1b6ab3d543d30442c6375b636b29f54c Mon Sep 17 00:00:00 2001 From: raveenajain Date: Tue, 5 Feb 2019 09:23:10 -0800 Subject: [PATCH 3/5] feedback changes --- libraries/fbx/src/GLTFSerializer.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index 2ffcd2c728..197b3ee14c 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -354,13 +354,11 @@ bool GLTFSerializer::addImage(const QJsonObject& object) { getStringVal(object, "uri", image.uri, image.defined); if (image.uri.contains("data:image/png;base64,")) { image.mimeType = getImageMimeType("image/png"); - } - if (image.uri.contains("data:image/jpeg;base64,")) { + } else if (image.uri.contains("data:image/jpeg;base64,")) { image.mimeType = getImageMimeType("image/jpeg"); - } - if (getStringVal(object, "mimeType", mime, image.defined)) { + } else if (getStringVal(object, "mimeType", mime, image.defined)) { image.mimeType = getImageMimeType(mime); - } + } getIntVal(object, "bufferView", image.bufferView, image.defined); _file.images.push_back(image); @@ -948,7 +946,8 @@ bool GLTFSerializer::readBinary(const QString& url, QByteArray& outdata) { bool success; if (url.contains("data:application/octet-stream;base64,")) { - std::tie(success, outdata) = std::make_tuple(true, requestEmbeddedData(url)); + outdata = requestEmbeddedData(url); + success = outdata.isEmpty() ? false : true; } else { QUrl binaryUrl = _url.resolved(url); std::tie(success, outdata) = requestData(binaryUrl); @@ -985,13 +984,9 @@ std::tuple GLTFSerializer::requestData(QUrl& url) { } } -QByteArray GLTFSerializer::requestEmbeddedData(const QString& url) { - QString binaryUrl = url.split(",")[1]; - - QByteArray urlBin = binaryUrl.toUtf8(); - QByteArray data = QByteArray::fromBase64(urlBin); - - return data; +QByteArray GLTFSerializer::requestEmbeddedData(const QString& url) { + QString binaryUrl = url.split(",")[1]; + return binaryUrl.isEmpty() ? QByteArray() : QByteArray::fromBase64(binaryUrl.toUtf8()); } @@ -1033,8 +1028,7 @@ HFMTexture GLTFSerializer::getHFMTexture(const GLTFTexture& texture) { fbxtex.filename = textureUrl.toEncoded(); if (url.contains("data:image/jpeg;base64,") || url.contains("data:image/png;base64,")) { - QByteArray result = requestEmbeddedData(url); - fbxtex.content = result; + fbxtex.content = requestEmbeddedData(url); } } return fbxtex; From 21fa1878cb2904b12258cd95c6f7c7ff5d5cb9bb Mon Sep 17 00:00:00 2001 From: raveenajain Date: Tue, 5 Feb 2019 09:28:47 -0800 Subject: [PATCH 4/5] spaces --- libraries/fbx/src/GLTFSerializer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index 197b3ee14c..674b4b1cf1 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -358,7 +358,7 @@ bool GLTFSerializer::addImage(const QJsonObject& object) { image.mimeType = getImageMimeType("image/jpeg"); } else if (getStringVal(object, "mimeType", mime, image.defined)) { image.mimeType = getImageMimeType(mime); - } + } getIntVal(object, "bufferView", image.bufferView, image.defined); _file.images.push_back(image); @@ -984,7 +984,7 @@ std::tuple GLTFSerializer::requestData(QUrl& url) { } } -QByteArray GLTFSerializer::requestEmbeddedData(const QString& url) { +QByteArray GLTFSerializer::requestEmbeddedData(const QString& url) { QString binaryUrl = url.split(",")[1]; return binaryUrl.isEmpty() ? QByteArray() : QByteArray::fromBase64(binaryUrl.toUtf8()); } From 253e3554af8e5a483b44757a3a52e8ee4ac739f8 Mon Sep 17 00:00:00 2001 From: raveenajain Date: Tue, 5 Feb 2019 10:18:34 -0800 Subject: [PATCH 5/5] feedback --- libraries/fbx/src/GLTFSerializer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index 674b4b1cf1..e6b4652d6a 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -356,7 +356,8 @@ bool GLTFSerializer::addImage(const QJsonObject& object) { image.mimeType = getImageMimeType("image/png"); } else if (image.uri.contains("data:image/jpeg;base64,")) { image.mimeType = getImageMimeType("image/jpeg"); - } else if (getStringVal(object, "mimeType", mime, image.defined)) { + } + if (getStringVal(object, "mimeType", mime, image.defined)) { image.mimeType = getImageMimeType(mime); } getIntVal(object, "bufferView", image.bufferView, image.defined); @@ -947,7 +948,7 @@ bool GLTFSerializer::readBinary(const QString& url, QByteArray& outdata) { if (url.contains("data:application/octet-stream;base64,")) { outdata = requestEmbeddedData(url); - success = outdata.isEmpty() ? false : true; + success = !outdata.isEmpty(); } else { QUrl binaryUrl = _url.resolved(url); std::tie(success, outdata) = requestData(binaryUrl);