]>
Commit | Line | Data |
---|---|---|
0beb5c2c JR |
1 | diff -rupN avogadro-1.2.0/avogadro/src/CMakeLists.txt avogadro-1.2.0-new/avogadro/src/CMakeLists.txt |
2 | --- avogadro-1.2.0/avogadro/src/CMakeLists.txt 2016-06-08 16:19:45.000000000 +0200 | |
3 | +++ avogadro-1.2.0-new/avogadro/src/CMakeLists.txt 2018-01-03 14:47:08.649568522 +0100 | |
4 | @@ -22,15 +22,9 @@ include_directories( | |
5 | ${CMAKE_CURRENT_BINARY_DIR} | |
6 | ) | |
7 | ||
8 | -if(EIGEN3_FOUND) | |
9 | - include_directories( | |
10 | - ${EIGEN3_INCLUDE_DIR} | |
11 | - ) | |
12 | -elseif(EIGEN2_FOUND) | |
13 | - include_directories( | |
14 | - ${EIGEN2_INCLUDE_DIR} | |
15 | - ) | |
16 | -endif(EIGEN3_FOUND) | |
17 | +include_directories( | |
18 | + ${EIGEN3_INCLUDE_DIR} | |
19 | +) | |
20 | ||
21 | if(GLEW_FOUND) | |
22 | include_directories(${GLEW_INCLUDE_DIR}) | |
23 | diff -rupN avogadro-1.2.0/avogadro/src/mainwindow.cpp avogadro-1.2.0-new/avogadro/src/mainwindow.cpp | |
24 | --- avogadro-1.2.0/avogadro/src/mainwindow.cpp 2016-06-08 16:19:45.000000000 +0200 | |
25 | +++ avogadro-1.2.0-new/avogadro/src/mainwindow.cpp 2018-01-03 14:45:25.170574246 +0100 | |
26 | @@ -115,7 +115,6 @@ | |
27 | #include <QDebug> | |
28 | ||
29 | #include <Eigen/Geometry> | |
30 | -#include <Eigen/Array> | |
31 | #define USEQUAT | |
32 | // This is a "hidden" exported Qt function on the Mac for Qt-4.x. | |
33 | #ifdef Q_WS_MAC | |
34 | @@ -2775,7 +2774,7 @@ protected: | |
35 | linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0)); | |
36 | ||
37 | // calculate the translation matrix | |
38 | - Transform3d goal(linearGoal); | |
39 | + Projective3d goal(linearGoal); | |
40 | ||
41 | goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ()); | |
42 | ||
43 | @@ -2840,7 +2839,7 @@ protected: | |
44 | Matrix3d linearGoal = Matrix3d::Identity(); | |
45 | ||
46 | // calculate the translation matrix | |
47 | - Transform3d goal(linearGoal); | |
48 | + Projective3d goal(linearGoal); | |
49 | ||
50 | goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ()); | |
51 | ||
52 | diff -rupN avogadro-1.2.0/CMakeLists.txt avogadro-1.2.0-new/CMakeLists.txt | |
53 | --- avogadro-1.2.0/CMakeLists.txt 2016-06-08 16:19:45.000000000 +0200 | |
54 | +++ avogadro-1.2.0-new/CMakeLists.txt 2018-01-03 14:48:31.478563940 +0100 | |
55 | @@ -231,14 +231,7 @@ if(NOT Linguist_FOUND) | |
56 | message(WARNING " Qt4 Linguist not found, please install it if you want Avogadro translations") | |
57 | endif() | |
58 | ||
59 | -find_package(Eigen3) # find and setup Eigen3 if available | |
60 | -if(NOT EIGEN3_FOUND) | |
61 | - message(STATUS "Cannot find Eigen3, trying Eigen2") | |
62 | - find_package(Eigen2 REQUIRED) # Some version is required | |
63 | -else() | |
64 | -# Use Stage10 Eigen3 support | |
65 | - set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE) | |
66 | -endif() | |
67 | +find_package(Eigen3 REQUIRED) # find and setup Eigen3 | |
68 | ||
69 | find_package(ZLIB REQUIRED) | |
70 | find_package(OpenBabel2 REQUIRED) # find and setup OpenBabel | |
71 | @@ -473,7 +466,6 @@ install(FILES | |
72 | ||
73 | # Install the find modules we require to be present | |
74 | install(FILES | |
75 | - "${CMAKE_MODULE_PATH}/FindEigen2.cmake" | |
76 | "${CMAKE_MODULE_PATH}/FindEigen3.cmake" | |
77 | "${CMAKE_MODULE_PATH}/FindGLEW.cmake" | |
78 | DESTINATION "${Avogadro_PLUGIN_INSTALL_DIR}/cmake") | |
79 | diff -rupN avogadro-1.2.0/libavogadro/src/camera.cpp avogadro-1.2.0-new/libavogadro/src/camera.cpp | |
80 | --- avogadro-1.2.0/libavogadro/src/camera.cpp 2016-06-08 16:19:45.000000000 +0200 | |
81 | +++ avogadro-1.2.0-new/libavogadro/src/camera.cpp 2018-01-03 14:45:25.171574246 +0100 | |
82 | @@ -47,7 +47,7 @@ namespace Avogadro | |
83 | ||
84 | CameraPrivate() {}; | |
85 | ||
86 | - Eigen::Transform3d modelview, projection; | |
87 | + Eigen::Projective3d modelview, projection; | |
88 | const GLWidget *parent; | |
89 | double angleOfViewY; | |
90 | double orthoScale; | |
91 | @@ -169,20 +169,20 @@ namespace Avogadro | |
92 | ||
93 | double Camera::distance(const Eigen::Vector3d & point) const | |
94 | { | |
95 | - return ( d->modelview * point ).norm(); | |
96 | + return ( d->modelview * point.homogeneous() ).head<3>().norm(); | |
97 | } | |
98 | ||
99 | - void Camera::setModelview(const Eigen::Transform3d &matrix) | |
100 | + void Camera::setModelview(const Eigen::Projective3d &matrix) | |
101 | { | |
102 | d->modelview = matrix; | |
103 | } | |
104 | ||
105 | - const Eigen::Transform3d & Camera::modelview() const | |
106 | + const Eigen::Projective3d & Camera::modelview() const | |
107 | { | |
108 | return d->modelview; | |
109 | } | |
110 | ||
111 | - Eigen::Transform3d & Camera::modelview() | |
112 | + Eigen::Projective3d & Camera::modelview() | |
113 | { | |
114 | return d->modelview; | |
115 | } | |
116 | diff -rupN avogadro-1.2.0/libavogadro/src/camera.h avogadro-1.2.0-new/libavogadro/src/camera.h | |
117 | --- avogadro-1.2.0/libavogadro/src/camera.h 2016-06-08 16:19:45.000000000 +0200 | |
118 | +++ avogadro-1.2.0-new/libavogadro/src/camera.h 2018-01-03 14:45:25.171574246 +0100 | |
119 | @@ -101,16 +101,16 @@ namespace Avogadro { | |
120 | double angleOfViewY() const; | |
121 | /** Sets 4x4 "modelview" matrix representing the camera orientation and position. | |
122 | * @param matrix the matrix to copy from | |
123 | - * @sa Eigen::Transform3d & modelview(), applyModelview() */ | |
124 | - void setModelview(const Eigen::Transform3d &matrix); | |
125 | + * @sa Eigen::Projective3d & modelview(), applyModelview() */ | |
126 | + void setModelview(const Eigen::Projective3d &matrix); | |
127 | /** @return a constant reference to the 4x4 "modelview" matrix representing | |
128 | * the camera orientation and position | |
129 | - * @sa setModelview(), Eigen::Transform3d & modelview() */ | |
130 | - const Eigen::Transform3d & modelview() const; | |
131 | + * @sa setModelview(), Eigen::Projective3d & modelview() */ | |
132 | + const Eigen::Projective3d & modelview() const; | |
133 | /** @return a non-constant reference to the 4x4 "modelview" matrix representing | |
134 | * the camera orientation and position | |
135 | - * @sa setModelview(), const Eigen::Transform3d & modelview() const */ | |
136 | - Eigen::Transform3d & modelview(); | |
137 | + * @sa setModelview(), const Eigen::Projective3d & modelview() const */ | |
138 | + Eigen::Projective3d & modelview(); | |
139 | /** Calls gluPerspective() or glOrtho() with parameters automatically chosen | |
140 | * for rendering the GLWidget's molecule with this camera. Should be called | |
141 | * only in GL_PROJECTION matrix mode. Example code is given | |
142 | @@ -342,7 +342,7 @@ namespace Avogadro { | |
143 | * @return {x/w, y/w, z/w} vector | |
144 | */ | |
145 | Eigen::Vector3d V4toV3DivW(const Eigen::Vector4d & v4) { | |
146 | - return v4.start<3>()/v4.w(); | |
147 | + return v4.head<3>()/v4.w(); | |
148 | } | |
149 | }; | |
150 | ||
151 | diff -rupN avogadro-1.2.0/libavogadro/src/CMakeLists.txt avogadro-1.2.0-new/libavogadro/src/CMakeLists.txt | |
152 | --- avogadro-1.2.0/libavogadro/src/CMakeLists.txt 2016-06-08 16:19:45.000000000 +0200 | |
153 | +++ avogadro-1.2.0-new/libavogadro/src/CMakeLists.txt 2018-01-03 14:48:09.786565140 +0100 | |
154 | @@ -14,15 +14,9 @@ include_directories( | |
155 | ${OPENBABEL2_INCLUDE_DIR} | |
156 | ) | |
157 | ||
158 | -if(EIGEN3_FOUND) | |
159 | - include_directories( | |
160 | - ${EIGEN3_INCLUDE_DIR} | |
161 | - ) | |
162 | -elseif(EIGEN2_FOUND) | |
163 | - include_directories( | |
164 | - ${EIGEN2_INCLUDE_DIR} | |
165 | - ) | |
166 | -endif(EIGEN3_FOUND) | |
167 | +include_directories( | |
168 | + ${EIGEN3_INCLUDE_DIR} | |
169 | +) | |
170 | ||
171 | # I think this is necessary now in order to tell the linker where openbabel is | |
172 | link_directories(${OPENBABEL2_LIBRARY_DIRS}) | |
173 | diff -rupN avogadro-1.2.0/libavogadro/src/engines/wireengine.cpp avogadro-1.2.0-new/libavogadro/src/engines/wireengine.cpp | |
174 | --- avogadro-1.2.0/libavogadro/src/engines/wireengine.cpp 2016-06-08 16:19:45.000000000 +0200 | |
175 | +++ avogadro-1.2.0-new/libavogadro/src/engines/wireengine.cpp 2018-01-03 14:45:25.171574246 +0100 | |
176 | @@ -109,7 +109,7 @@ namespace Avogadro { | |
177 | const Camera *camera = pd->camera(); | |
178 | ||
179 | // perform a rough form of frustum culling | |
180 | - Eigen::Vector3d transformedPos = pd->camera()->modelview() * v; | |
181 | + Eigen::Vector3d transformedPos = (pd->camera()->modelview() * v.homogeneous()).head<3>(); | |
182 | double dot = transformedPos.z() / transformedPos.norm(); | |
183 | if(dot > -0.8) | |
184 | return true; | |
185 | @@ -167,7 +167,7 @@ namespace Avogadro { | |
186 | map = pd->colorMap(); // fall back to global color map | |
187 | ||
188 | // perform a rough form of frustum culling | |
189 | - Eigen::Vector3d transformedEnd1 = pd->camera()->modelview() * v1; | |
190 | + Eigen::Vector3d transformedEnd1 = (pd->camera()->modelview() * v1.homogeneous()).head<3>(); | |
191 | double dot = transformedEnd1.z() / transformedEnd1.norm(); | |
192 | if(dot > -0.8) | |
193 | return true; // i.e., don't bother rendering | |
194 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/crystallography/crystallographyextension.cpp avogadro-1.2.0-new/libavogadro/src/extensions/crystallography/crystallographyextension.cpp | |
195 | --- avogadro-1.2.0/libavogadro/src/extensions/crystallography/crystallographyextension.cpp 2016-06-08 16:19:45.000000000 +0200 | |
196 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/crystallography/crystallographyextension.cpp 2018-01-03 14:45:25.172574245 +0100 | |
197 | @@ -1989,7 +1989,7 @@ namespace Avogadro | |
198 | // fix coordinates | |
199 | // Apply COB matrix: | |
200 | Eigen::Matrix3d invCob; | |
201 | - cob.computeInverse(&invCob); | |
202 | + invCob = cob.inverse(); | |
203 | for (QList<Eigen::Vector3d>::iterator | |
204 | it = fcoords.begin(), | |
205 | it_end = fcoords.end(); | |
206 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp avogadro-1.2.0-new/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp | |
207 | --- avogadro-1.2.0/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp 2016-06-08 16:19:45.000000000 +0200 | |
208 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp 2018-01-03 14:45:25.173574245 +0100 | |
209 | @@ -139,7 +139,7 @@ namespace Avogadro | |
210 | { | |
211 | // View into a Miller plane | |
212 | Camera *camera = m_glWidget->camera(); | |
213 | - Eigen::Transform3d modelView; | |
214 | + Eigen::Projective3d modelView; | |
215 | modelView.setIdentity(); | |
216 | ||
217 | // OK, so we want to rotate to look along the normal at the plane | |
218 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/orca/orcaanalysedialog.cpp avogadro-1.2.0-new/libavogadro/src/extensions/orca/orcaanalysedialog.cpp | |
219 | --- avogadro-1.2.0/libavogadro/src/extensions/orca/orcaanalysedialog.cpp 2016-06-08 16:19:45.000000000 +0200 | |
220 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/orca/orcaanalysedialog.cpp 2018-01-03 14:45:25.173574245 +0100 | |
221 | @@ -41,7 +41,6 @@ | |
222 | #include <openbabel/mol.h> | |
223 | ||
224 | #include <Eigen/Geometry> | |
225 | -#include <Eigen/LeastSquares> | |
226 | ||
227 | #include <vector> | |
228 | ||
229 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/orca/orcainputdialog.cpp avogadro-1.2.0-new/libavogadro/src/extensions/orca/orcainputdialog.cpp | |
230 | --- avogadro-1.2.0/libavogadro/src/extensions/orca/orcainputdialog.cpp 2016-06-08 16:19:45.000000000 +0200 | |
231 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/orca/orcainputdialog.cpp 2018-01-03 14:45:25.174574245 +0100 | |
232 | @@ -33,7 +33,6 @@ | |
233 | #include <openbabel/mol.h> | |
234 | ||
235 | #include <Eigen/Geometry> | |
236 | -#include <Eigen/LeastSquares> | |
237 | ||
238 | #include <vector> | |
239 | ||
240 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp avogadro-1.2.0-new/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp | |
241 | --- avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp 2016-06-08 16:19:45.000000000 +0200 | |
242 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp 2018-01-03 14:45:25.174574245 +0100 | |
243 | @@ -28,6 +28,7 @@ | |
244 | ||
245 | #include <cmath> | |
246 | #include <Eigen/QR> | |
247 | +#include <Eigen/Eigenvalues> | |
248 | ||
249 | namespace Avogadro { | |
250 | namespace QTAIMMathUtilities { | |
251 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp avogadro-1.2.0-new/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp | |
252 | --- avogadro-1.2.0/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp 2016-06-08 16:19:45.000000000 +0200 | |
253 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp 2018-01-03 14:45:25.186574245 +0100 | |
254 | @@ -35,21 +35,21 @@ namespace Avogadro | |
255 | m_nprim=wfn.numberOfGaussianPrimitives(); | |
256 | m_nnuc=wfn.numberOfNuclei(); | |
257 | ||
258 | - m_nucxcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.xNuclearCoordinates(),m_nnuc); | |
259 | - m_nucycoord=Map<Matrix<qreal,Dynamic,1> >(wfn.yNuclearCoordinates(),m_nnuc); | |
260 | - m_nuczcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.zNuclearCoordinates(),m_nnuc); | |
261 | - m_nucz=Map<Matrix<qint64,Dynamic,1> >(wfn.nuclearCharges(),m_nnuc); | |
262 | - m_X0=Map<Matrix<qreal,Dynamic,1> >(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
263 | - m_Y0=Map<Matrix<qreal,Dynamic,1> >(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
264 | - m_Z0=Map<Matrix<qreal,Dynamic,1> >(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
265 | - m_xamom=Map<Matrix<qint64,Dynamic,1> >(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
266 | - m_yamom=Map<Matrix<qint64,Dynamic,1> >(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
267 | - m_zamom=Map<Matrix<qint64,Dynamic,1> >(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
268 | - m_alpha=Map<Matrix<qreal,Dynamic,1> >(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1); | |
269 | + m_nucxcoord=Map<const Matrix<qreal,Dynamic,1> >(wfn.xNuclearCoordinates(),m_nnuc); | |
270 | + m_nucycoord=Map<const Matrix<qreal,Dynamic,1> >(wfn.yNuclearCoordinates(),m_nnuc); | |
271 | + m_nuczcoord=Map<const Matrix<qreal,Dynamic,1> >(wfn.zNuclearCoordinates(),m_nnuc); | |
272 | + m_nucz=Map<const Matrix<qint64,Dynamic,1> >(wfn.nuclearCharges(),m_nnuc); | |
273 | + m_X0=Map<const Matrix<qreal,Dynamic,1> >(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
274 | + m_Y0=Map<const Matrix<qreal,Dynamic,1> >(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
275 | + m_Z0=Map<const Matrix<qreal,Dynamic,1> >(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1); | |
276 | + m_xamom=Map<const Matrix<qint64,Dynamic,1> >(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
277 | + m_yamom=Map<const Matrix<qint64,Dynamic,1> >(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
278 | + m_zamom=Map<const Matrix<qint64,Dynamic,1> >(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1); | |
279 | + m_alpha=Map<const Matrix<qreal,Dynamic,1> >(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1); | |
280 | // TODO Implement screening for unoccupied molecular orbitals. | |
281 | - m_occno=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1); | |
282 | - m_orbe=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalEigenvalues(),m_nmo,1); | |
283 | - m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> >(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim); | |
284 | + m_occno=Map<const Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1); | |
285 | + m_orbe=Map<const Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalEigenvalues(),m_nmo,1); | |
286 | + m_coef=Map<const Matrix<qreal,Dynamic,Dynamic,RowMajor> >(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim); | |
287 | m_totalEnergy=wfn.totalEnergy(); | |
288 | m_virialRatio=wfn.virialRatio(); | |
289 | ||
290 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt | |
291 | --- avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt 2016-06-08 16:19:45.000000000 +0200 | |
292 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt 2018-01-03 14:47:58.215565780 +0100 | |
293 | @@ -1,13 +1,6 @@ | |
294 | find_package(Qt4 4.6 REQUIRED) | |
295 | -find_package(Eigen3) | |
296 | -if(NOT EIGEN3_FOUND) | |
297 | - message(STATUS "Cannot find Eigen3, trying Eigen2") | |
298 | - find_package(Eigen2 REQUIRED) | |
299 | -else() | |
300 | - set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE) | |
301 | -endif() | |
302 | ||
303 | -include_directories(${QT_INCLUDE_DIR} ${EIGEN2_INCLUDE_DIR}) | |
304 | +include_directories(${QT_INCLUDE_DIR} ${EIGEN3_INCLUDE_DIR}) | |
305 | ||
306 | # Headers for our public API | |
307 | set(openqube_HDRS | |
308 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp | |
309 | --- avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp 2016-06-08 16:19:45.000000000 +0200 | |
310 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp 2018-01-03 14:45:25.176574245 +0100 | |
311 | @@ -19,6 +19,7 @@ | |
312 | using Eigen::Vector3d; | |
313 | using std::vector; | |
314 | ||
315 | +#include <iostream> | |
316 | #include <fstream> | |
317 | ||
318 | namespace OpenQube | |
319 | diff -rupN avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp | |
320 | --- avogadro-1.2.0/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp 2016-06-08 16:19:45.000000000 +0200 | |
321 | +++ avogadro-1.2.0-new/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp 2018-01-03 14:45:25.187574245 +0100 | |
322 | @@ -25,9 +25,9 @@ | |
323 | ||
324 | #include "cube.h" | |
325 | ||
326 | -#include <Eigen/Array> | |
327 | #include <Eigen/LU> | |
328 | #include <Eigen/QR> | |
329 | +#include <Eigen/Eigenvalues> | |
330 | ||
331 | #include <cmath> | |
332 | ||
333 | @@ -250,7 +250,9 @@ bool SlaterSet::initialize() | |
334 | ||
335 | SelfAdjointEigenSolver<MatrixXd> s(m_overlap); | |
336 | MatrixXd p = s.eigenvectors(); | |
337 | - MatrixXd m = p * s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse(); | |
338 | + | |
339 | + MatrixXd m = p * s.eigenvalues().array().inverse().sqrt().matrix().asDiagonal() * p.inverse(); | |
340 | + | |
341 | m_normalized = m * m_eigenVectors; | |
342 | ||
343 | if (!(m_overlap*m*m).isIdentity()) | |
344 | diff -rupN avogadro-1.2.0/libavogadro/src/glpainter_p.cpp avogadro-1.2.0-new/libavogadro/src/glpainter_p.cpp | |
345 | --- avogadro-1.2.0/libavogadro/src/glpainter_p.cpp 2016-06-08 16:19:45.000000000 +0200 | |
346 | +++ avogadro-1.2.0-new/libavogadro/src/glpainter_p.cpp 2018-01-03 14:45:25.177574245 +0100 | |
347 | @@ -789,13 +789,13 @@ namespace Avogadro | |
348 | } else { | |
349 | points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u; | |
350 | } | |
351 | - points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]); | |
352 | + points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>(); | |
353 | } | |
354 | ||
355 | // Get vectors representing the points' positions in terms of the model view. | |
356 | - Eigen::Vector3d _origin = d->widget->camera()->modelview() * origin; | |
357 | - Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin+u); | |
358 | - Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin+v); | |
359 | + Eigen::Vector3d _origin = (d->widget->camera()->modelview() * origin.homogeneous()).head<3>(); | |
360 | + Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin+u).homogeneous()).head<3>(); | |
361 | + Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin+v).homogeneous()).head<3>(); | |
362 | ||
363 | glPushAttrib(GL_ALL_ATTRIB_BITS); | |
364 | glPushMatrix(); | |
365 | @@ -880,12 +880,12 @@ namespace Avogadro | |
366 | } else { | |
367 | points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u; | |
368 | } | |
369 | - points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]); | |
370 | + points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>(); | |
371 | } | |
372 | ||
373 | // Get vectors representing the points' positions in terms of the model view. | |
374 | - Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin + u); | |
375 | - Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin + v); | |
376 | + Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin + u).homogeneous()).head<3>(); | |
377 | + Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin + v).homogeneous()).head<3>(); | |
378 | ||
379 | glPushAttrib(GL_ALL_ATTRIB_BITS); | |
380 | glPushMatrix(); | |
381 | diff -rupN avogadro-1.2.0/libavogadro/src/glwidget.cpp avogadro-1.2.0-new/libavogadro/src/glwidget.cpp | |
382 | --- avogadro-1.2.0/libavogadro/src/glwidget.cpp 2016-06-08 16:19:45.000000000 +0200 | |
383 | +++ avogadro-1.2.0-new/libavogadro/src/glwidget.cpp 2018-01-03 14:45:25.178574245 +0100 | |
384 | @@ -765,7 +765,7 @@ namespace Avogadro { | |
385 | GLfloat fogColor[4]= {static_cast<GLfloat>(d->background.redF()), static_cast<GLfloat>(d->background.greenF()), | |
386 | static_cast<GLfloat>(d->background.blueF()), static_cast<GLfloat>(d->background.alphaF())}; | |
387 | glFogfv(GL_FOG_COLOR, fogColor); | |
388 | - Vector3d distance = camera()->modelview() * d->center; | |
389 | + Vector3d distance = (camera()->modelview() * d->center.homogeneous()).head<3>(); | |
390 | double distanceToCenter = distance.norm(); | |
391 | glFogf(GL_FOG_DENSITY, 1.0); | |
392 | glHint(GL_FOG_HINT, GL_NICEST); | |
393 | @@ -1711,7 +1711,7 @@ namespace Avogadro { | |
394 | ||
395 | if (d->renderModelViewDebug) { | |
396 | // Model view matrix: | |
397 | - const Eigen::Transform3d &modelview = d->camera->modelview(); | |
398 | + const Eigen::Projective3d &modelview = d->camera->modelview(); | |
399 | y += d->pd->painter()->drawText | |
400 | (x, y, tr("ModelView row 1: %L1 %L2 %L3 %L4") | |
401 | .arg(modelview(0, 0), 6, 'f', 2, ' ') | |
402 | diff -rupN avogadro-1.2.0/libavogadro/src/leastsquares.h avogadro-1.2.0-new/libavogadro/src/leastsquares.h | |
403 | --- avogadro-1.2.0/libavogadro/src/leastsquares.h 1970-01-01 01:00:00.000000000 +0100 | |
404 | +++ avogadro-1.2.0-new/libavogadro/src/leastsquares.h 2018-01-03 14:45:25.187574245 +0100 | |
405 | @@ -0,0 +1,74 @@ | |
406 | +/********************************************************************** | |
407 | + LeastSquares - Least squares functions removed from Eigen2 codebase | |
408 | + | |
409 | + Copyright (C) 2006-2009 Benoit Jacob <jacob.benoit.1@gmail.com> | |
410 | + | |
411 | + This file is part of the Avogadro molecular editor project. | |
412 | + For more information, see <http://avogadro.cc/> | |
413 | + | |
414 | + Avogadro is free software; you can redistribute it and/or modify | |
415 | + it under the terms of the GNU General Public License as published by | |
416 | + the Free Software Foundation; either version 2 of the License, or | |
417 | + (at your option) any later version. | |
418 | + | |
419 | + Avogadro is distributed in the hope that it will be useful, | |
420 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
421 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
422 | + GNU General Public License for more details. | |
423 | + | |
424 | + You should have received a copy of the GNU General Public License | |
425 | + along with this program; if not, write to the Free Software | |
426 | + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
427 | + 02110-1301, USA. | |
428 | + **********************************************************************/ | |
429 | + | |
430 | +#ifndef LEASTSQUARES_H | |
431 | +#define LEASTSQUARES_H | |
432 | + | |
433 | +#include <Eigen/Eigenvalues> | |
434 | + | |
435 | +namespace Avogadro | |
436 | +{ | |
437 | + | |
438 | +template<typename VectorType, typename HyperplaneType> | |
439 | +void fitHyperplane(int numPoints, | |
440 | + VectorType **points, | |
441 | + HyperplaneType *result, | |
442 | + typename Eigen::NumTraits<typename VectorType::Scalar>::Real* soundness = 0) | |
443 | +{ | |
444 | + typedef typename VectorType::Scalar Scalar; | |
445 | + typedef Eigen::Matrix<Scalar,VectorType::SizeAtCompileTime,VectorType::SizeAtCompileTime> CovMatrixType; | |
446 | + EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType) | |
447 | + assert(numPoints >= 1); | |
448 | + int size = points[0]->size(); | |
449 | + assert(size+1 == result->coeffs().size()); | |
450 | + | |
451 | + // compute the mean of the data | |
452 | + VectorType mean = VectorType::Zero(size); | |
453 | + for(int i = 0; i < numPoints; ++i) | |
454 | + mean += *(points[i]); | |
455 | + mean /= numPoints; | |
456 | + | |
457 | + // compute the covariance matrix | |
458 | + CovMatrixType covMat = CovMatrixType::Zero(size, size); | |
459 | + VectorType remean = VectorType::Zero(size); | |
460 | + for(int i = 0; i < numPoints; ++i) | |
461 | + { | |
462 | + VectorType diff = (*(points[i]) - mean).conjugate(); | |
463 | + covMat += diff * diff.adjoint(); | |
464 | + } | |
465 | + | |
466 | + // now we just have to pick the eigen vector with smallest eigen value | |
467 | + Eigen::SelfAdjointEigenSolver<CovMatrixType> eig(covMat); | |
468 | + result->normal() = eig.eigenvectors().col(0); | |
469 | + if (soundness) | |
470 | + *soundness = eig.eigenvalues().coeff(0)/eig.eigenvalues().coeff(1); | |
471 | + | |
472 | + // let's compute the constant coefficient such that the | |
473 | + // plane pass trough the mean point: | |
474 | + result->offset() = - (result->normal().array() * mean.array()).sum(); | |
475 | +} | |
476 | + | |
477 | +} // end namespace Avogadro | |
478 | + | |
479 | +#endif | |
480 | diff -rupN avogadro-1.2.0/libavogadro/src/molecule.cpp avogadro-1.2.0-new/libavogadro/src/molecule.cpp | |
481 | --- avogadro-1.2.0/libavogadro/src/molecule.cpp 2016-06-08 16:19:45.000000000 +0200 | |
482 | +++ avogadro-1.2.0-new/libavogadro/src/molecule.cpp 2018-01-03 14:45:25.188574245 +0100 | |
483 | @@ -36,9 +36,9 @@ | |
484 | #include "primitivelist.h" | |
485 | #include "residue.h" | |
486 | #include "zmatrix.h" | |
487 | +#include "leastsquares.h" | |
488 | ||
489 | #include <Eigen/Geometry> | |
490 | -#include <Eigen/LeastSquares> | |
491 | ||
492 | #include <vector> | |
493 | ||
494 | @@ -1908,7 +1908,8 @@ namespace Avogadro{ | |
495 | } | |
496 | d->center /= static_cast<double>(nAtoms); | |
497 | Eigen::Hyperplane<double, 3> planeCoeffs; | |
498 | - Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs); | |
499 | + fitHyperplane(numAtoms(), atomPositions, &planeCoeffs); | |
500 | + | |
501 | delete[] atomPositions; | |
502 | d->normalVector = planeCoeffs.normal(); | |
503 | } | |
504 | diff -rupN avogadro-1.2.0/libavogadro/src/navigate.cpp avogadro-1.2.0-new/libavogadro/src/navigate.cpp | |
505 | --- avogadro-1.2.0/libavogadro/src/navigate.cpp 2016-06-08 16:19:45.000000000 +0200 | |
506 | +++ avogadro-1.2.0-new/libavogadro/src/navigate.cpp 2018-01-03 14:45:25.179574245 +0100 | |
507 | @@ -40,7 +40,7 @@ namespace Avogadro { | |
508 | void Navigate::zoom(GLWidget *widget, const Eigen::Vector3d &goal, | |
509 | double delta) | |
510 | { | |
511 | - Vector3d transformedGoal = widget->camera()->modelview() * goal; | |
512 | + Vector3d transformedGoal = (widget->camera()->modelview() * goal.homogeneous()).head<3>(); | |
513 | double distanceToGoal = transformedGoal.norm(); | |
514 | ||
515 | double t = ZOOM_SPEED * delta; | |
516 | diff -rupN avogadro-1.2.0/libavogadro/src/python/camera.cpp avogadro-1.2.0-new/libavogadro/src/python/camera.cpp | |
517 | --- avogadro-1.2.0/libavogadro/src/python/camera.cpp 2016-06-08 16:19:45.000000000 +0200 | |
518 | +++ avogadro-1.2.0-new/libavogadro/src/python/camera.cpp 2018-01-03 14:45:25.181574245 +0100 | |
519 | @@ -10,7 +10,7 @@ using namespace Avogadro; | |
520 | void export_Camera() | |
521 | { | |
522 | ||
523 | - const Eigen::Transform3d& (Camera::*modelview_ptr)() const = &Camera::modelview; | |
524 | + const Eigen::Projective3d& (Camera::*modelview_ptr)() const = &Camera::modelview; | |
525 | Eigen::Vector3d (Camera::*unProject_ptr1)(const Eigen::Vector3d&) const = &Camera::unProject; | |
526 | Eigen::Vector3d (Camera::*unProject_ptr2)(const QPoint&, const Eigen::Vector3d&) const = &Camera::unProject; | |
527 | Eigen::Vector3d (Camera::*unProject_ptr3)(const QPoint&) const = &Camera::unProject; | |
528 | diff -rupN avogadro-1.2.0/libavogadro/src/python/eigen.cpp avogadro-1.2.0-new/libavogadro/src/python/eigen.cpp | |
529 | --- avogadro-1.2.0/libavogadro/src/python/eigen.cpp 2016-06-08 16:19:45.000000000 +0200 | |
530 | +++ avogadro-1.2.0-new/libavogadro/src/python/eigen.cpp 2018-01-03 14:45:25.182574245 +0100 | |
531 | @@ -305,9 +305,9 @@ template <> struct ScalarTraits<double> | |
532 | struct innerclass | |
533 | { | |
534 | // | |
535 | - // Eigen::Transform3d --> python array (4x4) | |
536 | + // Eigen::Projective3d --> python array (4x4) | |
537 | // | |
538 | - static PyObject* convert(Eigen::Transform3d const &trans) | |
539 | + static PyObject* convert(Eigen::Projective3d const &trans) | |
540 | { | |
541 | npy_intp dims[2] = { 4, 4 }; | |
542 | PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE); | |
543 | @@ -321,9 +321,9 @@ template <> struct ScalarTraits<double> | |
544 | return incref(result); | |
545 | } | |
546 | // | |
547 | - // Eigen::Transform3d* --> python array (4x4) | |
548 | + // Eigen::Projective3d* --> python array (4x4) | |
549 | // | |
550 | - static PyObject* convert(Eigen::Transform3d *trans) | |
551 | + static PyObject* convert(Eigen::Projective3d *trans) | |
552 | { | |
553 | npy_intp dims[2] = { 4, 4 }; | |
554 | PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE); | |
555 | @@ -337,9 +337,9 @@ template <> struct ScalarTraits<double> | |
556 | return incref(result); | |
557 | } | |
558 | // | |
559 | - // const Eigen::Transform3d* --> python array (4x4) | |
560 | + // const Eigen::Projective3d* --> python array (4x4) | |
561 | // | |
562 | - static PyObject* convert(const Eigen::Transform3d *trans) | |
563 | + static PyObject* convert(const Eigen::Projective3d *trans) | |
564 | { | |
565 | npy_intp dims[2] = { 4, 4 }; | |
566 | PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE); | |
567 | @@ -358,10 +358,10 @@ template <> struct ScalarTraits<double> | |
568 | Transform3d_to_python_array() | |
569 | { | |
570 | #ifndef WIN32 | |
571 | - to_python_converter<Eigen::Transform3d, innerclass>(); | |
572 | + to_python_converter<Eigen::Projective3d, innerclass>(); | |
573 | #endif | |
574 | - to_python_converter<Eigen::Transform3d*, innerclass>(); | |
575 | - to_python_converter<const Eigen::Transform3d*, innerclass>(); | |
576 | + to_python_converter<Eigen::Projective3d*, innerclass>(); | |
577 | + to_python_converter<const Eigen::Projective3d*, innerclass>(); | |
578 | } | |
579 | ||
580 | }; | |
581 | @@ -373,17 +373,17 @@ template <> struct ScalarTraits<double> | |
582 | // Insert an rvalue from_python converter at the tail of the | |
583 | // chain. Used for implicit conversions | |
584 | // | |
585 | - // python array --> Eigen::Transform3d | |
586 | + // python array --> Eigen::Projective3d | |
587 | // | |
588 | // used for: | |
589 | // | |
590 | - // void function(Eigen::Transform3d vec) | |
591 | - // void function(Eigen::Transform3d & vec) | |
592 | - // void function(const Eigen::Transform3d & vec) | |
593 | + // void function(Eigen::Projective3d vec) | |
594 | + // void function(Eigen::Projective3d & vec) | |
595 | + // void function(const Eigen::Projective3d & vec) | |
596 | // | |
597 | - converter::registry::push_back( &convertible, &construct, type_id<Eigen::Transform3d>() ); | |
598 | + converter::registry::push_back( &convertible, &construct, type_id<Eigen::Projective3d>() ); | |
599 | ||
600 | - converter::registry::insert( &convert, type_id<Eigen::Transform3d>() ); | |
601 | + converter::registry::insert( &convert, type_id<Eigen::Projective3d>() ); | |
602 | } | |
603 | ||
604 | static void* convert(PyObject *obj_ptr) | |
605 | @@ -401,7 +401,7 @@ template <> struct ScalarTraits<double> | |
606 | throw_error_already_set(); // the 1D array does not have exactly 3 elements | |
607 | ||
608 | double *values = reinterpret_cast<double*>(array->data); | |
609 | - Eigen::Transform3d *c_obj = new Eigen::Transform3d(); | |
610 | + Eigen::Projective3d *c_obj = new Eigen::Projective3d(); | |
611 | double *dataPtr = c_obj->data(); | |
612 | ||
613 | for (int i = 0; i < 16; ++i) | |
614 | @@ -432,7 +432,7 @@ template <> struct ScalarTraits<double> | |
615 | // I think this is a better way to get at the double array, where is this | |
616 | // deleted though? Does Boost::Python do it? | |
617 | double *values = reinterpret_cast<double*>(array->data); | |
618 | - Eigen::Transform3d *storage = new Eigen::Transform3d(); | |
619 | + Eigen::Projective3d *storage = new Eigen::Projective3d(); | |
620 | double *dataPtr = storage->data(); | |
621 | ||
622 | for (int i = 0; i < 16; ++i) | |
623 | @@ -467,21 +467,21 @@ class EigenUnitTestHelper | |
624 | void set_vector3d_ptr(Eigen::Vector3d* vec) { m_vector3d = *vec; } | |
625 | void set_const_vector3d_ptr(const Eigen::Vector3d* const vec) { m_vector3d = *vec; } | |
626 | ||
627 | - //Eigen::Transform3d transform3d() { return m_transform3d; } | |
628 | - //Eigen::Transform3d& transform3d_ref() { return m_transform3d; } | |
629 | - const Eigen::Transform3d& const_transform3d_ref() { return m_transform3d; } | |
630 | - Eigen::Transform3d* transform3d_ptr() { return &m_transform3d; } | |
631 | - const Eigen::Transform3d* const_transform3d_ptr() { return &m_transform3d; } | |
632 | - | |
633 | - //void set_transform3d(Eigen::Transform3d vec) { m_transform3d = vec; } | |
634 | - //void set_transform3d_ref(Eigen::Transform3d& vec) { m_transform3d = vec; } | |
635 | - void set_const_transform3d_ref(const Eigen::Transform3d& vec) { m_transform3d = vec; } | |
636 | - void set_transform3d_ptr(Eigen::Transform3d* vec) { m_transform3d = *vec; } | |
637 | - void set_const_transform3d_ptr(const Eigen::Transform3d* const vec) { m_transform3d = *vec; } | |
638 | + //Eigen::Projective3d transform3d() { return m_transform3d; } | |
639 | + //Eigen::Projective3d& transform3d_ref() { return m_transform3d; } | |
640 | + const Eigen::Projective3d& const_transform3d_ref() { return m_transform3d; } | |
641 | + Eigen::Projective3d* transform3d_ptr() { return &m_transform3d; } | |
642 | + const Eigen::Projective3d* const_transform3d_ptr() { return &m_transform3d; } | |
643 | + | |
644 | + //void set_transform3d(Eigen::Projective3d vec) { m_transform3d = vec; } | |
645 | + //void set_transform3d_ref(Eigen::Projective3d& vec) { m_transform3d = vec; } | |
646 | + void set_const_transform3d_ref(const Eigen::Projective3d& vec) { m_transform3d = vec; } | |
647 | + void set_transform3d_ptr(Eigen::Projective3d* vec) { m_transform3d = *vec; } | |
648 | + void set_const_transform3d_ptr(const Eigen::Projective3d* const vec) { m_transform3d = *vec; } | |
649 | ||
650 | private: | |
651 | Eigen::Vector3d m_vector3d; | |
652 | - Eigen::Transform3d m_transform3d; | |
653 | + Eigen::Projective3d m_transform3d; | |
654 | ||
655 | }; | |
656 | #endif | |
657 | @@ -529,7 +529,7 @@ void export_Eigen() | |
658 | Vector3x_to_python_array<Eigen::Vector3i>(); | |
659 | Vector3x_from_python_array<Eigen::Vector3i>(); | |
660 | ||
661 | - // Eigen::Transform3d | |
662 | + // Eigen::Projective3d | |
663 | Transform3d_to_python_array(); | |
664 | Transform3d_from_python_array(); | |
665 | ||
666 | diff -rupN avogadro-1.2.0/libavogadro/src/tools/bondcentrictool.cpp avogadro-1.2.0-new/libavogadro/src/tools/bondcentrictool.cpp | |
667 | --- avogadro-1.2.0/libavogadro/src/tools/bondcentrictool.cpp 2016-06-08 16:19:45.000000000 +0200 | |
668 | +++ avogadro-1.2.0-new/libavogadro/src/tools/bondcentrictool.cpp 2018-01-03 14:45:25.188574245 +0100 | |
669 | @@ -578,8 +578,13 @@ namespace Avogadro { | |
670 | ||
671 | Vector3d clicked = *m_clickedAtom->pos(); | |
672 | ||
673 | - Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >= | |
674 | - (widget->camera()->modelview() * center).z() ? -1 : 1)); | |
675 | + Eigen::Vector4d otherTransformedHomog = widget->camera()->modelview() * other.homogeneous(); | |
676 | + Vector3d otherTransformed = otherTransformedHomog.hnormalized(); | |
677 | + Eigen::Vector4d centerTransformedHomog = (widget->camera()->modelview() * center.homogeneous()); | |
678 | + Vector3d centerTransformed = centerTransformedHomog.hnormalized(); | |
679 | + | |
680 | + Vector3d axis = Vector3d(0, 0, (otherTransformed.z() >= | |
681 | + centerTransformed.z() ? -1 : 1)); | |
682 | ||
683 | Vector3d centerProj = widget->camera()->project(center); | |
684 | centerProj -= Vector3d(0,0,centerProj.z()); | |
685 | @@ -673,8 +678,13 @@ namespace Avogadro { | |
686 | ||
687 | Vector3d clicked = *m_clickedAtom->pos(); | |
688 | ||
689 | - Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >= | |
690 | - (widget->camera()->modelview() * center).z() ? -1 : 1)); | |
691 | + Eigen::Vector4d otherTransformedHomog = (widget->camera()->modelview() * other.homogeneous()); | |
692 | + Vector3d otherTransformed = otherTransformedHomog.hnormalized(); | |
693 | + Eigen::Vector4d centerTransformedHomog = (widget->camera()->modelview() * center.homogeneous()); | |
694 | + Vector3d centerTransformed = centerTransformedHomog.hnormalized(); | |
695 | + | |
696 | + Vector3d axis = Vector3d(0, 0, (otherTransformed.z() >= | |
697 | + centerTransformed.z() ? -1 : 1)); | |
698 | ||
699 | Vector3d centerProj = widget->camera()->project(center); | |
700 | centerProj -= Vector3d(0,0,centerProj.z()); | |
701 | @@ -1362,10 +1372,10 @@ namespace Avogadro { | |
702 | ||
703 | planeVec = length * (planeVec / planeVec.norm()); | |
704 | ||
705 | - Vector3d topLeft = widget->camera()->modelview() * (left + planeVec); | |
706 | - Vector3d topRight = widget->camera()->modelview() * (right + planeVec); | |
707 | - Vector3d botRight = widget->camera()->modelview() * (right - planeVec); | |
708 | - Vector3d botLeft = widget->camera()->modelview() * (left - planeVec); | |
709 | + Vector3d topLeft = (widget->camera()->modelview() * (left + planeVec).homogeneous()).head<3>(); | |
710 | + Vector3d topRight = (widget->camera()->modelview() * (right + planeVec).homogeneous()).head<3>(); | |
711 | + Vector3d botRight = (widget->camera()->modelview() * (right - planeVec).homogeneous()).head<3>(); | |
712 | + Vector3d botLeft = (widget->camera()->modelview() * (left - planeVec).homogeneous()).head<3>(); | |
713 | ||
714 | float alpha = 0.4; | |
715 | double lineWidth = 1.5; | |
716 | @@ -1444,10 +1454,10 @@ namespace Avogadro { | |
717 | C = D + ((C-D).normalized() * minWidth); | |
718 | } | |
719 | ||
720 | - Vector3d topLeft = widget->camera()->modelview() * D; | |
721 | - Vector3d topRight = widget->camera()->modelview() * C; | |
722 | - Vector3d botRight = widget->camera()->modelview() * B; | |
723 | - Vector3d botLeft = widget->camera()->modelview() * A; | |
724 | + Vector3d topLeft = (widget->camera()->modelview() * D.homogeneous()).head<3>(); | |
725 | + Vector3d topRight = (widget->camera()->modelview() * C.homogeneous()).head<3>(); | |
726 | + Vector3d botRight = (widget->camera()->modelview() * B.homogeneous()).head<3>(); | |
727 | + Vector3d botLeft = (widget->camera()->modelview() * A.homogeneous()).head<3>(); | |
728 | ||
729 | float alpha = 0.4; | |
730 | double lineWidth = 1.5; | |
731 | @@ -1506,12 +1516,12 @@ namespace Avogadro { | |
732 | Vector3d positionVector) | |
733 | { | |
734 | //Rotate skeleton around a particular axis and center point | |
735 | - Eigen::Transform3d rotation; | |
736 | + Eigen::Projective3d rotation; | |
737 | rotation = Eigen::AngleAxisd(angle, rotationVector); | |
738 | rotation.pretranslate(centerVector); | |
739 | rotation.translate(-centerVector); | |
740 | ||
741 | - return rotation*positionVector; | |
742 | + return (rotation*positionVector.homogeneous()).head<3>(); | |
743 | } | |
744 | ||
745 | // ########## showAnglesChanged ########## | |
746 | diff -rupN avogadro-1.2.0/libavogadro/src/tools/manipulatetool.cpp avogadro-1.2.0-new/libavogadro/src/tools/manipulatetool.cpp | |
747 | --- avogadro-1.2.0/libavogadro/src/tools/manipulatetool.cpp 2016-06-08 16:19:45.000000000 +0200 | |
748 | +++ avogadro-1.2.0-new/libavogadro/src/tools/manipulatetool.cpp 2018-01-03 14:45:25.180574245 +0100 | |
749 | @@ -40,7 +40,6 @@ | |
750 | #include <QAbstractButton> | |
751 | ||
752 | using Eigen::Vector3d; | |
753 | -using Eigen::Transform3d; | |
754 | using Eigen::AngleAxisd; | |
755 | ||
756 | namespace Avogadro { | |
757 | @@ -138,7 +137,7 @@ namespace Avogadro { | |
758 | double yRotate = m_settingsWidget->yRotateSpinBox->value() * DEG_TO_RAD; | |
759 | double zRotate = m_settingsWidget->zRotateSpinBox->value() * DEG_TO_RAD; | |
760 | ||
761 | - Eigen::Transform3d rotation; | |
762 | + Eigen::Projective3d rotation; | |
763 | rotation.matrix().setIdentity(); | |
764 | rotation.translation() = center; | |
765 | rotation.rotate(AngleAxisd(xRotate, Vector3d::UnitX()) | |
766 | @@ -152,12 +151,12 @@ namespace Avogadro { | |
767 | if (p->type() == Primitive::AtomType) { | |
768 | Atom *atom = static_cast<Atom*>(p); | |
769 | tempPos = translate + *(atom->pos()); | |
770 | - atom->setPos(rotation * tempPos); | |
771 | + atom->setPos((rotation * tempPos.homogeneous()).head<3>()); | |
772 | } | |
773 | } else { | |
774 | foreach(Atom *atom, widget->molecule()->atoms()) { | |
775 | tempPos = translate + *(atom->pos()); | |
776 | - atom->setPos(rotation * tempPos); | |
777 | + atom->setPos((rotation * tempPos.homogeneous()).head<3>()); | |
778 | } | |
779 | } | |
780 | ||
781 | @@ -199,7 +198,7 @@ namespace Avogadro { | |
782 | widget->setCursor(Qt::SizeVerCursor); | |
783 | ||
784 | // Move the selected atom(s) in to or out of the screen | |
785 | - Vector3d transformedGoal = widget->camera()->modelview() * *goal; | |
786 | + Vector3d transformedGoal = (widget->camera()->modelview() * goal->homogeneous()).head<3>(); | |
787 | double distanceToGoal = transformedGoal.norm(); | |
788 | ||
789 | double t = ZOOM_SPEED * delta; | |
790 | @@ -255,7 +254,7 @@ namespace Avogadro { | |
791 | ||
792 | // Rotate the selected atoms about the center | |
793 | // rotate only selected primitives | |
794 | - Transform3d fragmentRotation; | |
795 | + Eigen::Projective3d fragmentRotation; | |
796 | fragmentRotation.matrix().setIdentity(); | |
797 | fragmentRotation.translation() = *center; | |
798 | fragmentRotation.rotate( | |
799 | @@ -266,7 +265,7 @@ namespace Avogadro { | |
800 | ||
801 | foreach(Primitive *p, widget->selectedPrimitives()) | |
802 | if (p->type() == Primitive::AtomType) | |
803 | - static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos()); | |
804 | + static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>()); | |
805 | widget->molecule()->update(); | |
806 | } | |
807 | ||
808 | @@ -274,7 +273,7 @@ namespace Avogadro { | |
809 | double delta) const | |
810 | { | |
811 | // Tilt the selected atoms about the center | |
812 | - Transform3d fragmentRotation; | |
813 | + Eigen::Projective3d fragmentRotation; | |
814 | fragmentRotation.matrix().setIdentity(); | |
815 | fragmentRotation.translation() = *center; | |
816 | fragmentRotation.rotate(AngleAxisd(delta * ROTATION_SPEED, widget->camera()->backTransformedZAxis())); | |
817 | @@ -282,7 +281,7 @@ namespace Avogadro { | |
818 | ||
819 | foreach(Primitive *p, widget->selectedPrimitives()) | |
820 | if (p->type() == Primitive::AtomType) | |
821 | - static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos()); | |
822 | + static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>()); | |
823 | widget->molecule()->update(); | |
824 | } | |
825 | ||
826 | diff -rupN avogadro-1.2.0/libavogadro/src/tools/navigatetool.cpp avogadro-1.2.0-new/libavogadro/src/tools/navigatetool.cpp | |
827 | --- avogadro-1.2.0/libavogadro/src/tools/navigatetool.cpp 2016-06-08 16:19:45.000000000 +0200 | |
828 | +++ avogadro-1.2.0-new/libavogadro/src/tools/navigatetool.cpp 2018-01-03 14:45:25.180574245 +0100 | |
829 | @@ -92,7 +92,8 @@ namespace Avogadro { | |
830 | double sumOfWeights = 0.; | |
831 | QList<Atom*> atoms = widget->molecule()->atoms(); | |
832 | foreach (Atom *atom, atoms) { | |
833 | - Vector3d transformedAtomPos = widget->camera()->modelview() * *atom->pos(); | |
834 | + Vector3d transformedAtomPos = (widget->camera()->modelview() * | |
835 | + atom->pos()->homogeneous()).head<3>(); | |
836 | double atomDistance = transformedAtomPos.norm(); | |
837 | double dot = transformedAtomPos.z() / atomDistance; | |
838 | double weight = exp(-30. * (1. + dot)); | |
839 | diff -rupN avogadro-1.2.0/libavogadro/src/tools/skeletontree.cpp avogadro-1.2.0-new/libavogadro/src/tools/skeletontree.cpp | |
840 | --- avogadro-1.2.0/libavogadro/src/tools/skeletontree.cpp 2016-06-08 16:19:45.000000000 +0200 | |
841 | +++ avogadro-1.2.0-new/libavogadro/src/tools/skeletontree.cpp 2018-01-03 14:45:25.181574245 +0100 | |
842 | @@ -29,6 +29,7 @@ | |
843 | #include <avogadro/atom.h> | |
844 | #include <avogadro/bond.h> | |
845 | #include <avogadro/molecule.h> | |
846 | +#include <iostream> | |
847 | ||
848 | using namespace Eigen; | |
849 | using namespace std; | |
850 | @@ -221,7 +222,7 @@ namespace Avogadro { | |
851 | { | |
852 | if (m_rootNode) { | |
853 | //Rotate skeleton around a particular axis and center point | |
854 | - Eigen::Transform3d rotation; | |
855 | + Eigen::Projective3d rotation; | |
856 | rotation = Eigen::AngleAxisd(angle, rotationAxis); | |
857 | rotation.pretranslate(centerVector); | |
858 | rotation.translate(-centerVector); | |
859 | @@ -248,11 +249,11 @@ namespace Avogadro { | |
860 | // ########## recursiveRotate ########## | |
861 | ||
862 | void SkeletonTree::recursiveRotate(Node* n, | |
863 | - const Eigen::Transform3d &rotationMatrix) | |
864 | + const Eigen::Projective3d &rotationMatrix) | |
865 | { | |
866 | // Update the root node with the new position | |
867 | Atom* a = n->atom(); | |
868 | - a->setPos(rotationMatrix * (*a->pos())); | |
869 | + a->setPos((rotationMatrix * (*a->pos()).homogeneous()).head<3>()); | |
870 | a->update(); | |
871 | ||
872 | // Now update the children | |
873 | diff -rupN avogadro-1.2.0/libavogadro/src/tools/skeletontree.h avogadro-1.2.0-new/libavogadro/src/tools/skeletontree.h | |
874 | --- avogadro-1.2.0/libavogadro/src/tools/skeletontree.h 2016-06-08 16:19:45.000000000 +0200 | |
875 | +++ avogadro-1.2.0-new/libavogadro/src/tools/skeletontree.h 2018-01-03 14:45:25.181574245 +0100 | |
876 | @@ -230,7 +230,7 @@ namespace Avogadro { | |
877 | * @param centerVector Center location to rotate around. | |
878 | */ | |
879 | void recursiveRotate(Node* n, | |
880 | - const Eigen::Transform3d &rotationMatrix); | |
881 | + const Eigen::Projective3d &rotationMatrix); | |
882 | ||
883 | }; | |
884 | } // End namespace Avogadro | |
885 | diff -rupN avogadro-1.2.0/libavogadro/tests/CMakeLists.txt avogadro-1.2.0-new/libavogadro/tests/CMakeLists.txt | |
886 | --- avogadro-1.2.0/libavogadro/tests/CMakeLists.txt 2016-06-08 16:19:45.000000000 +0200 | |
887 | +++ avogadro-1.2.0-new/libavogadro/tests/CMakeLists.txt 2018-01-03 14:46:31.890570555 +0100 | |
888 | @@ -13,7 +13,7 @@ set_directory_properties(PROPERTIES INCL | |
889 | include_directories( | |
890 | ${CMAKE_SOURCE_DIR} | |
891 | ${CMAKE_CURRENT_BINARY_DIR} | |
892 | - ${EIGEN2_INCLUDE_DIR} | |
893 | + ${EIGEN3_INCLUDE_DIR} | |
894 | ${OPENBABEL2_INCLUDE_DIR} | |
895 | ${BOOST_PYTHON_INCLUDES} | |
896 | ${PYTHON_INCLUDE_PATH} |