34 #ifndef MESH_OVERLAY_H
35 #define MESH_OVERLAY_H
62 typedef std::pair< const Halfedge*, const Halfedge*>
Parent_pair;
64 typedef std::vector< const INode*>
Subface;
73 Overlay(
const COM::Window *w1,
const COM::Window *w2,
const char *pre);
85 {
return (
B->
base() == w) ?
B :
G; }
87 {
return (
B->
base() == w) ?
B :
G; }
98 INode_const_list::const_iterator last_checked,
103 const Halfedge *h,
int color)
const;
169 const int color)
const;
173 const int color)
const;
227 do { ++
i; }
while ( (h=h->
next())!= e);
236 int pane_id,
int &lid,
241 std::map<
int, std::pair<int, int> > &cnts);
243 std::map<
int, std::pair<int, int> > &cnts);
258 std::queue<Halfedge*> &
q,
259 std::queue<Halfedge*> &q_rdg,
260 std::queue<Halfedge*> &q_crn);
263 std::queue<Halfedge*> &q_rdg,
264 std::queue<Halfedge*> &q_crn);
271 std::pair<const INode *, const Halfedge*>
274 std::pair<const INode *, const Halfedge*>
277 bool logical_xor (
bool a,
bool b)
const {
return a&&!b || !a&&b; }
297 #endif // MESH_OVERLAY_H
RFC_Window_overlay * get_green_window()
std::vector< Node_ID > _subnode_ids_b
std::list< const INode * > INode_const_list
const RFC_Window_overlay * get_green_window() const
const INode * get_next_inode(const INode *v1, const INode *v2, int) const
std::pair< const Halfedge *, const Halfedge * > Parent_pair
void set_subnode_id(INode *i, int color, int pane_id, int l_id)
RFC_Window_overlay * get_rfc_window(const COM::Window *w)
RFC_Window_overlay::Feature_0 Feature_0
void write_overlay_off(std::ostream &, const COM::Window *)
void project_adjacent_green_vertices(const INode *, Halfedge *)
Helper for associate_green_vertices().
Overlay(const COM::Window *w1, const COM::Window *w2, const char *pre)
std::map< int, std::map< int, int > > _subnode_imap_g
void write_inodes_tec(std::ostream &os, const char *color)
INode * project_next_vertex(Halfedge *, Halfedge *)
RFC_Window_overlay::Feature_list_1 Feature_list_1
This class encapsulate a halfedge over a window manifold.
Halfedge * get_parent_face(const Subface &sf, int color)
SURF::Generic_element_2 Generic_element
Host_face get_edge_parent(const INode &i0, const INode &i1, const int color) const
RFC_Window_overlay::Halfedge Halfedge
void insert_node_in_green_edge(INode *v, int tag)
std::vector< char > _subnode_copies_g
void number_a_subnode(INode *i, int color, std::map< int, std::pair< int, int > > &cnts)
A window is a collection of panes.
*********************************************************************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
const RFC_Window_overlay * get_rfc_window(const COM::Window *w) const
RFC_Window_overlay::Vertex Vertex
void get_inodes_of_face(const Facet *f, INode_const_list &nodes)
bool intersect_link(const INode *x, const Halfedge *b, const Halfedge *g0, const Parent_type t0, Halfedge *g1, const Parent_type t1, Real start, Real *cb, Real *cg, Halfedge **g, Parent_type *t, int tryindex=0)
#define RFC_END_NAME_SPACE
std::list< Feature_1 > Feature_list_1
void insert_edge_into_queue(Halfedge *h, INode *v, std::queue< Halfedge * > &q, std::queue< Halfedge * > &q_rdg, std::queue< Halfedge * > &q_crn)
void convert_nat_coordinates(const INode *i, Halfedge *h, int color, int pane_id, int &lid, RFC_Pane_overlay::Edge_ID &eid, Point_2 &nc) const
void get_green_parent(const Vertex *v, const Halfedge *b, Halfedge **o, Parent_type *t, Point_2 *nc)
std::list< Feature_0 > Feature_list_0
void export_windows(RFC_Window_base *, RFC_Window_base *)
Export the subdivisions to the two given windows.
A window is a collection of panes.
void write_inodes_vec(std::ostream &os)
const COM::Window * base() const
Get a reference to the base COM::Window object.
void intersect_blue_with_green()
std::vector< Node_ID > _subnode_ids_g
RFC_Window_overlay::Feature_1 Feature_1
const RFC_Window_overlay * get_blue_window() const
void sort_on_green_edges()
#define RFC_BEGIN_NAME_SPACE
int get_subnode_id(const INode *i, int color, int pane_id) const
std::map< int, std::map< int, int > > _subnode_imap_b
RFC_Window_overlay * get_blue_window()
std::vector< const INode * > Subface
int count_edges(const Halfedge *e) const
bool verify_inode(const INode *i)
void write_overlay_tec(std::ostream &, const COM::Window *)
Real sq_length(const Halfedge &h) const
RFC_Window_overlay::Facet Facet
bool intersect_link_helper2(Real *cb, Real *cg, Halfedge **g, Parent_type *t)
bool logical_xor(bool a, bool b) const
HDS_accessor< Tag_true > acc
RFC_Window_overlay::Feature_list_0 Feature_list_0
Halfedge_overlay * next()
bool subdivide(const INode_const_list &face, INode_const_list::const_iterator last_checked, Subface_list &sub_faces, int color, int depth=0) const
std::list< Subface > Subface_list
std::vector< char > _subnode_copies_b
Point_2 get_nat_coor(const INode &i, const Generic_element &e, const Halfedge *h, int color) const
Parent_pair get_edge_pair_parents(const INode &i0, const INode &i1, const int color) const
bool intersect_link_helper(const Halfedge *b, Halfedge *g2, Real start, Real *cb, Real *cg, Halfedge **g, Parent_type *t, bool *found, int snapcode, const Vertex *anchor, bool panic)
void insert_node_in_blue_edge(INode &x, Halfedge *b)
void set_tolerance(double tol)
std::pair< const INode *, const Halfedge * > get_next_inode_ccw(const INode *v0, const INode *v1, int color) const
int get_subnode_copies(const INode *i, int color) const
void associate_green_vertices()
std::list< INode * > inodes
void count_subnodes(INode *i, int color, std::map< int, std::pair< int, int > > &cnts)
std::pair< const INode *, const Halfedge * > get_next_inode_cw(const INode *v0, const INode *v1, int color) const
bool is_queue_empty(std::queue< Halfedge * > &q, std::queue< Halfedge * > &q_rdg, std::queue< Halfedge * > &q_crn)
bool contains(const Halfedge *e1, const Parent_type t1, const Halfedge *e2, const Parent_type t2) const