Vis 2 Demo  1.0
Technical illustration type real-time rendering of geometry
 All Classes Namespaces Files Functions Variables Typedefs Macros
NeighborhoodRecord.cpp
Go to the documentation of this file.
1 #include "NeighborhoodRecord.h"
2 
3 using namespace vis2;
4 
5 void NeighborhoodRecord::addMember( const glm::vec3 & _new_member)
6 {
7 
8  // check if member already exists...
9  bool member_alerady_exists = false;
10  for( unsigned int i = 0; i < members.size(); i++ )
11  {
12  glm::vec3 tmp = members.at(i);
13  if (tmp.x == _new_member.x && tmp.y == _new_member.y && tmp.z == _new_member.z)
14  {
15  member_alerady_exists = true;
16  // std::cout << "Member already exists." << std::endl;
17  break;
18  }
19  }
20 
21  // if not, add it
22  if (!member_alerady_exists)
23  {
24  members.push_back(_new_member);
25  colorContainer cC;
26  neighb_lists.push_back(cC);
27  }
28 }
29 
30 void NeighborhoodRecord::addNeighbor( const glm::vec3 & _exiting_member, const glm::vec3 & _new_neighbor)
31 {
32  // add "_new_neighbor" to the neighbor list of "_exiting_member"
33  for( unsigned int i = 0; i < members.size(); i++ )
34  {
35  glm::vec3 tmp = members.at(i);
36  if (tmp.x == _exiting_member.x && tmp.y == _exiting_member.y && tmp.z == _exiting_member.z)
37  {
38  addNeighbor2ExistingMember(i, _new_neighbor);
39  break;
40  }
41  }
42 
43  // add "_exiting_member" to the neighbor list of "_new_neighbor"
44  for( unsigned int i = 0; i < members.size(); i++ )
45  {
46  glm::vec3 tmp = members.at(i);
47  if (tmp.x == _new_neighbor.x && tmp.y == _new_neighbor.y && tmp.z == _new_neighbor.z)
48  {
49  addNeighbor2ExistingMember(i, _exiting_member);
50  break;
51  }
52  }
53 }
54 
55 bool NeighborhoodRecord::isNeighborOf(const glm::vec3 & _id_1, const glm::vec3 & _id_2) const
56 {
57  // check if the first member already exists...
58  bool are_neighbors = false;
59  for( unsigned int i = 0; i < members.size(); i++ )
60  {
61  glm::vec3 tmp = members.at(i);
62  if (tmp.x == _id_1.x && tmp.y == _id_1.y && tmp.z == _id_1.z)
63  {
64  are_neighbors = isNeighbor2ExistingMember(i, _id_2);
65  break;
66  }
67  }
68 
69  return are_neighbors;
70 }
71 
73 {
74  for( unsigned int i = 0; i < members.size(); i++ )
75  {
76  glm::vec3 tmp = members.at(i);
77  std::cout << "member [" << tmp.x << " " << tmp.y << " " << tmp.z << "]:" << std::endl;
78  colorContainer list = neighb_lists.at(i);
79  for (unsigned int j = 0; j < list.size(); j++)
80  {
81  glm::vec3 nghb = list.at(j);
82  std::cout << "\t neighbor (" << nghb.x << " " << nghb.y << " " << nghb.z << ")" << std::endl;
83  }
84 
85  }
86 }
87 
88 
89 void NeighborhoodRecord::addNeighbor2ExistingMember(unsigned int _slot, const glm::vec3 & _new_neighbor)
90 {
91  // check if neighbor is already in the list...
92  bool neighbor_alerady_listed = isNeighbor2ExistingMember(_slot, _new_neighbor);
93 
94  // if not, add it
95  if (!neighbor_alerady_listed)
96  neighb_lists.at(_slot).push_back(_new_neighbor);
97 }
98 
99 
100 bool NeighborhoodRecord::isNeighbor2ExistingMember(unsigned int _slot, const glm::vec3 & _id) const
101 {
102 
103  bool is_neighbor = false;
104  colorContainer list = neighb_lists.at(_slot);
105 
106  for( unsigned int i = 0; i < list.size(); i++ )
107  {
108  glm::vec3 tmp = list.at(i);
109  if (tmp.x == _id.x && tmp.y == _id.y && tmp.z == _id.z)
110  {
111  is_neighbor = true;
112  break;
113  }
114  }
115 
116  return is_neighbor;
117 }