Hi everybody once more!
Now I am ready to share my experience to use Gmsh functions in my own program. Thank to Mikhail Titov's advice I found in utils/api_demos the examples of using Gmsh API.
Then I found in Gmsh reference manual this text:
<<Finally, to use Gmsh at the third level (i.e., to link the Gmsh library with your own code), you will need to learn the internal Gmsh Application Programming Interface (API). No complete documentation of this API is available yet; a good starting point is Section C.2 [Source code structure], page 185, which gives a short introduction to Gmsh's internal source code structure. Then have a look e.g. at the examples in the 'utils/api_demos/' directory in the source code. Due to the many possible configuration options (and associated external dependencies), we currently do not distibute precompiled versions of the Gmsh library. To build the library see the instructions in the top-level 'README.txt' file in the source
distribution.>>

Ok, cmake was downloaded and after some torture Gmsh.exe, Gmsh.dll and Gmsh.lib was created. Then I included Gmsh.lib in my Visual Studio project (Properties->Linker->Input->Additional Dependencies) where I had only one cpp-file (mainSimple.cpp from utils\api_demos):

#include <stdio.h>
#include <gmsh/Gmsh.h>
#include <gmsh/GModel.h>
#include <gmsh/MElement.h>

int main(int argc, char **argv)
{
  GmshInitialize(argc, argv);
  //GmshSetOption("Mesh", "Algorithm", 5);
  GModel *m = new GModel();
  m->readGEO("../../tutorial/t5.geo");
//GmshMergeFile("../../tutorial/t5.geo"); // will also set the bbox
  m->mesh(3);
for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){
    GRegion *r = *it;
printf("volume %d contains %d elements:\n", r->tag(), r->getNumMeshElements()); for(unsigned int i = 0; i < r->getNumMeshElements(); i++)
      printf(" %d", r->getMeshElement(i)->getNum());
    printf("\n");
  }
  m->writeMSH("test.msh");
  m->writeUNV("test.unv");
  delete m;
  GmshFinalize();
}

After compilation I have 1225 errors like these:
Description File Project Error 1 error LNK2001: unresolved external symbol "public: static int __cdecl Fl::check(void)" (?ch...@fl@@SAHXZ) Gmsh.lib delme Error 5 error LNK2001: unresolved external symbol "void __cdecl fl_alert(char const *,...)" (?fl_alert@@YAXPBDZZ) Gmsh.lib delme
et cetera

If I delete Gmsh.lib from 'Additional Dependencies', after compilation I have 8 errors like these: Description File Project Error 4 error LNK2001: unresolved external symbol "public: int __thiscall GModel::mesh(int)" (?m...@gmodel@@qa...@z) main.obj delme Error 7 error LNK2001: unresolved external symbol "int __cdecl GmshFinalize(void)" (?GmshFinalize@@YAHXZ) main.obj delme
et cetera

In first case I tried to include a fltk library (I thought that 'Fl' means a part of 'fltk'), but I miscarried. Because of <<no complete documentation of this API is available yet>> can anybody help me?

Thanks
Mikhail Artemiev, PhD student, NSTU


Mikhail Titov:
I would suggest to communicate with Gmsh using network. Take a look at the source code. It has a couple of nice examples in utils/solvers subfolder. It will definitely save some time since you can reuse existing instance instead
of launching new process every time.

IMHO it would be the last resort to link gmsh code in.

Mikhail

_______________________________________________
gmsh mailing list
[email protected]
http://www.geuz.org/mailman/listinfo/gmsh

Reply via email to