15#ifndef DRACO_MESH_CORNER_TABLE_H_
16#define DRACO_MESH_CORNER_TABLE_H_
59 static std::unique_ptr<CornerTable>
Create(
74 return static_cast<int>(vertex_corners_.size());
77 return static_cast<int>(corner_to_vertex_map_.size());
80 return static_cast<int>(corner_to_vertex_map_.size() / 3);
84 if (corner == kInvalidCornerIndex) {
87 return opposite_corners_[corner];
90 if (corner == kInvalidCornerIndex) {
93 return LocalIndex(++corner) ? corner : corner - 3;
96 if (corner == kInvalidCornerIndex) {
99 return LocalIndex(corner) ? corner - 1 : corner + 2;
102 if (corner == kInvalidCornerIndex) {
103 return kInvalidVertexIndex;
110 return corner_to_vertex_map_[corner];
113 if (corner == kInvalidCornerIndex) {
114 return kInvalidFaceIndex;
119 if (face == kInvalidFaceIndex) {
120 return kInvalidCornerIndex;
126 return {{ci, ci + 1, ci + 2}};
133 for (
int i = 0; i < 3; ++i) {
134 face_data[i] = corner_to_vertex_map_[first_corner + i];
142 for (
int i = 0; i < 3; ++i) {
143 corner_to_vertex_map_[first_corner + i] =
data[i];
151 return vertex_corners_[v];
156 if (vertex.value() <
static_cast<uint32_t
>(num_original_vertices_)) {
159 return non_manifold_vertex_parents_[vertex - num_original_vertices_];
164 return Vertex(c) != kInvalidVertexIndex;
174 if (c == kInvalidCornerIndex) {
187 if (
SwingLeft(corner) == kInvalidCornerIndex) {
218 if (corner_id == kInvalidCornerIndex) {
219 return kInvalidCornerIndex;
224 if (corner_id == kInvalidCornerIndex) {
225 return kInvalidCornerIndex;
250 opposite_corners_[corner_id] = opp_corner_id;
256 if (corner_0 != kInvalidCornerIndex) {
259 if (corner_1 != kInvalidCornerIndex) {
267 corner_to_vertex_map_[corner_id] = vert_id;
273 vertex_corners_.push_back(kInvalidCornerIndex);
274 return VertexIndex(
static_cast<uint32_t
>(vertex_corners_.size() - 1));
282 for (
int i = 0; i < 3; ++i) {
283 corner_to_vertex_map_.push_back(vertices[i]);
287 opposite_corners_.resize(corner_to_vertex_map_.size(), kInvalidCornerIndex);
288 return new_face_index;
294 if (vert != kInvalidVertexIndex) {
295 vertex_corners_[vert] = corner;
305 if (first_c == kInvalidCornerIndex) {
310 while (act_c != kInvalidCornerIndex && act_c != first_c) {
314 if (act_c != first_c) {
315 vertex_corners_[vert] = c;
324 vertex_corners_.resize(
num_vertices, kInvalidCornerIndex);
330 vertex_corners_[vert] = kInvalidCornerIndex;
341 if (face != kInvalidFaceIndex) {
343 for (
int i = 0; i < 3; ++i) {
344 corner_to_vertex_map_[first_corner + i] = kInvalidVertexIndex;
360 return valence_cache_;
371 bool BreakNonManifoldEdges();
383 int num_original_vertices_;
384 int num_degenerated_faces_;
385 int num_isolated_vertices_;
393 {{kInvalidVertexIndex, kInvalidVertexIndex, kInvalidVertexIndex}});
int ConfidentValence(VertexIndex v) const
Definition corner_table.cc:422
bool Reset(int num_faces)
Definition corner_table.cc:62
CornerIndex SwingLeft(CornerIndex corner) const
Definition corner_table.h:205
VertexIndex VertexParent(VertexIndex vertex) const
Definition corner_table.h:155
bool IsVertexIsolated(VertexIndex v) const
Definition corner_table.h:334
int num_faces() const
Definition corner_table.h:79
FaceIndex AddNewFace(const std::array< VertexIndex, 3 > &vertices)
Definition corner_table.h:279
void SetOppositeCorners(CornerIndex corner_0, CornerIndex corner_1)
Definition corner_table.h:254
int Valence(CornerIndex c) const
Definition corner_table.h:173
CornerIndex Opposite(CornerIndex corner) const
Definition corner_table.h:83
int num_vertices() const
Definition corner_table.h:73
void MakeVertexIsolated(VertexIndex vert)
Definition corner_table.h:328
void SetLeftMostCorner(VertexIndex vert, CornerIndex corner)
Definition corner_table.h:292
CornerTable()
Definition corner_table.cc:25
int NumIsolatedVertices() const
Definition corner_table.h:240
void MakeFaceInvalid(FaceIndex face)
Definition corner_table.h:339
bool IsValid(CornerIndex c) const
Definition corner_table.h:163
std::array< VertexIndex, 3 > FaceType
Definition corner_table.h:56
FaceIndex Face(CornerIndex corner) const
Definition corner_table.h:112
int num_corners() const
Definition corner_table.h:76
void MapCornerToVertex(CornerIndex corner_id, VertexIndex vert_id)
Definition corner_table.h:265
bool IsDegenerated(FaceIndex face) const
Definition corner_table.cc:401
const draco::ValenceCache< CornerTable > & GetValenceCache() const
Definition corner_table.h:359
static std::unique_ptr< CornerTable > Create(const IndexTypeVector< FaceIndex, FaceType > &faces)
Definition corner_table.cc:31
FaceType FaceData(FaceIndex face) const
Definition corner_table.h:130
int NumOriginalVertices() const
Definition corner_table.h:233
CornerIndex GetLeftCorner(CornerIndex corner_id) const
Definition corner_table.h:217
void UpdateVertexToCornerMap(VertexIndex vert)
Definition corner_table.h:302
CornerIndex Next(CornerIndex corner) const
Definition corner_table.h:89
void UpdateFaceToVertexMap(const VertexIndex vertex)
Definition corner_table.cc:433
VertexIndex AddNewVertex()
Definition corner_table.h:270
int NumDegeneratedFaces() const
Definition corner_table.h:236
CornerIndex Previous(CornerIndex corner) const
Definition corner_table.h:95
CornerIndex GetRightCorner(CornerIndex corner_id) const
Definition corner_table.h:223
void SetFaceData(FaceIndex face, FaceType data)
Definition corner_table.h:139
int NumNewVertices() const
Definition corner_table.h:232
VertexIndex Vertex(CornerIndex corner) const
Definition corner_table.h:101
void SetNumVertices(int num_vertices)
Definition corner_table.h:322
bool Init(const IndexTypeVector< FaceIndex, FaceType > &faces)
Definition corner_table.cc:40
int LocalIndex(CornerIndex corner) const
Definition corner_table.h:128
int Valence(VertexIndex v) const
Definition corner_table.cc:415
CornerIndex FirstCorner(FaceIndex face) const
Definition corner_table.h:118
CornerIndex SwingRight(CornerIndex corner) const
Definition corner_table.h:200
bool IsOnBoundary(VertexIndex vert) const
Definition corner_table.h:185
std::array< CornerIndex, 3 > AllCorners(FaceIndex face) const
Definition corner_table.h:124
CornerIndex LeftMostCorner(VertexIndex v) const
Definition corner_table.h:150
int ConfidentValence(CornerIndex c) const
Definition corner_table.h:179
void SetOppositeCorner(CornerIndex corner_id, CornerIndex opp_corner_id)
Definition corner_table.h:247
VertexIndex ConfidentVertex(CornerIndex corner) const
Definition corner_table.h:107
Definition draco_index_type_vector.h:32
Definition valence_cache.h:31
#define DRACO_DCHECK_LT(a, b)
Definition macros.h:86
#define DRACO_DCHECK(x)
Definition macros.h:80
#define DRACO_DCHECK_GE(a, b)
Definition macros.h:83
lazy data
Definition meshpage.php:1583
Definition attribute_octahedron_transform.cc:21
VertexIndex VertexIndex
Definition mesh_edgebreaker_encoder_impl.cc:37
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35
FaceIndex FaceIndex
Definition mesh_edgebreaker_encoder_impl.cc:36