def n_create_store_normal_data(n_nitrishape): """Store normal data as BinaryExtraData""" n_nibinaryextradata_1 = NifFormat.NiBinaryExtraData() n_nitrishape.num_extra_data_list = 1 n_nitrishape.extra_data_list.update_size() n_nitrishape.extra_data_list[0] = n_nibinaryextradata_1 with ref(n_nibinaryextradata_1) as n_nibinaryextradata: n_nibinaryextradata.name = b'Tangent space (binormal & tangent vectors)' n_nibinaryextradata.binary_data = b'\xfb\x05\xd1>\xdc\x05\xd1>\xec\x05Q?\xaf\xd2H?\xf6\x9d\x16?\xe2\xd2H>\xb7\xa4O?\x15,\xf9\xbeY\x1d\xa6\xbe\xec\x05Q?\xda\x05\xd1>\xfd\x05\xd1\xbe\x89\xfe\xa6>\xc6f\xf8>\xa8\xb2O\xbf\xf2YC?\x00"\x05>q\x11"?\xb3\xb3O?\x90\x0f\xa7\xbe\xd5W\xf8>\x98L\x0f?\xfcnK?\x90\x89p>\x89\xfe\xa6>\xc6f\xf8>\xa8\xb2O\xbf\x98L\x0f?\xfcnK?\x90\x89p>\xaf\xd2H?\xf6\x9d\x16?\xe2\xd2H>\xaf\xd2H?\xf6\x9d\x16?\xe2\xd2H>\x98L\x0f?\xfcnK?\x90\x89p>\xb7\xa4O?\x15,\xf9\xbeY\x1d\xa6\xbe\xb7\xa4O?\x15,\xf9\xbeY\x1d\xa6\xbe\xb3\xb3O?\x90\x0f\xa7\xbe\xd5W\xf8>\xf2YC?\x00"\x05>q\x11"?\xfb\x05\xd1>\xdc\x05\xd1>\xec\x05Q?\xec\x05Q?\xda\x05\xd1>\xfd\x05\xd1\xbe\xf2YC?\x00"\x05>q\x11"?\xef\x045?\xf8\x045\xbf\xeec\x11\xb5\xb7\xe3g>~\xee\x10\xbfl\xe7J?.\xd0\xbf\xbd\x0e\xd6\'\xbf\x13\xd0??\xbc+\x1d\xb5\xf8\x045\xbf\xee\x045\xbf+\x9f?\xbf\x1c\x1f(?x\x00\xbc=B\xb5\x94\xbe2[N\xbf\x91\x00\x04?\xa4\xb6\xbb\xbdu\x9b??\xa0$(?\xc5+\x18\xbf\x9e\x0f@>\xad/H?+\x9f?\xbf\x1c\x1f(?x\x00\xbc=\xc5+\x18\xbf\x9e\x0f@>\xad/H?\xb7\xe3g>~\xee\x10\xbfl\xe7J?\xb7\xe3g>~\xee\x10\xbfl\xe7J?\xc5+\x18\xbf\x9e\x0f@>\xad/H?.\xd0\xbf\xbd\x0e\xd6\'\xbf\x13\xd0??.\xd0\xbf\xbd\x0e\xd6\'\xbf\x13\xd0??\xa4\xb6\xbb\xbdu\x9b??\xa0$(?B\xb5\x94\xbe2[N\xbf\x91\x00\x04?\xef\x045?\xf8\x045\xbf\xeec\x11\xb5\xbc+\x1d\xb5\xf8\x045\xbf\xee\x045\xbfB\xb5\x94\xbe2[N\xbf\x91\x00\x04?'
def add_defined_tangents(self, trishape, tangents, bitangents, as_extra_data): # check if size of tangents and bitangents is equal to num_vertices if not (len(tangents) == len(bitangents) == trishape.data.num_vertices): raise NifError( f'Number of tangents or bitangents does not agree with number of vertices in {trishape.name}' ) if as_extra_data: # if tangent space extra data already exists, use it # find possible extra data block for extra in trishape.get_extra_datas(): if isinstance(extra, NifFormat.NiBinaryExtraData): if extra.name == b'Tangent space (binormal & tangent vectors)': break else: extra = None if not extra: # otherwise, create a new block and link it extra = NifFormat.NiBinaryExtraData() extra.name = b'Tangent space (binormal & tangent vectors)' trishape.add_extra_data(extra) # write the data extra.binary_data = np.concatenate((tangents, bitangents), axis=0).astype('<f').tobytes() else: # set tangent space flag trishape.data.extra_vectors_flags = 16 # XXX used to be 61440 # XXX from Sid Meier's Railroad trishape.data.tangents.update_size() trishape.data.bitangents.update_size() for vec, data_tans in zip(tangents, trishape.data.tangents): data_tans.x = vec[0] data_tans.y = vec[1] data_tans.z = vec[2] for vec, data_bins in zip(bitangents, trishape.data.bitangents): data_bins.x = vec[0] data_bins.y = vec[1] data_bins.z = vec[2]