1#ifndef DANDELION_GEOMETRY_HALFEDGE_H
2#define DANDELION_GEOMETRY_HALFEDGE_H
9#include <unordered_map>
12#include <spdlog/spdlog.h>
82struct Vertex : LinkedListNode<Vertex>
85 Vertex(std::size_t vertex_id);
94 Eigen::Vector3f
normal()
const;
114struct Edge : LinkedListNode<Edge>
117 Edge(std::size_t edge_id);
121 Eigen::Vector3f
center()
const;
125 const std::size_t
id;
147struct Face : LinkedListNode<Face>
156 Eigen::Vector3f
center()
const;
158 const std::size_t
id;
194 MULTIPLE_ORIENTED_EDGES,
196 INIFINITE_POSITION_VALUE,
197 INVALID_HALFEDGE_PERMUTATION,
198 INVALID_VERTEX_CONNECTIVITY,
199 INVALID_EDGE_CONNECTIVITY,
200 INVALID_FACE_CONNECTIVITY,
201 ILL_FORMED_HALFEDGE_INVERSION,
202 POOR_HALFEDGE_ACCESSIBILITY
328 EdgeRecord() =
default;
330 EdgeRecord(std::unordered_map<Vertex*, Eigen::Matrix4f>& vertex_quadrics,
Edge* e);
374 std::optional<HalfedgeMeshFailure>
validate();
std::optional< Vertex * > collapse_edge(Edge *e)
坍缩一条边。
定义 meshedit.cpp:274
Halfedge * new_halfedge()
定义 halfedge_mesh.cpp:331
HalfedgeMesh(HalfedgeMesh &other)=delete
void loop_subdivide()
执行一次 Loop 曲面细分。
定义 meshedit.cpp:412
Face * new_face(bool is_boundary=false)
定义 halfedge_mesh.cpp:352
friend bool operator<(const EdgeRecord &a, const EdgeRecord &b)
定义 meshedit.cpp:35
Object & object
定义 halfedge.h:379
std::shared_ptr< spdlog::logger > logger
定义 halfedge.h:396
std::optional< HalfedgeMeshFailure > error_info
定义 halfedge.h:313
void erase(Halfedge *h)
定义 halfedge_mesh.cpp:377
std::unordered_map< size_t, Face * > erased_faces
定义 halfedge.h:389
LinkedList< Halfedge > halfedges
定义 halfedge.h:301
void isotropic_remesh()
执行一次重网格化。
定义 meshedit.cpp:676
bool modified
定义 halfedge.h:311
Edge * new_edge()
定义 halfedge_mesh.cpp:345
Vertex * new_vertex()
定义 halfedge_mesh.cpp:338
LinkedList< Vertex > vertices
定义 halfedge.h:303
std::optional< HalfedgeMeshFailure > validate()
检查半边网格的状态。
定义 halfedge_mesh.cpp:417
static std::tuple< Eigen::Vector3f, Eigen::Vector3f > halfedge_arrow_endpoints(const Halfedge *h)
定义 halfedge_mesh.cpp:319
ArrowSet halfedge_arrows
定义 halfedge.h:315
std::vector< Vertex * > v_pointers
定义 halfedge.h:309
LinkedList< Face > faces
定义 halfedge.h:307
LinkedList< Edge > edges
定义 halfedge.h:305
void sync()
定义 halfedge_mesh.cpp:253
std::unordered_map< size_t, Halfedge * > erased_halfedges
定义 halfedge.h:383
std::unordered_map< size_t, Vertex * > erased_vertices
定义 halfedge.h:385
std::unordered_map< size_t, Edge * > erased_edges
定义 halfedge.h:387
Mesh & mesh
定义 halfedge.h:381
std::optional< Vertex * > split_edge(Edge *e)
分裂一条边。
定义 meshedit.cpp:104
void regenerate_halfedge_arrows()
定义 halfedge_mesh.cpp:359
std::unordered_map< const Vertex *, size_t > v_indices
定义 halfedge.h:392
std::unordered_map< const Halfedge *, size_t > h_indices
定义 halfedge.h:394
static std::size_t next_available_id
定义 halfedge.h:377
void clear_erasure_records()
释放内存并清除已删除元素的记录。
定义 halfedge_mesh.cpp:397
void simplify()
执行一次曲面简化。
定义 meshedit.cpp:535
std::optional< Edge * > flip_edge(Edge *e)
翻转一条边。
定义 meshedit.cpp:44
HalfedgeMesh(Object &object)
定义 halfedge_mesh.cpp:41
侵入式双链表。
定义 linked_list.hpp:44
HalfedgeMeshFailure
半边网格的不合法情况。
定义 halfedge.h:192
用于渲染箭头的特殊线条集。
定义 mesh.hpp:125
半边网格中的边。
定义 halfedge.h:115
bool is_new
定义 halfedge.h:129
Eigen::Vector3f new_pos
准备分裂这条边时分裂后新增顶点的坐标。
定义 halfedge.h:137
float length() const
定义 edge.cpp:22
bool on_boundary() const
定义 edge.cpp:10
const std::size_t id
定义 halfedge.h:125
Halfedge * halfedge
定义 halfedge.h:127
Eigen::Vector3f center() const
定义 edge.cpp:15
Edge(std::size_t edge_id)
定义 edge.cpp:6
半边网格中的面片。
定义 halfedge.h:148
const std::size_t id
定义 halfedge.h:158
Halfedge * halfedge
定义 halfedge.h:160
Eigen::Vector3f center() const
定义 face.cpp:29
Face(std::size_t face_id, bool is_boundary=false)
定义 face.cpp:8
Eigen::Vector3f area_weighted_normal()
定义 face.cpp:13
const bool is_boundary
边界面标识。
定义 halfedge.h:169
Eigen::Vector3f normal()
定义 face.cpp:24
在曲面简化算法中用到的工具类。
定义 halfedge.h:327
EdgeRecord(std::unordered_map< Vertex *, Eigen::Matrix4f > &vertex_quadrics, Edge *e)
Edge * edge
定义 halfedge.h:332
Eigen::Vector3f optimal_pos
定义 halfedge.h:334
float cost
定义 halfedge.h:336
半边网格中最关键的几何元素。
定义 halfedge.h:43
Edge * edge
定义 halfedge.h:70
Halfedge * prev
定义 halfedge.h:64
Halfedge * next
定义 halfedge.h:62
Vertex * from
定义 halfedge.h:68
bool is_boundary() const
这条半边是否属于一个虚拟的边界面。
定义 halfedge.cpp:23
Halfedge * inv
定义 halfedge.h:66
Halfedge(std::size_t halfedge_id)
定义 halfedge.cpp:5
Face * face
定义 halfedge.h:72
void set_neighbors(Halfedge *next, Halfedge *prev, Halfedge *inv, Vertex *from, Edge *edge, Face *face)
定义 halfedge.cpp:11
const std::size_t id
定义 halfedge.h:60
用于同步渲染数据的三角形 Mesh 。
定义 mesh.hpp:28
半边网格中的顶点。
定义 halfedge.h:83
Eigen::Vector3f new_pos
定义 halfedge.h:104
Eigen::Vector3f neighborhood_center() const
邻域 (1-ring neighborhood) 中所有顶点坐标的算数平均值。
定义 vertex.cpp:24
bool is_new
定义 halfedge.h:102
size_t degree() const
定义 vertex.cpp:10
Eigen::Vector3f normal() const
定义 vertex.cpp:37
const std::size_t id
定义 halfedge.h:96
Halfedge * halfedge
定义 halfedge.h:98
Eigen::Vector3f pos
定义 halfedge.h:100
Vertex(std::size_t vertex_id)
定义 vertex.cpp:6