public static Circle3d ReadCircle3d(this MsgPackReader reader)
        {
            var circle = new Circle3d();

            reader.ReadPrefix(TypePrefixes.FixMap);
            for (int i = 0; i < 3; i++)
            {
                var key = reader.ReadString();
                switch (key)
                {
                case "center": circle.Center = reader.ReadPoint3d(); break;

                case "radius": circle.Radius = reader.ReadDouble(); break;

                case "normal": circle.Normal = reader.ReadPoint3d(); break;

                default: throw new InvalidOperationException(Resources.ParseError);
                }
            }
            return(circle);
        }
        public static Sphere ReadSphere(this MsgPackReader reader)
        {
            var sphere = new Sphere();

            reader.ReadPrefix(TypePrefixes.FixMap);
            for (int i = 0; i < 2; i++)
            {
                var key = reader.ReadString();
                switch (key)
                {
                case "center": sphere.Center = reader.ReadPoint3d(); break;

                case "radius": sphere.Radius = reader.ReadDouble(); break;

                default: throw new InvalidOperationException(Resources.ParseError);
                }
            }
            return(sphere);
        }