Skip to content

lluisalemanypuig/geometry-processing

Repository files navigation

Geometry Processing

Overview of the repository

This repository contains three subprojects. The main subproject implements several geometry processing algorithms grouped in a library called geoproc (see directory geoproc/). The other two subprojects are a command line application that uses these algorithms (command-line/ directory), and a GUI (interface/ directory).

Contents

In the library geoproc a set of algorithms for geometric processing have been implemented. These algorithms include:

  • Computation of the curvature of a triangular mesh:
    • Gauss curvature (Kg).
    • Mean curvature (Kh).
  • Local smoothing algorithms: using one of these three operators
    • Laplacian.
    • Bi-Laplacian.
    • Taubin lambda-mu operator.
  • Global smoothing algorithm: using only the Laplacian operator.
  • Band frequencies.
  • Remesing.
  • Reflection lines.
  • Harmonic Maps parametrisation.

geoproc

The algorithms' implementations are inside the geoproc/ directory. That directory also includes a small data structure for triangular meshes and a simple parser of files .ply. The triangular mesh includes an algorithm to compute its DCEL.

Documentation

Documentation of the library was generated using Doxygen. It can be found in the geoproc-docs/ directory.

Dependencies

This project has several dependencies.

Libraries

This project relies on the glm (v. 0.9.5 or newer) and the Eigen libraries (v. 3.3.5 or newer) for the geometry-processing algorithms. Also, OpenMP is needed for the parallelised version of some of the algorithms.

The Qt library (tested only with version 5.9.6) to compile and execute the interface to visualise the results of the algorithms.

Tools

All subprojects of this repository rely on the qmake tool for the generation of the Makefiles, so it is needed (needless to say that the make tool is also required). Finally, the user will need a compiler that supports C++11 for all subprojects.

Dependencies per project

All the projects in this repository use the qmake tool for building. Here are listed the dependencies of each subproject:

  • geoproc/: depends on the glm and Eigen libraries.
  • command-line/: depends on the glm library and the geoproc library.
  • interface/: depends on the Qt, glm, and geoproc libraries.

Compilation

It is strongly suggested that each subproject be compiled in release mode. All subprojects contain a .pro file which can be opened using the IDE tool Qt Creator. The .pro files need to contain:

  • The path to include the geoproc library, and to link against it.
  • The paths to include both the glm, and Eigen (this last one only when needed). The .pro already include the include paths to these libraries assuming they are installed in the system.

In order to successfully compile each subproject, one can follow these intructions:

  • Create the makefile for every subproject

      qmake -makefile geoproc/geoproc.pro -o geoproc-release/Makefile
      qmake -makefile command-line/command-line.pro -o command-line-release/Makefile
      qmake -makefile interface/interface.pro -o interface-release/Makefile
    
  • Compile first the geoproc library:

      cd geoproc-release/ && make
    
  • Then the other two:

      cd command-line-release/ && make
      cd interface-release/ && make
    

Linkage

Notice that the command-line and interface subprojects assume that the geoproc library is placed and has been compiled into a directory placed within the same parent folder and at the same level as theirs:

	geometry-processing:
		|-- geoproc/
		|-- geoproc-release/
		|-- command-line/
		|-- command-line-release/
		|-- interface/
		|-- interface-release/
		-

If the location of the geoproc library is to be changed, and compiled into a different folder, then the .pro files for the command-line and interface subprojects have to be modified accordingly.

Context

This repository contains the Geometry Processing course project, carried out during the first semester of the academic year 2018-2019. The course is part of the Master in Innovation and Research in Informatics (MIRI) curriculum.