diff --git a/Fltk/fieldWindow.cpp b/Fltk/fieldWindow.cpp index 334797f579c6baa357da1f093ffd8be9d61214bc..25196d77093ff85568b0495507a683356803b01e 100644 --- a/Fltk/fieldWindow.cpp +++ b/Fltk/fieldWindow.cpp @@ -286,7 +286,7 @@ void fieldWindow::saveFieldOptions() } break; } if((*input)->changed()) { - scriptAddFieldOption(f->id, it->first, sstream.str(), + scriptAddFieldOption(f->id, it->first, sstream.str(), option->getType(), GModel::current()->getFileName()); (*input)->clear_changed(); } diff --git a/Geo/scriptStringInterface.cpp b/Geo/scriptStringInterface.cpp index 0de6244ebdf987c9226c34920523892e132b8f9a..aa1b4319ea666b20bfa4cfe26d77d23f16ffe204 100644 --- a/Geo/scriptStringInterface.cpp +++ b/Geo/scriptStringInterface.cpp @@ -5,6 +5,7 @@ #include <string.h> #include <sstream> +#include "Field.h" #include "GmshConfig.h" #include "GmshMessage.h" #include "GModel.h" @@ -451,7 +452,7 @@ void scriptAddPoint(const std::string &fileName, const std::string &x, } void scriptAddFieldOption(int field_id, const std::string &option_name, - const std::string &option_value, + const std::string &option_value, int option_type, const std::string &fileName) { for(auto &lang : CTX::instance()->scriptLang) { @@ -461,7 +462,30 @@ void scriptAddFieldOption(int field_id, const std::string &option_name, << option_value << ";"; } else { - // TODO + std::ostringstream args; + switch(option_type) { + case FIELD_OPTION_DOUBLE: + case FIELD_OPTION_INT: + case FIELD_OPTION_BOOL: + args << field_id << ", \"" << option_name << "\", " << option_value; + sstream << api("gmsh/model/mesh/field/setNumber", args.str(), lang); + break; + case FIELD_OPTION_STRING: + case FIELD_OPTION_PATH: + args << field_id << ", \"" << option_name << "\", " << option_value; + sstream << api("gmsh/model/mesh/field/setString", args.str(), lang); + break; + case FIELD_OPTION_LIST: + case FIELD_OPTION_LIST_DOUBLE: + std::string list_val = option_value; + if(lang == "py" || lang == "jl") { + ReplaceSubStringInPlace("{", "[", list_val); + ReplaceSubStringInPlace("}", "]", list_val); + } + args << field_id << ", \"" << option_name << "\", " << list_val; + sstream << api("gmsh/model/mesh/field/setNumbers", args.str(), lang); + break; + } } scriptAddCommand(sstream.str(), fileName, lang); } @@ -476,7 +500,9 @@ void scriptAddField(int field_id, const std::string &type_name, sstream << "Field[" << field_id << "] = " << type_name << ";"; } else { - // TODO + std::ostringstream args; + args << "\"" << type_name << "\"" << ", " << field_id; + sstream << api("gmsh/model/mesh/field/add", args.str(), lang); } scriptAddCommand(sstream.str(), fileName, lang); } @@ -488,7 +514,8 @@ void scriptDeleteField(int field_id, const std::string &fileName) std::ostringstream sstream; if(lang == "geo") { sstream << "Delete Field [" << field_id << "];"; } else { - // TODO + sstream << api("gmsh/model/mesh/field/remove", + std::to_string(field_id), lang); } scriptAddCommand(sstream.str(), fileName, lang); } @@ -500,7 +527,8 @@ void scriptSetBackgroundField(int field_id, const std::string &fileName) std::ostringstream sstream; if(lang == "geo") { sstream << "Background Field = " << field_id << ";"; } else { - // TODO + sstream << api("gmsh/model/mesh/field/setAsBackgroundMesh", + std::to_string(field_id), lang); } scriptAddCommand(sstream.str(), fileName, lang); } diff --git a/Geo/scriptStringInterface.h b/Geo/scriptStringInterface.h index 3dee516b9cba142b88642718a74da71a22ed8675..93b8a7ff743976459ab59a51c85fb5627e8519d3 100644 --- a/Geo/scriptStringInterface.h +++ b/Geo/scriptStringInterface.h @@ -40,7 +40,7 @@ void scriptAddCircleArc(int p1, int p2, int p3, const std::string &fileName); void scriptAddEllipseArc(int p1, int p2, int p3, int p4, const std::string &fileName); void scriptAddFieldOption(int field_id, const std::string &option_name, - const std::string &option_value, + const std::string &option_value, int option_type, const std::string &fileName); void scriptAddField(int field_id, const std::string &type_name, const std::string &fileName);