int main(int argc, char *argv[]) { // See note above about -c option: bool do_components = false; if (argc == 2 && string(argv[1]) == string("-c")) { do_components = true; } else if (argc != 1) { err_msg("Usage: %s [ -c ] < input.sm > output.sm", argv[0]); return 1; } BMESHptr mesh = BMESH::read_jot_stream(cin); if (!mesh || mesh->empty()) return 1; // didn't work if (do_components) { // Reverse separate components as needed: bool changed = false; vector<Bface_list> components = mesh->get_components(); for (auto & component : components) { if (component.volume() < 0) { err_msg("reversing component: %d faces", component.size()); reverse_faces(component); changed = true; } } if (changed) { mesh->changed(); } else { err_msg("%s: nothing changed", argv[0]); } } else { // Do the whole thing mesh->reverse(); } mesh->write_stream(cout); return 0; }