Skip to content
Snippets Groups Projects
Commit 37682964 authored by Patrick Nossol's avatar Patrick Nossol
Browse files

Added possibility to use last sensor offsets in the same play session instead...

Added possibility to use last sensor offsets in the same play session instead of capturing them all over again
parent f71f5162
Branches
No related tags found
No related merge requests found
...@@ -445,7 +445,7 @@ void AMCController::ToggleRecording() { ...@@ -445,7 +445,7 @@ void AMCController::ToggleRecording() {
if (!IsRecording) { if (!IsRecording) {
LogHandler.NewLog("DataLog" + FString::FromInt(CurRecordingInSession)); LogHandler.NewLog("DataLog" + FString::FromInt(CurRecordingInSession));
LogHandler.StartRecording(); LogHandler.StartRecording();
Pawn->CalcSensorOffsets(LogHandler, DebugMode); Pawn->CalcSensorOffsets(LogHandler, UseLastOffsets, DebugMode);
if (DebugMode) { if (DebugMode) {
Pawn->SetMeshVisibility(true); Pawn->SetMeshVisibility(true);
} }
......
...@@ -36,7 +36,8 @@ AMCPawn::AMCPawn(const FObjectInitializer& ObjectInitializer) ...@@ -36,7 +36,8 @@ AMCPawn::AMCPawn(const FObjectInitializer& ObjectInitializer)
VROrigin = CreateDefaultSubobject<USceneComponent>(TEXT("VROrigin")); VROrigin = CreateDefaultSubobject<USceneComponent>(TEXT("VROrigin"));
VROrigin->SetupAttachment(RootComponent); VROrigin->SetupAttachment(RootComponent);
VROrigin->SetRelativeLocation(FVector(0, 0, 48)); VROrigin->SetRelativeLocation(FVector(0, 0, 0));
//VROrigin->SetRelativeLocation(FVector(0, 0, 48));
VRCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("VRCamera")); VRCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("VRCamera"));
VRCamera->SetupAttachment(VROrigin); VRCamera->SetupAttachment(VROrigin);
...@@ -217,7 +218,7 @@ void AMCPawn::LoadMeasurementFile(const FString& Filepath) { ...@@ -217,7 +218,7 @@ void AMCPawn::LoadMeasurementFile(const FString& Filepath) {
} }
void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) { void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool UseLastOffsets, bool DebugMode) {
TArray<FSensor> Sensors = SensorSetup.Trackers; TArray<FSensor> Sensors = SensorSetup.Trackers;
Sensors.Insert(SensorSetup.HandR, 0); Sensors.Insert(SensorSetup.HandR, 0);
...@@ -227,8 +228,45 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) { ...@@ -227,8 +228,45 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) {
TSharedPtr<FJsonObject> Json = MAKE_JSON; TSharedPtr<FJsonObject> Json = MAKE_JSON;
Json->SetStringField("Type", "Offsets"); Json->SetStringField("Type", "Offsets");
FSensorOffset* Offset = nullptr;
for (FSensor& Tracker : Sensors) { for (FSensor& Tracker : Sensors) {
switch (Tracker.BodyPart) {
case EBodyPart::LowerLegL:
case EBodyPart::FootL:
Offset = &LastOffsets.LowerLegL;
break;
case EBodyPart::LowerLegR:
case EBodyPart::FootR:
Offset = &LastOffsets.LowerLegR;
break;
case EBodyPart::HandL:
Offset = &LastOffsets.HandL;
break;
case EBodyPart::HandR:
Offset = &LastOffsets.HandR;
break;
case EBodyPart::LowerArmL:
Offset = &LastOffsets.LowerArmL;
break;
case EBodyPart::LowerArmR:
Offset = &LastOffsets.LowerArmR;
break;
case EBodyPart::LowerBody:
Offset = &LastOffsets.LowerBody;
break;
case EBodyPart::UpperBody:
Offset = &LastOffsets.UpperBody;
break;
case EBodyPart::Head:
Offset = &LastOffsets.Head;
break;
default:
Offset = &LastOffsets.Head;
break;
}
TSharedPtr<FJsonObject> JsonTracker = MAKE_JSON; TSharedPtr<FJsonObject> JsonTracker = MAKE_JSON;
FVector Loc; FVector Loc;
...@@ -249,6 +287,7 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) { ...@@ -249,6 +287,7 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) {
} }
//TODO it matters where the pawn is located in the level for this offset capture! Should not be this way, but is it acceptable? //TODO it matters where the pawn is located in the level for this offset capture! Should not be this way, but is it acceptable?
if (Tracker.SocketName1 != "") { if (Tracker.SocketName1 != "") {
if (!UseLastOffsets) {
FVector PosOffset1 = SkeletalMesh->GetSocketLocation(SocketName1) - Loc; FVector PosOffset1 = SkeletalMesh->GetSocketLocation(SocketName1) - Loc;
JsonTracker->SetStringField("Dist1", FString::SanitizeFloat(PosOffset1.Size())); JsonTracker->SetStringField("Dist1", FString::SanitizeFloat(PosOffset1.Size()));
FQuat AxisRotDiff = FQuat::FindBetween(-Rot.GetAxisX(), PosOffset1); FQuat AxisRotDiff = FQuat::FindBetween(-Rot.GetAxisX(), PosOffset1);
...@@ -261,6 +300,25 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) { ...@@ -261,6 +300,25 @@ void AMCPawn::CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode) {
JsonTracker->SetStringField("Rot1Y", FString::SanitizeFloat(RotOffset1.Y)); JsonTracker->SetStringField("Rot1Y", FString::SanitizeFloat(RotOffset1.Y));
JsonTracker->SetStringField("Rot1Z", FString::SanitizeFloat(RotOffset1.Z)); JsonTracker->SetStringField("Rot1Z", FString::SanitizeFloat(RotOffset1.Z));
JsonTracker->SetStringField("Rot1W", FString::SanitizeFloat(RotOffset1.W)); JsonTracker->SetStringField("Rot1W", FString::SanitizeFloat(RotOffset1.W));
Offset->AxisRotDiff = AxisRotDiff;
Offset->Rot = RotOffset1;
Offset->Distance = PosOffset1.Size();
}
else {
float Distance = Offset->Distance;
JsonTracker->SetStringField("Dist1", FString::SanitizeFloat(Distance));
FQuat AxisRotDiff = Offset->AxisRotDiff;
JsonTracker->SetStringField("AxisRot1X", FString::SanitizeFloat(AxisRotDiff.X));
JsonTracker->SetStringField("AxisRot1Y", FString::SanitizeFloat(AxisRotDiff.Y));
JsonTracker->SetStringField("AxisRot1Z", FString::SanitizeFloat(AxisRotDiff.Z));
JsonTracker->SetStringField("AxisRot1W", FString::SanitizeFloat(AxisRotDiff.W));
FQuat RotOffset1 = Offset->Rot;
JsonTracker->SetStringField("Rot1X", FString::SanitizeFloat(RotOffset1.X));
JsonTracker->SetStringField("Rot1Y", FString::SanitizeFloat(RotOffset1.Y));
JsonTracker->SetStringField("Rot1Z", FString::SanitizeFloat(RotOffset1.Z));
JsonTracker->SetStringField("Rot1W", FString::SanitizeFloat(RotOffset1.W));
}
} }
Json->SetObjectField(UEnum::GetDisplayValueAsText(Tracker.BodyPart).ToString(), JsonTracker); Json->SetObjectField(UEnum::GetDisplayValueAsText(Tracker.BodyPart).ToString(), JsonTracker);
......
...@@ -46,7 +46,10 @@ class MOCAPPLUGIN_API AMCController : public AActor ...@@ -46,7 +46,10 @@ class MOCAPPLUGIN_API AMCController : public AActor
{ {
GENERATED_BODY() GENERATED_BODY()
protected:
bool DebugMode = false; bool DebugMode = false;
bool UseLastOffsets = false;
public: public:
......
...@@ -39,6 +39,8 @@ public: ...@@ -39,6 +39,8 @@ public:
UPROPERTY(BlueprintReadOnly) UPROPERTY(BlueprintReadOnly)
USkeletalMeshComponent* SkeletalMesh; USkeletalMeshComponent* SkeletalMesh;
FSensorOffsets LastOffsets;
AMCPawn(const FObjectInitializer& ObjectInitializer); AMCPawn(const FObjectInitializer& ObjectInitializer);
protected: protected:
...@@ -54,7 +56,7 @@ public: ...@@ -54,7 +56,7 @@ public:
void SetMeshVisibility(bool visible); void SetMeshVisibility(bool visible);
void LoadMeasurementFile(const FString& Filepath); void LoadMeasurementFile(const FString& Filepath);
void CalcSensorOffsets(UMCLogHandler& LogHandler, bool DebugMode); void CalcSensorOffsets(UMCLogHandler& LogHandler, bool UseLastOffsets, bool DebugMode);
void AddSensorDataToJson(TSharedPtr<FJsonObject> JsonObjectFull); void AddSensorDataToJson(TSharedPtr<FJsonObject> JsonObjectFull);
void AddFingerDataToJson(TSharedPtr<FJsonObject> JsonObjectFull, ESkeletalSummaryDataType FingerTrackingMethod, UMCFeedbackWidget* FeedbackWidget = nullptr); void AddFingerDataToJson(TSharedPtr<FJsonObject> JsonObjectFull, ESkeletalSummaryDataType FingerTrackingMethod, UMCFeedbackWidget* FeedbackWidget = nullptr);
void AICalcFrame(); void AICalcFrame();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment