A doubly connected edge list (DCEL), also known as a half-edge data structure, is a fundamental data structure in computational geometry designed to represent planar subdivisions, which partition the plane into vertices, edges, and faces. It efficiently encodes both geometric information, such as vertex coordinates and edge shapes, and topological relationships, such as adjacencies between elements, enabling operations like boundary traversal and neighborhood queries. By decomposing undirected edges into pairs of oppositely directed half-edges, the DCEL ensures that each half-edge points to its origin vertex, twin half-edge, incident face, and successive half-edge in a face's boundary, facilitating constant-time access to local connectivity.[1][2]The core components of a DCEL consist of records for vertices, half-edges, and faces. Each vertex stores its coordinates (typically in 2D as (x, y)) and a pointer to one incident half-edge, allowing enumeration of all edges emanating from it by following twin and next pointers. Half-edges form the backbone, with each maintaining pointers to its origin vertex, twin (the opposite direction), the face to its left, the next half-edge in counterclockwise order around that face, and optionally the previous half-edge for bidirectional traversal. Faces, including the unbounded exterior face, store a pointer to an incident half-edge and can accommodate inner boundaries (holes) via lists of boundary cycles, supporting representations of complex subdivisions like those with holes or multiple components. This structure ensures linear space complexity in the size of the subdivision and supports efficient updates, such as edge insertions or deletions, in applications requiring dynamic geometry.[1][3]DCELs are pivotal in algorithms for problems including Voronoi diagrams, Delaunay triangulations, map overlays, and motion planning, where maintaining topological integrity is crucial. For instance, they enable O(1) time checks for edge-face incidence and support incremental construction of arrangements via plane-sweep methods. Adaptations extend DCELs to 3D polytopes by directing half-edges counterclockwise around faces and handling half-infinite rays with bounding boxes. Widely adopted since their formalization in standard texts, DCELs provide a versatile foundation for geometric computing, balancing simplicity with expressive power for both theoretical analysis and practical implementations in libraries like CGAL.[1][2]
Overview
Definition
The doubly connected edge list (DCEL) is an edge-based data structure designed to represent the embedding of a planar graph in the plane without edge crossings, facilitating the topological description of planar subdivisions that may include polygons with holes. It achieves this by organizing the graph's elements—vertices, edges, and faces—into a compact form that supports polygons defined by multiple boundary cycles, such as outer boundaries and inner holes.[2]The core purpose of the DCEL is to provide an efficient topological representation that enables rapid traversal of boundaries, enumeration of edges incident to a vertex, and identification of faces adjacent to an edge.[4] This structure is particularly valuable in computational geometry for applications like map overlay and polygon clipping, where maintaining connectivity and incidence relationships is essential.A key characteristic of the DCEL is its use of half-edges to model directed edges, where each undirected edge is represented by a pair of twin half-edges pointing in opposite directions, ensuring that every edge is doubly connected to its two incident faces.[4] In this context, a planar subdivision refers to the decomposition of the plane into vertices (0-dimensional cells), edges (1-dimensional cells), and faces (2-dimensional cells), with bounded faces being finite enclosed regions and the unbounded face extending infinitely.[2] The embedding specifies the geometric placement of these elements in the plane while preserving the topological structure.
History
The doubly connected edge list (DCEL) data structure was first introduced by David E. Muller and Franco P. Preparata in 1978 as a method for efficiently representing the intersection of two convex polyhedra in three dimensions.[4] Their work proposed the DCEL to facilitate the computation of polyhedral intersections by maintaining explicit links between edges, vertices, and faces, enabling straightforward traversal and modification of the resulting structure.[4]This representation drew influence from earlier edge-based structures, notably Bruce G. Baumgart's winged-edge data structure introduced in 1974 for polyhedron modeling in computer vision. The winged-edge approach, which used edges to connect incident faces and vertices, inspired simplifications in the DCEL that reduced redundancy while preserving topological connectivity.During the 1980s, the DCEL was adapted for two-dimensional planar subdivisions in the computational geometry literature, shifting focus from 3D polyhedra to embeddings of planar graphs. A key milestone in this evolution was its detailed exposition in Franco P. Preparata and Michael Ian Shamos's 1985 textbook Computational Geometry: An Introduction, where it was presented as a standard for handling plane partitions and segment intersections.Subsequent milestones include its widespread adoption in algorithms for planar maps, as highlighted in Mark de Berg et al.'s Computational Geometry: Algorithms and Applications (first edition 1997), which utilized the DCEL for overlay operations and Boolean set manipulations on subdivisions. These developments solidified the DCEL as a foundational tool in computational geometry, evolving from its 3D origins to versatile 2D applications.
Components
Half-Edges
In the doubly connected edge list (DCEL) data structure, half-edges serve as the core components that encode the directed connectivity of edges in a planar subdivision. Each half-edge record typically includes pointers to four key elements: the origin vertex from which the half-edge emanates, the twin half-edge representing the opposite direction of the same undirected edge, the next half-edge in the cyclic ordering around the incident face, and the previous half-edge in that same cycle. Additionally, a pointer to the incident face is stored, enabling direct access to the region bounded by the half-edge. These pointers ensure that half-edges maintain both edge-to-vertex and edge-to-face incidences, forming the basis for efficient topological queries and updates.Optional attributes in half-edge records may encompass geometric properties, such as the Euclidean length of the edge or derived coordinates of the destination vertex, though such data is not essential to the core topology and is often omitted to prioritize combinatorial structure. This design allows half-edges to focus primarily on relational links rather than embedding details, with geometric information deferred to associated vertex or face records where appropriate.The twin relationship is central to the DCEL's representation of undirected edges, where every edge in the subdivision is decomposed into exactly two half-edges oriented in opposite directions—one for each adjacent face. Each half-edge's twin pointer mutually references its counterpart, providing bidirectional access across the edge and supporting operations that require examining both sides, such as determining adjacency or flipping orientations. This pairing achieves the "doubly connected" property by linking half-edges not only along face boundaries but also perpendicularly across edges.Half-edges further organize into directed cycles that delineate face boundaries, with the next and previous pointers forming doubly linked lists around each face, typically oriented counterclockwise for bounded faces to maintain a consistent handedness. These cycles enable systematic traversal of perimeters without redundant storage, as starting from any half-edge incident to a face allows full boundary enumeration via successive next (or previous) dereferences. Such cycle formation underpins the DCEL's ability to represent complex planar maps with multiple components and holes efficiently.
Vertices
In the Doubly Connected Edge List (DCEL) data structure, each vertex is represented by a record that primarily stores the geometric coordinates of the point it represents, typically as (x, y) values in a 2Dplane. This attribute allows for precise localization of the vertex within the embedding of the planar subdivision. Additionally, the vertex record includes a single pointer to one of the half-edges incident to it, often referred to as the "origin" or "incident edge" pointer, which serves as an entry point for topological navigation. This minimal structure ensures efficient storage while enabling access to the surrounding connectivity without redundant pointers to all incidents.Vertex records play a crucial role in modeling the endpoints of edges in the subdivision, anchoring the geometric and topological elements of the DCEL. By linking to an incident half-edge, a vertex facilitates the representation of edge terminations and supports queries about local geometry and adjacency. To list all edges incident to a vertex, one begins at the pointed half-edge and traverses the cyclic order around the vertex using the half-edge relations—specifically, by repeatedly applying the twin and previous operations to advance to the next outgoing half-edge. This process reveals the full star of incident edges in counterclockwise order, assuming a consistent orientation of the embedding.For a vertex of degree d (the number of incident edges), the traversal to enumerate all incidents requires visiting 2d half-edges in total, as each step in the cycle involves accessing both outgoing and incoming directed half-edges via their twins and predecessors to maintain the rotational order around the vertex. This approach, while linear in the degree, leverages the doubly connected nature of the structure to avoid explicit storage of all pointers per vertex, promoting space efficiency in dense subdivisions. The time complexity remains O(d), making it suitable for local operations in algorithms like point location or graph traversal.Special cases in vertex representation include isolated vertices, which have degree zero and thus a null incident half-edge pointer, allowing the DCEL to handle disconnected components or points without edges. Vertices lying on unbounded faces, such as those at the outer boundary of the subdivision, are treated uniformly by the structure, with their incident half-edges linking into the cycles bounding the infinite exterior face; this uniformity aids in consistent handling across bounded and unbounded regions without special geometric adjustments.
Faces
In the doubly connected edge list (DCEL) data structure, each face is represented by a face record that primarily contains a pointer to one incident half-edge on its boundary. This pointer serves as an entry point for traversing the face's boundary in a counterclockwise manner using the half-edge's next and previous links, which form a cyclic sequence around the face.[2] Face records may also include optional attributes, such as the computed area of the face or a marking to indicate whether it is an interior (bounded) or exterior (unbounded) region.[5]DCEL distinguishes bounded and unbounded faces through their boundary orientations and cycles: bounded faces are enclosed by a single outer boundary cycle traversed counterclockwise, while the unbounded face, representing the exterior region, has its boundary traversed clockwise to maintain consistent orientation conventions.[5] For planar subdivisions containing polygons with holes, the face record for a bounded face references the outer boundarycycle via its primary half-edge pointer and maintains a separate list of pointers to the half-edges initiating each inner boundarycycle, which represent the holes and are oriented clockwise relative to the outer cycle.[5] This allows a single face to encompass multiple disjoint boundarycycles—one outer and zero or more inner—enabling the representation of complex regions like annular polygons without additional connectivity overhead.[5]The connectivity of a face to its bounding half-edges is implicit in the cyclic linking: starting from the face's incident half-edge, the next pointers chain all half-edges around the boundary, while the twin pointers on those half-edges provide direct access to adjacent faces sharing the edge.[6] This design facilitates efficient adjacency queries, such as determining neighboring faces, by following the twin of a boundary half-edge to retrieve the opposite incident face record.[2]
Representation and Relationships
Linking Mechanisms
In the Doubly Connected Edge List (DCEL), linking mechanisms are implemented via pointers that interconnect half-edge, vertex, and face records to encode the topology of a planar subdivision. Each half-edge record contains pointers to its origin vertex, its twin (the oppositely directed half-edge sharing the same endpoints), the next and previous half-edges along the boundary of the incident face, and the incident face itself. These pointers ensure that the structure captures adjacency and incidence relations explicitly, allowing for oriented traversal where the incident face is consistently to the left of each half-edge when following the boundary in a counterclockwise direction.The pointers support bidirectional links across the structure, enabling efficient navigability in multiple directions. For example, the twin pointer provides direct access from one half-edge to its opposite, facilitating movement between adjacent faces separated by an edge. Similarly, from a vertex record—which stores a pointer to one arbitrary incident half-edge—full access to all outgoing half-edges is achieved by initiating traversal from that half-edge and iteratively applying the twin and next pointers to cycle around the vertex in angular order. Face records likewise include pointers to one half-edge on their outer boundary (and potentially inner boundaries for holes), allowing boundary traversal via chained next and previous pointers. This bidirectional connectivity ensures that local queries, such as identifying neighboring elements, can be performed in constant time per step.[6]Topological integrity is maintained through these links by enforcing mutual consistency among pointers, which prevents dangling references and supports safe modifications to the subdivision. During operations like edge insertion or vertex splitting, all affected pointers (e.g., next, previous, twin, and incident face) must be updated simultaneously to preserve cycle closures around faces and vertices; failure to do so would break connectivity or introduce invalid references. This coordinated linking allows the DCEL to remain a faithful representation of the underlying manifold, with modifications propagating reliably to uphold the doubly connected property—where each edge connects exactly two faces and each face boundary is a closed cycle. The design, rooted in foundational work on subdivision primitives, thus facilitates robust handling of dynamic updates without compromising structural validity.[7]Geometric extensions can be incorporated without disrupting these topological links, typically by storing coordinates or other attributes in dedicated fields of the records. Vertex records commonly hold 2D or 3D point coordinates, while half-edge records may optionally include geometric data such as arc parameters for curved edges or midpoints for straight segments, ensuring that spatial information remains decoupled from but accessible via the pointer network. This separation preserves the purity of the topological links while enabling hybrid representations in applications requiring both connectivity and geometry.[6]
Example
To illustrate the doubly connected edge list (DCEL) structure, consider a simple planar subdivision consisting of a square with a triangular hole. The square is formed by vertices V1, V2, V3, and V4 arranged in counter-clockwise order, representing the outer boundary. The triangular hole is defined by vertices V5, V6, and V7 arranged in clockwise order inside the square, representing the inner boundary. This configuration creates a bounded face F1 (the region between the square and the triangle) and an unbounded exterior face F0. The DCEL records for vertices include pointers to an incident half-edge, while faces include a pointer to an incident half-edge for the outer boundary and a list of starting half-edges for any holes.The half-edges are organized into twin pairs, with each half-edge pointing to its origin vertex, twin, next half-edge in the boundary cycle, and incident face (the face to its left during traversal). The outer boundary half-edges (HE1 to HE4) are oriented counter-clockwise with incident face F1. The inner boundary half-edges (HE5 to HE7) are oriented clockwise with incident face F1, ensuring consistent left-hand rule traversal for the bounded region. Their twins (HE1t to HE7t) have incident face F0 and form the boundaries for the unbounded face in the opposite orientation. The following table lists the key half-edge records for the boundaries of F1:
For face F1, the outer boundary cycle starts at HE1, and the inner hole cycle starts at HE5. Vertex records point to an arbitrary incident half-edge, such as V1 to HE1 and V5 to HE5. The linking mechanisms, including next and twin pointers, enable efficient boundary traversal: starting from HE1, following next yields the full outer cycle (HE1 → HE2 → HE3 → HE4 → HE1) without gaps, while starting from HE5 traces the inner hole cycle (HE5 → HE6 → HE7 → HE5). Twin pointers allow access to adjacent faces, verifying connectivity across boundaries.
Algorithms and Operations
Construction
The construction of a doubly connected edge list (DCEL) assumes input in the form of simple polygons, possibly with holes, or a collection of line segments that collectively form a planar subdivision without self-overlaps in the initial representation.[8] For cases where input segments may cross, preprocessing is essential to compute the full arrangement by identifying all intersection points, typically using a plane sweep algorithm that processes endpoints and potential crossings in sorted order.[9] This step ensures the subdivision is properly decomposed before building the DCEL, with the sweep maintaining an event queue for vertices and a status structure for active edges to detect intersections efficiently.[2]The process begins by creating vertex records for all unique endpoints and intersection points, storing their coordinates and preparing pointers to incident half-edges.[8] Each input segment is then represented as a pair of oppositely directed half-edges, linked via twin pointers, with each half-edge record initialized to reference its origin vertex, the incident face (initially the unbounded exterior), and placeholders for next and previous pointers.[2] At intersection points, existing half-edges are split into fragments using operations that insert new vertices and reassign origins, twins, and boundary links to maintain connectivity.[9]Next and previous pointers are established by sorting the half-edges incident to each vertex in angular (polar) order around that vertex, often clockwise to match a consistent orientation for face boundaries.[9] This sorting step, which requires O(d log d) time per vertex where d is the degree, enables the cyclic linking that defines the boundaries of faces.[8] Face records are then assigned by traversing these cycles to identify bounded regions, with each face pointing to one half-edge on its outer boundary and any inner hole boundaries, distinguishing between the unbounded exterior face and interior ones.[2]For inputs without intersections, such as simple polygons, the construction simplifies to direct pairing and linking without splitting, achieving O(n log n) overall time complexity for n edges primarily due to the angular sorting across all vertices.[8] In the general case with k intersections, the time is O((n + k) log n), reflecting the output-sensitive nature of the arrangement computation.[9]
Traversal and Manipulation
Traversal operations in a doubly connected edge list (DCEL) enable efficient navigation of the planar subdivision's topology. To walk the boundary of a face, one starts from the outer component half-edge of the face record and follows the next pointers in a cyclic manner, traversing each edge in constant time per step until returning to the starting half-edge; this process takes time proportional to the number of boundary edges of the face.[1] Similarly, to list all half-edges incident to a vertex, the process begins with the incident edge pointer from the vertex record and chains through the twin and next (or prev) pointers around the vertex, achieving a traversal in time linear to the vertexdegree. Finding adjacent faces involves following the twin pointer of a half-edge to access the neighboring face on the opposite side, allowing direct identification of shared boundaries in constant time.[10]Manipulation of the DCEL structure involves updating the pointers in half-edge, vertex, and face records to reflect changes while preserving the double connectivity. Inserting a new edge requires creating two new half-edges (one for each direction), setting their origin and twin pointers appropriately, and adjusting the next and prev pointers of the four affected half-edges at the endpoints to integrate the new edge into the existing cycles; this local update ensures the new edge splits an existing face into two. Deleting an edge reverses this by removing the pair of twin half-edges and reconnecting the adjacent half-edges via updated next and prev pointers, merging the two adjacent faces if they become coplanar. Splitting a face typically occurs during edge insertion across it, where new face records are created and half-edge incidences are reassigned to delineate the subregions. Merging faces, conversely, consolidates two adjacent faces by deleting the shared edge and updating the boundary cycles to form a single face record, often requiring checks to ensure no holes are improperly formed. These operations rely on the linking mechanisms, such as next, prev, twin, and origin pointers, for precise adjustments.[1][10]The time complexity for local traversal operations, such as walking a face boundary or listing incident edges at a vertex, is O(degree), where degree denotes the number of edges bounding the face or incident to the vertex, due to the constant-time access per pointer follow. Full structure traversals, like enumerating all edges or faces, require O(n) time, where n is the total number of edges in the subdivision, as each element is visited once. Manipulation operations, including edge insertion or deletion, execute in O(1) time for the core pointer updates assuming endpointaccess, though practical implementations may incur O(degree) costs if re-linking affects multiple adjacent half-edges; face splitting and merging similarly scale with the number of affected boundary edges, often O(k) where k is the local complexity.[1][10]Maintaining the validity of the DCEL after manipulations is crucial to preserve its double connectivity and topological integrity. This involves ensuring that after any pointer updates, the next and prev relations form consistent cycles for each face boundary, the twin pairs remain bidirectional and oppositely oriented, and each half-edge's origin correctly points to its starting vertex; violations could lead to dangling pointers or incorrect adjacencies. Post-manipulation checks typically verify that the face lies to the left of each half-edge (assuming counterclockwise orientation) and that inner and outer components are properly nested for bounded faces. These consistency invariants are upheld by systematically updating all four half-edges involved in an edge operation and propagating changes to incident vertex and face records, preventing structural inconsistencies in subsequent traversals.[1][10]
Applications
Computational Geometry
The doubly connected edge list (DCEL) serves as a fundamental data structure for representing planar subdivisions in computational geometry, particularly arrangements of line segments or circles that arise in proximity structures such as Voronoi diagrams and their duals, Delaunay triangulations. In Voronoi diagrams, the DCEL encodes the cells, edges (portions of perpendicular bisectors, often line segments), and vertices as a doubly connected graph, enabling efficient traversal of the unbounded subdivision within a bounding box.[11] Similarly, Delaunay triangulations are maintained as DCELs during incremental construction algorithms, where each triangle is a face bounded by half-edges, facilitating local updates like edge flips to preserve the empty-circle property.[12] For circle arrangements, such as those in generalized Voronoi diagrams for sites like line segments, the DCEL captures curved edges as half-edges with geometric attributes, supporting the combinatorial structure of intersecting arcs.[13]DCELs are integral to performing Boolean operations—union, intersection, and difference—on polygons by computing their overlay, where the input polygons are represented as DCEL subdivisions. The process involves loading the DCELs of two subdivisions S_1 and S_2, detecting intersections via plane sweep, splitting edges at intersection points, and relinking half-edges to form the resulting faces, each corresponding to a connected component of f_1 \cap f_2 for faces f_1 \in S_1 and f_2 \in S_2.[14] This overlay operation leverages DCEL's constant-time split and splice primitives to update the topology efficiently, ensuring the output is a valid planar map with updated face records post-processing.[2]In sweep line algorithms, DCELs maintain dynamic representations of trapezoidal maps, which decompose the plane into trapezoids induced by non-intersecting line segments. During the incremental construction, segments are added one by one; the DCEL is updated by locating the insertion path, shooting vertical "bullets" to split trapezoids, and trimming walls via edge deletions and insertions, all in amortized constant time per local change.[15] The randomized incremental approach yields an expected O(n \log n) time for building the trapezoidal map of n segments, supporting point location and further geometric queries.[15]A key application is computing map overlays of two planar subdivisions, where the DCEL facilitates intersection detection and topological merging in O(n \log n + k) time, with n the total input complexity and k the output size, using plane sweep to process events and maintain the status structure.[14]
Computer Graphics and GIS
In computer graphics, the doubly connected edge list (DCEL) forms the basis for boundary representation (B-rep) of 2D and 3D models, allowing explicit storage of vertices, edges, and faces with their topological incidences. This structure supports efficient face traversals essential for rendering pipelines, including ray tracing to compute intersections with scene geometry and hidden surface removal algorithms that determine visible facets during viewpoint projection.[16][17]In geographic information systems (GIS), DCEL provides a robust framework for topological vector data storage in planar maps, capturing adjacency between regions via shared edges and containment hierarchies through nested face boundaries. This enables efficient spatial queries, such as identifying neighboring administrative units or verifying if a point lies within a polygon, by leveraging edge and face pointers for constant-time neighbor access.[18][19]DCEL is integrated into established libraries and tools, notably CGAL's 2D Arrangements package, which employs it to represent curve arrangements for applications like polygon clipping in graphics pipelines and topological overlay in GIS workflows.[13]A representative real-world application involves modeling administrative boundaries with holes, such as a country's outline excluding interior lakes, where the DCEL distinguishes outer boundary cycles from inner ones to preserve topological integrity during map rendering or query operations.[13]
Advantages and Comparisons
Benefits and Limitations
The Doubly Connected Edge List (DCEL) provides efficient support for local queries, such as accessing the next edge, twin edge, or neighboring elements, which can be performed in constant time due to direct pointer links in its half-edge structure.[6][20] This enables rapid traversal around vertices or faces, making it particularly suitable for operations involving adjacency and incidence relationships in planar subdivisions.[21] Additionally, the DCEL achieves space efficiency with O(n) storage requirements proportional to the number of vertices, edges, and faces, avoiding redundant data through its paired half-edges.[6][22]The structure's flexibility for modifications is a key strength, allowing local edits like edge flips, splits, or collapses to be executed in constant time once the relevant elements are identified, which supports dynamic updates in traversal-heavy tasks.[20][6] DCEL records for vertices, edges, and faces can also accommodate additional attributes, such as geometric properties or material data, enhancing its utility without significantly impacting core efficiency.[20][23]Despite these advantages, the DCEL incurs high constant factors from pointer overhead, as each half-edge typically stores multiple references (e.g., to origin, twin, next, previous, and incident face), leading to increased memory usage compared to simpler representations.[22][6] It is less ideal for very sparse graphs or applications requiring minimal bookkeeping, where the structure's complexity can be overkill and demand careful maintenance of links to prevent inconsistencies during updates.[23] Performance trade-offs arise in that while traversals and local operations excel, random access to distant elements is slower than in array-based structures like adjacency matrices, due to the reliance on linked navigation.[24][23]
Comparison with Other Data Structures
The Doubly Connected Edge List (DCEL) offers a specialized representation for planar subdivisions that contrasts with the winged-edge data structure in terms of simplicity and domain focus. Introduced by Baumgart for polyhedral modeling, the winged-edge structure employs undirected edges with pointers to four adjacent elements—two faces and two edges per face—facilitating efficient handling of 3D volumes and curved surfaces.[25] In comparison, the DCEL, as defined by Müller and Preparata, uses directed half-edges tailored for 2D embeddings, omitting the need for explicit 3D face pointers and reducing structural overhead for planar graphs, though it sacrifices some generality for polyhedral scenes where winged-edge excels in volumetric navigation.[26]Relative to an unrestricted half-edge data structure, the DCEL imposes stricter constraints to maintain planarity and double connectivity, ensuring every edge is incident to exactly two faces and enabling robust traversal of bounded regions without dangling edges or inconsistencies. This enforcement minimizes topological errors in subdivision algorithms, as seen in computational geometry applications, but introduces rigidity that may complicate extensions to non-planar or open meshes, where general half-edges allow freer connectivity without predefined face cycles.[27]Unlike adjacency lists or matrices, which represent abstract graphs without embedding details, the DCEL prioritizes geometric topology by providing O(1)-time access to incident vertices, faces, and successive edges through half-edge pointers, ideal for planar traversals like face walking or boundary detection.[28] Adjacency lists, in contrast, support efficient storage for sparse graphs with O(1) insertions but demand O(degree) time to iterate neighbors, lacking the DCEL's direct support for cyclic orders in embeddings; adjacency matrices enable O(1) edge queries but incur O(V²) space unsuitable for large planar subdivisions where edges are O(V).[28]The quad-edge algebra, developed by Guibas and Stolfi, extends beyond the DCEL's scope by unifying primal and dual graphs in a single structure with four darts per edge, supporting non-orientable 2-manifolds and seamless Voronoi-Delaunay computations in 3D. While this generality enables richer operations like automatic duality traversal, it introduces higher complexity and storage—roughly twice that of DCEL for equivalent 2D cases—making the DCEL preferable for optimized, orientable planar maps where 3D extensions are unnecessary.[29]