#3948 HoloLens : Support for export of text labels. Also added more detailed debug information.

This commit is contained in:
sigurdp 2019-01-17 09:37:35 +01:00
parent 64395e8aa3
commit ccff90b1d5
5 changed files with 61 additions and 18 deletions

View File

@ -272,10 +272,10 @@ void RicHoloLensRestClient::slotSendMetaDataFinished()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicHoloLensRestClient::sendBinaryData(const QByteArray& binaryDataArr)
void RicHoloLensRestClient::sendBinaryData(const QByteArray& binaryDataArr, QByteArray dbgTagString)
{
const QString url = m_serverUrl + "/sessions/" + m_sessionName + "/data";
cvf::Trace::show("sendBinaryData: POST on url: %s", url.toLatin1().constData());
cvf::Trace::show("sendBinaryData(%s): POST on url: %s", dbgTagString.constData(), url.toLatin1().constData());
const qint64 sendStartTimeStamp_ms = getCurrentTimeStamp_ms();
@ -285,6 +285,7 @@ void RicHoloLensRestClient::sendBinaryData(const QByteArray& binaryDataArr)
QNetworkReply* reply = m_accessManager.post(request, binaryDataArr);
reply->setProperty("holo_sendStartTimeStamp_ms", QVariant(sendStartTimeStamp_ms));
reply->setProperty("holo_dbgTagString", QVariant(dbgTagString));
connect(reply, SIGNAL(finished()), SLOT(slotSendBinaryDataFinished()));
@ -323,9 +324,18 @@ void RicHoloLensRestClient::slotSendBinaryDataFinished()
}
}
QByteArray dbgTagString;
{
QVariant var = reply->property("holo_dbgTagString");
if (var.type() == QVariant::ByteArray)
{
dbgTagString = var.toByteArray();
}
}
reply->deleteLater();
cvf::Trace::show("sendBinaryData OK, elapsedTime=%.2fs", elapsedTime_s);
cvf::Trace::show("sendBinaryData(%s) OK, elapsedTime=%.2fs", dbgTagString.constData(), elapsedTime_s);
}
//--------------------------------------------------------------------------------------------------
@ -343,18 +353,28 @@ void RicHoloLensRestClient::slotDbgUploadProgress(qint64 bytesSent, qint64 bytes
if (pct % 10 == 0 && pct != sl_lastPct)
{
double elapsedTime_s = -1;
QByteArray dbgTagString;
QNetworkReply* reply = dynamic_cast<QNetworkReply*>(sender());
if (reply)
{
QVariant var = reply->property("holo_sendStartTimeStamp_ms");
if (var.type() == QVariant::LongLong)
{
const qint64 startTimeStamp_ms = var.toLongLong();
elapsedTime_s = (getCurrentTimeStamp_ms() - startTimeStamp_ms)/1000.0;
QVariant var = reply->property("holo_sendStartTimeStamp_ms");
if (var.type() == QVariant::LongLong)
{
const qint64 startTimeStamp_ms = var.toLongLong();
elapsedTime_s = (getCurrentTimeStamp_ms() - startTimeStamp_ms)/1000.0;
}
}
{
QVariant var = reply->property("holo_dbgTagString");
if (var.type() == QVariant::ByteArray)
{
dbgTagString = var.toByteArray();
}
}
}
cvf::Trace::show("Sending progress: %3d%%, %.2f/%.2fMB (elapsedTime=%.2fs)", pct, bytesSent/(1024.0*1024.0), bytesTotal/(1024.0*1024.0), elapsedTime_s);
cvf::Trace::show("Progress sendBinaryData(%s): %3d%%, %.2f/%.2fMB (elapsedTime=%.2fs)", dbgTagString.constData(), pct, bytesSent/(1024.0*1024.0), bytesTotal/(1024.0*1024.0), elapsedTime_s);
sl_lastPct = pct;
}
}

View File

@ -61,7 +61,7 @@ public:
void createSession(const QByteArray& sessionPinCode);
void deleteSession();
void sendMetaData(int metaDataSequenceNumber, const QString& jsonMetaDataString);
void sendBinaryData(const QByteArray& binaryDataArr);
void sendBinaryData(const QByteArray& binaryDataArr, QByteArray dbgTagString);
private:
void addBearerAuthenticationHeaderToRequest(QNetworkRequest* request) const;

View File

