Пример #1
0
        /// <summary>
        /// 将KNXView对象保存为文件
        /// </summary>
        /// <param name="knx"></param>
        /// <param name="path"></param>
        public static void SaveAsFile(TemplateMeta tpla, string path)
        {
            var settings = new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.Auto
            };
            var json = JsonConvert.SerializeObject(tpla, Formatting.None, settings);

            File.WriteAllText(path, json, Encoding.UTF8);
        }
        public static List <Template> LoadAllTemplates()
        {
            List <Template> templates = new List <Template>();

            string ClcDir = MyCache.DefatultKnxCollectionFolder; // 默认的收藏文件夹

            if (Directory.Exists(ClcDir))
            {
                foreach (string file in Directory.GetFiles(ClcDir)) // 遍历收藏文件下的文件
                {
                    string ext = Path.GetExtension(file);
                    if (TemplateExt == ext)                                              // 若为模板文件格式(*.tpl)
                    {
                        string name    = Path.GetFileNameWithoutExtension(file);         // 获取模板文件的名字
                        string tempDir = Path.Combine(MyCache.ProjTempCollFolder, name); // 模板文件解压出来的文件存放的路径

                        /* 清空工作目录 */
                        FileHelper.DeleteFolder(tempDir);
                        Directory.CreateDirectory(tempDir);

                        ZipHelper.UnZipDir(file, tempDir); // 解压收藏文件


                        string tempImgDir = Path.Combine(tempDir, MyConst.ImgFolder); // 图片资源目录

                        string     templateVersion = Path.Combine(tempDir, MyConst.TemplateVersion);
                        KNXVersion version         = VersionStorage.LoadTemplateVersionFile(templateVersion);

                        string preview = Path.Combine(tempDir, MyConst.TemplatePreviewFile);  // 模板预览图片
                        Image  TempPre = ImageHelper.GetDiskImage(preview);

                        string       metaFile = Path.Combine(tempDir, MyConst.TemplateMetaFile); // 界面元文件
                        TemplateMeta TplMeta  = AppStorage.Import(metaFile);

                        Template template = new Template();
                        template.Views     = TplMeta.Views;
                        template.Name      = name;
                        template.Preview   = TempPre;
                        template.ResImgDir = tempImgDir;
                        template.Version   = version;

                        templates.Add(template);
                    }
                }
            }

            return(templates);
        }
        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);                                                        // 压缩为最终的收藏文件
        }