1515#include < tuple>
1616#include < iomanip>
1717
18- // Nanobind includes
18+ // Nanobind type casters: https://nanobind.readthedocs.io/en/latest/exchanging.html
19+ // If you want to bind a vector on your own, do not include compas.h, it will conflict with nanobind stl bindings.
1920#include < nanobind/nanobind.h>
2021#include < nanobind/eigen/dense.h>
2122#include < nanobind/eigen/sparse.h>
2223#include < nanobind/stl/tuple.h>
2324#include < nanobind/stl/vector.h>
2425#include < nanobind/stl/string.h>
25-
26+
27+ // Avoid any alias via using, unless really needed:
2628namespace nb = nanobind;
27-
2829using namespace nb ::literals;
2930
30- // Nanobind type casters: https://nanobind.readthedocs.io/en/latest/exchanging.html
31-
3231namespace compas {
33- // Basic Eigen types with clear naming
32+ // Row-major matrix types for better interoperability with Python numpy arrays
3433 using RowMatrixXd = Eigen::Matrix<double , Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
3534 using RowMatrixXi = Eigen::Matrix<int , Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
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>;
4935
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
36+ // Vector types that maintain row-major storage for consistency
37+ using RowVectorXd = Eigen::Matrix<double , 1 , Eigen::Dynamic, Eigen::RowMajor>;
38+ using RowVectorXi = Eigen::Matrix<int , 1 , Eigen::Dynamic, Eigen::RowMajor>;
5639}
0 commit comments