| 166 | |
| 167 | template<typename V> |
| 168 | Vector3f MR::Polyline<V>::loopDirArea( EdgeId e0 ) const |
| 169 | { |
| 170 | Vector3f area; |
| 171 | auto e = e0; |
| 172 | for ( ;; ) |
| 173 | { |
| 174 | area += cross( Vector3f( orgPnt( e ) ), Vector3f( destPnt( e ) ) ); |
| 175 | e = topology.next( e.sym() ); |
| 176 | if ( e == e0 ) |
| 177 | return area; |
| 178 | else if ( e == e0.sym() ) |
| 179 | return Vector3f( 0.0f, 0.0f, FLT_MAX ); |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | template<typename V> |
| 184 | float Polyline<V>::totalLength() const |