1#ifndef DANDELION_GEOMETRY_HALFEDGE_H
2#define DANDELION_GEOMETRY_HALFEDGE_H
10#include <unordered_map>
13#include <spdlog/spdlog.h>
85struct Vertex : LinkedListNode<Vertex>
88 Vertex(std::size_t vertex_id);
97 Eigen::Vector3f
normal()
const;
117struct Edge : LinkedListNode<Edge>
120 Edge(std::size_t edge_id);
124 Eigen::Vector3f
center()
const;
128 const std::size_t
id;
150struct Face : LinkedListNode<Face>
159 Eigen::Vector3f
center()
const;
161 const std::size_t
id;
197 MULTIPLE_ORIENTED_EDGES,
199 INIFINITE_POSITION_VALUE,
200 INVALID_HALFEDGE_PERMUTATION,
201 INVALID_VERTEX_CONNECTIVITY,
202 INVALID_EDGE_CONNECTIVITY,
203 INVALID_FACE_CONNECTIVITY,
204 ILL_FORMED_HALFEDGE_INVERSION,
205 POOR_HALFEDGE_ACCESSIBILITY
339 EdgeRecord() =
default;
341 EdgeRecord(std::unordered_map<Vertex*, Eigen::Matrix4f>& vertex_quadrics,
Edge* e);
385 std::optional<HalfedgeMeshFailure>
validate();
std::optional< Vertex * > collapse_edge(Edge *e)
坍缩一条边。
定义 meshedit.cpp:275
Halfedge * new_halfedge()
定义 halfedge_mesh.cpp:378
HalfedgeMesh(HalfedgeMesh &other)=delete
void loop_subdivide()
执行一次 Loop 曲面细分。
定义 meshedit.cpp:413
Face * new_face(bool is_boundary=false)
定义 halfedge_mesh.cpp:399
friend bool operator<(const EdgeRecord &a, const EdgeRecord &b)
定义 meshedit.cpp:36
Object & object
定义 halfedge.h:390
GL::LineSet halfedge_arrows
定义 halfedge.h:407
std::shared_ptr< spdlog::logger > logger
定义 halfedge.h:409
std::optional< HalfedgeMeshFailure > error_info
定义 halfedge.h:326
void erase(Halfedge *h)
定义 halfedge_mesh.cpp:424
std::unordered_map< size_t, Face * > erased_faces
定义 halfedge.h:400
LinkedList< Halfedge > halfedges
定义 halfedge.h:306
void render(const Shader &shader)
定义 halfedge_mesh.cpp:360
void isotropic_remesh()
执行一次重网格化。
定义 meshedit.cpp:677
Edge * new_edge()
定义 halfedge_mesh.cpp:392
Vertex * new_vertex()
定义 halfedge_mesh.cpp:385
GL::Mesh & mesh
定义 halfedge.h:392
LinkedList< Vertex > vertices
定义 halfedge.h:308
std::optional< HalfedgeMeshFailure > validate()
检查半边网格的状态。
定义 halfedge_mesh.cpp:464
static std::tuple< Eigen::Vector3f, Eigen::Vector3f > halfedge_arrow_endpoints(const Halfedge *h)
定义 halfedge_mesh.cpp:366
std::vector< Vertex * > v_pointers
定义 halfedge.h:314
LinkedList< Face > faces
定义 halfedge.h:312
LinkedList< Edge > edges
定义 halfedge.h:310
void sync()
定义 halfedge_mesh.cpp:254
std::unordered_map< size_t, Halfedge * > erased_halfedges
定义 halfedge.h:394
std::unordered_map< size_t, Vertex * > erased_vertices
定义 halfedge.h:396
~HalfedgeMesh()
定义 halfedge_mesh.cpp:249
std::unordered_map< size_t, Edge * > erased_edges
定义 halfedge.h:398
std::optional< Vertex * > split_edge(Edge *e)
分裂一条边。
定义 meshedit.cpp:105
void regenerate_halfedge_arrows()
定义 halfedge_mesh.cpp:406
std::unordered_map< const Vertex *, size_t > v_indices
定义 halfedge.h:403
std::unordered_map< const Halfedge *, size_t > h_indices
定义 halfedge.h:405
static std::size_t next_available_id
定义 halfedge.h:388
void clear_erasure_records()
释放内存并清除已删除元素的记录。
定义 halfedge_mesh.cpp:444
std::variant< std::monostate, Vertex *, Edge *, Face * > inconsistent_element
当前处于不一致状态的几何基本元素。
定义 halfedge.h:322
void simplify()
执行一次曲面简化。
定义 meshedit.cpp:536
bool global_inconsistent
定义 halfedge.h:324
std::optional< Edge * > flip_edge(Edge *e)
翻转一条边。
定义 meshedit.cpp:45
HalfedgeMesh(Object &object)
定义 halfedge_mesh.cpp:42
侵入式双链表。
定义 linked_list.hpp:44
对 GLSL Shader 的简单封装。
定义 shader.hpp:24
HalfedgeMeshFailure
半边网格的不合法情况。
定义 halfedge.h:195
半边网格中的边。
定义 halfedge.h:118
bool is_new
定义 halfedge.h:132
Eigen::Vector3f new_pos
准备分裂这条边时分裂后新增顶点的坐标。
定义 halfedge.h:140
float length() const
定义 edge.cpp:22
bool on_boundary() const
定义 edge.cpp:10
const std::size_t id
定义 halfedge.h:128
Halfedge * halfedge
定义 halfedge.h:130
Eigen::Vector3f center() const
定义 edge.cpp:15
Edge(std::size_t edge_id)
定义 edge.cpp:6
半边网格中的面片。
定义 halfedge.h:151
const std::size_t id
定义 halfedge.h:161
Halfedge * halfedge
定义 halfedge.h:163
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:172
Eigen::Vector3f normal()
定义 face.cpp:24
在预览场景时绘制若干线条。
定义 gl.hpp:334
用于场景预览渲染的 Mesh 类。
定义 gl.hpp:268
在曲面简化算法中用到的工具类。
定义 halfedge.h:338
EdgeRecord(std::unordered_map< Vertex *, Eigen::Matrix4f > &vertex_quadrics, Edge *e)
Edge * edge
定义 halfedge.h:343
Eigen::Vector3f optimal_pos
定义 halfedge.h:345
float cost
定义 halfedge.h:347
半边网格中最关键的几何元素。
定义 halfedge.h:46
Edge * edge
定义 halfedge.h:73
Halfedge * prev
定义 halfedge.h:67
Halfedge * next
定义 halfedge.h:65
Vertex * from
定义 halfedge.h:71
bool is_boundary() const
这条半边是否属于一个虚拟的边界面。
定义 halfedge.cpp:23
Halfedge * inv
定义 halfedge.h:69
Halfedge(std::size_t halfedge_id)
定义 halfedge.cpp:5
Face * face
定义 halfedge.h:75
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:63
半边网格中的顶点。
定义 halfedge.h:86
Eigen::Vector3f new_pos
定义 halfedge.h:107
Eigen::Vector3f neighborhood_center() const
邻域 (1-ring neighborhood) 中所有顶点坐标的算数平均值。
定义 vertex.cpp:24
bool is_new
定义 halfedge.h:105
size_t degree() const
定义 vertex.cpp:10
Eigen::Vector3f normal() const
定义 vertex.cpp:37
const std::size_t id
定义 halfedge.h:99
Halfedge * halfedge
定义 halfedge.h:101
Eigen::Vector3f pos
定义 halfedge.h:103
Vertex(std::size_t vertex_id)
定义 vertex.cpp:6