From 9ee59e5a0b2a83decb05d491752c935f0a1381e4 Mon Sep 17 00:00:00 2001
From: juergen <juergen@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Mon, 22 Mar 2010 18:58:10 +0000
Subject: [PATCH] fixed BZDNG-49: superposition failed in windows: -replaced
 all reinterpret_casts with manual copying over index by index

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1871 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/mol/alg/src/svd_superpose.cc | 39 +++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc
index 343c00e98..6608372c1 100644
--- a/modules/mol/alg/src/svd_superpose.cc
+++ b/modules/mol/alg/src/svd_superpose.cc
@@ -27,6 +27,7 @@
 #include <Eigen/SVD>
 #include <Eigen/LU>
 
+#include <iostream>
 #include <ost/base.hh>
 #include <ost/geom/vec3.hh>
 #include <ost/mol/alg/svd_superpose.hh>
@@ -108,19 +109,54 @@ SuperposerSVD::SuperposerSVD(int natoms, bool alloc_atoms):
 }
 
 geom::Vec3 SuperposerSVD::EigenVec3ToVec3(const EVec3 &vec){
+#if  defined _MSC_VER
+  geom::Vec3 myvec3;
+  for (int i=0; i<3; ++i) {
+      myvec3[i]=vec[i]; 
+  }
+  return myvec3;
+#else
   return *reinterpret_cast<const geom::Vec3*>(&vec);
+#endif
 }
 
 geom::Mat3 SuperposerSVD::EigenMat3ToMat3(const EMat3 &mat){
+#if  defined _MSC_VER
+  geom::Mat3 mymat3;
+  for (int i=0; i<3; ++i) {
+    for (int j=0; j<3; ++j) {    
+      mymat3(j,i)=mat(i,j); 
+    }
+  }
+  return mymat3;
+#else
   return *reinterpret_cast<const geom::Mat3*>(&mat);
+#endif
+
 }
 
 EVec3 SuperposerSVD::Vec3ToEigenRVec(const geom::Vec3 &vec){
+#if  defined _MSC_VER
+  EVec3 myvec3=EVec3::Zero();
+  for (int counter=0; counter<3; ++counter) {
+    myvec3[counter]=vec[counter];
+  }
+  return myvec3;
+#else
   return *reinterpret_cast<const ERVec3*>(&vec);
+#endif
 }
 
 EVec3 SuperposerSVD::Vec3ToEigenVec(const geom::Vec3 &vec){
-  return *reinterpret_cast<const EVec3*>(&vec);
+#if  defined _MSC_VER
+  EVec3 myvec3=EVec3::Zero();
+  for (int counter=0; counter<3; ++counter) {
+    myvec3[counter]=vec[counter];
+  }
+  return myvec3;
+#else
+  return *reinterpret_cast<const EVec3*>(&vec);  
+#endif
 }
 
 EMatX SuperposerSVD::SubtractVecFromMatrixRows(EMatX Mat,
@@ -165,6 +201,7 @@ SuperpositionResult SuperposerSVD::DoSuperposition()
   atoms1_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms1_, avg1_);
   atoms2_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms2_, avg2_);
   EMatX atoms2=atoms2_.transpose();
+
   //single value decomposition
   Eigen::SVD<EMat3> svd(atoms2*atoms1_);
 
-- 
GitLab