diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-30 18:30:54 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-01-30 18:30:54 (GMT) |
commit | 2da15511294d2f89f2337ee0330db9062a4cfdce (patch) | |
tree | 03ef1c32856766c871138a1cbce93a8f2047fcc4 | |
parent | fc1224d321ad39a5e63d947e6454344d9e86bf95 (diff) |
Clifford Wolf:
Started to use eigen2 for linear algebra problems
git-svn-id: http://svn.clifford.at/openscad/trunk@376 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | openscad.pro | 9 | ||||
-rw-r--r-- | src/polyset.cc | 12 |
3 files changed, 18 insertions, 6 deletions
@@ -52,6 +52,9 @@ development. Other versions may or may not work as well.. * GLEW (bundled with OpenCSG) http://glew.sourceforge.net/ +* Eigen2 (2.0.11) + http://eigen.tuxfamily.org/ + * GCC C++ Compiler (4.0, 4.2, 4.3.1): http://gcc.gnu.org/ diff --git a/openscad.pro b/openscad.pro index cb8afe7..60b9ab4 100644 --- a/openscad.pro +++ b/openscad.pro @@ -39,6 +39,13 @@ mdi { include(cgal.pri) include(opencsg.pri) +!isEmpty(EIGEN2_DIR) { + QMAKE_CXXFLAGS += -I$$EIGEN2_DIR +} +else { + QMAKE_CXXFLAGS += -I/usr/include/eigen2 +} + QMAKE_CXXFLAGS_RELEASE = -O3 -march=pentium QMAKE_CXXFLAGS_DEBUG = -O0 -ggdb @@ -46,8 +53,6 @@ QMAKE_CXXFLAGS_DEBUG = -O0 -ggdb # QMAKE_CXXFLAGS += -pg # QMAKE_LFLAGS += -pg - - LEXSOURCES += src/lexer.l YACCSOURCES += src/parser.y diff --git a/src/polyset.cc b/src/polyset.cc index 7110f95..83c1cfc 100644 --- a/src/polyset.cc +++ b/src/polyset.cc @@ -25,6 +25,9 @@ #include "printutils.h" #include "Preferences.h" +#include <Eigen/Core> +#include <Eigen/LU> + QCache<QString,PolySet::ps_cache_entry> PolySet::ps_cache(100); PolySet::ps_cache_entry::ps_cache_entry(PolySet *ps) : @@ -129,10 +132,11 @@ static void gl_draw_triangle(GLint *shaderinfo, const PolySet::Point *p0, const void PolySet::render_surface(colormode_e colormode, csgmode_e csgmode, double *m, GLint *shaderinfo) const { - double m_scale_rotate_det = - m[0]*m[5]*m[10] + m[4]*m[9]*m[2] + m[8]*m[1]*m[6] - - (m[8]*m[5]*m[2] + m[4]*m[1]*m[10] + m[0]*m[9]*m[6]); - bool mirrored = m_scale_rotate_det < 0; + Eigen::Matrix3f m3f; + m3f << m[0], m[4], m[8], + m[1], m[5], m[9], + m[2], m[6], m[10]; + bool mirrored = m3f.determinant() < 0; if (colormode == COLORMODE_MATERIAL) { const QColor &col = Preferences::inst()->color(Preferences::OPENCSG_FACE_FRONT_COLOR); |