45 #define HUGE_VALF 1e+36F
67 typedef CGAL::Polyhedron_incremental_builder_3<HDS>
HDS_builder;
82 {
return v - (
const Vertex*)&*
_hds.vertices_begin(); }
84 {
return h - (
const Halfedge*)&*
_hds.halfedges_begin(); }
86 {
return f - (
const Facet*)&*
_hds.facets_begin(); }
89 {
return v - (
const Vertex*)&*
_hds.vertices_begin() + 1; }
91 {
return f - (
const Facet*)&*
_hds.facets_begin() + 1; }
210 for (
int i=1;
i<=nf; ++
i) {
223 int rp_id,
int cnt,
const int *rids);
280 const Halfedge *t = &*
hds().border_halfedges_begin();
388 typedef std::list<Halfedge*>
Base;
390 template <
class Iter>
412 float cos_edge_angle(
const Feature_1 &f1, Feature_1::const_iterator it,
416 Feature_1::const_iterator hprev,
417 Feature_1::const_iterator hnext,
418 float cos_ea,
bool isloop);
466 const std::vector< std::pair<float, Halfedge*> > &);
bool is_strong_ad(Vertex *v)
Determine whether a vertex is strong (either theta-strong or relatively strong) in angle defect...
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.
int get_lid(const Facet *f) const
void set_strong_edge(Halfedge *h)
std::vector< bool > _is_f_0
void insert_subface(int idx, int plid, const int *lids, const Edge_ID *eids, const Point_2 *nc, int rp_id, int cnt, const int *rids)
Insert all the infomation related to a subface into the database.
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.
CGAL::Polyhedron_incremental_builder_3< HDS > HDS_builder
void reduce_normals_to_all(MPI_Op)
Halfedge_overlay * halfedge()
std::vector< INode * > _v_nodes
void set_on_feature(Vertex *v) const
Feature_list_0::iterator remove_feature_0(Feature_list_0::iterator i)
Remove the given 0-feature from the list.
RFC_Pane_overlay * pane()
const Feature_list_1 & flist_1() const
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com 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 **********************************************************************INTERFACE SUBROUTINE inode
float & get_cos_edge_angle(Vertex *v)
std::vector< INode_list > _e_node_list
const float & get_cos_edge_angle(const Vertex *v) const
CGAL::Halfedge_data_structure_decorator< HDS > HDS_decorator
Feature_1(Iter it1, Iter it2)
Vertex_overlay * destination()
const Vertex * get_primary(const Vertex *v) const
std::vector< INode * > _e_node_buf
void set_on_feature(Vertex *v)
const Point_3 & get_point(const Vertex *v) const
const int & size_of_subfaces() const
std::vector< Vector_3 > _f_nrmls
std::vector< int > _e_marks
const Point_3 & get_point(int id) const
Get the physical coordinates of the node with given local id.
This class encapsulate a halfedge over a window manifold.
RFC_Pane_overlay(COM::Pane *b, int color)
SURF::Vector_3< Real > Vector_3
bool check_false_strong_1(Feature_1 &)
Determine whether a curve is false strong.
std::vector< Vertex * > _primaries
std::vector< Halfedge * > _cntrs
std::vector< bool > _is_on_f
void set_feature_0(Vertex *v)
float & get_cos_face_angle(Halfedge *h)
void add_tangent(Halfedge *h, const Vector_3 &v)
float comp_angle_defect(Vertex *v)
Compute the angle defect of a vertex.
int color() const
The color of the window for overlay or for data transfer (BLUE or GREEN).
int size_of_faces() const
The total number of faces in the pane.
int get_lid(const Vertex *v) const
std::vector< Three_tuple< int > > _subfaces
Vector_3 & get_tangent(Halfedge *h, Vertex *v)
std::vector< Edge_ID > _subnode_parents
Edge ids of parents.
RFC_Window_derived< RFC_Pane_overlay > Base
float & get_angle_defect(Vertex *v)
const Point_3 & point() const
A window is a collection of panes.
Vector_3 get_tangent(const Halfedge *h)
Vertex_overlay * origin()
int color() const
The color of the parent window (BLUE or GREEN).
*********************************************************************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::vector< Vector_3 > _nrmls
RFC_Window_overlay * window()
The base implementation of RFC_Pane.
bool snap_on_features() const
const Point_3 & get_point(int id) const
const float & get_cos_face_angle(const Halfedge *h) const
void reduce_coordinates_to_all()
#define RFC_END_NAME_SPACE
void init_feature_parameters()
Read in the control file for feature detection.
std::map< std::pair< int, int >, Halfedge * > _bv2edges
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.
std::vector< bool > _is_f_1
std::vector< int > _f_t_index
void unset_strong_edge(Halfedge *h)
const Point & point() const
INode * get_buffered_inode(Halfedge *h, int tag) const
Halfedge * get_counterpart(Halfedge *h)
void identify_features_0()
Identify the 0-features.
bool is_same_node(Vertex *v1, Vertex *v2)
Check whether given two vertices correspond to the same physical point.
Vertex_overlay * vertex()
const RFC_Window_overlay * window() const
std::list< Feature_0 > Feature_list_0
int get_index(const Halfedge *h) const
bool is_feature_0(const Vertex *v) const
bool is_feature_0(const Vertex *v) const
In_place_list_n< INode, false > INode_list
Feature_list_0 & flist_0()
static HDS_accessor< Tag_true > acc
const Halfedge * get_counterpart(const Halfedge *h) const
void create_overlay_data()
bool is_primary(const Vertex *v) const
void delete_overlay_data()
virtual ~RFC_Pane_overlay()
void print_features()
Dump out the 0- and 1-features in Tecplot format into files <name>f0.plt, <name>f1.plt, respectively.
#define RFC_BEGIN_NAME_SPACE
Vertex * get_primary(Vertex *v)
std::vector< float > _fd_1
INode_list & get_inode_list(Halfedge *h)
Contains declarations of MPI subroutines used in Roccom.
void delete_overlay_data()
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.
std::vector< Node_ID > _subnode_counterparts
Ids of counterparts of subnodes.
void determine_counterparts()
Feature_list_1 & flist_1()
std::vector< const INode * > _subnodes
std::vector< int > _f_n_index
void unset_strong_edge(Halfedge *h) const
void set_buffered_inode(Halfedge *h, int tag, INode *inode)
void detect_features()
The main entry of feature detection.
void set_inode(Vertex *v, INode *i)
virtual ~RFC_Window_overlay()
void mark_ridge(Halfedge *h)
bool is_on_feature(const Vertex *v) const
int get_index(const Vertex *v) const
Vector_3 & get_normal(Halfedge *h, int i)
std::vector< Vector_3 > _f_tngts
Reusable implementation for derived class of RFC_Window_base.
bool _long_falseness_check
std::list< Halfedge * > Base
const Vector_3 & get_normal(const Halfedge *h, int i) const
const Halfedge * get_an_unmarked_halfedge() const
const Feature_list_0 & flist_0() const
void determine_counterparts()
std::vector< int > _subface_parents
Face ids of the parents of the subfaces.
std::vector< int > _subface_offsets
Offsets of first subfaces contained in a face.
void set_feature_0(Vertex *v) const
bool is_feature_1(const Halfedge *h) const
bool operator<(const Feature_0 &f) const
std::vector< float > _ad_0
int get_index(const Facet *f) const
const Vertex * vertex() const
const Vertex * get_vertex_from_id(int i) const
Halfedge_overlay Halfedge
RFC_Window_overlay(COM::Window *b, int color, const char *pre=NULL)
Some basic geometric data types.
bool is_on_feature(const Vertex *v) const
Halfedge_overlay Halfedge
void remove_feature_1(Feature_1 &f)
Remove a false strong curve.
void construct_bvpair2edge()
std::vector< Point_2S > _subnode_nat_coors
Natual coordinates in the parent face.
void create_overlay_data()
bool is_feature_1(const Halfedge *h) const
void reset_cos_edge_angle(Vertex *v)
void allocate_subfaces(const std::vector< int > &cnts)
Allocate memory space for the arrays for storing the subdivision.
void normalize(Vector_3 &v)
Miscellaneous Helpers.
static HDS_accessor< Tag_true > acc
void unset_on_feature(Vertex *v)
std::map< Vertex *, int > _f0_ranks
INode * get_inode(const Vertex *v) const
const INode_list & get_inode_list(const Halfedge *h) const
Vertex * get_vertex_from_id(int i)
Vector_3 & get_normal(int v)
RFC_Window_overlay * _window
void set_normal(int v, const Vector_3 &vec)
bool marked(const Halfedge *h) const
bool is_physical_border(const Halfedge *h) const
Determine whether an edge is on the physical boundary of the window.
const Vector_3 & get_normal(int v) const
void dump_strong_edges(const std::vector< std::pair< float, Halfedge * > > &, const std::vector< std::pair< float, Halfedge * > > &)
Dump out the strong edges in Tecplot format into file <name>s1.plt.
std::vector< float > _ea_0
void allocate_subnodes(int num_sn)
Allocate memory space for the arrays for storing the subdivision.
std::vector< Face_ID > _subface_counterparts
Ids of counterparts of faces.
int get_border_index(const Halfedge *h) const
const float & get_angle_defect(const Vertex *v) const