1111#include < cmath>
1212#include < iostream>
1313#include < limits>
14- #include < iostream>
14+ #include < unordered_map>
15+ #include < tuple>
16+ #include < iomanip>
1517
1618// Nanobind includes
1719#include < nanobind/nanobind.h>
1820#include < nanobind/eigen/dense.h>
1921#include < nanobind/eigen/sparse.h>
2022#include < nanobind/stl/tuple.h>
21- #include < nanobind/stl/bind_vector .h>
23+ #include < nanobind/stl/vector .h>
2224#include < nanobind/stl/string.h>
2325
26+ namespace nb = nanobind;
27+
28+ using namespace nb ::literals;
29+
30+ // Nanobind type casters: https://nanobind.readthedocs.io/en/latest/exchanging.html
31+
2432namespace compas {
33+ // Basic Eigen types with clear naming
2534 using RowMatrixXd = Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
2635 using RowMatrixXi = Eigen::Matrix<int , Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
27- }
28-
29- namespace nb = nanobind;
30-
31- using namespace nb ::literals;
36+ using VectorXi = Eigen::VectorXi;
37+ using VectorXd = Eigen::VectorXd;
38+
39+ // STL containers with descriptive names
40+ using VectorInt = std::vector<int >;
41+ using VectorFloat = std::vector<float >;
42+ using VectorBool = std::vector<bool >;
43+ using VectorVectorInt = std::vector<VectorInt>;
44+
45+ // Complex types with descriptive names
46+ using TupleIntFloatFloatFloat = std::tuple<int , float , float , float >; // face_id, u, v, t
47+ using VectorTupleIntFloatFloatFloat = std::vector<TupleIntFloatFloatFloat>;
48+ using VectorVectorTupleIntFloatFloatFloat = std::vector<VectorTupleIntFloatFloatFloat>;
49+
50+ // Tuple types with descriptive names
51+ using IsolinesResult = std::tuple<RowMatrixXd, RowMatrixXi, RowMatrixXi>; // vertices, edges, indices
52+ using RemeshIsolineResult = std::tuple<RowMatrixXd, RowMatrixXi, VectorXi>; // vertices, faces, labels
53+ using RemeshIsolinesResult = std::tuple<RowMatrixXd, RowMatrixXi, VectorXd, VectorXi>; // vertices, faces, scalar_values, face_groups
54+ using PrincipalCurvatureResult = std::tuple<RowMatrixXd, RowMatrixXd, VectorXd, VectorXd>; // PD1, PD2, PV1, PV2
55+ using MeshMapResult = std::tuple<RowMatrixXd, VectorVectorInt, RowMatrixXd, VectorBool, VectorInt>; // pattern_vertices, pattern_faces, pattern_normals, is_boundary, groups
56+ }
0 commit comments