Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenMesh
openmesh-python
Commits
d58bdfdc
Commit
d58bdfdc
authored
Jan 21, 2018
by
Alexander Dielen
Browse files
exposed iterators and circulators
parent
c61c308e
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/Bindings.cc
View file @
d58bdfdc
#include
"Bindings.hh"
#include
"Miscellaneous.hh"
#include
"Vector.hh"
#include
"Iterator.hh"
#include
"Circulator.hh"
#include
<pybind11/pybind11.h>
namespace
py
=
pybind11
;
namespace
OM
=
OpenMesh
;
PYBIND11_MODULE
(
openmesh
,
m
)
{
...
...
@@ -21,23 +25,23 @@ PYBIND11_MODULE(openmesh, m) {
// expose_mesh<PolyMesh>("PolyMesh");
// expose_mesh<TriMesh>("TriMesh");
//
expose_iterator<O
penMesh
::PolyConnectivity::VertexIter, &O
penMesh
::ArrayKernel::n_vertices>("VertexIter");
//
expose_iterator<O
penMesh
::PolyConnectivity::HalfedgeIter, &O
penMesh
::ArrayKernel::n_halfedges>("HalfedgeIter");
//
expose_iterator<O
penMesh
::PolyConnectivity::EdgeIter, &O
penMesh
::ArrayKernel::n_edges>("EdgeIter");
//
expose_iterator<O
penMesh
::PolyConnectivity::FaceIter, &O
penMesh
::ArrayKernel::n_faces>("FaceIter");
expose_iterator
<
O
M
::
PolyConnectivity
::
VertexIter
,
&
O
M
::
ArrayKernel
::
n_vertices
>
(
m
,
"VertexIter"
);
expose_iterator
<
O
M
::
PolyConnectivity
::
HalfedgeIter
,
&
O
M
::
ArrayKernel
::
n_halfedges
>
(
m
,
"HalfedgeIter"
);
expose_iterator
<
O
M
::
PolyConnectivity
::
EdgeIter
,
&
O
M
::
ArrayKernel
::
n_edges
>
(
m
,
"EdgeIter"
);
expose_iterator
<
O
M
::
PolyConnectivity
::
FaceIter
,
&
O
M
::
ArrayKernel
::
n_faces
>
(
m
,
"FaceIter"
);
//
expose_circulator<O
penMesh
::PolyConnectivity::VertexVertexIter, VertexHandle>("VertexVertexIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::VertexIHalfedgeIter, VertexHandle>("VertexIHalfedgeIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::VertexOHalfedgeIter, VertexHandle>("VertexOHalfedgeIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::VertexEdgeIter, VertexHandle>("VertexEdgeIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::VertexFaceIter, VertexHandle>("VertexFaceIter");
expose_circulator
<
O
M
::
PolyConnectivity
::
VertexVertexIter
,
OM
::
VertexHandle
>
(
m
,
"VertexVertexIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
VertexIHalfedgeIter
,
OM
::
VertexHandle
>
(
m
,
"VertexIHalfedgeIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
VertexOHalfedgeIter
,
OM
::
VertexHandle
>
(
m
,
"VertexOHalfedgeIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
VertexEdgeIter
,
OM
::
VertexHandle
>
(
m
,
"VertexEdgeIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
VertexFaceIter
,
OM
::
VertexHandle
>
(
m
,
"VertexFaceIter"
);
//
expose_circulator<O
penMesh
::PolyConnectivity::FaceVertexIter, FaceHandle>("FaceVertexIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::FaceHalfedgeIter, FaceHandle>("FaceHalfedgeIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::FaceEdgeIter, FaceHandle>("FaceEdgeIter");
//
expose_circulator<O
penMesh
::PolyConnectivity::FaceFaceIter, FaceHandle>("FaceFaceIter");
expose_circulator
<
O
M
::
PolyConnectivity
::
FaceVertexIter
,
OM
::
FaceHandle
>
(
m
,
"FaceVertexIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
FaceHalfedgeIter
,
OM
::
FaceHandle
>
(
m
,
"FaceHalfedgeIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
FaceEdgeIter
,
OM
::
FaceHandle
>
(
m
,
"FaceEdgeIter"
);
expose_circulator
<
O
M
::
PolyConnectivity
::
FaceFaceIter
,
OM
::
FaceHandle
>
(
m
,
"FaceFaceIter"
);
//
expose_circulator<O
penMesh
::PolyConnectivity::HalfedgeLoopIter, HalfedgeHandle>("HalfedgeLoopIter");
expose_circulator
<
O
M
::
PolyConnectivity
::
HalfedgeLoopIter
,
OM
::
HalfedgeHandle
>
(
m
,
"HalfedgeLoopIter"
);
// typedef IteratorWrapperT<PolyConnectivity::VertexIter, &ArrayKernel::n_vertices> VertexIterWrapper;
// typedef IteratorWrapperT<PolyConnectivity::HalfedgeIter, &ArrayKernel::n_halfedges> HalfedgeIterWrapper;
...
...
src/Circulator.hh
View file @
d58bdfdc
...
...
@@ -3,8 +3,9 @@
#include
"Bindings.hh"
namespace
OpenMesh
{
namespace
Python
{
#include
<pybind11/pybind11.h>
namespace
py
=
pybind11
;
/**
* Wrapper for circulators.
...
...
@@ -61,8 +62,7 @@ class CirculatorWrapperT {
return
res
;
}
else
{
PyErr_SetString
(
PyExc_StopIteration
,
"No more data."
);
boost
::
python
::
throw_error_already_set
();
throw
py
::
stop_iteration
();
}
return
typename
Circulator
::
value_type
();
}
...
...
@@ -83,16 +83,14 @@ class CirculatorWrapperT {
* that are passed from %Python to C++ are instances of CirculatorWrapperT.
*/
template
<
class
Circulator
,
class
CenterEntityHandle
>
void
expose_circulator
(
const
char
*
_name
)
{
class_
<
CirculatorWrapperT
<
Circulator
,
CenterEntityHandle
>
>
(
_name
,
init
<
TriMesh
&
,
CenterEntityHandle
>
())
.
def
(
init
<
PolyMesh
&
,
CenterEntityHandle
>
())
void
expose_circulator
(
py
::
module
&
m
,
const
char
*
_name
)
{
py
::
class_
<
CirculatorWrapperT
<
Circulator
,
CenterEntityHandle
>
>
(
m
,
_name
)
.
def
(
py
::
init
<
TriMesh
&
,
CenterEntityHandle
>
())
.
def
(
py
::
init
<
PolyMesh
&
,
CenterEntityHandle
>
())
.
def
(
"__iter__"
,
&
CirculatorWrapperT
<
Circulator
,
CenterEntityHandle
>::
iter
)
.
def
(
"__next__"
,
&
CirculatorWrapperT
<
Circulator
,
CenterEntityHandle
>::
next
)
.
def
(
"next"
,
&
CirculatorWrapperT
<
Circulator
,
CenterEntityHandle
>::
next
)
;
}
}
// namespace OpenMesh
}
// namespace Python
#endif
src/Iterator.hh
View file @
d58bdfdc
...
...
@@ -3,8 +3,9 @@
#include
"Bindings.hh"
namespace
OpenMesh
{
namespace
Python
{
#include
<pybind11/pybind11.h>
namespace
py
=
pybind11
;
/**
* Wrapper for mesh item iterators.
...
...
@@ -69,8 +70,7 @@ class IteratorWrapperT {
return
res
;
}
else
{
PyErr_SetString
(
PyExc_StopIteration
,
"No more data."
);
boost
::
python
::
throw_error_already_set
();
throw
py
::
stop_iteration
();
}
return
typename
Iterator
::
value_type
();
}
...
...
@@ -105,9 +105,12 @@ class IteratorWrapperT {
* that are passed from %Python to C++ are instances of IteratorWrapperT.
*/
template
<
class
Iterator
,
size_t
(
OpenMesh
::
ArrayKernel
::*
n_items
)()
const
>
void
expose_iterator
(
const
char
*
_name
)
{
class_
<
IteratorWrapperT
<
Iterator
,
n_items
>
>
(
_name
,
init
<
PolyMesh
&
,
typename
Iterator
::
value_type
,
optional
<
bool
>
>
())
.
def
(
init
<
TriMesh
&
,
typename
Iterator
::
value_type
,
optional
<
bool
>
>
())
void
expose_iterator
(
py
::
module
&
m
,
const
char
*
_name
)
{
py
::
class_
<
IteratorWrapperT
<
Iterator
,
n_items
>
>
(
m
,
_name
)
.
def
(
py
::
init
<
PolyMesh
&
,
typename
Iterator
::
value_type
>
())
.
def
(
py
::
init
<
PolyMesh
&
,
typename
Iterator
::
value_type
,
bool
>
())
.
def
(
py
::
init
<
TriMesh
&
,
typename
Iterator
::
value_type
>
())
.
def
(
py
::
init
<
TriMesh
&
,
typename
Iterator
::
value_type
,
bool
>
())
.
def
(
"__iter__"
,
&
IteratorWrapperT
<
Iterator
,
n_items
>::
iter
)
.
def
(
"__next__"
,
&
IteratorWrapperT
<
Iterator
,
n_items
>::
next
)
.
def
(
"__len__"
,
&
IteratorWrapperT
<
Iterator
,
n_items
>::
len
)
...
...
@@ -115,7 +118,4 @@ void expose_iterator(const char *_name) {
;
}
}
// namespace OpenMesh
}
// namespace Python
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment