Source code for subsurface.writer.to_rex.material_encoder

from subsurface.writer.to_rex.common import write_data_block_header, encode
from subsurface.writer.to_rex.data_struct import RexMaterial


__all__ = ['material_encode', 'write_material_data']


[docs]def material_encode(rex_material: RexMaterial, data_id: int): # Write data block header for Material data_header_bytes = write_data_block_header( data_type=5, # Material data type version_data=1, # Version. Probably useful for operation counter size_data=68, # Size of the block is FIXED data_id=data_id # self.data_id ) # Write Material material_bytes = write_material_data(rex_material) rex_bytes = data_header_bytes + material_bytes return rex_bytes
[docs]def write_material_data(rex_material: RexMaterial): """Writes a standard material definition block Returns: bytes (size:68) representation of the material """ input_ = [(rex_material.ka_red, 'float32'), (rex_material.ka_green, 'float32'), (rex_material.ka_blue, 'float32'), (rex_material.ka_texture_ID, 'uint64'), (rex_material.ks_red, 'float32'), (rex_material.ks_green, 'float32'), (rex_material.ks_blue, 'float32'), (rex_material.ks_texture_ID, 'uint64'), (rex_material.kd_red, 'float32'), (rex_material.kd_green, 'float32'), (rex_material.kd_blue, 'float32'), (rex_material.kd_texture_ID, 'uint64'), (rex_material.ns, 'float32'), (rex_material.alpha, 'float32')] block_bytes = encode(input_) return block_bytes