diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 3baaa64ad6f03029cb08790ed753e544a2a5db8d..c2ce39ace41d347d456fdefabf071f83c675825f 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -1245,7 +1245,7 @@ static void geometry_elementary_set_factory_cb(Fl_Widget *w, void *data) { if(!data) return; std::string str((const char*)data); - add_infile("SetFactory(\"" + str + "\");", GModel::current()->getFileName()); + set_factory(str, GModel::current()->getFileName()); if(FlGui::available()) Msg::StatusBar(false, "Setting %s factory", str.c_str()); } diff --git a/Fltk/visibilityWindow.cpp b/Fltk/visibilityWindow.cpp index 09d0c611638776d297d60d94cd808f21bd41a351..2779201c737219dbe0b7d6cf0fb16b5c2236d3dc 100644 --- a/Fltk/visibilityWindow.cpp +++ b/Fltk/visibilityWindow.cpp @@ -823,41 +823,30 @@ static void visibility_save_cb(Fl_Widget *w, void *data) for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); it++) (*it)->getVisibility() ? state[3][1].push_back((*it)->tag()) : state[3][0].push_back((*it)->tag()); - char tmp[256]; - const char *labels[4] = {"Point", "Curve", "Surface", "Volume"}; - std::string str; - int mode; - int on = 0, off = 0; + std::vector<std::pair<int, int> > entities; + int mode = 0, on = 0, off = 0; for(int i = 0; i < 4; i++) { on += state[i][1].size(); off += state[i][0].size(); } if(on > off) { - add_infile("Show \"*\";", GModel::current()->getFileName()); + add_visibility_all(1, GModel::current()->getFileName()); if(!off) return; - str += "Hide {\n"; mode = 0; } else { - add_infile("Hide \"*\";", GModel::current()->getFileName()); + add_visibility_all(0, GModel::current()->getFileName()); if(!on) return; - str += "Show {\n"; mode = 1; } for(int i = 0; i < 4; i++) { if(state[i][mode].size()) { - str += labels[i]; - str += "{"; for(std::size_t j = 0; j < state[i][mode].size(); j++) { - if(j) str += ","; - sprintf(tmp, "%d", state[i][mode][j]); - str += tmp; + entities.push_back(std::pair<int, int>(i, state[i][mode][j])); } - str += "};\n"; } } - str += "}\n"; - add_infile(str, GModel::current()->getFileName()); + add_visibility(mode, entities, GModel::current()->getFileName()); Msg::StatusBar(true, "Done appending visibility info"); } diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp index 73968135fa8061a60c362b41dd4a3cc311e27477..04d3f570c94f532fa9c55686e1862f33890fa5ce 100644 --- a/Geo/GeoStringInterface.cpp +++ b/Geo/GeoStringInterface.cpp @@ -23,7 +23,7 @@ #include "onelab.h" #endif -void add_infile(const std::string &text, const std::string &fileNameOrEmpty) +static void add_infile(const std::string &text, const std::string &fileNameOrEmpty) { const std::string &fileName = fileNameOrEmpty; if(fileName.empty()) { @@ -178,6 +178,13 @@ static void check_occ(std::ostringstream &sstream) #endif } +void set_factory(const std::string &factory, const std::string &fileName) +{ + std::ostringstream sstream; + sstream << "SetFactory(\"" << factory << "\");"; + add_infile(sstream.str(), fileName); +} + void add_charlength(const std::string &fileName, const std::vector<int> &l, const std::string &lc) { @@ -722,3 +729,22 @@ void delete_entities(const std::string &fileName, sstream << "Delete {\n " << dimTags2String(l) << "\n}"; add_infile(sstream.str(), fileName); } + +void add_visibility_all(int mode, const std::string &fileName) +{ + if(mode) + add_infile("Show \"*\";", fileName); + else + add_infile("Hide \"*\";", fileName); +} + +void add_visibility(int mode, const std::vector<std::pair<int, int> > &l, + const std::string &fileName) +{ + std::ostringstream sstream; + if(mode) + sstream << "Show {\n " << dimTags2String(l) << "\n}"; + else + sstream << "Hide {\n " << dimTags2String(l) << "\n}"; + add_infile(sstream.str(), fileName); +} diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h index adcf360c501100e6d9c607e28f17681d04a797fc..877ebe68e7df45ce9c9e785fd576069dcc29918a 100644 --- a/Geo/GeoStringInterface.h +++ b/Geo/GeoStringInterface.h @@ -10,7 +10,7 @@ #include <vector> #include "ListUtils.h" -void add_infile(const std::string &text, const std::string &fileName); +void set_factory(const std::string &factory, const std::string &fileName); void add_charlength(const std::string &fileName, const std::vector<int> &l, const std::string &lc); void add_recosurf(const std::string &fileName, const std::vector<int> &l); @@ -131,5 +131,8 @@ void coherence(const std::string &fileName); void delete_entities(const std::string &fileName, const std::vector<std::pair<int, int> > &l, bool recursive); +void add_visibility_all(int mode, const std::string &fileName); +void add_visibility(int mode, const std::vector<std::pair<int, int> > &l, + const std::string &fileName); #endif