blendfile.py: Add support reading single char DNA values as unsigned integer.
A single char is nearly never a string or byte, but rather a small int or bitflag value. ;)
This commit is contained in:
@@ -771,6 +771,7 @@ class DNAStruct:
|
|||||||
|
|
||||||
dna_type = field.dna_type
|
dna_type = field.dna_type
|
||||||
dna_name = field.dna_name
|
dna_name = field.dna_name
|
||||||
|
dna_size = field.dna_size
|
||||||
|
|
||||||
if dna_name.is_pointer:
|
if dna_name.is_pointer:
|
||||||
return DNA_IO.read_pointer(handle, header)
|
return DNA_IO.read_pointer(handle, header)
|
||||||
@@ -791,6 +792,9 @@ class DNAStruct:
|
|||||||
return [DNA_IO.read_float(handle, header) for i in range(dna_name.array_size)]
|
return [DNA_IO.read_float(handle, header) for i in range(dna_name.array_size)]
|
||||||
return DNA_IO.read_float(handle, header)
|
return DNA_IO.read_float(handle, header)
|
||||||
elif dna_type.dna_type_id == b'char':
|
elif dna_type.dna_type_id == b'char':
|
||||||
|
if dna_size == 1:
|
||||||
|
# Single char, assume it's bitflag or int value, and not a string/bytes data...
|
||||||
|
return DNA_IO.read_char(handle, header)
|
||||||
if use_str:
|
if use_str:
|
||||||
if use_nil:
|
if use_nil:
|
||||||
return DNA_IO.read_string0(handle, dna_name.array_size)
|
return DNA_IO.read_string0(handle, dna_name.array_size)
|
||||||
@@ -885,6 +889,13 @@ class DNA_IO:
|
|||||||
add = data.find(b'\0')
|
add = data.find(b'\0')
|
||||||
return data[:add]
|
return data[:add]
|
||||||
|
|
||||||
|
UCHAR = struct.Struct(b'<b'), struct.Struct(b'>b')
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def read_char(handle, fileheader):
|
||||||
|
st = DNA_IO.UCHAR[fileheader.endian_index]
|
||||||
|
return st.unpack(handle.read(st.size))[0]
|
||||||
|
|
||||||
USHORT = struct.Struct(b'<H'), struct.Struct(b'>H')
|
USHORT = struct.Struct(b'<H'), struct.Struct(b'>H')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
Reference in New Issue
Block a user