From 3f7f3b7ed4c2b2c8273c1cb1938f81081ff9ad7b Mon Sep 17 00:00:00 2001 From: Max Orok <maxwellorok@gmail.com> Date: Fri, 16 Jul 2021 17:54:01 -0400 Subject: [PATCH] Implement non-geo script output for mesh fields --- Fltk/fieldWindow.cpp | 2 +- Geo/scriptStringInterface.cpp | 38 ++++++++++++++++++++++++++++++----- Geo/scriptStringInterface.h | 2 +- 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Fltk/fieldWindow.cpp b/Fltk/fieldWindow.cpp index 334797f579..25196d7709 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 0de6244ebd..aa1b4319ea 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 3dee516b9c..93b8a7ff74 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); -- GitLab