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?'
Esempio n. 2
0
    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]