From 6afd515ecee367d05c96c6dbc31fb894e14b3c0b Mon Sep 17 00:00:00 2001
From: "Daniel M. Basso" <danielmbasso@gmail.com>
Date: Thu, 3 Nov 2011 01:13:07 +0000
Subject: [PATCH] Fixed importing float c3d files with non-native endianness.

---
 io_anim_c3d/__init__.py |  2 +-
 io_anim_c3d/c3d.py      | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/io_anim_c3d/__init__.py b/io_anim_c3d/__init__.py
index f8510fd2e..1a460ea41 100644
--- a/io_anim_c3d/__init__.py
+++ b/io_anim_c3d/__init__.py
@@ -25,7 +25,7 @@
 bl_info = {
     'name': "C3D Graphics Lab Motion Capture file (.c3d)",
     'author': "Daniel Monteiro Basso <daniel@basso.inf.br>",
-    'version': (2011, 11, 2, 1),
+    'version': (2011, 11, 3, 1),
     'blender': (2, 6, 0),
     'api': 41226,
     'location': "File > Import",
diff --git a/io_anim_c3d/c3d.py b/io_anim_c3d/c3d.py
index a28c5dce9..7df6bcf80 100644
--- a/io_anim_c3d/c3d.py
+++ b/io_anim_c3d/c3d.py
@@ -169,7 +169,10 @@ class MarkerSet:
          self.frameRate) = struct.unpack('fhhf', td)
         self.scale *= scale
         if self.scale < 0:
-            self.readMarker = self.readFloatMarker
+            if self.procType == 2:
+                self.readMarker = self.readFloatMarkerInvOrd
+            else:
+                self.readMarker = self.readFloatMarker
             self.scale *= -1
         else:
             self.readMarker = self.readShortMarker
@@ -203,6 +206,14 @@ class MarkerSet:
         m.position = (x * self.scale, y * self.scale, z * self.scale)
         return m
 
+    def readFloatMarkerInvOrd(self, infile):
+        m = Marker()
+        inv = lambda f: f[2:] + f[:2]
+        i = lambda: inv(infile.read(4))
+        x, y, z, m.confidence = struct.unpack('ffff', i() + i() + i() + i())
+        m.position = (x * self.scale, y * self.scale, z * self.scale)
+        return m
+
     def readShortMarker(self, infile):
         m = Marker()
         x, y, z, m.confidence = struct.unpack('hhhh', infile.read(8))
-- 
GitLab