2026-07-03 19:21:24 +08:00

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;
}