Wildmeshing Toolkit
Loading...
Searching...
No Matches
SplitNewAttributeTopoInfo.cpp
Go to the documentation of this file.
1
3
5
10
11
12//
13// void SplitNewAttributeTopoInfo::update_neighboring_simplices(
14// const ReturnVariant& ret_data,
15// PrimitiveType pt,
16// const std::vector<Tuple>& output_simplex) const
17//{
18// // default impl is to do nothing
19//}
20
21std::vector<std::array<Tuple, 2>> SplitNewAttributeTopoInfo::input_ear_simplices(
22 const ReturnVariant& ret_data,
23 const Tuple& input_tuple,
24 PrimitiveType pt) const
25{
26 return input_ear_simplices(std::get<EdgeOperationData>(ret_data), input_tuple, pt);
27}
28
29// the simplices that were created by merging simplices
31 const ReturnVariant& ret_data,
32 const Tuple& output_tuple,
33 PrimitiveType pt) const
34{
35 return output_rib_simplices(std::get<EdgeOperationData>(ret_data), output_tuple, pt);
36}
37std::vector<std::array<Tuple, 2>> SplitNewAttributeTopoInfo::output_split_simplices(
38 const ReturnVariant& ret_data,
39 const Tuple& input_tuple,
40 PrimitiveType pt) const
41{
42 return output_split_simplices(std::get<EdgeOperationData>(ret_data), input_tuple, pt);
43}
44
45// the simplices that were created by merging simplices
47 const ReturnVariant& ret_data,
48 const Tuple& input_tuple,
49 PrimitiveType pt) const
50{
51 return input_split_simplices(std::get<EdgeOperationData>(ret_data), input_tuple, pt);
52}
53
55 const ReturnVariant& ret_data,
56 PrimitiveType pt) const
57{
58 return output_duplicated_free_simplices(std::get<EdgeOperationData>(ret_data), pt);
59}
60
61std::vector<std::array<Tuple, 2>> SplitNewAttributeTopoInfo::output_split_simplices(
62 const EdgeOperationData& ret_data,
63 const Tuple& output_tuple,
64 PrimitiveType pt) const
65{
66 int64_t id = get_primitive_type_id(pt);
67 switch (id) {
68 case 0: {
69 return {};
70 }
71 case 1: {
72 return {ret_data.split_output_edges(m_mesh)};
73 }
74 case 2: {
75 return ret_data.split_output_faces(m_mesh);
76 }
77 default: return {};
78 }
79}
80
82 const EdgeOperationData& ret_data,
83 const Tuple& input_tuple,
84 PrimitiveType pt) const
85{
86 switch (get_primitive_type_id(pt)) {
87 case 0: {
88 return {};
89 }
90 case 1: {
91 return {input_tuple};
92 }
93 case 2: {
94 return ret_data.input_faces(m_mesh);
95 }
96 default: return {};
97 }
98}
99
100std::vector<std::array<Tuple, 2>> SplitNewAttributeTopoInfo::input_ear_simplices(
101 const EdgeOperationData& ret_data,
102 const Tuple& input_tuple,
103 PrimitiveType pt) const
104{
105 return m_mesh.parent_scope([&]() -> std::vector<std::array<Tuple, 2>> {
106 switch (get_primitive_type_id(pt)) {
107 case 0: {
108 return {ret_data.input_endpoints(m_mesh)};
109 }
110 case 1: {
111 return ret_data.ear_edges(m_mesh);
112 }
113 default: return {};
114 }
115 });
116}
117
118// the simplices that were created by merging simplices
120 const EdgeOperationData& ret_data,
121 const Tuple& output_tuple,
122 PrimitiveType pt) const
123{
124 switch (get_primitive_type_id(pt)) {
125 case 0: {
126 return {output_tuple};
127 }
128 case 1: {
129 return ret_data.split_new_rib_edges(m_mesh);
130 }
131 default: return {};
132 }
133}
134
136 const EdgeOperationData& ret_data,
137 PrimitiveType pt) const
138{
139 assert(m_mesh.is_free());
140 switch (get_primitive_type_id(pt)) {
141 case 0: {
142 return {
143 ret_data.m_free_split_v,
144 std::array<int64_t, 2>{
145 {ret_data.m_incident_face_datas[0].opposite_vid, ret_data.split_new_vid}}};
146 }
147 case 1: {
148 return {ret_data.m_free_split_e};
149 }
150 default: return {};
151 }
152}
153
154} // namespace wmtk::operations::tri_mesh
bool is_free() const
Definition Mesh.hpp:973
decltype(auto) parent_scope(Functor &&f, Args &&... args) const
Evaluate the passed in function inside the parent scope.
Definition Mesh.hpp:941
The Tuple is the basic navigation tool in our mesh data structure.
Definition Tuple.hpp:19
std::vector< Tuple > input_faces(const TriMesh &) const
std::vector< std::array< Tuple, 2 > > split_output_faces(const TriMesh &) const
std::vector< IncidentFaceData > m_incident_face_datas
std::vector< std::array< Tuple, 2 > > ear_edges(const TriMesh &m) const
std::vector< Tuple > split_new_rib_edges(const TriMesh &) const
std::array< Tuple, 2 > input_endpoints(const TriMesh &m) const
std::array< Tuple, 2 > split_output_edges(const TriMesh &) const
std::vector< std::array< int64_t, 2 > > output_duplicated_free_simplices(const ReturnVariant &ret_data, PrimitiveType pt) const final override
std::vector< Tuple > input_split_simplices(const ReturnVariant &ret_data, const Tuple &input_tuple, PrimitiveType pt) const final override
std::vector< std::array< Tuple, 2 > > input_ear_simplices(const ReturnVariant &ret_data, const Tuple &input_tuple, PrimitiveType pt) const final override
std::vector< std::array< Tuple, 2 > > output_split_simplices(const ReturnVariant &ret_data, const Tuple &output_tuple, PrimitiveType pt) const final override
std::vector< Tuple > output_rib_simplices(const ReturnVariant &ret_data, const Tuple &output_tuple, PrimitiveType pt) const final override
constexpr int8_t get_primitive_type_id(PrimitiveType t)
Get a unique integer id corresponding to each primitive type.