File: CutMesh.cpp

package info (click to toggle)
gmsh 4.8.4%2Bds2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 87,812 kB
  • sloc: cpp: 378,014; ansic: 99,669; yacc: 7,216; python: 6,680; java: 3,486; lisp: 659; lex: 621; perl: 571; makefile: 470; sh: 440; xml: 415; javascript: 113; pascal: 35; modula3: 32
file content (53 lines) | stat: -rw-r--r-- 1,849 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.

#include "CutMesh.h"
#include "GModel.h"
#include "gmshLevelset.h"

StringXNumber CutMeshOptions_Number[] = {{GMSH_FULLRC, "View", nullptr, -1.},
                                         {GMSH_FULLRC, "Split", nullptr, 0.},
                                         {GMSH_FULLRC, "SaveTri", nullptr, 0.}};

extern "C" {
GMSH_Plugin *GMSH_RegisterCutMeshPlugin() { return new GMSH_CutMeshPlugin(); }
}

std::string GMSH_CutMeshPlugin::getHelp() const
{
  return "Plugin(CutMesh) cuts the mesh of the current GModel with "
         "the zero value of the levelset defined with the view 'View'."
         "Sub-elements are created in the new model (polygons in 2D and "
         "polyhedra in 3D) and border elements are created on the "
         "zero-levelset.\n\n"
         "If `Split' is nonzero, the plugin splits the mesh"
         "along the edges of the cut elements in the positive side.\n\n"
         "If 'SaveTri' is nonzero, the sub-elements are saved as simplices.\n\n"
         "Plugin(CutMesh) creates one new GModel.";
}

int GMSH_CutMeshPlugin::getNbOptions() const
{
  return sizeof(CutMeshOptions_Number) / sizeof(StringXNumber);
}

StringXNumber *GMSH_CutMeshPlugin::getOption(int iopt)
{
  return &CutMeshOptions_Number[iopt];
}

void GMSH_CutMeshPlugin::run()
{
  int iView = (int)CutMeshOptions_Number[0].def;
  if(iView < 0) iView = PView::list.size() - 1;

  gLevelsetPostView *gLs = new gLevelsetPostView(iView);

  int split = (int)CutMeshOptions_Number[1].def;
  int saveTri = (int)CutMeshOptions_Number[2].def;
  GModel *gm = GModel::current();
  GModel *cgm = gm->buildCutGModel(gLs, !split, saveTri);
  cgm->setVisibility(1);
}