| 508 | } |
| 509 | |
| 510 | Vector3f pseudonormal( const MeshTopology & topology, const VertCoords & points, VertId v, const FaceBitSet * region ) |
| 511 | { |
| 512 | Vector3f sum; |
| 513 | for ( EdgeId e : orgRing( topology, v ) ) |
| 514 | { |
| 515 | const auto l = topology.left( e ); |
| 516 | if ( l && ( !region || region->test( l ) ) ) |
| 517 | { |
| 518 | auto d0 = edgeVector( topology, points, e ); |
| 519 | auto d1 = edgeVector( topology, points, topology.next( e ) ); |
| 520 | auto angle = MR::angle( d0, d1 ); |
| 521 | auto n = cross( d0, d1 ); |
| 522 | sum += angle * n.normalized(); |
| 523 | } |
| 524 | } |
| 525 | |
| 526 | return sum.normalized(); |
| 527 | } |
| 528 | |
| 529 | Vector3f pseudonormal( const MeshTopology & topology, const VertCoords & points, UndirectedEdgeId ue, const FaceBitSet * region ) |
| 530 | { |
no test coverage detected