65 lines
1.8 KiB
C++
65 lines
1.8 KiB
C++
#include "DetectionOutputConverter.h"
|
|
#include "IYJiuruiWorkpiecePoseStatus.h"
|
|
#include <cmath>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
|
|
ProtocolDetectionOutput DetectionOutputConverter::ConvertWorkpieceResult(
|
|
const std::vector<JiuruiWorkpieceInfo>& workpieceInfoList,
|
|
bool success,
|
|
int errorCode,
|
|
const QString& message,
|
|
int cameraIndex)
|
|
{
|
|
ProtocolDetectionOutput output;
|
|
output.success = success;
|
|
output.errorCode = errorCode;
|
|
output.message = message;
|
|
output.cameraIndex = cameraIndex;
|
|
|
|
for (const auto& info : workpieceInfoList) {
|
|
JiuruiWorkpieceDetectOutput wpOutput;
|
|
wpOutput.x = info.centerX;
|
|
wpOutput.y = info.centerY;
|
|
wpOutput.z = info.centerZ;
|
|
// roll/pitch/yaw 由 PoseAxesBuilder 在 DetectPresenter 中计算填充
|
|
output.workpieceOutputs.push_back(wpOutput);
|
|
}
|
|
|
|
return output;
|
|
}
|
|
|
|
QJsonObject DetectionOutputConverter::WorkpieceOutputToJson(const JiuruiWorkpieceDetectOutput& output)
|
|
{
|
|
QJsonObject obj;
|
|
obj["X"] = output.x;
|
|
obj["Y"] = output.y;
|
|
obj["Z"] = output.z;
|
|
obj["Roll"] = output.roll;
|
|
obj["Pitch"] = output.pitch;
|
|
obj["Yaw"] = output.yaw;
|
|
return obj;
|
|
}
|
|
|
|
QJsonObject DetectionOutputConverter::ToJson(const ProtocolDetectionOutput& output)
|
|
{
|
|
QJsonObject response;
|
|
response["MessageType"] = "WorkpieceResult";
|
|
|
|
QJsonObject data;
|
|
data["Success"] = output.success;
|
|
data["ErrorCode"] = output.errorCode;
|
|
data["Message"] = output.message;
|
|
data["CameraIndex"] = output.cameraIndex;
|
|
|
|
QJsonArray arr;
|
|
for (const auto& wp : output.workpieceOutputs) {
|
|
arr.append(WorkpieceOutputToJson(wp));
|
|
}
|
|
data["Count"] = static_cast<int>(output.workpieceOutputs.size());
|
|
data["Workpieces"] = arr;
|
|
response["Data"] = data;
|
|
response["Timestamp"] = output.timestamp;
|
|
return response;
|
|
}
|