Releases: JuliaGeometry/DelaunayTriangulation.jl
v1.0.2
Full Changelog: v1.0.1...v1.0.2
v1.0.1
DelaunayTriangulation v1.0.1
Now that refine!
can introduce duplicate points (that are later removed), it was noticed that retriangulate
mistakenly considers all points rather than just the current vertices in tri
. This has now been fixed.
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)