From a1871416d13b86fca004ae1749dbc0f312c51980 Mon Sep 17 00:00:00 2001 From: AnBenLa Date: Mon, 10 Jun 2024 13:37:32 +0200 Subject: [PATCH] Commit of missed files. --- README.md | 4 +- Src/Analysis/AnalysisEndpoints.cpp | 32 +++++++------- Src/Analysis/AnalysisManager.cpp | 70 +++++++++++++++++++++++++++++- Src/Analysis/AnalysisManager.h | 2 +- 4 files changed, 88 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ab900b2..09f3039 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Record, Replay & Analysis Plugin -[![Build](https://github.com/vrsys/Recording-And-Analysis-Plugin/actions/workflows/cmake.yml/badge.svg)](https://github.com/vrsys/Recording-And-Analysis-Plugin/actions/workflows/cmake.yml) +[![Build](https://github.com/vrsys/recording-plugin/actions/workflows/cmake.yml/badge.svg)](https://github.com/vrsys/recording-plugin/actions/workflows/cmake.yml) ![Logo](Images/Icon_resized.png) @@ -212,7 +212,7 @@ void export_transform_data_to_CSV(std::string const& transform_file_path); void export_generic_data_to_CSV(std::string const& generic_file_path); -void export_sound_data_to_WAV(std::string const& sound_file_path);``` +void export_sound_data_to_WAV(std::string const& sound_file_path); ``` Debugging: diff --git a/Src/Analysis/AnalysisEndpoints.cpp b/Src/Analysis/AnalysisEndpoints.cpp index cae01a3..605e7a4 100644 --- a/Src/Analysis/AnalysisEndpoints.cpp +++ b/Src/Analysis/AnalysisEndpoints.cpp @@ -8,47 +8,49 @@ extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddAnalysisRecordingP AnalysisManager& manager = AnalysisManager::getInstance(); manager.add_recording_path(path, path_length); } - -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddDistanceAnalysisRequest(int analysis_id, int id_a, int id_b, float distance) { +/** + * @param logical_operation an int defining whether the analysis request will be combined with the current query using &, |, &! or |! + */ +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddDistanceAnalysisRequest(int analysis_id, int id_a, int id_b, float distance, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, id_b, distance); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddContainmentAnalysisRequest(int analysis_id, int id_a, float* min_max) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddContainmentAnalysisRequest(int analysis_id, int id_a, float* min_max, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, glm::vec3{min_max[0], min_max[1], min_max[2]}, glm::vec3{min_max[3], min_max[4], min_max[5]}); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddGazeAnalysisRequest(int analysis_id, int id_a, int id_b, float cone_angle, float distance) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddGazeAnalysisRequest(int analysis_id, int id_a, int id_b, float cone_angle, float distance, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, id_b, cone_angle, distance); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddGazeAnalysisRequestAx(int analysis_id, int id_a, int id_b, float cone_angle, float distance, int axis) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddGazeAnalysisRequestAx(int analysis_id, int id_a, int id_b, float cone_angle, float distance, int axis, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, id_b, cone_angle, distance, axis); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddRotationAnalysisRequest(int analysis_id, int id_a, float temporal_search_interval, float rotation_threshold) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddRotationAnalysisRequest(int analysis_id, int id_a, float temporal_search_interval, float rotation_threshold, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, temporal_search_interval, rotation_threshold); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddSoundActivationAnalysisRequest(int analysis_id, int sound_id, float temporal_search_interval, float activation_level) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddSoundActivationAnalysisRequest(int analysis_id, int sound_id, float temporal_search_interval, float activation_level, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(sound_id, temporal_search_interval, activation_level); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } -extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddVelocityAnalysisRequest(int analysis_id, int id_a, float temporal_search_interval, float velocity_threshold) { +extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API AddVelocityAnalysisRequest(int analysis_id, int id_a, float temporal_search_interval, float velocity_threshold, int logical_operation) { AnalysisManager& manager = AnalysisManager::getInstance(); std::shared_ptr request = std::make_shared(id_a, temporal_search_interval, velocity_threshold); - manager.add_interval_analysis_request(request); + manager.add_interval_analysis_request(analysis_id, request, logical_operation); } extern "C" int UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API ProcessAnalysisRequests(int analysis_id, float* intervals) { diff --git a/Src/Analysis/AnalysisManager.cpp b/Src/Analysis/AnalysisManager.cpp index 95a50ba..d4cc425 100644 --- a/Src/Analysis/AnalysisManager.cpp +++ b/Src/Analysis/AnalysisManager.cpp @@ -5,8 +5,74 @@ #include "AnalysisManager.h" #include "Analysis/IntervalAnalysis/TransformAnalysis/IntervalPositionAdjustmentAnalysisRequest.h" -void AnalysisManager::add_interval_analysis_request(std::shared_ptr request) { - interval_analysis_queries.push_back(request); +void AnalysisManager::add_interval_analysis_request(int analysis_id, std::shared_ptr request, int logical_operation) { + if(interval_analysis_queries.size() > analysis_id){ + if(interval_analysis_queries[analysis_id].get() == nullptr){ + switch(logical_operation) { + case 0: { + interval_analysis_queries[analysis_id] = request; + break; + } + case 1: { + interval_analysis_queries[analysis_id] = request; + break; + } + case 2: { + interval_analysis_queries[analysis_id] = !request; + break; + } + case 3: { + interval_analysis_queries[analysis_id] = !request; + break; + } + } + } else { + switch(logical_operation){ + case 0:{ + interval_analysis_queries[analysis_id] = interval_analysis_queries[analysis_id] & request; + break; + } + case 1:{ + interval_analysis_queries[analysis_id] = interval_analysis_queries[analysis_id] | request; + break; + } + case 2:{ + interval_analysis_queries[analysis_id] = interval_analysis_queries[analysis_id] & (!request); + break; + } + case 3:{ + interval_analysis_queries[analysis_id] = interval_analysis_queries[analysis_id] | (!request); + break; + } + } + } + } else { + int tmp = interval_analysis_queries.size(); + for (int i = tmp - 1; i < analysis_id; ++i) { + if (i != analysis_id - 1) + interval_analysis_queries.push_back(nullptr); + else { + switch (logical_operation) { + case 0: { + interval_analysis_queries.push_back(request); + break; + } + case 1: { + interval_analysis_queries.push_back(request); + break; + } + case 2: { + interval_analysis_queries.push_back(!request); + break; + } + case 3: { + interval_analysis_queries.push_back(!request); + break; + } + } + } + } + } } int AnalysisManager::process_interval_analysis_request(std::shared_ptr analysis_request, diff --git a/Src/Analysis/AnalysisManager.h b/Src/Analysis/AnalysisManager.h index f686dc6..d218c0d 100644 --- a/Src/Analysis/AnalysisManager.h +++ b/Src/Analysis/AnalysisManager.h @@ -41,7 +41,7 @@ class AnalysisManager { void add_intervals_to_investigate(std::string path, std::vector intervals); - void add_interval_analysis_request(std::shared_ptr request); + void add_interval_analysis_request(int analysis_id, std::shared_ptr request, int logical_operation); int process_interval_analysis_request(std::shared_ptr analysis_request, float* intervals, std::string const& file, std::vector const& intervals_to_investigate) const;