From a3afc2d7289705028601317aaee1ea53a0a0840a Mon Sep 17 00:00:00 2001 From: Isaak Lim Date: Wed, 21 Mar 2018 16:24:28 +0100 Subject: [PATCH] remove python bindings references from Docs --- Doc/Examples/python_tutorial.py | 158 ------------------ Doc/mainpage.docu | 8 - Doc/python_tutorial.docu | 288 -------------------------------- 3 files changed, 454 deletions(-) delete mode 100644 Doc/Examples/python_tutorial.py delete mode 100644 Doc/python_tutorial.docu diff --git a/Doc/Examples/python_tutorial.py b/Doc/Examples/python_tutorial.py deleted file mode 100644 index c43420cf..00000000 --- a/Doc/Examples/python_tutorial.py +++ /dev/null @@ -1,158 +0,0 @@ -################################################## -# Getting Started -################################################## - -from openmesh import * - -mesh = TriMesh() - - -################################################## -# Adding Items to a Mesh -################################################## - -# add a a couple of vertices to the mesh -vh0 = mesh.add_vertex(TriMesh.Point(0, 1, 0)) -vh1 = mesh.add_vertex(TriMesh.Point(1, 0, 0)) -vh2 = mesh.add_vertex(TriMesh.Point(2, 1, 0)) -vh3 = mesh.add_vertex(TriMesh.Point(0,-1, 0)) -vh4 = mesh.add_vertex(TriMesh.Point(2,-1, 0)) - -# add a couple of faces to the mesh -fh0 = mesh.add_face(vh0, vh1, vh2) -fh1 = mesh.add_face(vh1, vh3, vh4) -fh2 = mesh.add_face(vh0, vh3, vh1) - -# add another face to the mesh, this time using a list -vh_list = [vh2, vh1, vh4] -fh3 = mesh.add_face(vh_list) - -# 0 ==== 2 -# |\ 0 /| -# | \ / | -# |2 1 3| -# | / \ | -# |/ 1 \| -# 3 ==== 4 - - -################################################## -# Iterators -################################################## - -# iterate over all vertices -for vh in mesh.vertices(): - print vh.idx() - -# iterate over all halfedges -for heh in mesh.halfedges(): - print heh.idx() - -# iterate over all edges -for eh in mesh.edges(): - print eh.idx() - -# iterate over all faces -for fh in mesh.faces(): - print fh.idx() - - -################################################## -# Circulators -################################################## - -# iterate over all neighboring vertices -for vh in mesh.vv(vh1): - print vh.idx() - -# iterate over all incoming halfedges -for heh in mesh.vih(vh1): - print heh.idx() - -# iterate over all outgoing halfedges -for heh in mesh.voh(vh1): - print heh.idx() - -# iterate over all adjacent edges -for eh in mesh.ve(vh1): - print eh.idx() - -# iterate over all adjacent faces -for fh in mesh.vf(vh1): - print fh.idx() - -# iterate over the face's vertices -for vh in mesh.fv(fh0): - print vh.idx() - -# iterate over the face's halfedges -for heh in mesh.fh(fh0): - print heh.idx() - -# iterate over the face's edges -for eh in mesh.fe(fh0): - print eh.idx() - -# iterate over all edge-neighboring faces -for fh in mesh.ff(fh0): - print fh.idx() - - -################################################## -# Properties -################################################## - -prop_handle = VPropHandle() -mesh.add_property(prop_handle, "cogs") - -for vh in mesh.vertices(): - cog = TriMesh.Point(0,0,0) - valence = 0 - for neighbor in mesh.vv(vh): - cog += mesh.point(neighbor) - valence += 1 - mesh.set_property(prop_handle, vh, cog / valence) - -mesh.remove_property(prop_handle) - - -################################################## -# Property Managers -################################################## - -prop_man = VPropertyManager(mesh, "cogs") - -prop_man.set_range(mesh.vertices(), TriMesh.Point(0,0,0)) - -for vh in mesh.vertices(): - valence = 0 - for neighbor in mesh.vv(vh): - prop_man[vh] += mesh.point(neighbor) - valence += 1 - prop_man[vh] /= valence - - -################################################## -# I/O -################################################## - -mesh = TriMesh() - -read_mesh(mesh, "bunny.obj") -# modify mesh ... -write_mesh(mesh, "bunny.obj") - - -mesh = TriMesh() -mesh.request_halfedge_normals() -mesh.request_vertex_normals() - -options = Options() -options += Options.VertexNormal - -result = read_mesh(mesh, "bunny.obj", options) - -if result: - print "everything worked" -else: - print "something went wrong" diff --git a/Doc/mainpage.docu b/Doc/mainpage.docu index ad8fa8e9..75d4663c 100644 --- a/Doc/mainpage.docu +++ b/Doc/mainpage.docu @@ -87,14 +87,6 @@ repeatedly replacing each vertex' position by the center of gravity

