From 5b7771f77a834a30988b23ae406782bab2d2451a Mon Sep 17 00:00:00 2001 From: builder Date: Fri, 3 Apr 2026 21:44:04 +0000 Subject: [PATCH] Samples: Automatic updates to public repository Remember to do the following: 1. Ensure that modified/deleted/new files are correct 2. Make this commit message relevant for the changes 3. Force push 4. Delete branch after PR is merged If this commit is an update from one SDK version to another, make sure to create a release tag for previous version. --- README.md | 2 + .../ExploreSettingsMetaData.cpp | 172 ++++++++++++++++++ .../PoseConversions/PoseConversions.cpp | 1 + source/CMakeLists.txt | 1 + 4 files changed, 176 insertions(+) create mode 100644 source/Applications/Advanced/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp diff --git a/README.md b/README.md index fde6fc89..c45f88ea 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,8 @@ from the camera can be used. - [CreateDepthMap](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/CreateDepthMap/CreateDepthMap.cpp) - Convert point cloud from a ZDF file to OpenCV format, extract depth map and visualize it. - [Downsample](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/Downsample/Downsample.cpp) - Downsample point cloud from a ZDF file. + - [ExploreSettingsMetaData](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp) - Recursively iterates through all leaf parameters in a + Zivid camera’s settings. - [GammaCorrection](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/GammaCorrection/GammaCorrection.cpp) - Capture 2D image with gamma correction. - [HandEyeCalibration](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/HandEyeCalibration/HandEyeCalibration/HandEyeCalibration.cpp) - Perform Hand-Eye calibration. - [MaskPointCloud](https://github.com/zivid/zivid-cpp-samples/tree/master/source/Applications/Advanced/MaskPointCloud/MaskPointCloud.cpp) - Mask point cloud from a ZDF file and convert to PCL diff --git a/source/Applications/Advanced/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp b/source/Applications/Advanced/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp new file mode 100644 index 00000000..33f78815 --- /dev/null +++ b/source/Applications/Advanced/ExploreSettingsMetaData/ExploreSettingsMetaData.cpp @@ -0,0 +1,172 @@ + +/* +Recursively iterates through all leaf parameters in a Zivid camera’s settings. + +This sample walks the entire settings tree and inspects each leaf parameter. +For every parameter, it prints: + - the current value if explicitly set, + - otherwise the camera’s default value, + - and any available metadata (valid ranges or discrete allowed values) +*/ + +#include +#include +#include + +namespace +{ + template + void printValidRange(const Zivid::CameraInfo &cameraInfo) + { + const auto range = Zivid::Experimental::SettingsInfo::validRange(cameraInfo); + + std::cout << " ValidRange: [" << Node{ range.min() } << " , " << Node{ range.max() } << "]\n"; + } + + template + void printValidValues(const Zivid::CameraInfo &cameraInfo) + { + const auto validValues = Zivid::Experimental::SettingsInfo::validValues(cameraInfo); + + std::cout << " ValidValues: "; + for(const auto &value : validValues) + { + std::cout << value << " "; + } + std::cout << "\n"; + } + + template + void inspectLeaf(const Node &node, const Zivid::CameraInfo &cameraInfo) + { + using DecayedNode = std::decay_t; + + if constexpr(DecayedNode::nodeType == Zivid::DataModel::NodeType::leafValue) + { + std::cout << "Parameter: " << DecayedNode::path << "\n"; + + if constexpr(Zivid::DataModel::IsOptional::value) + { + std::cout << " CurrentValue: "; + if(node.hasValue()) + { + std::cout << node.toString() << "\n"; + } + else + { + std::cout << "(unset)\n"; + + const auto defaultValue = Zivid::Experimental::SettingsInfo::defaultValue(cameraInfo); + std::cout << " DefaultValue: "; + std::cout << defaultValue.toString() << "\n"; + } + } + else + { + std::cout << " CurrentValue: " << node.toString() << "\n"; + } + + constexpr bool hasRange = Zivid::DataModel::HasValidRange::value; + constexpr bool hasValues = Zivid::DataModel::HasValidValues::value; + + if constexpr(hasRange) + { + printValidRange(cameraInfo); + } + + if constexpr(hasValues) + { + printValidValues(cameraInfo); + } + + if constexpr(!hasRange && !hasValues) + { + std::cout << " No predefined valid range or discrete values.\n"; + } + + std::cout << "\n"; + } + } + + // Recursively traverses nested data model leaves and lists + template + void traverseLeavesIntoNestedDataModelsAndLists(Node &node, const LeafVisitor &leafVisitor) + { + using DecayedNode = std::decay_t; + + if constexpr( + DecayedNode::nodeType == Zivid::DataModel::NodeType::group + || DecayedNode::nodeType == Zivid::DataModel::NodeType::leafDataModelList) + { + std::forward(node).forEach([&](auto &&childNode) { + traverseLeavesIntoNestedDataModelsAndLists(std::forward(childNode), leafVisitor); + }); + } + else if constexpr( + DecayedNode::nodeType == Zivid::DataModel::NodeType::leafValue + && Zivid::DataModel::IsNestedDataModelLeaf::value) + { + leafVisitor(node); + + if constexpr(Zivid::DataModel::IsOptional::value) + { + if(node.hasValue()) + { + traverseLeavesIntoNestedDataModelsAndLists(node.value(), leafVisitor); + } + } + else + { + traverseLeavesIntoNestedDataModelsAndLists(node.value(), leafVisitor); + } + } + else + { + leafVisitor(std::forward(node)); + } + } + + // Serves as the entry point to traverse a Settings object and print all leaves + template + void traverseAndPrint(const SettingsType &settings, const Zivid::CameraInfo &cameraInfo) + { + traverseLeavesIntoNestedDataModelsAndLists(settings, [&](const auto &node) { inspectLeaf(node, cameraInfo); }); + } +} // namespace + +int main() +{ + try + { + Zivid::Application app; + + std::cout << "Connecting to camera...\n"; + auto camera = app.connectCamera(); + const auto cameraInfo = camera.info(); + + std::cout << "Camera model: " << cameraInfo.modelName() << "\n"; + std::cout << "Serial number: " << cameraInfo.serialNumber() << "\n"; + + // Default 2D Settings (mostly set) + auto defaultSettings2DWithAcquisition = + Zivid::Experimental::SettingsInfo::defaultValue(cameraInfo) + .copyWith( + Zivid::Settings2D::Acquisitions{ + Zivid::Experimental::SettingsInfo::defaultValue(cameraInfo) }); + + // Minimal 3D Settings (mostly unset) + Zivid::Settings settings; + settings.set(Zivid::Settings::Acquisitions{ Zivid::Settings::Acquisition{} }); + settings.set(Zivid::Settings::Color{ defaultSettings2DWithAcquisition }); + + std::cout << "---- Traversing Settings ----\n"; + traverseAndPrint(settings, cameraInfo); + } + catch(const std::exception &e) + { + std::cerr << "Error: " << e.what() << std::endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp b/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp index b44bb7f2..0be3dade 100644 --- a/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp +++ b/source/Applications/Advanced/HandEyeCalibration/PoseConversions/PoseConversions.cpp @@ -253,3 +253,4 @@ int main() return EXIT_SUCCESS; } + diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index ef9cbdc5..3a1eae44 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -37,6 +37,7 @@ set(SAMPLES Applications/Advanced/CaptureUndistort2D Applications/Advanced/CreateDepthMap Applications/Advanced/Downsample + Applications/Advanced/ExploreSettingsMetaData Applications/Advanced/GammaCorrection Applications/Advanced/MaskPointCloud Applications/Advanced/ProjectAndFindMarker