triangulation-type setting for non-triangulated polyhedral from iterator

This commit is contained in:
Thomas Krijnen
2024-09-18 19:25:37 +02:00
parent 748fcce3f5
commit 2554280e50
12 changed files with 320 additions and 154 deletions
+6 -12
View File
@@ -189,21 +189,15 @@
}
template <typename T>
PyObject* pythonize_vector(const std::vector<T>& v) {
PyObject* pythonize_vector(const T& v) {
const size_t size = v.size();
PyObject* pyobj = PyTuple_New(size);
for (size_t i = 0; i < size; ++i) {
PyTuple_SetItem(pyobj, i, pythonize(v[i]));
}
return pyobj;
}
template <typename T>
PyObject* pythonize_vector2(const std::vector< std::vector<T> >& v) {
const size_t size = v.size();
PyObject* pyobj = PyTuple_New(size);
for (size_t i = 0; i < size; ++i) {
PyTuple_SetItem(pyobj, i, pythonize_vector(v[i]));
if constexpr (is_std_vector_v<typename T::value_type>) {
PyTuple_SetItem(pyobj, i, pythonize_vector(v[i]));
} else {
PyTuple_SetItem(pyobj, i, pythonize(v[i]));
}
}
return pyobj;
}
+15 -5
View File
@@ -38,9 +38,7 @@
try {
$result = $1.array_->apply_visitor([](auto& v){
using U = std::decay_t<decltype(v)>;
if constexpr (is_std_vector_vector_v<U>) {
return pythonize_vector2(v);
} else if constexpr (is_std_vector_v<U>) {
if constexpr (is_std_vector_v<U>) {
return pythonize_vector(v);
} else if constexpr (std::is_same_v<U, EnumerationReference>) {
return pythonize(std::string(v.value()));
@@ -70,10 +68,22 @@
%define CREATE_VECTOR_TYPEMAP_OUT(template_type)
%typemap(out) std::vector<template_type> {
$result = pythonize_vector<template_type>($1);
$result = pythonize_vector<std::vector<template_type>>($1);
}
%typemap(out) const std::vector<template_type>& {
$result = pythonize_vector<template_type>(*$1);
$result = pythonize_vector<std::vector<template_type>>(*$1);
}
%typemap(out) std::vector<std::vector<template_type>> {
$result = pythonize_vector<std::vector<std::vector<template_type>>>($1);
}
%typemap(out) const std::vector<std::vector<template_type>>& {
$result = pythonize_vector<std::vector<std::vector<template_type>>>(*$1);
}
%typemap(out) std::vector<std::vector<std::vector<template_type>>> {
$result = pythonize_vector<std::vector<std::vector<std::vector<template_type>>>>($1);
}
%typemap(out) const std::vector<std::vector<std::vector<template_type>>>& {
$result = pythonize_vector<std::vector<std::vector<std::vector<template_type>>>>(*$1);
}
%enddef