Dear all,
for your information all the changes I made in vcg related to matrices
and points are enabled only if you define VCG_USE_EIGEN.
Since 2 minutes or so, meshlab compiled with that token on the
following three platforms:
- linux, gcc 4.3
- linux gcc 4.0.1 (= mac's version + epsilon)
- msvc 9.0
This token is now defined by default in meshlab. If you really have
big troubles, then edit the files shared.pri and meshlab/meshlab.pro
to remove it and, please, send me you compiler errors.
In order to allow for a smooth transition, the goal was to try to keep
a source compatibility with previous matrix/point classes once
VCG_USE_EIGEN defined. In practice this was not entirely possible, and
here is the list of the major issues you might have while enabling
VCG_USE_EIGEN:
- first of all make sure your code compile without it. In particular
we had to change Point*::Zero() to the more explicit SetZero(). Remind
that p.Zero(); set p to zero. Once VCG_USE_EIGEN is defined, p.Zero()
will still compile but it will do nothing ! Indeed in Eigen, Zero is a
static member function which returns the expression of a zero matrix
or vector. For consistency I've also changed the few other Zero()
functions which actually performed a "set *this to zero", a big regexp
replacement should do the job in most cases.
- the second major difference is that the dot product is no longer
defined via the operator*. Instead use p1.dot(p2). Perhaps we can also
add a global function vcg::dot(p1,p2) if some of you would prefer such
a syntax. Fortunately those errors are caught at compile time: you
should first get some weird messages stating that it cannot convert a
Eigen::Product<...> to a scalar followed by the very explicit:
invalid_vector_vector_product__if_you_wanted_a_dot_or_coeff_wise_product_you_must_use_the_explicit_functions
- the third and last incompatibility is with respect to m.Transpose()
and vcg::Transpose(m). I cannot provide such functions because
Transpose is the name of a class in Eigen. The quick fix is to replace
them by either:
* m.transposeInPlace() if you really want to transpose the matrix
you have in hand (it returns nothing).
* m.transpose() if you only want to use the transpose of m (it does
not change m, and returns a transposed expression)
If you want to be a bit smarter, you should also check for code like that:
Matrix33 mt = m;
mt.Transpose();
m * mt;
which should be replaced by the more efficient and intuitive: m *
m.transpose();
Note that those 2 functions also work if VCG_USE_EIGEN is not defined.
- finally I removed a couple of things which seemed to be used only
internally by vcg math classes like MatrixDiag*, and LinearSolver.
Again fell free to contact me if that's a major problem for you or if
you are unsure about how to work around.
These 3 modifications are the only ones I had to do to make meshlab
compatible. So you have some troubles please report them to me.
Once you've done that you can start using Eigen's API which is
available trough all Matrix and Point types.
Of course, this is only the first step towards this major change, more
to come later...
cheers,
gael.
On Tue, Oct 28, 2008 at 9:44 AM, Paolo Cignoni
<pao...@is...> wrote:
> Dear Developers,
>
> as you could have noted, some major changes happened to our VCG library:
> the currently very chaotic, buggy, and incomplete math folder is going
> to be replaced by
> a clean, documented and efficient template library for linear algebra
> (vectors, matrices,
> and related algorithms): Eigen ( http://eigen.tuxfamily.org )
>
> You should have seen a new folder in the vcglib repository, eigen, this
> folder
> is a SVN direct link to the repository of eigen, so you have no write
> permission
> on that folder (you have to be a eigen developer to commit stuff there).
> More details on these changes later.
>
> In the meantime, if something stop compiling, dont panic :)
>
> I wish to thank warmly Gael Guennebaud, a core developer of eigen, for
> suggesting and implementing this change
> (and obviously for all his point related contribs inside meshlab :) )
>
> Cheers
>
> Paolo
>
> --
> Paolo Cignoni -- Senior Researcher
> Visual Computing Laboratory - ISTI - CNR
> http://vcg.isti.cnr.it/~cignoni
>
> ISTI - CNR
> Via Moruzzi 1,
> 56124 Pisa
> ITALY
>
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Vcg-devel mailing list
> Vcg...@li...
> https://lists.sourceforge.net/lists/listinfo/vcg-devel
>
|