Commit bfb8bf38 authored by Simon Boyé's avatar Simon Boyé

Vitelotte: fixed some generated doc and prepared the 0.4 release.

parent 490d1d06
......@@ -18,6 +18,10 @@ namespace Vitelotte
{
/**
* \brief The base of every element builder. Provides default implementations
* of some methods.
*/
template < class _Mesh, typename _Scalar >
class ElementBuilderBase
{
......
......@@ -21,6 +21,13 @@ namespace Vitelotte
{
/**
* \brief A diffusion solver based on the Finite Element Method.
*
* \tparam _Mesh The VGMesh type on which the solver operates.
* \tparam _ElementBuilder An ElementBuilder class that describe the type of
* elements used by the solver, and by extension the kind of diffusion to do.
*/
template < class _Mesh, class _ElementBuilder >
class FemSolver
{
......@@ -41,12 +48,17 @@ public:
inline FemSolver(const ElementBuilder& elementBuilder = ElementBuilder());
~FemSolver();
/// \brief Build the internal stiffness matrix
/// \brief Build the internal stiffness matrix from `mesh`.
void build(const Mesh& mesh);
/// \brief Solve the diffusion using the factorize unknown block.
/// \brief Solve the diffusion problem created by `build()` on `mesh`.
///
/// Parameters of `build()` and `solve()` do not need to be the same, but
/// they must have the same connectivity. (In other words, only constrained
/// nodes values should differ.)
void solve(Mesh& mesh);
/// \brief Returns a SolverError object describing the state of the solver.
inline const SolverError error() { return m_error; }
public:
......
......@@ -19,6 +19,9 @@ namespace Vitelotte
{
/**
* \brief Provides method to evaluate FV elements and their derivatives.
*/
template < typename _Scalar >
class FVElement : protected LinearElement<_Scalar>
{
......
......@@ -19,7 +19,11 @@ namespace Vitelotte
/**
* Fraeijs de Veubeke's elements.
* \brief Fraeijs de Veubeke's (FV) element builder, for harmonic interpolation
* with quadratic triangles output.
*
* Use this element builder to solve biharmonic diffusion and get an image
* with quadratic interpolation.
*
* FV elements have 6 value nodes, 3 at each vertex (v) and 3 at edge midpoints
* (e), plus 3 gradient nodes corresponding to the mean value of the first
......
......@@ -17,6 +17,9 @@ namespace Vitelotte
{
/**
* \brief Provides method to evaluate linear elements and their derivatives.
*/
template < typename _Scalar >
class LinearElement
{
......
......@@ -20,6 +20,10 @@ namespace Vitelotte
{
/**
* \brief Linear element builder, for harmonic interpolation with linear
* triangles output.
*/
template < class _Mesh, typename _Scalar = typename _Mesh::Scalar >
class LinearElementBuilder : public ElementBuilderBase<_Mesh, _Scalar>
{
......
......@@ -19,6 +19,9 @@ namespace Vitelotte
{
/**
* \brief Provides method to evaluate Morley elements and their derivatives.
*/
template < typename _Scalar >
class MorleyElement : protected LinearElement<_Scalar>
{
......
......@@ -20,6 +20,10 @@ namespace Vitelotte
{
/**
* \brief Morley element builder, for harmonic interpolation with linear
* triangles output.
*/
template < class _Mesh, typename _Scalar = typename _Mesh::Scalar >
class MorleyElementBuilder : public ElementBuilderBase<_Mesh, _Scalar>
{
......
......@@ -19,6 +19,9 @@ namespace Vitelotte
{
/**
* \brief Provides method to evaluate quadratic elements and their derivatives.
*/
template < typename _Scalar >
class QuadraticElement : protected LinearElement<_Scalar>
{
......
......@@ -19,7 +19,10 @@
namespace Vitelotte
{
/**
* \brief Quadratic element builder, for harmonic interpolation with quadratic
* triangles output.
*/
template < class _Mesh, typename _Scalar = typename _Mesh::Scalar >
class QuadraticElementBuilder : public ElementBuilderBase<_Mesh, _Scalar>
{
......
......@@ -20,6 +20,10 @@ namespace Vitelotte
{
/**
* \brief An element builder decorator that add support for elements with at
* most one singularity.
*/
template < class _Element >
class SingularElementDecorator : public _Element
{
......
......@@ -15,6 +15,9 @@ namespace Vitelotte
{
/**
* \brief A class that encodes the status of a FemSolver object.
*/
class SolverError
{
public:
......
......@@ -37,51 +37,7 @@ enum
* \brief A mesh with data suitable for representing complex color gradients,
* among other.
*
* Most generically, VGMesh represent a <em>n</em>-valued function over
* a 2D surface embedded in a <em>d</em>-dimensional space. The number
* of coefficients \e n and the number of dimension \e d are specified
* by the template parameters \p _Coeffs and \p _Dims respectively. This
* parameters can be set to the constant \c Dynamic if you want to be
* able to set them at run time, or to a numeric constant for better
* compile-time error checking and better performances.
*
* The surface is represented by a polygonal mesh. In practice, VGMesh
* inherits from the class PatateCommon::SurfaceMesh, a customized
* version of the
* <a href="http://opensource.cit-ec.de/projects/surface_mesh">
* Surface_mesh library</a>, which use an halfedge-based data structure.
*
* \section vitelotte_vg_mesh_attributes_nodes Attributes and Nodes
*
* The function value is defined per-face by some interpolation methods,
* represented by the <tt>*Element</tt> classes
* (see Concept::ElementConcept).
*
* Different interpolation methods requires different set of sample
* points on each face. For instance, a linear interpolation
* over a triangle only require values on the triangle vertices, where
* quadratic interpolation require additional values at edge's midpoint.
* The information stored to represent value samples is defined by the
* mesh's \e attributes.
*
* Attributes are first set by the constructor and can be later
* modified by calling setAttributes().
*
* \note There is currently no simple way to convert a `VGMesh` of one kind
* to an other of an other kind (different `Scalar` type, different dimension,
* etc.)
*
*
* \note There is currently no way to delete nodes, except by using
* deleteUnusedNodes() method. The rational behind this is that it would be
* unsafe because some halfedge may reference it. As we don't have connectivity
* information for the nodes and that it would be too expansive to go through
* all halfedges each time we remove a node, it is better that way.
*
*
* \note We may add connectivity information for nodes, but it would be quite
* expansive in terms of memory and not very useful. We may add it later
* and make it optional.
* For more details about VGMesh, see the [user manual](vitelotte_user_manual_vg_mesh_page).
*/
template < typename _Scalar, int _Dims=2, int _Coeffs=4 >
class VGMesh: public PatateCommon::SurfaceMesh
......
......@@ -21,9 +21,9 @@ namespace Vitelotte
/**
* \brief The MVGWriter class allow to save FemMesh objects in `.mvg` files.
* \brief The MVGWriter class writes VGMesh objects in `.mvg` files.
*
* \see FemMesh MVGReader
* \see VGMesh MVGReader
*/
template < typename _Mesh >
class MVGWriter
......@@ -55,10 +55,8 @@ public:
/**
* \brief Write `mesh` in the stream `out` as a `.mvg` file.
* \param mesh The QMesh to save.
* \param out The output stream.
*/
void write(std::ostream& _out, const Mesh& mesh);
void write(std::ostream& out, const Mesh& mesh);
protected:
int vertexIndex(Vertex vx) const;
......
......@@ -20,6 +20,10 @@
namespace Vitelotte {
/**
* \brief The VGMeshRendererResources encapsulate resources required by
* VGMeshRenderer for sharing.
*/
class VGMeshRendererResources {
public:
struct SolidUniforms
......@@ -90,6 +94,9 @@ struct DefaultValueProj {
};
/**
* \brief An OpenGL 3 renderer to display VGMesh objects.
*/
template < class _Mesh,
typename _PosProj = DefaultPosProj <typename _Mesh::Vector>,
typename _ValueProj = DefaultValueProj<typename _Mesh::Value> >
......
......@@ -67,6 +67,7 @@ namespace Vitelotte
- The [mvg toolkit](@ref vitelotte_example_mvgtk_page) (`mvgtk`). Permits to do high level operations on VGMeshWithCurves. Example:
\code{.sh}
# poring.mvg is a mvg with diffusion curves and point gradient constraints.
# Available from the examples/Vitelotte/samples directory.
# This command generates an image with quadratic interpolation using
# a biharmonic diffusion.
mvgtk -v poring.mvg conv fv c2n finalize solve out out.mvg
......
/*
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/*!
\mainpage notitle
\section patate_news_sec New Release 0.3.2
\section patate_news_sec New Release 0.4
\subsection patate_news_subsec Principal features
- Point Cloud Library (PCL) wrapper added in examples <BR>
- New Grenaille::PrimitiveBase interface added <BR>
- You can now use Grenaille::CompactPlane for fitting and compute Grenaille::CovariancePlaneFit::surfaceVariation with the extension Grenaille::CovariancePlaneFit. <BR>
- Added the new patate Vitelotte for mesh-based vector graphics with a diffusion solver. Comes with a few applications to experiment with this representation. <BR>
- Bugfixes and performance improvements in GLSCurvatureHelper <BR>
\section patate_about_sec About Patate
Patate is a header only C++/CUDA library for graphics applications released under the MPL license.
It provides a collection of Computer Graphics techniques that incorporate the latest innovations from INRIA research teams working in the field. It strives for efficiency and ease-of-use by focusing on low-level core operators and key algorithms, organised in modules that each tackle a specific set of issues. The central goal of the library is to drastically reduce the time and efforts required to turn a research paper into a ready-to-use solution, for both commercial and academic purposes.
It provides a collection of Computer Graphics techniques that incorporate the latest innovations from INRIA research teams working in the field. It strives for efficiency and ease-of-use by focusing on low-level core operators and key algorithms, organised in modules that each tackle a specific set of issues. The central goal of the library is to drastically reduce the time and efforts required to turn a research paper into a ready-to-use solution, for both commercial and academic purposes.
The library is still in its infancy and we're actively working on it to bring you the latest of our published research techniques. Modules will be dealing with graphics domains as varied as multi-scale analysis, material appearance, vector graphics, expressive rendering and 2D animation. Okay, right now it's only multi-scale analysis, but if everything goes as planned, this sentence should be properly deleted in the upcoming months!
......@@ -43,23 +42,23 @@
- <b> How are these patates licensed? Are their seeds patented? </b><BR>
Do not be afraid, our patates are the closest you can get to "organic" in our solanaceous analogy. The source code of the library is licensed under the Mozilla Public License (MPL), v. 2.0. Its main advantage is to grant inclusion of template files as long as the source code itself is not modified (see? It's even somewhat sustainable). For more details, a copy of the MPL can be found at http://mozilla.org/MPL/2.0/ .
\section patate_credits_sec Credits
\subsection patate_credits_subsection_crew Crew
\subsection patate_credits_subsection_crew Crew
- <b> Nicolas Mellado </b>: conception, implementation and examples <br/>
- <b> Gautier Ciaudo </b>: testing, documentation, refactoring and examples <br/>
- <b> Gael Guennebaud </b>: conception and implementation <br/>
- <b> Pascal Barla </b>: conception and documentation <br/>
- <b> Noam Kremen </b>: implementation <br/>
\subsection patate_credits_subsection_citation Citation
If you use our library, please cite it using the following bibtex entry:
\verbatim
\verbatim
@MISC{PatateLib,
author = {Nicolas Mellado and Gautier Ciaudo and Ga\"{e}l Guennebaud and Pascal Barla},
title = {Patate Lib},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment