Metahuman_DNA_Calibration/dna_viewer/reader/descriptor.py
2022-11-29 14:25:24 +01:00

77 lines
2.5 KiB
Python

from typing import Optional
from dna import BinaryStreamReader
from ..model.descriptor import Descriptor as DescriptorModel
class Descriptor:
"""
A class used for reading the descriptor part of the DNA file
Attributes
----------
@type reader: BinaryStreamReader
@param reader: The stream reader being used
@type descriptor: DescriptorModel
@param descriptor: The object that holds the descriptor data read from the DNA file
"""
def __init__(self, stream_reader: BinaryStreamReader) -> None:
self.reader = stream_reader
self.descriptor: Optional[DescriptorModel] = None
def read(self) -> DescriptorModel:
"""
Starts reading in the descriptor part of the DNA
@rtype: DescriptorModel
@returns: the instance of the created descriptor model
"""
self.descriptor = DescriptorModel()
self.add_basic_data()
self.add_metadata()
self.add_geometry_data()
self.add_db_data()
return self.descriptor
def add_basic_data(self) -> None:
"""Reads in the character name, archetype, gender and age"""
self.descriptor.name = self.reader.getName()
self.descriptor.archetype = self.reader.getArchetype()
self.descriptor.gender = self.reader.getGender()
self.descriptor.age = self.reader.getAge()
def add_metadata(self) -> None:
"""Reads in the metadata provided from the DNA file"""
for i in range(self.reader.getMetaDataCount()):
self.descriptor.metadata[
self.reader.getMetaDataKey(i)
] = self.reader.getMetaDataValue(self.reader.getMetaDataKey(i))
def add_geometry_data(self) -> None:
"""Sets the translation unit, rotation unit, and coordinate system from the DNA file"""
self.descriptor.translation_unit = self.reader.getTranslationUnit()
self.descriptor.rotation_unit = self.reader.getRotationUnit()
coordinate_system = self.reader.getCoordinateSystem()
self.descriptor.coordinate_system = (
coordinate_system.xAxis,
coordinate_system.yAxis,
coordinate_system.zAxis,
)
def add_db_data(self) -> None:
"""Reads in the db data from the DNA file"""
self.descriptor.lod_count = self.reader.getLODCount()
self.descriptor.db_max_lod = self.reader.getDBMaxLOD()
self.descriptor.db_complexity = self.reader.getDBComplexity()
self.descriptor.db_name = self.reader.getDBName()