Revision: 65252
http://sourceforge.net/p/brlcad/code/65252
Author: ejno
Date: 2015-06-10 18:56:03 +0000 (Wed, 10 Jun 2015)
Log Message:
-----------
fixes to WALL detection
Modified Paths:
--------------
brlcad/trunk/src/libgcv/conv/fastgen4/fastgen4_write.cpp
Modified: brlcad/trunk/src/libgcv/conv/fastgen4/fastgen4_write.cpp
===================================================================
--- brlcad/trunk/src/libgcv/conv/fastgen4/fastgen4_write.cpp 2015-06-10
18:52:54 UTC (rev 65251)
+++ brlcad/trunk/src/libgcv/conv/fastgen4/fastgen4_write.cpp 2015-06-10
18:56:03 UTC (rev 65252)
@@ -1523,68 +1523,49 @@
}
-HIDDEN std::vector<const directory *>
-find_wall_sections(const db_i &db, const std::set<const directory *> &unioned,
- const std::set<const directory *> &subtracted)
+HIDDEN void
+find_walls(const db_i &db, const directory ®ion_dir)
{
RT_CK_DBI(&db);
+ RT_CK_DIR(®ion_dir);
- std::vector<const directory *> results;
-
- directory **region_dirs;
- const std::size_t num_regions = db_ls(&db, DB_LS_REGION, NULL,
®ion_dirs);
- AutoFreePtr<directory *> autofree_region_dirst(region_dirs);
-
- for (std::size_t i = 0; i < num_regions; ++i) {
- DBInternal region_db_internal(db, *region_dirs[i]);
+ std::set<const directory *> unioned, subtracted;
+ {
+ DBInternal region_db_internal(db, region_dir);
const rt_comb_internal ®ion = *static_cast<rt_comb_internal *>
(region_db_internal.get().idb_ptr);
RT_CK_COMB(®ion);
- std::set<const directory *> leaves;
- get_unioned(db, region.tree, leaves);
- get_intersected(db, region.tree, leaves);
+ get_unioned(db, region.tree, unioned);
+ get_intersected(db, region.tree, unioned);
+ get_subtracted(db, region.tree, subtracted);
- if (leaves.empty()
- || !std::includes(subtracted.begin(), subtracted.end(),
leaves.begin(),
- leaves.end()))
- continue;
-
- leaves.clear();
- get_subtracted(db, region.tree, leaves);
-
- if (leaves.empty()
- || !std::includes(leaves.begin(), leaves.end(), unioned.begin(),
unioned.end()))
- continue;
-
- results.push_back(region_dirs[i]);
+ if (unioned.empty() || subtracted.empty())
+ return;
}
- return results;
-}
+ std::vector<const directory *> other_regions;
+ {
+ directory **region_dirs;
+ const std::size_t num_regions = db_ls(&db, DB_LS_REGION, NULL,
®ion_dirs);
+ AutoFreePtr<directory *> autofree_region_dirst(region_dirs);
+ for (std::size_t i = 0; i < num_regions; ++i) {
+ DBInternal region_db_internal(db, *region_dirs[i]);
+ const rt_comb_internal ®ion = *static_cast<rt_comb_internal *>
+ (region_db_internal.get().idb_ptr);
+ RT_CK_COMB(®ion);
-HIDDEN void
-find_walls(const db_i &db, const directory ®ion_dir)
-{
- RT_CK_DBI(&db);
- RT_CK_DIR(®ion_dir);
+ std::set<const directory *> leaves;
+ get_unioned(db, region.tree, leaves);
+ get_intersected(db, region.tree, leaves);
- DBInternal region_db_internal(db, region_dir);
- const rt_comb_internal ®ion = *static_cast<rt_comb_internal *>
- (region_db_internal.get().idb_ptr);
- RT_CK_COMB(®ion);
-
- std::set<const directory *> unioned, subtracted;
- get_unioned(db, region.tree, unioned);
- get_intersected(db, region.tree, unioned);
- get_subtracted(db, region.tree, subtracted);
-
- if (unioned.empty() || subtracted.empty())
- return;
-
- std::vector<const directory *> sections = find_wall_sections(db, unioned,
- subtracted);
+ if (!leaves.empty()
+ && std::includes(subtracted.begin(), subtracted.end(),
leaves.begin(),
+ leaves.end()))
+ other_regions.push_back(region_dirs[i]);
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits