import logging
from nanome._internal import serializer_fields
from . import serializers
logger = logging.getLogger(__name__)
[docs]class DeleteShape(serializer_fields.TypeSerializer):
[docs] def version(self):
return 1
[docs] def name(self):
return "DeleteShape"
[docs] def serialize(self, version, value, context):
if version == 0:
if len(value) > 1:
msg = "SetShape: Using a list of shapes with an old version of Nanome"
logger.warning(msg)
raise TypeError(msg)
context.write_int(value[0])
elif version == 1:
context.write_int_array(value)
[docs] def deserialize(self, version, context):
if version == 0:
return [context.read_bool()]
elif version == 1:
return context.read_byte_array()
[docs]class SetShape(serializer_fields.TypeSerializer):
def __init__(self):
self._position = serializer_fields.UnityPositionField()
self._rotation = serializer_fields.UnityRotationField()
self._color = serializer_fields.ColorField()
self._sphere = serializers.SphereSerializer()
self._line = serializers.LineSerializer()
self._label = serializers.LabelSerializer()
self._mesh = serializers.MeshSerializer()
self._shape = serializers.ShapeSerializer()
self._shape_array = serializer_fields.ArrayField()
self._shape_array.set_type(self._shape)
[docs] def version(self):
return 2
[docs] def name(self):
return "SetShape"
[docs] def serialize(self, version, value, context):
from nanome.util import Quaternion
from nanome.util.enums import ShapeType
if version == 0:
if len(value) > 1:
msg = "SetShape: Using a list of shapes with an old version of Nanome"
logger.warning(msg)
raise TypeError(msg)
first_elem = value[0]
context.write_byte(int(first_elem.shape_type))
if first_elem.shape_type == ShapeType.Sphere:
context.write_using_serializer(self._sphere, first_elem)
if first_elem.shape_type == ShapeType.Line:
context.write_using_serializer(self._line, first_elem)
if first_elem.shape_type == ShapeType.Label:
context.write_using_serializer(self._label, first_elem)
if first_elem.shape_type == ShapeType.Mesh:
context.write_using_serializer(self._mesh, first_elem)
context.write_int(first_elem.index)
context.write_long(first_elem.target)
context.write_byte(int(first_elem.anchor))
context.write_using_serializer(self._position, first_elem.position)
context.write_using_serializer(self._rotation, Quaternion())
context.write_using_serializer(self._color, first_elem.color)
elif version == 1:
if len(value) > 1:
msg = "SetShape: Using a list of shapes with an old version of Nanome"
logger.warning(msg)
raise TypeError(msg)
first_elem = value[0]
context.write_using_serializer(self._shape, first_elem)
elif version == 2:
context.write_using_serializer(self._shape_array, value)
[docs] def deserialize(self, version, context):
if version < 2:
return ([context.read_int()], [context.read_bool()])
else:
indices_arr = context.read_int_array()
success_arr = context.read_byte_array()
return (indices_arr, success_arr)