private LoadedFrameImage LoadImage(FrameImage image)
        {
            var res = _Project.FindResource(ProjectDirectoryUsage.Image, image.Resource.ResourceID);

            if (res != null)
            {
                AbstractImage imageData = LoadResource(res);
                if (imageData == null)
                {
                    return(_EmptyImage);
                }
                var clipped = ClipBitmap(imageData, image);

                if (image.AlphaBlendMode)
                {
                    AbstractImage.MakeAlphaBlendBitmap(clipped);
                }

                return(new LoadedFrameImage
                {
                    Bitmap = clipped,
                    UsePalette = imageData.UsePalette
                });
            }
            return(_EmptyImage);
        }
Exemple #2
0
 private void FrameImage_MouseMove(object sender, MouseEventArgs e)
 {
     if (_draw)
     {
         _sprite.SpriteBase.X2 = (short)(e.X / _zoom);
         _sprite.SpriteBase.Y2 = (short)(e.Y / _zoom);
         WHLabel.Text          = "W, H = (" + (_sprite.SpriteBase.Width + 1) + ", " + (_sprite.SpriteBase.Height + 1) + ")";
         FrameImage.Refresh();
     }
 }
Exemple #3
0
 private void FrameImage_MouseUp(object sender, MouseEventArgs e)
 {
     _draw = false;
     _sprite.SpriteBase.X2 = Math.Max((short)(_sprite.SpriteBase.X1 + 1), _sprite.SpriteBase.X2);
     _sprite.SpriteBase.Y2 = Math.Max((short)(_sprite.SpriteBase.Y1 + 1), _sprite.SpriteBase.Y2);
     if (Modified != null)
     {
         Modified(this, new EventArgs());
     }
     FrameImage.Refresh();
 }
Exemple #4
0
 public void Load(Stream stream)
 {
     FileInfo.KeepOpen = true;
     _stream           = stream;
     Header            = new THP_Parser(stream);
     foreach (var frame in Header.Frames)
     {
         var tex = new FrameImage(videoData.Frames.Count);
         tex.Frame        = frame;
         videoData.Width  = Header.Video.Width;
         videoData.Height = Header.Video.Height;
         videoData.Frames.Add(tex);
     }
 }
Exemple #5
0
        public void UpdateCenterFrame()
        {
            if (_sprite != null)
            {
                _zoom             = BasePanel.Width / _sprite.SpriteWidth;
                _zoom             = Math.Min(BasePanel.Height / _sprite.SpriteHeight, _zoom);
                FrameImage.Width  = _sprite.SpriteWidth * _zoom;
                FrameImage.Height = _sprite.SpriteHeight * _zoom;
            }
            int x = (BasePanel.Width >> 1) - (FrameImage.Width >> 1);
            int y = (BasePanel.Height >> 1) - (FrameImage.Height >> 1);

            FrameImage.Location = new Point(x, y);
            FrameImage.Refresh();
        }
Exemple #6
0
        // min, max, ave を返す
        public async UnaryResult <(int, int, double)> SendImage(FrameImage image)
        {
            Logger.Debug($"[FrameImage] (w, h) = ({image.Width}, {image.Height})");

            int  max = int.MinValue;
            int  min = int.MaxValue;
            long sum = 0;

            Parallel.ForEach(image.Bytes, (b) => {
                sum += b;
                if (max < b)
                {
                    max = b;
                }
                if (b < min)
                {
                    min = b;
                }
            });

            return(min, max, (double)sum / (image.Width * image.Height));
        }
        public static List <Sprite> GenerateAtlas(ImportContext ctx, List <Layer> layers, string atlasPath)
        {
            var file     = ctx.file;
            var settings = ctx.settings;
            var path     = atlasPath;

            var images = file.frames
                         .Select(frame => {
                var cels  = frame.cels.Values.OrderBy(it => it.layerIndex).ToList();
                var image = new FrameImage(file.width, file.height);

                foreach (var cel in cels)
                {
                    var layer = file.FindLayer(cel.layerIndex);
                    if (!layers.Contains(layer))
                    {
                        continue;
                    }

                    for (int cy = 0; cy < cel.height; ++cy)
                    {
                        for (int cx = 0; cx < cel.width; ++cx)
                        {
                            var c = cel.GetPixelRaw(cx, cy);
                            if (c.a != 0f)
                            {
                                var x = cx + cel.x;
                                var y = cy + cel.y;

                                var lastColor = image.GetPixel(x, y);
                                // blending
                                var color = Color.Lerp(lastColor, c, c.a);
                                color.a   = lastColor.a + c.a * (1 - lastColor.a);
                                color.r  /= color.a;
                                color.g  /= color.a;
                                color.b  /= color.a;

                                image.SetPixel(x, y, color);

                                // expand image area
                                image.minx = Mathf.Min(image.minx, x);
                                image.miny = Mathf.Min(image.miny, y);

                                image.maxx = Mathf.Max(image.maxx, x);
                                image.maxy = Mathf.Max(image.maxy, y);
                            }
                        }
                    }
                }

                if (image.minx == int.MaxValue)
                {
                    image.minx = image.maxx = image.miny = image.maxy = 0;
                }

                return(image);
            })
                         .ToList();

            var packList = images.Select(image => new PackData {
                width = image.finalWidth, height = image.finalHeight
            }).ToList();
            var packResult = PackAtlas(packList);

            if (packResult.imageSize > 2048)
            {
                Debug.LogWarning("Generate atlas size is larger than 2048, this might force Unity to compress the image.");
            }

            var texture     = new Texture2D(packResult.imageSize, packResult.imageSize);
            var transparent = new Color(0, 0, 0, 0);

            for (int y = 0; y < texture.height; ++y)
            {
                for (int x = 0; x < texture.width; ++x)
                {
                    texture.SetPixel(x, y, transparent);
                }
            }

            Vector2 oldPivotNorm = settings.PivotRelativePos;

            var metaList = new List <SpriteMetaData>();

            for (int i = 0; i < images.Count; ++i)
            {
                var pos   = packResult.positions[i];
                var image = images[i];

                for (int y = image.miny; y <= image.maxy; ++y)
                {
                    for (int x = image.minx; x <= image.maxx; ++x)
                    {
                        int texX = (x - image.minx) + pos.x;
                        int texY = -(y - image.miny) + pos.y + image.finalHeight - 1;
                        texture.SetPixel(texX, texY, image.GetPixel(x, y));
                    }
                }

                var metadata = new SpriteMetaData();
                metadata.name      = ctx.fileNameNoExt + "_" + i;
                metadata.alignment = (int)SpriteAlignment.Custom;
                metadata.rect      = new Rect(pos.x, pos.y, image.finalWidth, image.finalHeight);

                // calculate relative pivot
                var oldPivotTex  = Vector2.Scale(oldPivotNorm, new Vector2(file.width, file.height));
                var newPivotTex  = oldPivotTex - new Vector2(image.minx, file.height - image.maxy - 1);
                var newPivotNorm = Vector2.Scale(newPivotTex, new Vector2(1.0f / image.finalWidth, 1.0f / image.finalHeight));
                metadata.pivot = newPivotNorm;

                ctx.spriteCropPositions.Add(new Vector2(image.minx, file.height - image.maxy - 1));

                metaList.Add(metadata);
            }

            var bytes = texture.EncodeToPNG();

            File.WriteAllBytes(path, bytes);

            // Import texture
            AssetDatabase.Refresh();
            var importer = AssetImporter.GetAtPath(path) as TextureImporter;

            importer.textureType         = TextureImporterType.Sprite;
            importer.spritePixelsPerUnit = settings.ppu;
            importer.mipmapEnabled       = false;
            importer.filterMode          = FilterMode.Point;
            importer.textureCompression  = TextureImporterCompression.Uncompressed;

            importer.spritesheet      = metaList.ToArray();
            importer.spriteImportMode = SpriteImportMode.Multiple;
            importer.maxTextureSize   = 4096;

            EditorUtility.SetDirty(importer);
            importer.SaveAndReimport();

            return(GetAtlasSprites(path));
        }
 public void ResetImage(FrameImage img)
 {
     cachedImage.Remove(img.ImageID);
     cachedUnclipped.Remove(img.ImageID);
 }
 private Bitmap ClipBitmap(AbstractImage res, FrameImage img)
 {
     return(res.ToBitmap(_Palette, new Rectangle(img.X, img.Y, img.W, img.H)));
 }
