Revision: 53831
http://brlcad.svn.sourceforge.net/brlcad/?rev=53831&view=rev
Author: starseeker
Date: 2012-11-27 14:49:17 +0000 (Tue, 27 Nov 2012)
Log Message:
-----------
Not doing the right thing with edges yet, but at least recognize them.
Modified Paths:
--------------
brlcad/trunk/src/librt/test_subdivision.cpp
Modified: brlcad/trunk/src/librt/test_subdivision.cpp
===================================================================
--- brlcad/trunk/src/librt/test_subdivision.cpp 2012-11-27 14:19:03 UTC (rev
53830)
+++ brlcad/trunk/src/librt/test_subdivision.cpp 2012-11-27 14:49:17 UTC (rev
53831)
@@ -143,6 +143,18 @@
}
}
+// Find faces with outer edge segments
+void get_outer_faces(struct Mesh_Info *mesh, std::set<size_t> *outer_faces) {
+ std::map<std::pair<size_t, size_t>, std::set<size_t> >::iterator e_it;
+ for (e_it = mesh->edges_to_faces.begin();
e_it!=mesh->edges_to_faces.end(); e_it++) {
+ if ((*e_it).second.size() == 1) {
+ size_t face = *(*e_it).second.begin();
+ outer_faces->insert(face);
+ }
+ }
+}
+
+// Core subdivision iteration loop
struct Mesh_Info * iterate(struct rt_bot_internal *bot, struct Mesh_Info
*prev_mesh) {
std::map<size_t, std::vector<size_t> >::iterator f_it;
std::vector<size_t>::iterator l_it;
@@ -174,25 +186,30 @@
std::set<std::pair<size_t, size_t> > old_edges;
std::set<std::pair<size_t, size_t> >::iterator e_it;
get_all_edges(starting_mesh, &old_edges);
+ std::set<size_t > outer_faces;
+ get_outer_faces(starting_mesh, &outer_faces);
+ std::cout << "outer face count: " << outer_faces.size() << "\n";
size_t face_cnt = 0;
for(f_it = starting_mesh->face_pts.begin(); f_it !=
starting_mesh->face_pts.end(); f_it++) {
- std::set<std::pair<size_t, size_t> > face_old_edges;
- size_t q0 = starting_mesh->index_in_next[(*f_it).first];
- l_it = (*f_it).second.begin();
- face_old_edges.insert(std::make_pair((*l_it), (*(l_it+1))));
- face_old_edges.insert(std::make_pair((*(l_it+1)), (*(l_it+2))));
- face_old_edges.insert(std::make_pair((*(l_it+2)), (*l_it)));
- for(e_it = face_old_edges.begin(); e_it != face_old_edges.end();
e_it++) {
- std::pair<size_t, size_t> edge = mk_edge((*e_it).first,
(*e_it).second);
- if (old_edges.find((edge)) != old_edges.end()) {
- std::set<size_t> curr_faces =
starting_mesh->edges_to_faces[edge];
- curr_faces.erase((*f_it).first);
- size_t q1 = starting_mesh->index_in_next[*curr_faces.begin()];
- mesh_add_face((*e_it).first, q1, q0, face_cnt, mesh);
- face_cnt++;
- mesh_add_face((*e_it).second, q0, q1, face_cnt, mesh);
- face_cnt++;
- old_edges.erase(edge);
+ if (outer_faces.find((*f_it).first) == outer_faces.end()) {
+ std::set<std::pair<size_t, size_t> > face_old_edges;
+ size_t q0 = starting_mesh->index_in_next[(*f_it).first];
+ l_it = (*f_it).second.begin();
+ face_old_edges.insert(std::make_pair((*l_it), (*(l_it+1))));
+ face_old_edges.insert(std::make_pair((*(l_it+1)), (*(l_it+2))));
+ face_old_edges.insert(std::make_pair((*(l_it+2)), (*l_it)));
+ for(e_it = face_old_edges.begin(); e_it != face_old_edges.end();
e_it++) {
+ std::pair<size_t, size_t> edge = mk_edge((*e_it).first,
(*e_it).second);
+ if (old_edges.find((edge)) != old_edges.end()) {
+ std::set<size_t> curr_faces =
starting_mesh->edges_to_faces[edge];
+ curr_faces.erase((*f_it).first);
+ size_t q1 =
starting_mesh->index_in_next[*curr_faces.begin()];
+ mesh_add_face((*e_it).first, q1, q0, face_cnt, mesh);
+ face_cnt++;
+ mesh_add_face((*e_it).second, q0, q1, face_cnt, mesh);
+ face_cnt++;
+ old_edges.erase(edge);
+ }
}
}
}
@@ -243,7 +260,7 @@
}
RT_BOT_CK_MAGIC(bot_ip);
- for (size_t i_cnt = 1; i_cnt < 7; i_cnt++) {
+ for (size_t i_cnt = 1; i_cnt < 5; i_cnt++) {
mesh = iterate(bot_ip, prev_mesh);
prev_mesh = mesh;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits