Subdivide a feature curve by splitting it at 0-features.
Some false strong edges may be filtered out during this step.
416 list< Feature_1::const_iterator> divs;
419 bool isloop = (src==trg);
422 bool isdangling = !isloop &&
426 float cos_min_fa_before=1, cos_min_fa_after=1;
427 Feature_1::const_iterator f1end = f1.end(), hfirst = f1end, hlast=f1end;
429 for (Feature_1::const_iterator hprev=f1.begin(),hi=++f1.begin(),hnext=hi;
430 hi!=f1end; hprev=hi,hi=hnext) {
442 else if ( isdangling) {
448 if ( hfirst == f1end && dpre < cos_min_fa_before)
449 cos_min_fa_before = dpre;
453 if ( hfirst == f1end) hfirst = hi;
454 hlast = hi; cos_min_fa_after = 1.;
457 if ( d < cos_min_fa_before) cos_min_fa_after =
d;
461 if ( isdangling && divs.empty() ) {
466 if ( hlast!=f1end && hlast!=hfirst && cos_min_fa_after>
_cos_weakend &&
473 Feature_1::const_iterator hi = f1.begin();
482 divs.push_back( f1end);
487 subcur.push_back( f1);
489 subcur.push_back( Feature_1( f1.begin(),divs.front()));
490 list< Feature_1::const_iterator>::const_iterator dit=divs.begin();
491 for ( list< Feature_1::const_iterator>::const_iterator
492 dinext=dit; ++dinext != divs.end(); dit=dinext)
493 subcur.push_back( Feature_1( *dit, *dinext));
496 Feature_1 &newf=subcur.front();
497 newf.insert( newf.begin(), *dit, f1end);
502 for (Feature_list_1::iterator sit=subcur.begin();sit!=subcur.end();++sit) {
504 for ( Feature_1::const_iterator
i=sit->begin();
i!=sit->end(); ++
i) {
513 for ( Feature_1::const_iterator
i=sit->begin();
i!=sit->end(); ++
i)
520 new_flist.push_back( Feature_1()); new_flist.back().swap(*sit);
Vertex * get_origin(Halfedge *h) const
float cos_edge_angle(const Halfedge *h1, const Halfedge *h2)
Compute the cosine of the edge angle at a vertex between two incident feature edges.
void set_on_feature(Vertex *v) const
Halfedge * get_opposite(Halfedge *h) const
RFC_Pane_overlay * get_pane(Vertex *v) const
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
bool check_false_strong_1(Feature_1 &)
Determine whether a curve is false strong.
*********************************************************************Illinois Open Source License ****University of Illinois NCSA **Open Source License University of Illinois All rights reserved ****Developed free of to any person **obtaining a copy of this software and associated documentation to deal with the Software without including without limitation the rights to and or **sell copies of the and to permit persons to whom the **Software is furnished to do subject to the following this list of conditions and the following disclaimers ****Redistributions in binary form must reproduce the above **copyright this list of conditions and the following **disclaimers in the documentation and or other materials **provided with the distribution ****Neither the names of the Center for Simulation of Advanced the University of nor the names of its **contributors may be used to endorse or promote products derived **from this Software without specific prior written permission ****THE SOFTWARE IS PROVIDED AS WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **ARISING OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE v
std::list< Feature_1 > Feature_list_1
float cos_face_angle(Halfedge *h, Halfedge *hopp)
Compute the cosine of the face angle (dihedral angle) at an edge.
bool is_rstrong_ea(const Feature_1 &f1, Feature_1::const_iterator hprev, Feature_1::const_iterator hnext, float cos_ea, bool isloop)
Determine whether a vertex is relatively strong in edge angle within a give feature.
void unset_strong_edge(Halfedge *h)
bool is_feature_0(const Vertex *v) const
static HDS_accessor< Tag_true > acc
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
void set_feature_0(Vertex *v) const
Halfedge_overlay Halfedge
Vertex * get_destination(Halfedge *h) const
std::map< Vertex *, int > _f0_ranks