dmesh generation using constrained delaunay triangulation
are there examples of doing 3dmesh generation using constrained delaunay triangulation?
I see there is constrained triangulation in 2d but not in their 3d mesh generation.
See also questions close to this topic

Different 3D mesh densities for multiple sharp edges/features? I.e. graded tetmesh densities
I need to have graded 3D mesh densities (from polyhedral object(s) OFF, not image). I'm making good progress with "domain.detect_features();" but all edges then have same density (first criteria fedge i think). For example here (fig below) is a simple cylinder result. What I want is finer mesh at the top of the cylinder, or ideally control mesh density for both lower and upper (or every) 1d polyline.
Is that possible? I hope I haven't missed something obvious I'm new to cpp/cgal. FYI I'm just using the simple cpp example polyhedra with features.
using latest ver 4.14 working well.

How to get voronoi edges that are completely inside the given points?
Let say I have set of points that resemble a big circle (points are perturbed a little). I insert them to cgal voroni diagram. Is there any way I could find the half edge that
is_segment()
but is only inside the circle points?For now I have used ray casting method to find if the voronoi edge is inside or outside.
I know there are functions like
is_unbounded()
,is_ray
but I was hoping for function likebool half_edge.is_inside_given_points()
. 
My cgal code 3d delaunay triangulation wrong
I pass in the point to get triangulate and spit out cell data. But the value spit back is wrong as the cell data is violate the principle of triangulation.
typedef CGAL::Exact_predicates_exact_constructions_kernel K; typedef CGAL::Delaunay_triangulation_3<K> Delaunay; std::vector<K::Point_3> points; std::map<Delaunay::Vertex_handle, int> index_of_vertex; points.push_back(K::Point_3(400.0, 0.0, 0.0)); points.push_back(K::Point_3(200, 400.0, 0.0)); points.push_back(K::Point_3(200, 400.0, 0.0)); points.push_back(K::Point_3(0.0, 0.0, 600.0)); points.push_back(K::Point_3(0.0, 0.0, 600.0)); //And here I push the vector to Delaunay Delaunay dt(points.begin(), points.end()); // Keep track of vertex used for (Delaunay::Finite_vertices_iterator it = t.finite_vertices_begin(); it != dt.finite_vertices_end(); ++it, ++j) { index_of_vertex[it.base()] = j; } // Iterate though and extract vertex and index in cell. for (Delaunay::Finite_cells_iterator itCell = it.finite_cells_begin(), itend = dt.finite_cells_end(); itCell != itend; itCell++) { vector<double> verts; vector<int> indx; int ind0 = index_of_vertex[itCell>vertex(0)]; int ind1 = index_of_vertex[itCell>vertex(1)]; int ind2 = index_of_vertex[itCell>vertex(2)]; int ind3 = index_of_vertex[itCell>vertex(3)]; K::Point_3 v0 = points[ind0]; K::Point_3 v1 = points[ind1]; K::Point_3 v2 = points[ind2]; K::Point_3 v3 = points[ind3]; // Store the vertex verts.push_back(CGAL::to_double(v0.x())); ... verts.push_back(CGAL::to_double(v3.z())); // extract the index int ind00 = Delaunay::vertex_triple_index(0, 0); ... int ind32 = Delaunay::vertex_triple_index(3, 2); // Store the index indx.push_back(ind00); ... indx.push_back(ind32); }
//  Expect  As you see up there. I have 5 point (400.0, 0.0, 0.0), (200, 400.0, 0.0), (200, 400.0, 0.0), (0.0, 0.0, 600.0), (0.0, 0.0, 600.0). So if it spit out correctly, I will likely be two cell with vertex at index of (0, 1,2,3) and (0,1,2,4).
//  Result  But some how it split out wrong ( 0, 1, 2, 3) and (0,1,3,4). If I reduce the z of 3 and 4 down to 300 and 300 it spit out 3 cell. ( 0, 1, 2, 3), (4, 0, 2, 3) and (1, 4, 2, 3).
// update 1.
So I change the way of extract the vertex. I convert directly from itCell>vertext>point() and I get the vertex I think correctly. But it still give me lot of cell that intersect with other cell. I thought the set supposed to be unique and not intersect with other cell.