MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / findNext

Function findNext

source/MRMesh/MRIntersectionContour.cpp:151–182  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151std::optional<VariableEdgeTri2Index> findNext( AccumulativeSet& accumulativeSet, const VarEdgeTri& curr )
152{
153 auto currB2Aedge = curr.isEdgeATriB() ? curr.edge : curr.edge.sym();
154 const auto& edgeTopology = accumulativeSet.topologyByEdge( curr.isEdgeATriB() );
155 const auto& triTopology = accumulativeSet.topologyByTri( curr.isEdgeATriB() );
156 auto leftTri = edgeTopology.left( currB2Aedge );
157 auto leftEdge = triTopology.edgePerFace()[curr.tri()];
158
159 assert( curr.edge );
160
161 if ( leftTri.valid() )
162 {
163 VarEdgeTri variants[5] =
164 {
165 { curr.isEdgeATriB(), edgeTopology.next( currB2Aedge ), curr.tri() },
166 { curr.isEdgeATriB(), edgeTopology.prev( currB2Aedge.sym() ), curr.tri() },
167
168 { !curr.isEdgeATriB(), leftEdge, leftTri },
169 { !curr.isEdgeATriB(), triTopology.next( leftEdge ), leftTri },
170 { !curr.isEdgeATriB(), triTopology.prev( leftEdge.sym() ), leftTri }
171 };
172
173 for ( const auto& v : variants )
174 {
175 if ( !v.edge.valid() )
176 continue;
177 if ( auto pIndex = accumulativeSet.edgeTri2IndexMap.findIndex( v ) )
178 return VariableEdgeTri2Index{ v, *pIndex };
179 }
180 }
181 return {};
182}
183
184void parallelPrepareLinkedLists( const std::vector<VarEdgeTri>& intersections, AccumulativeSet& accumulativeSet )
185{

Callers 1

Calls 8

isEdgeATriBMethod · 0.80
leftMethod · 0.80
triMethod · 0.80
findIndexMethod · 0.80
symMethod · 0.45
validMethod · 0.45
nextMethod · 0.45
prevMethod · 0.45

Tested by

no test coverage detected