31{
32 TCLAP::CmdLine cmd(
33 "Sets the property value of a mesh element to a given new value iff at "
34 "least one node of the element is within a polygonal region that is "
35 "given by a polygon. The documentation is available at "
36 "https://docs.opengeosys.org/docs/tools/model-preparation/"
37 "set-properties-in-polygonal-region.\n\n"
38 "OpenGeoSys-6 software, version " +
40 ".\n"
41 "Copyright (c) 2012-2025, OpenGeoSys Community "
42 "(http://www.opengeosys.org)",
44 TCLAP::ValueArg<std::string> mesh_out(
45 "o", "mesh-output-file",
46 "the name of the file the mesh will be written to, format depends on "
47 "the given file name extension",
48 true, "", "file name");
49 cmd.add(mesh_out);
50 TCLAP::ValueArg<std::string> polygon_name_arg(
51 "p", "polygon-name", "name of polygon in the geometry", true, "",
52 "string");
53 cmd.add(polygon_name_arg);
54 TCLAP::ValueArg<std::string> geometry_fname(
55 "g", "geometry",
56 "the name of the file containing the input geometry (gli or gml "
57 "format)",
58 true, "", "file name");
59 cmd.add(geometry_fname);
60 TCLAP::SwitchArg any_of_arg(
61 "", "any_of",
62 "all nodes of an element has to be inside the polygon (default "
63 "behaviour without switch) or any node of an element has to be inside "
64 "(switch is given)",
65 false);
66 cmd.add(any_of_arg);
67 TCLAP::ValueArg<char> char_property_arg(
68 "c", "char-property-value", "new property value (data type char)",
69 false, 'A', "character");
70 cmd.add(char_property_arg);
71 TCLAP::ValueArg<int> int_property_arg("i", "int-property-value",
72 "new property value (data type int)",
73 false, 0, "number");
74 cmd.add(int_property_arg);
75 TCLAP::ValueArg<std::string> property_name_arg(
76 "n", "property-name", "name of property in the mesh", false,
77 "MaterialIDs", "string");
78 cmd.add(property_name_arg);
79 TCLAP::ValueArg<int> restrict_arg(
80 "r", "restrict-to-MaterialID",
81 "Restrict resetting the property to the material id", false, -1,
82 "MaterialID");
83 cmd.add(restrict_arg);
84 TCLAP::ValueArg<std::string> mesh_in(
85 "m", "mesh-input-file",
86 "the name of the file containing the input mesh", true, "",
87 "file name");
88 cmd.add(mesh_in);
89 TCLAP::ValueArg<std::string> gmsh_path_arg("", "gmsh-path",
90 "the path to the gmsh binary",
91 false, "", "path as string");
92 cmd.add(gmsh_path_arg);
93 cmd.parse(argc, argv);
94
96
97
100 gmsh_path_arg.getValue());
101
103
104
105
107 if (!plys)
108 {
109 ERR(
"Could not get vector of polylines out of geometry '{:s}'.",
110 geo_name);
111 return EXIT_FAILURE;
112 }
113
114
116 plys->getElementByName(polygon_name_arg.getValue()));
117 if (!ply)
118 {
119 ERR(
"Polyline '{:s}' not found.", polygon_name_arg.getValue());
120 return EXIT_FAILURE;
121 }
122
123
124 if (!ply->isClosed())
125 {
126 ERR(
"Polyline '{:s}' is not closed, i.e. does not describe a region.",
127 polygon_name_arg.getValue());
128 return EXIT_FAILURE;
129 }
130
132
133
134 auto mesh = std::unique_ptr<MeshLib::Mesh>(
136 if (!mesh)
137 {
138
139 return EXIT_FAILURE;
140 }
141 std::string const& property_name(property_name_arg.getValue());
142
143 if (char_property_arg.isSet())
144 {
146 *mesh, polygon, property_name, char_property_arg.getValue(),
147 restrict_arg.getValue(), any_of_arg.getValue());
148 }
149
150 if (int_property_arg.isSet())
151 {
153 *mesh, polygon, property_name, int_property_arg.getValue(),
154 restrict_arg.getValue(), any_of_arg.getValue());
155 }
156
158
160
161 return EXIT_SUCCESS;
162}
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Container class for geometric objects.
std::vector< std::string > getGeometryNames() const
Returns the names of all geometry vectors.
const PolylineVec * getPolylineVecObj(const std::string &name) const
Class Polyline consists mainly of a reference to a point vector and a vector that stores the indices ...
The class TemplateVec takes a unique name and manages a std::vector of pointers to data elements of t...
void readGeometryFromFile(std::string const &fname, GeoLib::GEOObjects &geo_objs, std::string const &gmsh_path)
GITINFOLIB_EXPORT const std::string ogs_version
MeshLib::Mesh * readMeshFromFile(const std::string &file_name, bool const compute_element_neighbors)
int writeMeshToFile(const MeshLib::Mesh &mesh, std::filesystem::path const &file_path, std::set< std::string > variable_output_names)