Exemple #10
0
        public static List <Sprite> GenerateAtlas(ImportContext ctx, List <Layer> layers, bool densePacked = true, int border = 8)
        {
            var file = ctx.file;

            var images = file.frames
                         .Select(frame => {
                var cels  = frame.cels.Values.OrderBy(it => it.layerIndex).ToList();
                var image = new FrameImage(file.width, file.height);

                foreach (var cel in cels)
                {
                    var layer = file.FindLayer(cel.layerIndex);
                    if (!layers.Contains(layer))
                    {
                        continue;
                    }

                    for (int cy = 0; cy < cel.height; ++cy)
                    {
                        for (int cx = 0; cx < cel.width; ++cx)
                        {
                            var c      = cel.GetPixelRaw(cx, cy);
                            var cAlpha = BlendeModeAnalysis.DocColor.rgba_geta(c);
                            if (cAlpha != 0f)
                            {
                                var x = cx + cel.x;
                                var y = cy + cel.y;
                                if (0 <= x && x < file.width &&
                                    0 <= y && y < file.height)       // Aseprite allows some pixels out of bounds to be kept, ignore them
                                {
                                    var lastColor = image.GetPixel(x, y);
                                    // blending
                                    //var color = FunctionBoost.Color_Lerp(lastColor, c, c.Af);
                                    //color.Af = lastColor.Af + c.Af * (1 - lastColor.Af);
                                    //color.Rf /= color.Af;
                                    //color.Gf /= color.Af;
                                    //color.Bf /= color.Af;
                                    var color = BlendeModeAnalysis.GetBlendFunc(layer.blendMode)(
                                        lastColor, c, cAlpha);

                                    image.SetPixel(x, y, color);

                                    // expand image area
                                    image.minx = Mathf.Min(image.minx, x);
                                    image.miny = Mathf.Min(image.miny, y);

                                    image.maxx = Mathf.Max(image.maxx, x);
                                    image.maxy = Mathf.Max(image.maxy, y);
                                }
                            }
                        }
                    }
                }

                if (image.minx == int.MaxValue)
                {
                    image.minx = image.maxx = image.miny = image.maxy = 0;
                }

                if (!densePacked)       // override image border for sparsely packed atlas
                {
                    image.minx = image.miny = 0;
                    image.maxx = file.width - 1;
                    image.maxy = file.height - 1;
                }

                return(image);
            })
                         .ToList();

            var packList = images.Select(image => new PackData {
                width = image.finalWidth, height = image.finalHeight
            }).ToList();
            var packResult = PackAtlas(packList, border);

            if (packResult.imageSize > 2048)
            {
                Log.Warnning("Generate atlas size is larger than 2048 !");
            }

            var textureData = new Color[packResult.imageSize * packResult.imageSize];

            // build image
            for (int i = 0; i < images.Count; ++i)
            {
                var pos   = packResult.positions[i];
                var image = images[i];
                for (int y = image.miny; y <= image.maxy; ++y)
                {
                    for (int x = image.minx; x <= image.maxx; ++x)
                    {
                        //int texX = (x - image.minx) + pos.x;
                        //int texY = -(y - image.miny) + pos.y + image.finalHeight - 1;
                        //textureData[texX + texY * packResult.imageSize] = image.GetPixel(x, y);
                        int texX = (x - image.minx) + pos.x;
                        int texY = (y - image.miny) + pos.y;
                        textureData[texX + texY * packResult.imageSize] = BlendeModeAnalysis.ConvertTo(image.GetPixel(x, y));
                    }
                }
            }
            var texture = Image.NewImageData(packResult.imageSize, packResult.imageSize);

            texture.SetPixels(textureData);
            var textureImage = Graphics.NewImage(texture);

            textureImage.SetFilter(FilterMode.Nearest, FilterMode.Nearest);
            // build image end

            Vector2 oldPivotNorm = Vector2.Zero;

            var metaList = new List <Sprite>(images.Count);

            for (int i = 0; i < images.Count; ++i)
            {
                var   pos      = packResult.positions[i];
                var   image    = images[i];
                float duration = file.frames[i].duration;

                var metadata = new Sprite();
                metadata.frame     = file.frames[i];
                metadata.image     = textureImage;
                metadata.duration  = duration * 0.001f;
                metadata.name      = ctx.fileNameNoExt + "_" + i;
                metadata.alignment = SpriteAlignment.Custom;
                metadata.rect      = new RectangleF(pos.x, pos.y, image.finalWidth, image.finalHeight);
                metadata.quad      = Graphics.NewQuad(pos.x, pos.y, image.finalWidth, image.finalHeight, packResult.imageSize, packResult.imageSize);

                // calculate relative pivot
                metadata.imgQuadOffset = new Vector2(image.minx, image.miny);

                //ctx.spriteCropPositions.Add(new Vector2(image.minx, file.height - image.maxy - 1));

                metaList.Add(metadata);
            }

            return(metaList);
        }
        static async Task MainAsync()
        {
            //--- API が公開されている IP / Port / 認証情報を設定して通信路を生成
            var channel = new Channel("localhost", 12345, ChannelCredentials.Insecure, new[] {
                new ChannelOption(ChannelOptions.MaxReceiveMessageLength, int.MaxValue),
                new ChannelOption(ChannelOptions.MaxSendMessageLength, int.MaxValue),
            });

            //--- 指定されたサービス定義用のクライアントを作成
            var client      = MagicOnionClient.Create <ISampleApi>(channel);
            var imageClient = MagicOnionClient.Create <IImageService>(channel);

            for (int i = 0; i < 1; i++)
            {
                // ■UnaryStreaming
                //--- RPC 形式で超お手軽呼び出し
                var result = await client.Sum(1, 2);

                Console.WriteLine($"[Unary] Result : {result}");

                // ■サーバーからの Streaming
                //--- サーバーが WriteAsync すると ForEachAsync が動く
                //--- サーバーから完了信号が送られると ForEachAsync が終了する
                var streaming = await client.Repeat(4, 5);

                await streaming.ResponseStream.ForEachAsync(x => {
                    Console.WriteLine($"[Streaming] Result : {x}");
                });

                // ■Clientからの Streaming
                var clientStreaming = await client.SplitUpload();

                foreach (var x in Enumerable.Range(1, 4))
                {
                    await clientStreaming.RequestStream.WriteAsync(x);
                }
                // -- 完了通知
                await clientStreaming.RequestStream.CompleteAsync();

                // --- サーバーからの結果を取得
                var response = await clientStreaming.ResponseAsync;
                Console.WriteLine($"[ClientStreaming] Result : {response}");

                // ■双方向の Streaming
                // サーバー側からのメッセージを受信
                var duplexStreaming = await client.DuplexSample();

                var task = duplexStreaming.ResponseStream.ForEachAsync(x => {
                    Console.WriteLine($"[DuplexStreaming] Received: {x}");
                });
                // クライアント側からサーバー側にメッセージを送信
                foreach (var x in Enumerable.Range(0, 5))
                {
                    await duplexStreaming.RequestStream.WriteAsync(x);
                }
                // メッセージ送信完了を通知
                await duplexStreaming.RequestStream.CompleteAsync();

                await task;

                // ■独自型の送信
                var point  = new Vector2(3, 5);
                var resVec = await client.Sample(point);                    // Nilが返ってくる

                Console.WriteLine($"独自型送信結果1: {resVec.GetType().FullName}");

                // ■ステータスコードの取得
                var call   = client.Sample(new Vector2(1, 2));
                var header = await call.ResponseHeadersAsync;
                var status = call.GetStatus();                  // ResponseHeadersAsyncしないとGetStatus()を呼び出せない

                if (status.StatusCode == StatusCode.OK)
                {
                    // OKだったら結果を受け取る
                    var resVec2 = await call.ResponseAsync;
                    Console.WriteLine($"独自型送信結果2: 正常: {resVec}");
                }
                else
                {
                    Console.WriteLine($"独自型送信結果2: エラー: {status}");
                }

                try {
                    // OK 以外のステータスコードが送られているレスポンスに対して値を読み出そうとすると RpcException が発生する
                    resVec = await client.Sample(new Vector2(-1, 2));

                    Console.WriteLine($"独自型送信結果3: 正常: {resVec.GetType().FullName}");
                } catch (Grpc.Core.RpcException ex) {
                    Console.WriteLine(ex.Message);
                }

                // サーバー側で予期せぬエラーが発生したら… ⇒ StatusCode.Unknown が返される
                call   = client.Sample(new Vector2(int.MinValue, 2));
                header = await call.ResponseHeadersAsync;
                status = call.GetStatus();

                if (status.StatusCode == StatusCode.OK)
                {
                    // OKだったら結果を受け取る
                    var resVec2 = await call.ResponseAsync;
                    Console.WriteLine($"独自型送信結果4: 正常: {resVec}");
                }
                else
                {
                    // Status(StatusCode = Unknown, Detail = "Exception was thrown by handler.")
                    Console.WriteLine($"独自型送信結果4: エラー: {status}");
                }

                // ■ヘッダーにデータを詰め込む
                // ※string, byte[] を格納できる
                // ※byte[] を格納する場合はキー名に "-bin" を付けること
                var metadata = new Metadata()
                {
                    new Metadata.Entry("Key", "Value"),
                    new Metadata.Entry("Key-bin", new byte[] { 1, 2 }),
                };
                //var clientWithMetadata = MagicOnionClient.Create<ISampleApi>(channel).WithHeaders(metadata);
                //var resWithMetadata = await clientWithMetadata.SampleWithMetadata();
                // ↑でもいいけど、新しくclientを作らなくても大丈夫↓
                var resWithMetadata = await client.WithHeaders(metadata).SampleWithMetadata();

                Console.WriteLine($"メタデータ結果: 正常: {resWithMetadata.GetType().FullName}");
            }

            // byte[]の送信
            BitmapImage bi = LoadImageFile(@"resources/image.axd.jpg");

            byte[] bytes = ExtractByteArray(bi);
            var    frame = new FrameImage(bi.PixelWidth, bi.PixelHeight, bytes);

            var(min, max, ave) = await imageClient.SendImage(frame);

            Console.WriteLine($"Frame送信結果: bytes={bytes.Length},  Min={min}, Max={max}, Ave={ave}");

            // 巨大なbyte[]の送信
            try {
                bi              = LoadImageFile(@"resources/jem_40mb.tif");
                bytes           = ExtractByteArray(bi);
                frame           = new FrameImage(bi.PixelWidth, bi.PixelHeight, bytes);
                (min, max, ave) = await imageClient.SendImage(frame);

                Console.WriteLine($"Frame送信結果: bytes={bytes.Length},  Min={min}, Max={max}, Ave={ave}");
            }catch (RpcException ex) {
                // デフォルトでは4MBを越えるとエラーになる
                Console.WriteLine(ex.Message);
            }

            // ■ユーザー固有IDの送信
            // ★2020/08/05現在(MagicOnion3.0.13では) ChannelContext というクラスが存在しない!廃止された?!
            //--- ChannelContext でチャンネルとユーザー固有の ID をラップ
            //var connectionId = "なにかしらユーザー固有のID";
            //var context = new ChannelContext(channel, () => connectionId);
            //await context.WaitConnectComplete();  // 接続待ち
            //var client = context.CreateClient<ISampleApi>();
            //var result = await client.Sample();
            // ★仕方ないので、自前でヘッダーに仕込んで送るようにする
            var meta = new Metadata()
            {
                new Metadata.Entry("ConnectionId_ja", "なにかのID文字列"),
                new Metadata.Entry("ConnectionId", "some id string"),
            };
            var connectionIDClient = MagicOnionClient.Create <IConnectionIDService>(channel).WithHeaders(meta);
            var res = await connectionIDClient.SendConnectionID();

            // ■ゲームサーバーへの接続 (部屋への登録/解除、サーバーからのpush通知受け取り)
            GamingHubClient gamingHub  = new GamingHubClient();
            string          name       = $"p{System.Diagnostics.Process.GetCurrentProcess().Id}";
            var             gameObject = await gamingHub.ConnectAsync(channel, "room1", name);

            Console.ReadLine();

            await gamingHub.LeaveAsync();

            Console.ReadLine();
        }
