1#ifndef DANDELION_GEOMETRY_HALFEDGE_H
2#define DANDELION_GEOMETRY_HALFEDGE_H
10#include <unordered_map>
13#include <spdlog/spdlog.h>
84struct Vertex : LinkedListNode<Vertex>
87 Vertex(std::size_t vertex_id);
96 Eigen::Vector3f
normal()
const;
116struct Edge : LinkedListNode<Edge>
119 Edge(std::size_t edge_id);
123 Eigen::Vector3f
center()
const;
127 const std::size_t
id;
149struct Face : LinkedListNode<Face>
158 Eigen::Vector3f
center()
const;
160 const std::size_t
id;
196 MULTIPLE_ORIENTED_EDGES,
198 INIFINITE_POSITION_VALUE,
199 INVALID_HALFEDGE_PERMUTATION,
200 INVALID_VERTEX_CONNECTIVITY,
201 INVALID_EDGE_CONNECTIVITY,
202 INVALID_FACE_CONNECTIVITY,
203 ILL_FORMED_HALFEDGE_INVERSION,
204 POOR_HALFEDGE_ACCESSIBILITY
336 EdgeRecord() =
default;
338 EdgeRecord(std::unordered_map<Vertex*, Eigen::Matrix4f>& vertex_quadrics,
Edge* e);
381 std::optional<HalfedgeMeshFailure>
validate();
std::optional< Vertex * > collapse_edge(Edge *e)
坍缩一条边。
定义 meshedit.cpp:259
Halfedge * new_halfedge()
定义 halfedge_mesh.cpp:366
HalfedgeMesh(HalfedgeMesh &other)=delete
void loop_subdivide()
执行一次 Loop 曲面细分。
定义 meshedit.cpp:397
Face * new_face(bool is_boundary=false)
定义 halfedge_mesh.cpp:387
friend bool operator<(const EdgeRecord &a, const EdgeRecord &b)
定义 meshedit.cpp:36
Object & object
定义 halfedge.h:386
GL::LineSet halfedge_arrows
定义 halfedge.h:403
std::shared_ptr< spdlog::logger > logger
定义 halfedge.h:405
std::optional< HalfedgeMeshFailure > error_info
定义 halfedge.h:324
void erase(Halfedge *h)
定义 halfedge_mesh.cpp:412
std::unordered_map< size_t, Face * > erased_faces
定义 halfedge.h:396
LinkedList< Halfedge > halfedges
定义 halfedge.h:304
void render(const Shader &shader)
定义 halfedge_mesh.cpp:348
void isotropic_remesh()
执行一次重网格化。
定义 meshedit.cpp:655
Edge * new_edge()
定义 halfedge_mesh.cpp:380
Vertex * new_vertex()
定义 halfedge_mesh.cpp:373
GL::Mesh & mesh
定义 halfedge.h:388
LinkedList< Vertex > vertices
定义 halfedge.h:306
std::optional< HalfedgeMeshFailure > validate()
检查半边网格的状态。
定义 halfedge_mesh.cpp:452
static std::tuple< Eigen::Vector3f, Eigen::Vector3f > halfedge_arrow_endpoints(const Halfedge *h)
定义 halfedge_mesh.cpp:354
std::vector< Vertex * > v_pointers
定义 halfedge.h:312
LinkedList< Face > faces
定义 halfedge.h:310
LinkedList< Edge > edges
定义 halfedge.h:308
void sync()
定义 halfedge_mesh.cpp:247
std::unordered_map< size_t, Halfedge * > erased_halfedges
定义 halfedge.h:390
std::unordered_map< size_t, Vertex * > erased_vertices
定义 halfedge.h:392
~HalfedgeMesh()
定义 halfedge_mesh.cpp:242
std::unordered_map< size_t, Edge * > erased_edges
定义 halfedge.h:394
std::optional< Vertex * > split_edge(Edge *e)
分裂一条边。
定义 meshedit.cpp:97
void regenerate_halfedge_arrows()
定义 halfedge_mesh.cpp:394
std::unordered_map< const Vertex *, size_t > v_indices
定义 halfedge.h:399
std::unordered_map< const Halfedge *, size_t > h_indices
定义 halfedge.h:401
static std::size_t next_available_id
定义 halfedge.h:384
void clear_erasure_records()
释放内存并清除已删除元素的记录。
定义 halfedge_mesh.cpp:432
std::variant< std::monostate, Vertex *, Edge *, Face * > inconsistent_element
当前处于不一致状态的几何基本元素。
定义 halfedge.h:320
void simplify()
执行一次曲面简化。
定义 meshedit.cpp:519
bool global_inconsistent
定义 halfedge.h:322
std::optional< Edge * > flip_edge(Edge *e)
翻转一条边。
定义 meshedit.cpp:41
HalfedgeMesh(Object &object)
定义 halfedge_mesh.cpp:42
侵入式双链表。
定义 linked_list.hpp:44
对 GLSL Shader 的简单封装。
定义 shader.hpp:24
HalfedgeMeshFailure
半边网格的不合法情况。
定义 halfedge.h:194
半边网格中的边。
定义 halfedge.h:117
bool is_new
定义 halfedge.h:131
Eigen::Vector3f new_pos
准备分裂这条边时分裂后新增顶点的坐标。
定义 halfedge.h:139
float length() const
定义 edge.cpp:22
bool on_boundary() const
定义 edge.cpp:10
const std::size_t id
定义 halfedge.h:127
Halfedge * halfedge
定义 halfedge.h:129
Eigen::Vector3f center() const
定义 edge.cpp:15
Edge(std::size_t edge_id)
定义 edge.cpp:6
半边网格中的面片。
定义 halfedge.h:150
const std::size_t id
定义 halfedge.h:160
Halfedge * halfedge
定义 halfedge.h:162
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:171
Eigen::Vector3f normal()
定义 face.cpp:24
在预览场景时绘制若干线条。
定义 gl.hpp:270
用于场景预览渲染的 Mesh 类。
定义 gl.hpp:220
在曲面简化算法中用到的工具类。
定义 halfedge.h:335
EdgeRecord(std::unordered_map< Vertex *, Eigen::Matrix4f > &vertex_quadrics, Edge *e)
Edge * edge
定义 halfedge.h:340
Eigen::Vector3f optimal_pos
定义 halfedge.h:342
float cost
定义 halfedge.h:344
半边网格中最关键的几何元素。
定义 halfedge.h:46
Edge * edge
定义 halfedge.h:72
Halfedge * prev
定义 halfedge.h:66
Halfedge * next
定义 halfedge.h:64
Vertex * from
定义 halfedge.h:70
bool is_boundary() const
这条半边是否属于一个虚拟的边界面。
定义 halfedge.cpp:22
Halfedge * inv
定义 halfedge.h:68
Halfedge(std::size_t halfedge_id)
定义 halfedge.cpp:5
Face * face
定义 halfedge.h:74
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:62
半边网格中的顶点。
定义 halfedge.h:85
Eigen::Vector3f new_pos
定义 halfedge.h:106
Eigen::Vector3f neighborhood_center() const
邻域 (1-ring neighborhood) 中所有顶点坐标的算数平均值。
定义 vertex.cpp:24
bool is_new
定义 halfedge.h:104
size_t degree() const
定义 vertex.cpp:10
Eigen::Vector3f normal() const
定义 vertex.cpp:37
const std::size_t id
定义 halfedge.h:98
Halfedge * halfedge
定义 halfedge.h:100
Eigen::Vector3f pos
定义 halfedge.h:102
Vertex(std::size_t vertex_id)
定义 vertex.cpp:6