Line data Source code
1 8 : function insertedge!(mesh::Mesh, h0::HHnd, h1::HHnd)
2 8 : @massert isused(mesh, face(mesh, h0))
3 8 : @massert face(mesh, h0) == face(mesh, h1)
4 :
5 8 : v0 = destination(mesh, h0)
6 8 : v1 = destination(mesh, h1)
7 :
8 8 : h2 = next(mesh, h0)
9 8 : h3 = next(mesh, h1)
10 :
11 8 : h4 = _create_edge(mesh, v0, v1)
12 8 : h5 = opposite(mesh, h4)
13 :
14 8 : f0 = face(mesh, h0)
15 8 : _sethalfedge!(mesh, f0, h0)
16 :
17 8 : f1 = _create_face(mesh, h1)
18 :
19 8 : _setnexthalfedge!(mesh, h0, h4)
20 8 : _setnexthalfedge!(mesh, h4, h3)
21 8 : _setface!(mesh, h4, f0)
22 :
23 8 : _setnexthalfedge!(mesh, h1, h5)
24 8 : _setnexthalfedge!(mesh, h5, h2)
25 8 : h = h2
26 24 : while true
27 24 : _setface!(mesh, h, f1)
28 24 : h = next(mesh, h)
29 :
30 24 : (h != h2) || break
31 16 : end
32 :
33 8 : h4
34 : end
35 :
36 : """
37 : h = insertedge!(mesh, h0, h1) :: HHnd
38 :
39 : Insert edge connecting [`destination`](@ref)s `v0` and `v1` of `h0`
40 : and `h1`. Returns half-edge from `v0` to `v1`.
41 :
42 : !!! warning "Precondition"
43 : The half-edges `h0` and `h1` must be part of the same face, i.e.,
44 : `face(mesh, h0) == face(mesh, h1)`.
45 :
46 : See also [`removeedge!`](@ref)
47 : """ insertedge!
|