--names for filtering included or excluded entities by name, e.g. --include --names "Wall Compound*"

This commit is contained in:
Stinkfist0
2016-03-10 21:15:50 +02:00
parent b9c5b0e6c8
commit e9f551ea71
3 changed files with 18 additions and 16 deletions
+15 -12
View File
@@ -87,12 +87,15 @@ void print_options(
const boost::optional<boost::program_options::options_description>& geom_options, const boost::optional<boost::program_options::options_description>& geom_options,
const boost::optional<boost::program_options::options_description>& serialization_options) const boost::optional<boost::program_options::options_description>& serialization_options)
{ {
if (generic_options) if (generic_options) {
std::cerr << "\nCommand line options\n" << generic_options; std::cerr << "\nCommand line options\n" << generic_options;
if (geom_options) }
if (geom_options) {
std::cerr << "\nGeometry options\n" << geom_options; std::cerr << "\nGeometry options\n" << geom_options;
if (serialization_options) }
if (serialization_options) {
std::cerr << "\nSerialization options\n" << serialization_options; std::cerr << "\nSerialization options\n" << serialization_options;
}
std::cerr << std::endl; std::cerr << std::endl;
} }
@@ -120,7 +123,7 @@ int main(int argc, char** argv) {
("input-file", boost::program_options::value<std::string>(), "input IFC file") ("input-file", boost::program_options::value<std::string>(), "input IFC file")
("output-file", boost::program_options::value<std::string>(), "output geometry file"); ("output-file", boost::program_options::value<std::string>(), "output geometry file");
std::vector<std::string> entity_vector/*, names*/; std::vector<std::string> entity_vector, names;
double deflection_tolerance; double deflection_tolerance;
boost::program_options::options_description geom_options; boost::program_options::options_description geom_options;
geom_options.add_options() geom_options.add_options()
@@ -171,12 +174,13 @@ int main(int argc, char** argv) {
("entities", boost::program_options::value< std::vector<std::string> >(&entity_vector)->multitoken(), ("entities", boost::program_options::value< std::vector<std::string> >(&entity_vector)->multitoken(),
"A list of entities that should be included in or excluded from the " "A list of entities that should be included in or excluded from the "
"geometrical output, depending on whether --exclude or --include is specified. " "geometrical output, depending on whether --exclude or --include is specified. "
" Defaults to IfcOpeningElement and IfcSpace to be excluded. " "Defaults to IfcOpeningElement and IfcSpace to be excluded. SVG output defaults "
"to IfcSpace to be included."
"The names are handled case-insensitively. Cannot be placed right before input file argument.") "The names are handled case-insensitively. Cannot be placed right before input file argument.")
/*("names", boost::program_options::value< std::vector<std::string> >(&names)->multitoken(), ("names", boost::program_options::value< std::vector<std::string> >(&names)->multitoken(),
"A list of names or wildcard patterns that should be included in or excluded from the " "A list of names or wildcard patterns that should be included in or excluded from the "
"geometrical output, depending on whether --exclude or --include is specified. " "geometrical output, depending on whether --exclude or --include is specified. "
"The names are handled case-sensitively. Cannot be placed right before input file argument.")*/ "The names are handled case-sensitively. Cannot be placed right before input file argument.")
("no-normals", ("no-normals",
"Disables computation of normals. Saves time and file size and is useful " "Disables computation of normals. Saves time and file size and is useful "
"in instances where you're going to recompute normals for the exported " "in instances where you're going to recompute normals for the exported "
@@ -297,10 +301,9 @@ int main(int argc, char** argv) {
std::string output_extension = output_filename.substr(output_filename.size()-4); std::string output_extension = output_filename.substr(output_filename.size()-4);
boost::to_lower(output_extension); boost::to_lower(output_extension);
// If no entities are specified these are the defaults to skip from output // If no entity or names filters are specified these are the defaults to skip from output
if (entities.empty()) { if (entities.empty() && names.empty()) {
entities.insert("IfcSpace"); entities.insert("IfcSpace");
/// @todo Document in --help that SVG uses "--include --entities IfcSpace" by default.
if (output_extension == ".svg") { if (output_extension == ".svg") {
include_entities = true; include_entities = true;
} else { } else {
@@ -405,10 +408,10 @@ int main(int argc, char** argv) {
try { try {
if (include_entities) { if (include_entities) {
context_iterator.includeEntities(entities); context_iterator.includeEntities(entities);
//context_iterator.include_entity_names(names); context_iterator.include_entity_names(names);
} else { } else {
context_iterator.excludeEntities(entities); context_iterator.excludeEntities(entities);
//context_iterator.exclude_entity_names(names); context_iterator.exclude_entity_names(names);
} }
} catch (const IfcParse::IfcException& e) { } catch (const IfcParse::IfcException& e) {
std::cout << "[Error] " << e.what() << std::endl; std::cout << "[Error] " << e.what() << std::endl;
+3 -3
View File
@@ -276,7 +276,7 @@ namespace IfcGeom {
include_entities_in_processing = false; include_entities_in_processing = false;
} }
// Arbitrary names or wildcard expressions are handled case-sensitively. /// @note Arbitrary names or wildcard expressions are handled case-sensitively.
void include_entity_names(const std::vector<std::string>& names) void include_entity_names(const std::vector<std::string>& names)
{ {
names_to_include_or_exclude.clear(); names_to_include_or_exclude.clear();
@@ -285,7 +285,7 @@ namespace IfcGeom {
include_entities_in_processing = true; include_entities_in_processing = true;
} }
// Arbitrary names or wildcard expressions are handled case-sensitively. /// @note Arbitrary names or wildcard expressions are handled case-sensitively.
void exclude_entity_names(const std::vector<std::string>& names) void exclude_entity_names(const std::vector<std::string>& names)
{ {
names_to_include_or_exclude.clear(); names_to_include_or_exclude.clear();
@@ -346,7 +346,7 @@ namespace IfcGeom {
} }
foreach(const boost::regex& r, names_to_include_or_exclude) { foreach(const boost::regex& r, names_to_include_or_exclude) {
if (boost::regex_match((*it)->Name(), r)) { if (boost::regex_match((*jt)->Name(), r)) {
found = true; found = true;
break; break;
} }
-1
View File
@@ -176,7 +176,6 @@ namespace IfcGeom {
std::vector<std::pair<int,int> > edges_temp; std::vector<std::pair<int,int> > edges_temp;
const TColgp_Array1OfPnt& nodes = tri->Nodes(); const TColgp_Array1OfPnt& nodes = tri->Nodes();
/// @todo can these UVs be used for texture coordinates as is?
const TColgp_Array1OfPnt2d& uvs = tri->UVNodes(); const TColgp_Array1OfPnt2d& uvs = tri->UVNodes();
std::vector<gp_XYZ> coords; std::vector<gp_XYZ> coords;
BRepGProp_Face prop(face); BRepGProp_Face prop(face);