38 const TraversalEncoderT &traversal_encoder);
42 int att_id)
const override;
44 int att_id)
const override;
51 return corner_table_.get();
54 return visited_faces_[fi.value()];
61 bool InitAttributeData();
64 template <
class TraverserT>
65 std::unique_ptr<PointsSequencer> CreateVertexTraversalSequencer(
73 bool FindInitFaceConfiguration(
FaceIndex face_id,
77 bool EncodeConnectivityFromCorner(
CornerIndex corner_id);
83 int EncodeHole(
CornerIndex start_corner_id,
bool encode_first_vertex);
87 bool EncodeSplitData();
92 bool IsRightFaceVisited(
CornerIndex corner_id)
const;
93 bool IsLeftFaceVisited(
CornerIndex corner_id)
const;
95 return visited_vertex_ids_[vert_id.value()];
103 int GetSplitSymbolIdOnFace(
int face_id)
const;
109 void CheckAndStoreTopologySplitEvent(
int src_symbol_id,
int src_face_id,
111 int neighbor_face_id);
114 bool EncodeAttributeConnectivitiesOnFace(
CornerIndex corner);
120 bool AssignPositionEncodingOrderToAllCorners();
125 bool GenerateEncodingOrderForAttributes();
128 MeshEdgebreakerEncoder *encoder_;
132 std::unique_ptr<CornerTable> corner_table_;
140 std::vector<CornerIndex> corner_traversal_stack_;
142 std::vector<bool> visited_faces_;
145 MeshAttributeIndicesEncodingData pos_encoding_data_;
153 std::vector<CornerIndex> processed_connectivity_corners_;
156 std::vector<bool> visited_vertex_ids_;
159 std::vector<int> vertex_traversal_length_;
162 std::vector<TopologySplitEventData> topology_split_event_data_;
165 std::unordered_map<int, int> face_to_split_symbol_map_;
168 std::vector<bool> visited_holes_;
171 std::vector<int> vertex_hole_id_;
174 int last_encoded_symbol_id_;
177 uint32_t num_split_symbols_;
180 struct AttributeData {
181 AttributeData() : attribute_index(-1), is_connectivity_used(true) {}
183 MeshAttributeCornerTable connectivity_data;
186 bool is_connectivity_used;
188 MeshAttributeIndicesEncodingData encoding_data;
192 std::vector<AttributeData> attribute_data_;
195 std::vector<int32_t> attribute_encoder_to_data_id_map_;
197 TraversalEncoderT traversal_encoder_;
204 bool use_single_connectivity_;