Exemple #12
0
        public IPersistable CreateRIFObject(ObjectType objectType, ref IntermediateFormatReader context)
        {
            IPersistable persistable = null;

            if (objectType == ObjectType.Null)
            {
                return(null);
            }
            IDOwner    parentIDOwner    = this.m_parentIDOwner;
            ReportItem parentReportItem = this.m_parentReportItem;

            switch (objectType)
            {
            case ObjectType.PageSection:
                persistable             = new PageSection(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.Line:
                persistable             = new Line(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.Rectangle:
                persistable             = new Rectangle(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.Image:
                persistable             = new Image(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.TextBox:
                persistable             = new TextBox(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.SubReport:
                persistable             = new SubReport(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.Grouping:
                persistable = new Grouping(ConstructionPhase.Deserializing);
                break;

            case ObjectType.Sorting:
                persistable = new Sorting(ConstructionPhase.Deserializing);
                break;

            case ObjectType.ReportItemCollection:
                persistable = new ReportItemCollection();
                break;

            case ObjectType.ReportItemIndexer:
                persistable = (IPersistable)(object)default(ReportItemIndexer);
                break;

            case ObjectType.Style:
                persistable = new Style(ConstructionPhase.Deserializing);
                break;

            case ObjectType.AttributeInfo:
                persistable = new AttributeInfo();
                break;

            case ObjectType.Visibility:
                persistable = new Visibility();
                break;

            case ObjectType.ExpressionInfo:
                persistable = new ExpressionInfo();
                break;

            case ObjectType.ExpressionInfoTypeValuePair:
                persistable = new ExpressionInfoTypeValuePair();
                break;

            case ObjectType.DataAggregateInfo:
                persistable = new DataAggregateInfo();
                break;

            case ObjectType.RunningValueInfo:
                persistable = new RunningValueInfo();
                break;

            case ObjectType.Filter:
                persistable = new Filter();
                break;

            case ObjectType.DataSource:
                persistable = new DataSource();
                break;

            case ObjectType.DataSet:
                persistable = new DataSet();
                break;

            case ObjectType.ReportQuery:
                persistable = new ReportQuery();
                break;

            case ObjectType.Field:
                persistable = new Field();
                break;

            case ObjectType.ParameterValue:
                persistable = new ParameterValue();
                break;

            case ObjectType.ReportSnapshot:
                persistable = new ReportSnapshot();
                break;

            case ObjectType.DocumentMapNode:
                persistable = new DocumentMapNode();
                break;

            case ObjectType.DocumentMapBeginContainer:
                persistable = DocumentMapBeginContainer.Instance;
                break;

            case ObjectType.DocumentMapEndContainer:
                persistable = DocumentMapEndContainer.Instance;
                break;

            case ObjectType.ReportInstance:
                persistable = new ReportInstance();
                break;

            case ObjectType.ParameterInfo:
                persistable = new ParameterInfo();
                break;

            case ObjectType.ValidValue:
                persistable = new ValidValue();
                break;

            case ObjectType.ParameterDataSource:
                persistable = new ParameterDataSource();
                break;

            case ObjectType.ParameterDef:
                persistable = new ParameterDef();
                break;

            case ObjectType.ProcessingMessage:
                persistable = new ProcessingMessage();
                break;

            case ObjectType.CodeClass:
                persistable = (IPersistable)(object)default(CodeClass);
                break;

            case ObjectType.Action:
                persistable = new Action();
                break;

            case ObjectType.RenderingPagesRanges:
                persistable = (IPersistable)(object)default(RenderingPagesRanges);
                break;

            case ObjectType.IntermediateFormatVersion:
                persistable = new IntermediateFormatVersion();
                break;

            case ObjectType.ImageInfo:
                persistable = new ImageInfo();
                break;

            case ObjectType.ActionItem:
                persistable = new ActionItem();
                break;

            case ObjectType.DataValue:
                persistable = new DataValue();
                break;

            case ObjectType.CustomReportItem:
                persistable             = new CustomReportItem(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.SortFilterEventInfoMap:
                persistable = new SortFilterEventInfoMap();
                break;

            case ObjectType.SortFilterEventInfo:
                persistable = new SortFilterEventInfo();
                break;

            case ObjectType.EndUserSort:
                persistable = new EndUserSort();
                break;

            case ObjectType.ScopeLookupTable:
                persistable = new ScopeLookupTable();
                break;

            case ObjectType.Tablix:
                persistable             = new Tablix(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.TablixHeader:
                persistable = new TablixHeader();
                break;

            case ObjectType.TablixMember:
                persistable = new TablixMember();
                break;

            case ObjectType.TablixColumn:
                persistable = new TablixColumn();
                break;

            case ObjectType.TablixRow:
                persistable = new TablixRow();
                break;

            case ObjectType.TablixCornerCell:
                persistable = new TablixCornerCell();
                break;

            case ObjectType.TablixCell:
                persistable = new TablixCell();
                break;

            case ObjectType.Chart:
                persistable             = new Chart(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.ChartMember:
                persistable = new ChartMember();
                break;

            case ObjectType.ChartSeries:
                persistable = new ChartSeries();
                break;

            case ObjectType.ChartDataPoint:
                persistable = new ChartDataPoint();
                break;

            case ObjectType.ChartDataPointValues:
                persistable = new ChartDataPointValues();
                break;

            case ObjectType.ChartArea:
                persistable = new ChartArea();
                break;

            case ObjectType.ChartLegend:
                persistable = new ChartLegend();
                break;

            case ObjectType.ChartLegendTitle:
                persistable = new ChartLegendTitle();
                break;

            case ObjectType.ChartAxis:
                persistable = new ChartAxis();
                break;

            case ObjectType.ThreeDProperties:
                persistable = new ChartThreeDProperties();
                break;

            case ObjectType.ChartDataLabel:
                persistable = new ChartDataLabel();
                break;

            case ObjectType.ChartMarker:
                persistable = new ChartMarker();
                break;

            case ObjectType.ChartTitle:
                persistable = new ChartTitle();
                break;

            case ObjectType.ChartAxisScaleBreak:
                persistable = new ChartAxisScaleBreak();
                break;

            case ObjectType.ChartDerivedSeries:
                persistable = new ChartDerivedSeries();
                break;

            case ObjectType.ChartBorderSkin:
                persistable = new ChartBorderSkin();
                break;

            case ObjectType.ChartNoDataMessage:
                persistable = new ChartNoDataMessage();
                break;

            case ObjectType.ChartItemInLegend:
                persistable = new ChartItemInLegend();
                break;

            case ObjectType.ChartEmptyPoints:
                persistable = new ChartEmptyPoints();
                break;

            case ObjectType.ChartNoMoveDirections:
                persistable = new ChartNoMoveDirections();
                break;

            case ObjectType.ChartFormulaParameter:
                persistable = new ChartFormulaParameter();
                break;

            case ObjectType.ChartLegendColumn:
                persistable = new ChartLegendColumn();
                break;

            case ObjectType.ChartLegendColumnHeader:
                persistable = new ChartLegendColumnHeader();
                break;

            case ObjectType.ChartLegendCustomItem:
                persistable = new ChartLegendCustomItem();
                break;

            case ObjectType.ChartLegendCustomItemCell:
                persistable = new ChartLegendCustomItemCell();
                break;

            case ObjectType.ChartAlignType:
                persistable = new ChartAlignType();
                break;

            case ObjectType.ChartElementPosition:
                persistable = new ChartElementPosition();
                break;

            case ObjectType.ChartSmartLabel:
                persistable = new ChartSmartLabel();
                break;

            case ObjectType.ChartStripLine:
                persistable = new ChartStripLine();
                break;

            case ObjectType.ChartAxisTitle:
                persistable = new ChartAxisTitle();
                break;

            case ObjectType.ChartCustomPaletteColor:
                persistable = new ChartCustomPaletteColor();
                break;

            case ObjectType.GridLines:
                persistable = new ChartGridLines();
                break;

            case ObjectType.ChartTickMarks:
                persistable = new ChartTickMarks();
                break;

            case ObjectType.DataMember:
                persistable = new DataMember();
                break;

            case ObjectType.CustomDataRow:
                persistable = new CustomDataRow();
                break;

            case ObjectType.DataCell:
                persistable = new DataCell();
                break;

            case ObjectType.Variable:
                persistable = new Variable();
                break;

            case ObjectType.Page:
                persistable = new Page();
                break;

            case ObjectType.Paragraph:
                persistable = new Paragraph();
                break;

            case ObjectType.TextRun:
                persistable = new TextRun();
                break;

            case ObjectType.Report:
                persistable             = new Report(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.GaugePanel:
                persistable             = new GaugePanel(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.GaugeMember:
                persistable = new GaugeMember();
                break;

            case ObjectType.GaugeRow:
                persistable = new GaugeRow();
                break;

            case ObjectType.GaugeCell:
                persistable = new GaugeCell();
                break;

            case ObjectType.BackFrame:
                persistable = new BackFrame();
                break;

            case ObjectType.CapImage:
                persistable = new CapImage();
                break;

            case ObjectType.FrameBackground:
                persistable = new FrameBackground();
                break;

            case ObjectType.FrameImage:
                persistable = new FrameImage();
                break;

            case ObjectType.CustomLabel:
                persistable = new CustomLabel();
                break;

            case ObjectType.GaugeImage:
                persistable = new GaugeImage();
                break;

            case ObjectType.GaugeInputValue:
                persistable = new GaugeInputValue();
                break;

            case ObjectType.GaugeLabel:
                persistable = new GaugeLabel();
                break;

            case ObjectType.GaugePanelItem:
                persistable = new GaugePanelItem();
                break;

            case ObjectType.GaugeTickMarks:
                persistable = new GaugeTickMarks();
                break;

            case ObjectType.LinearGauge:
                persistable = new LinearGauge();
                break;

            case ObjectType.LinearPointer:
                persistable = new LinearPointer();
                break;

            case ObjectType.LinearScale:
                persistable = new LinearScale();
                break;

            case ObjectType.NumericIndicator:
                persistable = new NumericIndicator();
                break;

            case ObjectType.PinLabel:
                persistable = new PinLabel();
                break;

            case ObjectType.PointerCap:
                persistable = new PointerCap();
                break;

            case ObjectType.PointerImage:
                persistable = new PointerImage();
                break;

            case ObjectType.RadialGauge:
                persistable = new RadialGauge();
                break;

            case ObjectType.RadialPointer:
                persistable = new RadialPointer();
                break;

            case ObjectType.RadialScale:
                persistable = new RadialScale();
                break;

            case ObjectType.ScaleLabels:
                persistable = new ScaleLabels();
                break;

            case ObjectType.ScalePin:
                persistable = new ScalePin();
                break;

            case ObjectType.ScaleRange:
                persistable = new ScaleRange();
                break;

            case ObjectType.IndicatorImage:
                persistable = new IndicatorImage();
                break;

            case ObjectType.StateIndicator:
                persistable = new StateIndicator();
                break;

            case ObjectType.Thermometer:
                persistable = new Thermometer();
                break;

            case ObjectType.TickMarkStyle:
                persistable = new TickMarkStyle();
                break;

            case ObjectType.TopImage:
                persistable = new TopImage();
                break;

            case ObjectType.LookupInfo:
                persistable = new LookupInfo();
                break;

            case ObjectType.LookupDestinationInfo:
                persistable = new LookupDestinationInfo();
                break;

            case ObjectType.ReportSection:
                persistable = new ReportSection();
                break;

            case ObjectType.MapFieldDefinition:
                persistable = new MapFieldDefinition();
                break;

            case ObjectType.MapFieldName:
                persistable = new MapFieldName();
                break;

            case ObjectType.MapLineLayer:
                persistable = new MapLineLayer();
                break;

            case ObjectType.MapShapefile:
                persistable = new MapShapefile();
                break;

            case ObjectType.MapPolygonLayer:
                persistable = new MapPolygonLayer();
                break;

            case ObjectType.MapSpatialDataRegion:
                persistable = new MapSpatialDataRegion();
                break;

            case ObjectType.MapSpatialDataSet:
                persistable = new MapSpatialDataSet();
                break;

            case ObjectType.MapPointLayer:
                persistable = new MapPointLayer();
                break;

            case ObjectType.MapTile:
                persistable = new MapTile();
                break;

            case ObjectType.MapTileLayer:
                persistable = new MapTileLayer();
                break;

            case ObjectType.MapField:
                persistable = new MapField();
                break;

            case ObjectType.MapLine:
                persistable = new MapLine();
                break;

            case ObjectType.MapPolygon:
                persistable = new MapPolygon();
                break;

            case ObjectType.MapPoint:
                persistable = new MapPoint();
                break;

            case ObjectType.MapLineTemplate:
                persistable = new MapLineTemplate();
                break;

            case ObjectType.MapPolygonTemplate:
                persistable = new MapPolygonTemplate();
                break;

            case ObjectType.MapMarkerTemplate:
                persistable = new MapMarkerTemplate();
                break;

            case ObjectType.Map:
                persistable             = new Map(this.m_parentReportItem);
                this.m_parentReportItem = (ReportItem)persistable;
                break;

            case ObjectType.MapBorderSkin:
                persistable = new MapBorderSkin();
                break;

            case ObjectType.MapDataRegion:
                persistable = new MapDataRegion(this.m_parentReportItem);
                break;

            case ObjectType.MapMember:
                persistable = new MapMember();
                break;

            case ObjectType.MapRow:
                persistable = new MapRow();
                break;

            case ObjectType.MapCell:
                persistable = new MapCell();
                break;

            case ObjectType.MapLocation:
                persistable = new MapLocation();
                break;

            case ObjectType.MapSize:
                persistable = new MapSize();
                break;

            case ObjectType.MapGridLines:
                persistable = new MapGridLines();
                break;

            case ObjectType.MapBindingFieldPair:
                persistable = new MapBindingFieldPair();
                break;

            case ObjectType.MapCustomView:
                persistable = new MapCustomView();
                break;

            case ObjectType.MapDataBoundView:
                persistable = new MapDataBoundView();
                break;

            case ObjectType.MapElementView:
                persistable = new MapElementView();
                break;

            case ObjectType.MapViewport:
                persistable = new MapViewport();
                break;

            case ObjectType.MapLimits:
                persistable = new MapLimits();
                break;

            case ObjectType.MapColorScale:
                persistable = new MapColorScale();
                break;

            case ObjectType.MapColorScaleTitle:
                persistable = new MapColorScaleTitle();
                break;

            case ObjectType.MapDistanceScale:
                persistable = new MapDistanceScale();
                break;

            case ObjectType.MapTitle:
                persistable = new MapTitle();
                break;

            case ObjectType.MapLegend:
                persistable = new MapLegend();
                break;

            case ObjectType.MapLegendTitle:
                persistable = new MapLegendTitle();
                break;

            case ObjectType.MapBucket:
                persistable = new MapBucket();
                break;

            case ObjectType.MapColorPaletteRule:
                persistable = new MapColorPaletteRule();
                break;

            case ObjectType.MapColorRangeRule:
                persistable = new MapColorRangeRule();
                break;

            case ObjectType.MapCustomColorRule:
                persistable = new MapCustomColorRule();
                break;

            case ObjectType.MapCustomColor:
                persistable = new MapCustomColor();
                break;

            case ObjectType.MapLineRules:
                persistable = new MapLineRules();
                break;

            case ObjectType.MapPolygonRules:
                persistable = new MapPolygonRules();
                break;

            case ObjectType.MapSizeRule:
                persistable = new MapSizeRule();
                break;

            case ObjectType.MapMarkerImage:
                persistable = new MapMarkerImage();
                break;

            case ObjectType.MapMarker:
                persistable = new MapMarker();
                break;

            case ObjectType.MapMarkerRule:
                persistable = new MapMarkerRule();
                break;

            case ObjectType.MapPointRules:
                persistable = new MapPointRules();
                break;

            case ObjectType.PageBreak:
                persistable = new PageBreak();
                break;

            case ObjectType.DataScopeInfo:
                persistable = new DataScopeInfo();
                break;

            case ObjectType.LinearJoinInfo:
                persistable = new LinearJoinInfo();
                break;

            case ObjectType.IntersectJoinInfo:
                persistable = new IntersectJoinInfo();
                break;

            case ObjectType.BucketedDataAggregateInfos:
                persistable = new BucketedDataAggregateInfos();
                break;

            case ObjectType.DataAggregateInfoBucket:
                persistable = new DataAggregateInfoBucket();
                break;

            case ObjectType.NumericIndicatorRange:
                persistable = new NumericIndicatorRange();
                break;

            case ObjectType.IndicatorState:
                persistable = new IndicatorState();
                break;

            case ObjectType.SharedDataSetQuery:
                persistable = new SharedDataSetQuery();
                break;

            case ObjectType.DataSetCore:
                persistable = new DataSetCore();
                break;

            case ObjectType.DataSetParameterValue:
                persistable = new DataSetParameterValue();
                break;

            case ObjectType.RIFVariantContainer:
                persistable = new RIFVariantContainer();
                break;

            case ObjectType.IdcRelationship:
                persistable = new IdcRelationship();
                break;

            case ObjectType.DefaultRelationship:
                persistable = new DefaultRelationship();
                break;

            case ObjectType.JoinCondition:
                persistable = new Relationship.JoinCondition();
                break;

            case ObjectType.BandLayoutOptions:
                persistable = new BandLayoutOptions();
                break;

            case ObjectType.LabelData:
                persistable = new LabelData();
                break;

            case ObjectType.Slider:
                persistable = new Slider();
                break;

            case ObjectType.Coverflow:
                persistable = new Coverflow();
                break;

            case ObjectType.PlayAxis:
                persistable = new PlayAxis();
                break;

            case ObjectType.BandNavigationCell:
                persistable = new BandNavigationCell();
                break;

            case ObjectType.Tabstrip:
                persistable = new Tabstrip();
                break;

            case ObjectType.NavigationItem:
                persistable = new NavigationItem();
                break;

            case ObjectType.ScopedFieldInfo:
                persistable = new ScopedFieldInfo();
                break;

            default:
                Global.Tracer.Assert(false, "Unsupported object type: " + objectType.ToString());
                break;
            }
            IDOwner iDOwner = persistable as IDOwner;

            if (iDOwner != null)
            {
                iDOwner.ParentInstancePath = this.m_parentIDOwner;
                this.m_parentIDOwner       = iDOwner;
            }
            persistable.Deserialize(context);
            this.m_parentIDOwner    = parentIDOwner;
            this.m_parentReportItem = parentReportItem;
            return(persistable);
        }