@ -295,7 +295,7 @@ void RicHoloLensSession::handleSuccessfulSendMetaData(int metaDataSequenceNumber
RiaLogging::info(QString("HoloLens: sending array id: %1, %2KB (%3 bytes)").arg(arrayId).arg(packetByteArr.size()/1024.0, 0, 'f', 2).arg(packetByteArr.size()));
m_restClient->sendBinaryData(packetByteArr);
m_restClient->sendBinaryData(packetByteArr, "arrId" + QByteArray::number(arrayId));
totalNumArraysSent++;
totalBytesSent += packetByteArr.size();
@ -316,7 +316,7 @@ void RicHoloLensSession::handleSuccessfulSendMetaData(int metaDataSequenceNumber
RiaLogging::info(QString("HoloLens: Sending data to server (%1 arrays combined), %2KB (%3 bytes)").arg(totalNumArraysSent).arg(totalBytesSent/1024.0, 0, 'f', 2).arg(totalBytesSent));
m_restClient->sendBinaryData(combinedPacketArr);
m_restClient->sendBinaryData(combinedPacketArr, "metaSeqNum" + QByteArray::number(metaDataSequenceNumber));
}
const double totalMb = totalBytesSent/(1024.0*1024.0);

View File

@ -63,9 +63,6 @@ void VdeVizDataExtractor::extractViewContents(QString* modelMetaJsonStr, std::ve
// First extract the parts (cvfPart + info) to be exported from from the ResInsight view
const std::vector<VdeExportPart> exportPartsArr = RicHoloLensExportImpl::partsForExport(m_view);
// TODO: Convert this into JSON data
const std::vector<std::pair<cvf::Vec3f, cvf::String>> labelAndPositions = RicHoloLensExportImpl::labelsForExport(m_view);
// Convert this to an array of export ready meshes
const std::vector<std::unique_ptr<VdeMesh> > meshArr = buildMeshArray(exportPartsArr);
const int buildMeshes_ms = static_cast<int>(tim.lapTime()*1000);
@ -160,7 +157,11 @@ void VdeVizDataExtractor::extractViewContents(QString* modelMetaJsonStr, std::ve
const int fillPacketDir_ms = static_cast<int>(tim.lapTime()*1000);
*modelMetaJsonStr = createModelMetaJsonString(meshArr, allMeshesArrayIdsArr);
// Extract any exportable labels present in the view
const std::vector<std::pair<cvf::Vec3f, cvf::String>> labelAndPositionsArr = RicHoloLensExportImpl::labelsForExport(m_view);
// Actually create the JSON containing model meta data
*modelMetaJsonStr = createModelMetaJsonString(meshArr, allMeshesArrayIdsArr, labelAndPositionsArr);
// Find all unique packet array IDs referenced
std::set<int> referencedIdsSet;
@ -318,10 +319,9 @@ std::unique_ptr<VdeMesh> VdeVizDataExtractor::createMeshFromExportPart(const Vde
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString VdeVizDataExtractor::createModelMetaJsonString(const std::vector<std::unique_ptr<VdeMesh> >& meshArr, const std::vector<VdeMeshArrayIds>& meshContentIdsArr)
QString VdeVizDataExtractor::createModelMetaJsonString(const std::vector<std::unique_ptr<VdeMesh> >& meshArr, const std::vector<VdeMeshArrayIds>& meshContentIdsArr, const std::vector<std::pair<cvf::Vec3f, cvf::String> >& labelAndPositionsArr)
{
QVariantList jsonMeshMetaList;
for (size_t i = 0; i < meshArr.size(); i++)
{
const VdeMesh* mesh = meshArr[i].get();
@ -360,9 +360,30 @@ QString VdeVizDataExtractor::createModelMetaJsonString(const std::vector<std::un
jsonMeshMetaList.push_back(jsonMeshMeta);
}
QVariantList jsonLabelList;
for (size_t i = 0; i < labelAndPositionsArr.size(); i++)
{
const cvf::Vec3f& pos = labelAndPositionsArr[i].first;
const cvf::String& txt = labelAndPositionsArr[i].second;
QMap<QString, QVariant> jsonPos;
jsonPos["x"] = pos.x();
jsonPos["y"] = pos.y();
jsonPos["z"] = pos.z();
QMap<QString, QVariant> jsonLabelEntry;
jsonLabelEntry["position"] = jsonPos;
jsonLabelEntry["text"] = txt.toAscii().ptr();
jsonLabelList.push_back(jsonLabelEntry);
}
QMap<QString, QVariant> jsonModelMeta;
jsonModelMeta["modelName"] = "ResInsightExport";
jsonModelMeta["meshArr"] = jsonMeshMetaList;
jsonModelMeta["labelsArr"] = jsonLabelList;
ResInsightInternalJson::Json jsonCodec;
const bool prettifyJson = true;

View File

@ -21,6 +21,8 @@
#include "cvfBase.h"
#include "cvfColor3.h"
#include "cvfArray.h"
#include "cvfVector3.h"
#include "cvfString.h"
#include "cvfTextureImage.h"
#include <QString>
@ -100,7 +102,7 @@ public:
private:
static std::vector<std::unique_ptr<VdeMesh> > buildMeshArray(const std::vector<VdeExportPart>& exportPartsArr);
static std::unique_ptr<VdeMesh> createMeshFromExportPart(const VdeExportPart& exportPart);
static QString createModelMetaJsonString(const std::vector<std::unique_ptr<VdeMesh> >& meshArr, const std::vector<VdeMeshArrayIds>& meshContentIdsArr);
static QString createModelMetaJsonString(const std::vector<std::unique_ptr<VdeMesh> >& meshArr, const std::vector<VdeMeshArrayIds>& meshContentIdsArr, const std::vector<std::pair<cvf::Vec3f, cvf::String> >& labelAndPositionsArr);
static void debugComparePackets(const VdeArrayDataPacket& packetA, const VdeArrayDataPacket& packetB);
private: