Ejemplo n.º 1
0
        public static void ExportToCollections(List <ViewNode> nodes, string path)
        {
            string name    = Path.GetFileNameWithoutExtension(path);         // 目标文件的名称,不含扩展名
            string tempDir = Path.Combine(MyCache.ProjTempCollFolder, name); // 收藏文件临时目录

            /* 清空临时目录 */
            FileHelper.DeleteFolder(tempDir);
            Directory.CreateDirectory(tempDir);

            PageNode pageNode = ViewNode.GetPageNodeFromParent(nodes[0]);
            int      width    = pageNode.Size.Width;
            int      height   = pageNode.Size.Height;

            /* 在控件的原始位置绘制 */
            Bitmap   bm = new Bitmap(width, height);
            Graphics g  = Graphics.FromImage(bm);

            foreach (ViewNode node in nodes)
            {
                node.DrawAt(g, 1.0f, true); // 绘制控件
            }

            Rectangle rect      = ViewNode.GetMinimumCommonRectangleInPage(nodes);
            int       newWidth  = rect.Width;
            int       newHeight = rect.Height;
            int       Side      = newWidth > newHeight ? newWidth : newHeight;

            Side += 10;
            Bitmap   img      = new Bitmap(Side, Side);
            Graphics graphics = Graphics.FromImage(img);

            graphics.DrawImage(bm, (Side - newWidth) / 2, (Side - newHeight) / 2, rect, GraphicsUnit.Pixel);

            /* 保存预览图片 */
            string preview = Path.Combine(tempDir, MyConst.TemplatePreviewFile);  // 模板预览图片

            ImageHelper.SaveImageAsPNG(img, preview);

            /* 创建图片资源临时存放目录 */
            string tempImgDir = Path.Combine(tempDir, MyConst.ImgFolder);

            Directory.CreateDirectory(tempImgDir);

            /* 创建模板的界面元文件,并导出图片资源 */
            TemplateMeta template = new TemplateMeta();

            foreach (ViewNode node in nodes)
            {
                /* 添加控件到界面元文件 */
                KNXView knx = EntityHelper.ExportViewNode(null, node, tempImgDir, rect.Location);
                template.Views.Add(knx);
            }

            /* 保存界面元文件 */
            string metaFile = Path.Combine(tempDir, MyConst.TemplateMetaFile);                      // 界面元文件

            AppStorage.SaveAsFile(template, metaFile);                                              // 保存模板文件

            VersionStorage.SaveTemplateVersionFile(Path.Combine(tempDir, MyConst.TemplateVersion)); // 保存模板文件的版本信息。

            ZipHelper.ZipDir(tempDir, path);                                                        // 压缩为最终的收藏文件
        }