MSSEnv
Documentation is being written so things may not be perfect (typo error, missing part...)
MSSEnv stands Mesh Sequence Segmentation Environnement.This project aims to create a complete mesh sequence segmentation environment: a framework to create, test and compare mesh sequence segmentation algorithms. It will also provide building blocks to create these algorithms and a graphical environment.
MSSEnv is developed in the context of my thesis.
- Todo:
- Add Madras
- mandatory
- Expat
- libbz2
- boost (future unsure)
- optional (but helpful)
There is two methods :
- with qmake : qmake -nodepend && make (-nodepend is necessary to work around a bug)
- with CMake : mkdir../build && cd ../build && ccmake (or cmake-gui) ../MSSEnv
Note that cmake is the most supported
We use Mesh Sequence as a global term to refer to all types of mesh animations. We have defined the following segmentation:
- Dynamic Mesh: in this kind of mesh sequences, the number of vertices, the connectivity (neighboring relations between vertices) and the topology of the mesh are fixed all along the sequence: the animation represents one mesh whose vertex coordinates are evolving though time.
- Unconstrained Mesh Sequence: this type of mesh sequences does not enforce restrictions on the number of vertices, the connectivity or the topology of mesh during the sequence. The animation represents a set of meshes without any a priori relation between them.
- Stable Mesh Sequence :a mesh sequence between the Dynamic Mesh and the Unconstrained Mesh Sequence. This type of mesh se quences does not enforce restrictions on the number of vertices and the connectivity. However the topology of mesh is fixed during the sequence.
A mesh

with

vertices is a tuple

, with:
the vertices
.
the edges
.
the faces
.
Let
be the number of frames of the mesh sequence,
the mesh at frame
, then a mesh sequence is defined as:
. Using these definitions, We have defined 3 mesh sequence segmentations:
- Geometric Segmentation: Segment mesh at each frame. This means applying f times a static mesh segmentation. We still enforce the following constraint: each segmentation should have the same number of segments and have a one to one mapping between segments. Let
be the number of segments. A geometric segmentation is defined as
With 
Another constraint, which is not mandatory and has to be removed for unconstrained mesh sequences, is to keep a constant connectivity between segments: if segment B is adjacent to segment A in one frame of the sequence, then it has to be adjacent to segment A in all other frames.
- Time Segmentation: this segmentation consists in segmenting the sequence in sub-sequences, based on properties defined by the application aim.
with
\\
This document presents the format used for the mesh sequences and their associated segmentations in the Madras repositories :
http://www-rech.telecom-lille1.eu/madras/
The format is based on XML (extensible!) and uses a bzip2 (without loss) compression. The scheme can be downloaded here Change!.
The first two lines correspond to the xml header and schema description. They are mandatories :
<?xml version="1.0"?> <MS xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' Name="NAME" nbFrame="NBFRAME" xsi:schemaLocation='http://evasion.imag.fr/Membres/Romain.Arcila/files MeshSequenceSchema.xsd'> SHOULD BE CHANGED
where Name is the name of the sequence (can be empty) and nbFrame is at least 1.
The mesh sequence is therefore defined with one of the following tag:
- <DM>: sequence is a Dynamic Mesh.
- <SMS>: sequence is a Stable Mesh Sequence.
- <UMS> : sequence is an Unstable Mesh Sequence.
A mesh is defined with the tag <M> containing :
- one tag <Vs> : the vertices of the mesh with a succession of tags <V>S1 S2 S3</V>
- one tag <Fs> : the faces of the mesh with a succession of tags <F> index_S1 index_S2 index_S3 index_S4 .... <F>
A Dynamic Mesh (<DM>) contains a tag <M> (the first first frame) and a succession of tags <Vs> (one by frame of the sequence) which described the position of the vertices all along the sequence. A Stable Mesh Sequence (<SMS>) and an Unstable Mesh Sequence (<UMS.>) contain a succession of tags <M.>, one by frame.
Please note that a file can contain only one mesh sequence.
-----------------------------------------------------
The format supports the declaration of processing tags (<Processing.>) after the declaration of the mesh sequence. This tags is used to described the transformation applied on the sequence, such as compression or remeshing. At the time of now, only the Segmentations tag is defined. Additional tags can be added, compression will be added on near future.
The <Segmentations> tag is used to declare the different segmentations applied on the mesh sequence. It contains all the segmentations. (Please not than there is no support for Hierarchical Segmentation as it is not defined.)
The following segmentation types are defined:
- StableSegmentation (<StableSegmentation v="{0,1}>">): V=0 means face clustering while V=1 means vertex clustering. It contains a sequence a <Group.>index_{vertex1,face1} index_{vertex5,face5}...</Group> where Group is a cluster. The index corresponds to the vertex or face index (as declared in M tags) )of the mesh in the first frame of the sequence (or subsequence).
- GeometricSegmentation (<GeometricSegementation v="{0,1}>">): see StableSegmentation for V meaning.This tags contains a sequence of seg tag (<Seg>), one by frame, which contains the declaration of cluster with the Group tag (see StableSegmentation). GeometricSegmentation can contain a StableSegmentation.
- TimeSegmentation (<TimeSegmentation>): the basic version contains a succession of Group tag (<Group>): <Group>first_frame last_frame </Group>, where first_frame (resp. last_frame) correspond to the first frame (resp. last frame) of the subsequence. The TimeSegmentation can embed other Segmentation for each Group. <Group> frame1 frame2 <Segmentation_type> declaration of the segmentation</SegmentationType></Group> where Segmentation_type can be GeometricSegmentation or StableSegmentation (It means that the segmentation type will be applied to the subsequence).
You can found some references sequence here :
http://www-rech.telecom-lille1.eu/madras/
You can create your own sequence using the converter from an .off or .obj sequence supplied in the archive. Just do ./convert --help
The GUI is coded with Qt4. The gui source file (files in GUI/) can use any Qt4 type without any restriction. The library source file, in lib, are used in plain C++, which means that QT4 is only an optional dependency. Any part of the code which use Qt4 may be surrounded by ifdef USE_QT4 endif.
- Todo:
- add coding section
- Todo:
- see coding for windows __declspec(dllexport), __declspec(dllimport) ...