ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
GenericIndexedMesh.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include <pybind11/pybind11.h>
9 
10 #include <GenericIndexedMesh.h>
11 #include <GenericMesh.h>
12 #include <GenericTriangle.h>
13 
14 namespace py = pybind11;
15 using namespace pybind11::literals;
16 
17 void define_GenericIndexedMesh(py::module &cccorelib)
18 {
19  py::class_<cloudViewer::VerticesIndexes>(cccorelib, "VerticesIndexes")
20  .def(py::init<>())
21  .def(py::init<unsigned, unsigned, unsigned>(), "_i1"_a, "_i2"_a, "_i3"_a)
22  .def_readwrite("i1", &cloudViewer::VerticesIndexes::i1)
23  .def_readwrite("i2", &cloudViewer::VerticesIndexes::i2)
24  .def_readwrite("i3", &cloudViewer::VerticesIndexes::i3)
25  .def("__getitem__",
26  [](cloudViewer::VerticesIndexes &self, const unsigned index)
27  {
28  switch (index)
29  {
30  case 0:
31  return self.i1;
32  case 1:
33  return self.i2;
34  case 2:
35  return self.i3;
36  default:
37  throw py::index_error("index out of range");
38  }
39  });
40 
41  py::class_<cloudViewer::GenericIndexedMesh, cloudViewer::GenericMesh>(cccorelib, "GenericIndexedMesh")
42  .def("_getTriangle",
44  "triangleIndex"_a,
45  py::return_value_policy::reference)
46  .def(
47  "getTriangleVertIndexes",
48  [](cloudViewer::GenericIndexedMesh &self, const unsigned int triangleIndex)
49  {
50  if (triangleIndex >= self.size())
51  {
52  throw py::index_error("index out of range");
53  }
54  return self.getTriangleVertIndexes(triangleIndex);
55  },
56  "triangleIndex"_a,
57  py::return_value_policy::reference_internal,
58  R"pbdoc(
59  Returns the indexes of the vertices of a given triangle
60 
61  Parameters
62  ----------
63  triangleIndex: int, index of the triangle
64 
65  Raises
66  ------
67  IndexError if triangleIndex >= self.size()
68 )pbdoc")
69  .def(
70  "getTriangleVertices",
72  const unsigned triangleIndex,
73  CCVector3 &A,
74  CCVector3 &B,
75  CCVector3 &C)
76  {
77  if (triangleIndex >= self.size())
78  {
79  throw py::index_error("index out of range");
80  }
81  self.getTriangleVertices(triangleIndex, A, B, C);
82  },
83  "triangleIndex"_a,
84  "A"_a,
85  "B"_a,
86  "C"_a,
87  R"pbdoc(
88  Returns the vertices of a given triangle
89 
90  Parameters
91  ----------
92  triangleIndex: index of the triangle
93  A: first vertex, this is an out parameter
94  B: second vertex, this is an out parameter
95  C: third vertex, this is an out parameter
96 
97  Raises
98  ------
99  IndexError if triangleIndex >= self.size()
100 )pbdoc")
101  .def("getNextTriangleVertIndexes",
103  py::return_value_policy::reference);
104 }
int size
void define_GenericIndexedMesh(py::module &cccorelib)
A generic mesh with index-based vertex access.
virtual GenericTriangle * _getTriangle(unsigned triangleIndex)=0
Returns the ith triangle.
virtual VerticesIndexes * getNextTriangleVertIndexes()=0
Triangle described by the indexes of its 3 vertices.