From 4c69a22aef06c865ac0b5e3fbe351b944b464dd5 Mon Sep 17 00:00:00 2001 From: Mike Kremer Date: Fri, 20 Nov 2009 15:20:44 +0000 Subject: [PATCH] Added a chapter about the navigation on a mesh. git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@231 fdac6126-5c0c-442c-9429-916003d36597 --- Doc/Examples/nav_code1.cc | 19 ++++++++ Doc/Examples/nav_code2.cc | 13 +++++ Doc/Examples/nav_code3.cc | 14 ++++++ Doc/Examples/nav_code4.cc | 11 +++++ Doc/images/mesh.inner.png | Bin 3963 -> 3711 bytes Doc/images/mesh.inout.png | Bin 0 -> 3087 bytes Doc/images/mesh.normal.png | Bin 3103 -> 2904 bytes Doc/images/mesh.opp.png | Bin 0 -> 3006 bytes Doc/images/mesh.outer.png | Bin 6662 -> 6118 bytes Doc/mainpage.docu | 1 + Doc/navigation.docu | 97 +++++++++++++++++++++++++++++++++++++ 11 files changed, 155 insertions(+) create mode 100644 Doc/Examples/nav_code1.cc create mode 100644 Doc/Examples/nav_code2.cc create mode 100644 Doc/Examples/nav_code3.cc create mode 100644 Doc/Examples/nav_code4.cc create mode 100644 Doc/images/mesh.inout.png create mode 100644 Doc/images/mesh.opp.png create mode 100644 Doc/navigation.docu diff --git a/Doc/Examples/nav_code1.cc b/Doc/Examples/nav_code1.cc new file mode 100644 index 00000000..863d4b01 --- /dev/null +++ b/Doc/Examples/nav_code1.cc @@ -0,0 +1,19 @@ +[...] + +TriMesh::HalfedgeHandle heh, heh_init; + +// Get the halfedge handle assigned to vertex[0] +heh = heh_init = mesh.halfedge_handle(vertex[0].handle()); + +// heh now holds the handle to the initial halfedge. +// We now get further on the boundary by requesting +// the next halfedge adjacent to the vertex heh +// points to... +heh = mesh.next_halfedge_handle(heh); + +// We can do this as often as we want: +while(heh != heh_init) { + heh = mesh.next_halfedge_handle(heh); +} + +[...] diff --git a/Doc/Examples/nav_code2.cc b/Doc/Examples/nav_code2.cc new file mode 100644 index 00000000..5fa27ec6 --- /dev/null +++ b/Doc/Examples/nav_code2.cc @@ -0,0 +1,13 @@ +// Test if a halfedge lies at a boundary (is not adjacent to a face) +bool is_boundary (HalfedgeHandle _heh) const + +// Test if an edge lies at a boundary +bool is_boundary (EdgeHandle _eh) const + +// Test if a vertex is adjacent to a boundary edge +bool is_boundary (VertexHandle _vh) const + +// Test if a face has at least one adjacent boundary edge. +// If _check_vertex=true, this function also tests if at least one +// of the adjacent vertices is a boundary vertex +bool is_boundary (FaceHandle _fh, bool _check_vertex=false) const diff --git a/Doc/Examples/nav_code3.cc b/Doc/Examples/nav_code3.cc new file mode 100644 index 00000000..d8212d54 --- /dev/null +++ b/Doc/Examples/nav_code3.cc @@ -0,0 +1,14 @@ +[...] + +// Get some vertex handle +PolyMesh::VertexHandle v = ...; + +for(PolyMesh::VertexIHalfedgeIter vih_it = mesh.vih_iter(v); vih_it; ++vih_it) { + // Iterate over all incoming halfedges... +} + +for(PolyMesh::VertexOHalfedgeIter voh_it = mesh.voh_iter(v); voh_it; ++voh_it) { + // Iterate over all outgoing halfedges... +} + +[...] diff --git a/Doc/Examples/nav_code4.cc b/Doc/Examples/nav_code4.cc new file mode 100644 index 00000000..6a6eb9ed --- /dev/null +++ b/Doc/Examples/nav_code4.cc @@ -0,0 +1,11 @@ +// Get the face adjacent to the opposite halfedge +OpenMesh::PolyConnectivity::opposite_face_handle(); + +// Get the handle to the opposite halfedge +OpenMesh::Concepts::KernelT< FinalMeshItems >::opposite_halfedge_handle(); + +// Get the opposite vertex to the opposite halfedge +OpenMesh::TriConnectivity::opposite_he_opposite_vh(); + +// Get the vertex assigned to the opposite halfedge +OpenMesh::TriConnectivity::opposite_vh(); diff --git a/Doc/images/mesh.inner.png b/Doc/images/mesh.inner.png index 4a16c9bf79c560dcef4fe81fcfd6eb54af749517..a699791e3e792d32244e138d5001a4cc62a1f81d 100644 GIT binary patch literal 3711 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 literal 3963 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 diff --git a/Doc/images/mesh.inout.png b/Doc/images/mesh.inout.png new file mode 100644 index 0000000000000000000000000000000000000000..f660c0fbb989a4dd144538371c6bd25c674346ea GIT binary patch literal 3087 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 delta 2748 zcmY*be>~IqAJ4M$V@isN6NgUZS_zoT1 zRH?5Ww27iytZvRq(U%j2-Rgm+&I29-m)UmHpP#TYsB-QA4uw6O>$Ob1G8Gy1tRT_~ zg(()#P#>|)+8pI?t7huwmt6bfkNNX%ze%9##3ggss!w0jG%-fNb)tWZ>F4+93=ST#**X8QMah|Tpb_QC?o&HuVgVt?( z9#Xr_?y1BL{?zzptes%|2gMyN7Q%8rXidWU$pfdQz+QjX*-Mx+FHCKVj*XmX^puNJND~1|U6dz( zkj+Miu8K+lj}ucK$nr87wI63dcn^~#d||q`T2@+YsE{p2Q{(b(0F*}o#QvoA|680GyH`zEtZ@`Id?orsU` z51Ds>Arq~;;_+5nFCOEvU5o5~U6?yxl{Z_5*i4{iNn8}kY@HsRPWsCZ47)c-a)yT6 zDbhq>U6Pj~g^5#4`^N71)F8jqF4>bND1s@eQhd3QqxVcc?pmE$PVD-q^j>iMPvl{NoO z1}iBaCuOEXl}?}WaA&Hj&Mh-!(Rr|_lseQIOrWb6dt}kiYs~O81YZ_6$c{vb18BGH zg$+5C5sx7TF(k`;Kx1P0X~_6rzd&s|XR?T4{?in8CgqGspLyX_D)G1Xu{0RG!nZ9` z+5p(^Ppd!ZCx7FHz-A*a`PVH>C$g6?0X;X8X&YepvfKfO->Xf#LY%++Ivq*B7!n8G zTVLBoghc;qXZN|&6M`16AE_HnZ8}Fz#w?l4Yv(0l!Tn<7g$~((bneYXUM5HDINrY_ zL}_FeIh~@R#Lbxdx&~uMiFv_&NBoQcBf#Z;7W$NZnBL9>V<7!z;HtfNYG!tFZWltF zf?WAA&?siNNJxK?>{y&vOuyfoz>eh0r~;>aukxI|nE5uY!(u~Uv_?exe6OEFn#K}` zvI%f&CgD)crp|=czLsr(Jbv`}LWFg>Ys;U1te(eM(YfNnrISw%kgnFwd5H6F8|Ckv zAfot1lvc_@P=(gr*F%L7)+5gQJ10WMvu|VwE2Y=@c4sAJ;M+m>*5*7?ck$`= z>O&3eI81!#KX++70fNR?reBQT^#C2>S)P;WB%LX-bx-E&=25m#I^q*@lywtnBHuO* z370Vq43C)dYw1a`=J?x3A*AOEgvnRWY{^mA5^H7eyDv_KKSJL#*;#iYTfuP+)vWE# zd)ptnE}v7=FF9_w2J6&apHzzH8*ya88B}wP$x3kefQ4O# zvRpdL)lI*`k0QW;fL-*O#+MG(5VN4qC?ny#V;nJ+I`|ATN z>VQSXEi;?Yt#^R7)`nHPsNZf3f{dX}D1!tMw>cDZR`pF2^zbr`+<>OeSABt_L!*Og zhMpuh?3m=2?W~ozn~3VUlck+TguDmqkxaT@Ep7}zs1#r3wmyV_nQ6GOU2DXa+}1}b zVi_9@BY?h<6JaH<&;7LM13I3CB7*{P!6+54!n(NN!yhrz?-Dkc_IaXb30n`Qp`g0~U&FFi;qF}tq zLbPWsQ5`M@~|PGDRBJE_n_ywO5p)mR@4v3i8AE&n;( zV|`ZoC!b_!6F{XVB4G^qNrCRA{|S2dx1F>u*YUU3y=EbZJ}9c^D0hlmA>ppE>(X|M z1ACg+t5gMjD>LUG8*+5~tPdNWmS+NWnEPyHHGry?ZCQ&KDjxxK-|2#z8N^-3Jh(JXC3EhRLhqjzlgCcNakKQ+{QdJ6yzt5vt%`w=cH<$zL`^564_pCdn9mriVpM_ z_BHYt1uZ+%kYZhK=ae7sIqvoNk(EMe-uz-Iz;8``jbqmxSen{#*SR{a>we#zQXTk% zk=f1G;=h?00kVg&K&k^&;`!uRhw3>bUXYe>>hBDA>lz~-0kmq_`n?CjI}pV4{_dyv zc0x{oqiq>*qYB-4@3HqK6Sr^%dUWoZ_g4bnH?PX8X^8LA94<~()i)})<4-ChA77uj zd}W`Z{jb4a8QqB<#7XN?@3ARiJ1~=k2wO|I-FL_3tto0R>$8TV7+|u0R@mfrxg*5 diff --git a/Doc/images/mesh.opp.png b/Doc/images/mesh.opp.png new file mode 100644 index 0000000000000000000000000000000000000000..c51d802cfec5282cf24baaa6c1e8abf61456a7d2 GIT binary patch literal 3006 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 DbEQQF literal 6662 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 +OpenMesh::Concepts::KernelT< FinalMeshItems >::next_halfedge_handle()
+OpenMesh::Concepts::KernelT< FinalMeshItems >::prev_halfedge_handle() + +\section nav_bound Mesh boundaries + +As you have seen in the previous section, navigating along boundaries +is very simple. In general %OpenMesh also offers a boundary attribute +for edges, vertices and faces. So testing i.e. whether a face is a boundary +face is quite simple using OpenMesh::PolyConnectivity::is_boundary().
+ +So for each type we can make use of one of the following functions: + +\include nav_code2.cc + +\section nav_io Using incoming and outgoing halfedges + +%OpenMesh offers quite a lot of iterators and circulators to easily iterate +over the structures of a mesh. A very helpful iterator is the +OpenMesh::PolyConnectivity::VertexIHalfedgeIter or the OpenMesh::PolyConnectivity::VertexOHalfedgeIter which are used to iterate +over all incoming/outgoing halfedges of a vertex. +So, sticking to the illustration below, a OpenMesh::PolyConnectivity:V:ertexIHalfedgeIter for the +lower most vertex would iterate over all incoming halfedges (blue), +whereas the OpenMesh::PolyConnectivity::OpenMesh::PolyConnectivity::VertexOHalfedgeIter would iterate over all outgoing halfedges (red): + +\image html mesh.inout.png + +A schematic code example of how to use the halfedge iterators as described above: +\include nav_code3.cc + +\section nav_opposite Using opposite halfedges + +The halfedge structure splits every edge into two directional parts by creating two +directed edges out of one undirected edge. So for every halfedge there exists its +counterpart pointing in the opposite direction. %OpenMesh allows to easily navigate +through opposing halfedges via the function OpenMesh::Concepts::KernelT< FinalMeshItems >::opposite_halfedge_handle(). +So in the illustration below \c opposite_halfedge_handle() for the blue halfedge would +return the red halfedge: + +\image html mesh.opp.png + +There are also a few more functions that offer easy access to opposing structures: + +\include nav_code4.cc + +*/