Now build SimpleITK into static libs and use (auto)cxx.

This commit is contained in:
Wim Pomp
2025-09-12 18:03:24 +02:00
parent 0c6a38e4fa
commit 5750fd7f99
17 changed files with 8110 additions and 1426 deletions

58
cxx/ffi_extra.cxx Normal file
View File

@@ -0,0 +1,58 @@
#include "ffi_extra.h"
#include <map>
#include <memory>
#include <utility>
#include <vector>
#include <string>
std::unique_ptr<ParameterMap> get_transform_parameter_map(itk::simple::ElastixImageFilter& tfilter, const unsigned int index) {
itk::simple::ElastixImageFilter::ParameterMapType parameter_map = tfilter.GetTransformParameterMap(index);
ParameterMap transform_parameter_map = ParameterMap(parameter_map);
auto ptr = std::make_unique<ParameterMap>(parameter_map);
return ptr;
}
std::unique_ptr<ParameterMap> get_default_parameter_map(const std::string& kind) {
itk::simple::ElastixImageFilter::ParameterMapType parameter_map = itk::simple::GetDefaultParameterMap(kind);
ParameterMap default_parameter_map = ParameterMap(parameter_map);
auto ptr = std::make_unique<ParameterMap>(default_parameter_map);
return ptr;
}
void set_parameter_map(itk::simple::ElastixImageFilter& tfilter, const std::unique_ptr<ParameterMap>& parameter_map) {
tfilter.SetParameterMap(parameter_map->parameters);
};
ParameterMap::ParameterMap() = default;
ParameterMap::~ParameterMap() = default;
ParameterMap::ParameterMap(itk::simple::ElastixImageFilter::ParameterMapType parameter_map) {
this->parameters = std::move(parameter_map);
}
std::unique_ptr<ParameterMap> new_parameter_map() {
ParameterMap parameter_map;
auto ptr = std::make_unique<ParameterMap>(parameter_map);
return ptr;
}
void ParameterMap::insert(const std::string &key, const std::vector<std::string> &value) {
this->parameters.emplace(key, value);
}
std::unique_ptr<std::vector<std::string>> ParameterMap::keys() const {
std::vector<std::string> keys;
for (auto &[key, value] : this->parameters) {
keys.push_back(key);
}
auto ptr = std::make_unique<std::vector<std::string>>(keys);
return ptr;
}
std::unique_ptr<std::vector<std::string>> ParameterMap::get(const std::string& key) const {
std::vector<std::string> value = this->parameters.at(key);
auto ptr = std::make_unique<std::vector<std::string>>(value);
return ptr;
}

20
cxx/ffi_extra.h Normal file
View File

@@ -0,0 +1,20 @@
#pragma once
#include <sitkElastixImageFilter.h>
#include <memory>
#include <vector>
class ParameterMap {
public:
itk::simple::ElastixImageFilter::ParameterMapType parameters;
ParameterMap();
~ParameterMap();
explicit ParameterMap(itk::simple::ElastixImageFilter::ParameterMapType parameter_map);
void insert(const std::string &key, const std::vector<std::string> &value);
[[nodiscard]] std::unique_ptr<std::vector<std::string>> get(const std::string& key) const;
[[nodiscard]] std::unique_ptr<std::vector<std::string>> keys() const;
};
std::unique_ptr<ParameterMap> new_parameter_map();
std::unique_ptr<ParameterMap> get_default_parameter_map(const std::string& kind);
std::unique_ptr<ParameterMap> get_transform_parameter_map(itk::simple::ElastixImageFilter& tfilter, unsigned int index);
void set_parameter_map(itk::simple::ElastixImageFilter& tfilter, const std::unique_ptr<ParameterMap>& parameter_map);