瀏覽代碼

merge git://github.com/gellule/assimp.git
the strings used in materials and elsewhere in assimp. Because of this,
in PyAssimp3 strings in materials don't work properly on 64 bits
platforms. This commit adds a StringUInt32 ctypes structure and use it
in GetMaterialProperties as a workaround.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1105 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 13 年之前
父節點
當前提交
380737c4c4
共有 1 個文件被更改,包括 15 次插入2 次删除
  1. 15 2
      port/PyAssimp3/pyassimp/pyassimp.py

+ 15 - 2
port/PyAssimp3/pyassimp/pyassimp.py

@@ -119,7 +119,20 @@ class aiTuple:
             
     def __repr__(self):
         return str([x for x in self])
-        
+
+class StringUInt32(ctypes.Structure):
+    """
+    A ctypes structure used for material strings.
+    This is a workaround for a type mismatch for the length field between strings used for materials and elsewhere.
+    """
+    
+    MAXLEN = 1024
+    
+    _fields_ = [
+            ("length", ctypes.c_uint32),
+            ("data", ctypes.c_char*MAXLEN),
+        ]
+
 def _init(self):
     """
     Custom initialize() for C structs, adds safely accessable member functionality.
@@ -253,7 +266,7 @@ def GetMaterialProperties(material):
             value = [x for x in arr]
         elif p.mType == 3: #string can't be an array
             try:
-                value = cast(p.mData, POINTER(structs.String)).contents.data
+                value = cast(p.mData, POINTER(StringUInt32)).contents.data
             except UnicodeDecodeError:
                 print('UnicodeDecodeError reading material property, ignoring.')
                 continue