-\section python_and_om OpenMesh Python interface -OpenMesh itself is written in C++. We also provide a python interface -to use OpenMesh. A detailed description of the interface can be found -in the following tutorial: -\li \subpage python_tutorial - -

- \subpage additional_information \li \ref mesh_first_to_read diff --git a/Doc/python_tutorial.docu b/Doc/python_tutorial.docu deleted file mode 100644 index 8649d4f9..00000000 --- a/Doc/python_tutorial.docu +++ /dev/null @@ -1,288 +0,0 @@ -/** \page python_tutorial Python Tutorial - -This tutorial will introduce the basic concepts behind the %OpenMesh Python -Bindings. We will cover the following topics: - -\li How to build the Python Bindings -\li How to create an empty mesh -\li How to add vertices and faces to a mesh -\li How to navigate on a mesh using iterators and circulators -\li How to add and remove custom properties -\li How to read and write meshes from files - -In addition, we will briefly discuss some of the differences between the Python -Bindings and the original C++ implementation of %OpenMesh. - - - -\section python_build Building the Python Bindings - -The Python Bindings depend on the following libraries: - -\li Python (2.7 or later) -\li Boost Python (1.54.0 or later) - -\note Make sure that your Boost Python and Python versions match, i.e. that -Boost Python was linked against the correct Python version. - -The Python Bindings are automatically built with %OpenMesh. The generated files are written to the -Build/python subdirectory of the build tree. For more information on how to build %OpenMesh see -\ref compiling. - -If CMake does not find your Python installation (or finds the wrong one) you can -explicitly specify an installation by setting the following variables: - -\verbatim -PYTHON_LIBRARY - Path to the python library -PYTHON_INCLUDE_DIR - Path to where Python.h is found -\endverbatim - -Similarly, if CMake does not find your Boost Python installation, set the -following variables: - -\verbatim -BOOST_ROOT - Preferred installation prefix -BOOST_INCLUDEDIR - Preferred include directory e.g. /include -BOOST_LIBRARYDIR - Preferred library directory e.g. /lib -\endverbatim - - - -\section python_start Getting Started - -To use the %OpenMesh Python Bindings we first need to import the openmesh module: - -\dontinclude python_tutorial.py -\skipline from - -The module provides two mesh classes: One for polygonal meshes (PolyMesh) and -one for triangle meshes (TriMesh). You should use triangle meshes whenever -possible, since they are usually more efficient. In addition, some algorithms -are only implemented for triangle meshes while triangle meshes inherit the full -functionality of polygonal meshes. - -The following code creates a new triangle mesh: - -\skipline mesh - - - -\section python_add Adding Items to a Mesh - -We can add a new vertex to the mesh by calling the add_vertex() member function. -This function gets a coordinate and returns a handle to the newly inserted -vertex. - -\skipline vh0 -\until vh4 - -To add a new face to the mesh we have to call add_face(). This function gets the -handles of the vertices that make up the new face and returns a handle to the -newly inserted face: - -\skipline fh0 -\until fh2 - -We can also use a Python list to add a face to the mesh: - -\skipline vh_list -\until fh3 - - - -\section python_iterators Iterators and Circulators - -Now that we have added a couple of vertices to the mesh, we can iterate over -them and print out their indices: - -\skipline for -\until vh.idx() - -We can also iterate over halfedges, edges and faces by calling mesh.halfedges(), -mesh.edges() and mesh.faces() respectively: - -\skipline iterate -\until fh.idx() - -To iterate over the items adjacent to another item we can use one of the -circulator functions. For example, to iterate over the vertices adjacent to -another vertex we can call mesh.vv() and pass the handle of the center vertex: - -\skipline for -\until vh.idx() - -We can also iterate over the adjacent halfedges, edges and faces: - -\skipline iterate -\until fh.idx() - -To iterate over the items adjacent to a face we can use the following functions: - -\skipline iterate -\until fh.idx() - - - -\section python_props Properties - -%OpenMesh allows us to dynamically add custom properties to a mesh. We can add -properties to vertices, halfedges, edges, faces and the mesh itself. To -add a property to a mesh (and later access its value) we have to use a property -handle of the appropriate type: - -\li VPropHandle (for vertex properties) -\li HPropHandle (for halfedge properties) -\li EPropHandle (for edge properties) -\li FPropHandle (for face properties) -\li MPropHandle (for mesh properties) - -The following code shows how to add a vertex property to a mesh: - -\skipline prop_handle -\until mesh - -The second parameter of the function add_property() is optional. The parameter -is used to specify a name for the new property. This name can later be used -to retrieve a handle to the property using the get_property_handle() member -function. - -Now that we have added a vertex property to the mesh we can set and get its -value. Here we will use the property to store the center of gravity of each -vertex' neighborhood: - -\skipline for -\until mesh.set_property - -Properties use Python's type system. This means that we can use the same -property to store values of different types (e.g. store both strings and -integers using the same vertex property). Properties are initialized to the -Python built-in constant None. - -To remove a property we have to call remove_property() with the appropriate -property handle: - -\skipline mesh.remove_property - - - -\section python_propman Property Managers - -Another way to add and remove a property is to use a property manager. A -Property manager encapsulates a property and manages its lifecycle. A Property -manager also provides a number of convenience functions to access the enclosed -property. - -There are four different types of property managers. One for each type of mesh -item: - -\li VPropertyManager (for vertex properties) -\li HPropertyManager (for halfedge properties) -\li EPropertyManager (for edge properties) -\li FPropertyManager (for face properties) - -Property managers automatically add a new property to a mesh when they are -initialized. Thus the following code not only creates a new vertex property -manager, but also adds a new vertex property to the mesh: - -\skipline prop_man - -Property managers allow us to conveniently set the property value for an entire -range of mesh items: - -\skipline prop_man - -They also allow us to use the subscript operator to set and get property values. -Here we will once again use a property to store the center of gravity of each -vertex' neighborhood: - -\skipline for -\until prop_man[vh] /= valence - -Properties that are encapsulated by a property manager are automatically removed -from the mesh when the property manager goes out of scope (i.e. the property -manager is garbage collected). - - - -\section python_io Read and write meshes from files - -You can read and write meshes from files using the read_mesh() and write_mesh() -functions: - -\skipline mesh -\until write_mesh(mesh, "bunny.obj") - -The file type is automatically deduced from the file extension. %OpenMesh -currently supports four file types: .off, .obj, .stl and .om - -The behaviour of the I/O functions can be controlled by passing an instance of -the Options class to either read_mesh() or write_mesh(). The class controls the -behaviour of the I/O functions by means of enabled/disabled bits in a bitset: - -\skipline mesh -\until print "something went wrong" - -Other available option bits include: - --# mode bits - control binary reading/writing - - Options.Binary - - Options.MSB - - Options.LSB - - Options.Swap (MSB|LSB) --# property bits - controls which standard properties to read/write - - Options.VertexNormal - - Options.VertexTexCoord - - Options.VertexColor - - Options.FaceNormal - - Options.FaceColor - - Options.ColorAlpha - - Options.ColorFloat - -\note You have to pass an instance of the Options class to the I/O functions, -i.e. you cannot directly pass one of the option bits. For example, directly -passing Options.Binary to either one of the functions will cause an error. - -When reading a file the options are used as hints, i.e. depending on the format -we can help the reader to interpret the data correctly. - -\note If you want to read a property from a file the property must have been -requested prior to reading the file. - -When writing the mesh the mode bits control whether to use the binary variant of -the respective file format and the desired byte-ordering. - - - -\section python_examples Additional Code Examples - -You can use our unit tests to learn more about the %OpenMesh Python Bindings. -They are located in the src/Python/Unittests subdirectory. - - - -\section python_cpp Python and C++ - -The interface of the Python Bindings is to a large extent identical to the -interface of the original C++ implementation of %OpenMesh. You should therefore -be able to use the C++ documentation as a reference for the Python Bindings. In -particular, the classes KernelT, PolyMeshT and TriMeshT provide a good overview -of the available mesh member functions. That being said, there are a number of -small differences. For example, whenever the C++ implementation returns a -reference to an object that is managed by %OpenMesh, the Python Bindings will -return a copy of that object. This is due to the fact that Python does not have -a language feature that is analogous to C++ references. One example of such a -function is the point() member function of the PolyMesh and TriMesh classes. -Unlike its C++ counterpart, the function does not return a reference to the -requested point. It instead returns a copy of the point. This implies that you -have to use the set_point() member function to change the value of a point. The -same applies to the following functions: normal(), color(), property(), -status(), etc. - - - -
The complete source looks like this: - -\include python_tutorial.py - - -**/