Releases: JuliaGeometry/DelaunayTriangulation.jl
Releases · JuliaGeometry/DelaunayTriangulation.jl
v1.0.0
DelaunayTriangulation v1.0.0
In addition to the changes below, note that many bugs have been fixed. Feel free to make any issues or PRs if you encounter any problems.
Added
- Triangulation and refinement of curve-bounded domains has now been added.
- The
Triangulation
struct has some more fields. One of these isweights
, although this is not to be used just yet; it is possible to computed weighted Delaunay triangulations of convex polygons, but not for general domains currently. - Where reasonable, default methods for the geometric primitive interfaces have now been added. For example,
getx
now has the default definitiongetx(p) = p[1]
. - You can now use
each_boundary_edge
to iterate over the boundary edges (in no specific order), rather than having to usekeys(get_boundary_edge_map(tri))
as you had to before 1.0. - The documentation has had a complete overhaul.
- The
retriangulate
function has now been added, allowing for the retriangulation of a givenTriangulation
. - The function
dist
can now be used for computing the distance between a point and the triangulation, rather than having to usedistance_to_polygon
. - You can now use
find_polygon
to find what polygon in a provided boundary of aTriangulation
contains a given point. - Mesh refinement now, by default, defaults to the diametral lens definition of encroachment rather than the diametral circle definition. You can toggle this behaviour using the
use_lens
keyword inrefine!
. - Now whenever encroached edges are split during mesh refinement, all free vertices inside that edge's diametral circle will be deleted prior to splitting.
Breaking
Please note that a lot of these changes that follow are only technically breaking, because I failed to properly specify what the public API was for this package (this has now been corrected in v1.0 and onwards).
- All references to constrained edges are now referred to as segments. For example, the field
constrained_edges
is nowinterior_segments
, andall_constrained_edges
is nowall_segments
. The same goes for the associated getters. - The keyword
edges
intriangulate
is nowsegments
. lock_convex_hull!
will now delete frominterior_segments
field any edges it encounters along the convex hull during locking.add_edge!
is nowadd_segment!
.triangulate_convex
no longer accepts therecompute_centers
keyword.RefinementTargets
is nowRefinementConstraints
.maxiters
is no longer a valid keyword argument ofrefine!
. Instead, you should just passmax_points
appropriately. With this change, the default formax_points
is no longertypemax(Int)
but is insteadmax(1000, num_solid_vertices(tri))^2
.refine!
no longer returnsstatistics(tri)
. It now only returnstri
. If you want the statistics, just usestatistics(tri)
afterwards.refine!
no longer acceptsmax_radius_edge_ratio
. Instead, you must providemin_angle
. (Internally, it is stillmax_radius_edge_ratio
that gets primarily used, butmin_angle
is more interpretable for a user.)lock_convex_hull
is no longer a keyword of argument ofrefine!
- if it has to be locked, it will be automatically.edge_indices
has been removed and is nowedge_vertices
.indices
has been removed and is nowtriangle_vertices
.initialise_edges
andinitialise_triangles
have been removed. Just use the types instead, e.g.initialise_edges(::Type{S})
is now justS()
.is_empty
has been removed. Just useisempty
.compare_unoriented_edge
is nowcompare_unoriented_edges
.initial
andterminal
are no longer exported.edge_vertices
is more appropriate for this.geti
,getj
,getk
are no longer exported.triangle_vertices
is more appropriate for this.each_point
andeach_point_index
are no longer exported. You are encougared to rely oneach_solid_vertex
instead. Just note thateach_solid_vertex
is not an ordered iterator.num_points
is no longer exported. You are encouraged to instead usenum_solid_vertices
.remove_duplicate_triangles
has been removed. Just usesort_triangles
andunique!
.- I used to refer to distinct parts of a boundary as
segments
. This is misleading, since it's the first name that I use for constrained edges. So, I now use the termsections
. For example,has_multiple_segments
is nowhas_multiple_sections
. has_multiple_sections
can no longer be used on the ghost vertex map.getboundarynodes
has been removed. Just use and extendget_boundary_nodes
instead.BoundaryIndex
is nowGhostVertex
. Similar references toboundary_index
have been changed toghost_vertex
.boundary_map
is nowghost_vertex_map
.boundary_index_ranges
is nowghost_vertex_ranges
.integer_type
is removed (exceptforTriangulation
s).number_type
should be used for this.- Previously,
get_boundary_index
(now calledget_ghost_vertex
) errored if neither of the three arguments was a ghost vertex. Now, if none of the arguments is a ghost vertex, the function returnsk
. Similarly for the two-argument version. rotate_ghost_triangle_to_standard_form
androtate_triangle_to_standard_form
are removed. Usesort_triangle
instead.num_outer_boundary_segments
has been removed.- Iteration over
Adjacent
andAdjacent2Vertex
has been removed. Adjacent2Vertex
is now defined byAdjacent2Vertex{IntType,EdgesType}
rather thanAdjacent2Vertex{IntType,EdgesType,EdgeType}
.clear_empty_points!
is nowclear_empty_vertices!
.- The fields of
ConvexHull
are nowpoints
andvertices
rather thanpoints
andindices
. Additionally, the type is nowConvexHull{PointsType, IntegerType}
instead ofConvexHull{PointsType, Vector{IntegerType}}
. num_points
is no longer defined onConvexHull
s.- The
boundary_map
(nowghost_vertex_map
) andboundary_index_ranges
(nowghost_vertex_ranges
) are nowDict
s instead ofOrderedDict
s. - The constructor
Triangulation(points, triangles, boundary_nodes; kwargs...)
now uses the keyword argumentdelete_ghosts
instead ofadd_ghost_triangles
, with defaultdelete_ghosts=false
which is opposite to the previous defaultadd_ghost_triagnles=false
. - The function
get_empty_representative_points
has been deleted. get_convex_hull_indices
is nowget_convex_hull_vertices
.min_max
is removed - just useBase.minmax
.nearest_power_of_two
has been removed.intersection_of_ray_with_boundary
has been removed.identify_side
has been removed.intersection_of_ray_with_edge
has been removed.- The field names of
TriangulationStatistics
have been renamed to match the new segment terminology, and the fieldnum_convex_hull_points
is nownum_convex_hull_vertices
. get_total_area
is nowget_area
. The field nametotal_area
inTriangulationStatistics
is nowarea
.point_position_relative_to_box
has been removed.is_boundary_edge
has had its definition changed:is_boundary_edge(tri, i, j)
is nowis_boundary_edge(tri, j, i)
, so that we have consistency withis_boundary_triangle
.is_outer_boundary_index
is nowis_exterior_ghost_vertex
.is_outer_ghost_triangle
is nowis_exterior_ghost_triangle
.is_outer_ghost_edge
is nowis_exterior_ghost_edge
.is_outer_boundary_node
is nowis_exterior_ghost_vertex
.- The keyword arguments in
add_ghost_triangles!
anddelete_ghost_triangles!
have been removed. - The keyword argument
exterior_curve_index
intriangulate
has been removed. The exterior curves will be automatically computed. peek_triangle_ρ
has been removed, andtriangle_dequeue!
now does adequeue_pair!
.- The keyword
recompute_representative_point
is nowrecompute_representative_points
intriangulate
. - The keyword
add_ghost_triangles
intriangulate_rectangle
(andtriangulate_convex
) is nowdelete_ghosts
to be consistent withtriangulate
. The default isdelete_ghosts=false
, consistent with the previous default ofadd_ghost_triangles=true
. voronoi
now has the signaturevoronoi(tri; clip=false, smooth=false, kwargs...)
instead ofvoronoi(tri, clip=false)
(note the difference inclip
as a positional argument to a keyword argument).centroidal_smooth
is still exported (thekwargs...
are passed to it), but this can be a good alternative.- Gmsh support has been removed.
get!
is no longer defined onadjacent2vertex
.Certificate
is no longer exported.- The arguments to
construct_ghost_vertex_map
(previouslyconstruct_boundary_map
),construct_boundary_edge_map
, andconstruct_ghost_vertex_ranges
(previouslyconstruct_boundary_index_ranges
) are now positional. get_vertices
is no longer exported.map_boundary_index
is nowmap_ghost_vertex
.polylabel
is no longer an alias forpole_of_inaccessibility
.convert_to_boundary_edge
is nowconvert_to_edge_adjoining_ghost_vertex
.- References to a
point_order
are now aninsertion_order
. add_boundary_information!
is no longer exported.balanced_power_of_two_quarternary_split
has been removed.- To provide a custom constraint for triangulation, you now need to provide a constraint of the form
(tri::Triangulation, T::Triangle) -> Bool
with the keyword argumentcustom_constraint
, where the returned result istrue
if the triangleT
should be refined andfalse
otherwise. is_triangle_seditious
no longer has the unused argumentρ
at the end of its signature.- It is no longer possible to use
delete_point!
on points that are on the boundary or adjoin segments. It is too finicky, and for constrained triangulations you shouldn't be doing those operations anyway. For unconstrained triangulations, deleting a point on the boundary might be reasona...
v0.8.12
DelaunayTriangulation v0.8.12
Merged pull requests:
- Bump codecov/codecov-action from 3 to 4 (#99) (@dependabot[bot])
v0.8.11
DelaunayTriangulation v0.8.11
- Fixed a very rare bug that caused, for some pathological examples, constrained triangulations to have triangles with duplicated vertices. This seemed to be caused when a cavity on the side of an inserted segment had a doubly-dangling edge that doubled back on itself, and only sometimes.
Merged pull requests:
- Fix pathological case with CDT cavity doubling back on itself (#98) (@DanielVandH)
v0.8.10
DelaunayTriangulation v0.8.10
Merged pull requests:
- Fix #96 (#97) (@DanielVandH)
Closed issues:
- delete_point! fails for link with concave triangular-indent (#96)
v0.8.9
DelaunayTriangulation v0.8.9
Merged pull requests:
- Bump actions/checkout from 3 to 4 (#90) (@dependabot[bot])
- Some fixes for new Makie version (#91) (@DanielVandH)
- Test NaturalNeighbours.jl and FiniteVolumeMethod.jl in CI (#92) (@DanielVandH)
- Fix undefvar in error (#93) (@DanielVandH)
- Fix #94 (#95) (@DanielVandH)
Closed issues:
- Infinite loop due to zero-area triangle but positive oriented according to ExactPredicates.jl (#94)
v0.8.8
DelaunayTriangulation v0.8.8
Closed issues:
- UndefVarError:
triplot
not defined (#88)
Merged pull requests:
- Fix docstring for is boundary edge and fix issues on 1.10 (#89) (@DanielVandH)
v0.8.7
What's Changed
- Add function for testing orientation of a curve by @DanielVandH in #85
Full Changelog: v0.8.6...v0.8.7
v0.8.6
DelaunayTriangulation v0.8.6
Merged pull requests:
- Change jump_and_march for VoronoiTessellations to be called get_nearest_neighbour (#81) (@DanielVandH)
- Change default clipping to false (#82) (@DanielVandH)
- Fix jump_and_march for domains with concave boundaries and for triangulations of disjoint domains (#83) (@DanielVandH)
- Some fixes for custom methods (#84) (@DanielVandH)
v0.8.5
DelaunayTriangulation v0.8.5
Merged pull requests:
- Fix mesh refinement for custom constraints (#79) (@DanielVandH)
v0.8.4
DelaunayTriangulation v0.8.4
Merged pull requests:
- Clipping Voronoi tessellations to arbitrary bounding boxes (#76) (@DanielVandH)