1

I have a set of points on an OPEN surface in 3D space. I have identified a subset of points which lay on the boundary. I mean to generate a triangulation of those points, which gives me an open surface and keeps my selected points on the boundary.

All references I found deal with (sometimes?) closed surfaces, e.g., CGAL. See examples below. In addition, some CGAL algorithms require oriented normals at each point, which I do not have.

Is there an available algorithm and code for this? (either CGAL Advancing_front_surface_reconstruction, properly handled, or any other)

See also this and this.


Example 1

I compiled and ran example reconstruction_surface_mesh.cpp from examples/Advancing_front_surface_reconstruction, out-of-the box (which uses file half.xyz as input for data points), and I obtained a closed surface:

enter image description here enter image description here

I would like to get rid of the few triangles that close the surface. I tried adding an extra point at the end of half.xyz, and I got

enter image description here enter image description here

which is an open surface. So far, with what I tested, I do not know:

  1. How to indicate an open surface.

  2. How to indicate which vertices lay at the boundary. If this is a non-empty set (and it should have at least three vertices) this would imply an open surface.

Ideally, one would have a workflow which works without manual intervention.


Example 2

I compiled and ran example boundaries.cpp, out-of-the box (which also uses file half.xyz as input for data points). The output is:

0 outliers:

Boundaries:
boundary
0.178269 0.438589 0.129521
0.0795598 0.419465 0.244812
0.0549683 0.377617 0.3119
-0.0295721 0.360972 0.329075
-0.111332 0.334417 0.342617
-0.186667 0.2953 0.346683
-0.2719 0.16555 0.375017
-0.336304 0.117058 0.339323
-0.393517 0.0775 0.285917
-0.421419 -0.126854 0.215271
-0.395217 -0.214417 0.20015
-0.354783 -0.2953 0.170767
-0.237067 -0.395867 0.172233
-0.178246 -0.438588 0.129553
0.0227767 -0.4873 0.0700833
0.220338 -0.438589 -7.23321e-06
0.293 -0.395867 0
0.36025 -0.334417 0
0.418077 -0.258382 6.0303e-05
0.46025 -0.17265 0
0.484417 -0.0425167 -0.0763333
0.485067 0.03875 -0.0782667
0.471547 0.117058 -0.076827
0.44605 0.197567 -0.0700833
0.4092 0.27125 -0.0433167
0.364885 0.329645 0
0.313633 0.377617 0.0441167
0.2509 0.41425 0.0879333

I did not find how to use this for automatically removing triangles which would make my target boundary vertices not laying at the boundary.

Moreover, the output seems to be the list of boundary points, without the "spurious" triangles (I am not sure). I would like to specify this list.

1 Answers1

-1

The CGAL advancing front reconstruction algorithm does generate open surfaces in general.

sloriot
  • 6,070
  • 18
  • 27
  • Can you point me to an example of such use? The [example](https://doc.cgal.org/latest/Advancing_front_surface_reconstruction/index.html#AFSR_Example_sharp_features) that I see involves a closed surface. Or else, to a doc where it is stated that the AFSR can be used for open surfaces. – sancho.s ReinstateMonicaCellio Feb 28 '19 at 12:58
  • This [one](https://doc.cgal.org/latest/Advancing_front_surface_reconstruction/Advancing_front_surface_reconstruction_2reconstruction_surface_mesh_8cpp-example.html) for example. – sloriot Feb 28 '19 at 16:52
  • Did you try that example? From what I tried, it gives a closed surface. Please see updated OP. – sancho.s ReinstateMonicaCellio Mar 01 '19 at 17:09
  • See [this example](https://doc.cgal.org/latest/Advancing_front_surface_reconstruction/Advancing_front_surface_reconstruction_2boundaries_8cpp-example.html) to filter large faces based on their perimeter for example. – sloriot Mar 02 '19 at 16:09
  • Sebastien, I checked the example, please see updated OP. I do not see what is the general workflow you suggest. – sancho.s ReinstateMonicaCellio Mar 05 '19 at 14:39
  • Sebastien, do you see how to prescribe a given set of nodes as the boundary for the triangulation? I couldn't find this – sancho.s ReinstateMonicaCellio Mar 11 '19 at 14:07
  • I don't think it is possible with the current API. – sloriot Mar 12 '19 at 05:53
  • From your brief answer and comments, it seemed that CGAL is able to do what the OP meant to. If that is not the case, would you mind rephrasing the answer so it reflects what can and cannot be done? Thanks – sancho.s ReinstateMonicaCellio Mar 12 '19 at 08:22