Identify the 0-features.
559 Feature_list_1::iterator flit;
561 for ( flit=new_flist.begin(); flit!=new_flist.end(); ++flit) {
563 Feature_1::iterator fit=flit->begin(),fprev=fit;
564 for ( ++fit; fit!=flit->end(); ++fit) {
566 subf.push_back( Feature_1( fprev,fit));
572 subf.push_back( Feature_1( fprev,fit));
575 Feature_1 &newf=subf.front();
576 newf.insert( newf.begin(), fprev, flit->end());
580 for (Feature_list_1::iterator sit=subf.begin(); sit!=subf.end(); ++sit) {
591 map<Vertex*,int>::iterator
i=
_f0_ranks.find(src);
593 _f0_ranks.insert(make_pair(src,-1-(src==dst)));
595 i->second =
abs(i->second)+1+(src==dst);
600 i->second =
abs(i->second)+1;
605 std::map<Vertex*,std::vector<Feature_1*> > turn_maps;
609 map<Vertex*,int>::iterator i=
_f0_ranks.find(src);
611 turn_maps[ src].push_back( &*flit);
616 turn_maps[ dst].push_back( &*flit);
619 if ( !turn_maps.empty()) {
620 std::map<Vertex*,std::vector<Feature_1*> >::iterator
i;
627 if ( flit->empty())
continue;
628 Feature_1 &f1 = *flit;
635 if ( (i=turn_maps.find( src)) != turn_maps.end()) {
647 else for (
int c=0; c<2; ++c) {
651 if ( (i=turn_maps.find( v))==turn_maps.end())
break;
653 if ( (f2 = i->second[0]) == &f1) f2 = i->second[1];
659 if ( f2 == &f1)
break;
664 (i=turn_maps.find(u)) != turn_maps.end()) {
665 if ( i->second[0] == f2) i->second[0] = &f1;
666 if ( i->second[1] == f2) i->second[1] = &f1;
669 (i=turn_maps.find(u)) != turn_maps.end()) {
670 if ( i->second[0] == f2) i->second[0] = &f1;
671 if ( i->second[1] == f2) i->second[1] = &f1;
684 for (Feature_list_1::iterator it=subf.begin(); it!=subf.end(); ++it) {
685 new_flist.push_back( Feature_1());
689 new_flist.back().swap( *it);
693 new_flist.push_back( Feature_1());
694 new_flist.back().swap( f1);
702 for ( map<Vertex*,int>::iterator it=
_f0_ranks.begin();
705 if ( it->second == -1 &&
is_strong_ad( it->first)) it->second = 1;
708 _f_list_0.push_back( Feature_0( it->first));
bool is_strong_ad(Vertex *v)
Determine whether a vertex is strong (either theta-strong or relatively strong) in angle defect...
Vertex * get_origin(Halfedge *h) const
void subdiv_feature_curve(const Feature_1 &f1, Feature_list_1 &new_flist, int &dropped)
Subdivide a feature curve by splitting it at 0-features.
RFC_Pane_overlay * get_pane(Vertex *v) const
void set_feature_0(Vertex *v)
*********************************************************************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
bool is_feature_0(const Vertex *v) const
static HDS_accessor< Tag_true > acc
void unset_feature_0(Vertex *v)
void merge_features_1(Vertex *v, Feature_1 &f1, Feature_1 &f2)
Merge two feature curves into one at vertex v.
#define RFC_assertion_code
Vertex * get_destination(Halfedge *h) const
std::map< Vertex *, int > _f0_ranks