private static CreateNodeCommand GetAddImageCommand(IEditor editor, Point location, Image img) { using (editor.Figure.DirtManager.BeginDirty()) { if (img == null) { return(null); } var codec = ImageUtil.GetCodec(img); if (codec == null) { codec = ImageUtil.GetCodec(ImageFormat.Png); } using (var encoderParams = ImageUtil.CreateEncoderParameters(100L)) { var imgFilePath = GetNewImageFilePath(); img.Save(imgFilePath, codec, encoderParams); var desc = new FileImageDescription(Path.GetFileName(imgFilePath)); var req = new CreateNodeRequest(); req.ModelFactory = new DelegatingModelFactory <MemoImage>( () => { var ret = MemoFactory.CreateImage(); ret.Image = desc; return(ret); } ); req.Bounds = new Rectangle(location, new Size(img.Width, img.Height)); req.AdjustSizeToGrid = false; return(editor.GetCommand(req) as CreateNodeCommand); } } }
private void ConvertModel() { var oldModelRoot = MemopadConstsV1.ModelRoot; var classDirs = Directory.GetDirectories(oldModelRoot); foreach (var classDir in classDirs) { var typeName = Path.GetFileName(classDir); var entityDirs = Directory.GetDirectories(classDir); foreach (var entityDir in entityDirs) { var id = Path.GetFileName(entityDir); var isMemoImage = string.Equals(typeName, "Mkamo.Model.Memo.MemoImage", StringComparison.OrdinalIgnoreCase); var fileImageDesc = default(FileImageDescription); if (isMemoImage) { /// ByteImageDescriptionからFileImageDescriptionに変換 using (var stream = new FileStream(Path.Combine(entityDir, "Image.ser"), FileMode.Open, FileAccess.Read)) { var formatter = new BinaryFormatter(); var bytesDesc = (BytesImageDescription)formatter.Deserialize(stream); var filepath = GetNewImageFilePath(); PathUtil.EnsureDirectoryExists(Path.GetDirectoryName(filepath)); File.WriteAllBytes(filepath, bytesDesc.Bytes); fileImageDesc = new FileImageDescription(Path.GetFileName(filepath)); } } var files = Directory.GetFiles(entityDir); var hasSerializable = files.Any( file => string.Equals(Path.GetExtension(file), ".ser", StringComparison.OrdinalIgnoreCase) ); foreach (var file in files) { var fileName = Path.GetFileName(file); var fileExt = Path.GetExtension(file); if (string.Equals(fileName, "entity.xml", StringComparison.OrdinalIgnoreCase)) { var xml = File.ReadAllText(file); if (hasSerializable) { xml = ReplaceSerralizableProperty(xml); } _memoAccessor.InsertEntity(typeName, id, xml); } else if (string.Equals(fileExt, ".dat", StringComparison.OrdinalIgnoreCase)) { var key = Path.GetFileNameWithoutExtension(file); var text = File.ReadAllText(file); _exDataAccessor.InsertExtendedTextData(typeName, id, key, text); } else if (string.Equals(fileExt, ".obj", StringComparison.OrdinalIgnoreCase)) { var key = Path.GetFileNameWithoutExtension(file); var bytes = File.ReadAllBytes(file); _exDataAccessor.InsertExtendedBlobData(typeName, id, key, bytes); } else if (string.Equals(fileExt, ".ser", StringComparison.OrdinalIgnoreCase)) { if (isMemoImage) { //if (fileImageDesc != null) { var bytes = default(byte[]); using (var stream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(stream, fileImageDesc); bytes = stream.GetBuffer(); } _memoAccessor.InsertSerializableProperty(typeName, id, "Image", bytes); //} } else { var key = Path.GetFileNameWithoutExtension(file); var bytes = File.ReadAllBytes(file); _memoAccessor.InsertSerializableProperty(typeName, id, key, bytes); } } } } } }
public static IEnumerable <IEditor> AddMetafile(IEditor editor, Point location, Metafile meta, bool useCommandExecutor, bool arrange) { using (editor.Figure.DirtManager.BeginDirty()) using (var mem = new MemoryStream()) { if (useCommandExecutor && arrange) { editor.Site.CommandExecutor.BeginChain(); } var existingEditorBounds = default(Rectangle[]); if (arrange) { existingEditorBounds = editor.Children.Select(e => e.Figure.Bounds).ToArray(); } using (var bmp = new Bitmap(1, 1)) using (var bmpg = Graphics.FromImage(bmp)) { var hdc = bmpg.GetHdc(); using (var mf = new Metafile(mem, hdc)) { bmpg.ReleaseHdc(hdc); using (var g = Graphics.FromImage(mf)) { g.DrawImage(meta, Point.Empty); } } } var imgFilePath = GetNewImageFilePath(); File.WriteAllBytes(imgFilePath, mem.GetBuffer()); var desc = new FileImageDescription(Path.GetFileName(imgFilePath)); var req = new CreateNodeRequest(); req.ModelFactory = new DelegatingModelFactory <MemoImage>( () => { var ret = MemoFactory.CreateImage(); ret.Image = desc; return(ret); } ); req.Bounds = new Rectangle(location, meta.Size); req.AdjustSizeToGrid = false; var cmd = editor.GetCommand(req) as CreateNodeCommand; if (useCommandExecutor) { editor.Site.CommandExecutor.Execute(cmd); } else { cmd.Execute(); } meta.Dispose(); if (arrange) { var newLoc = RectUtil.GetPreferredLocation( cmd.CreatedEditor.Figure.Bounds, existingEditorBounds, editor.Root.Figure.Right, MemopadConsts.DefaultCaretPosition.X, MemopadConsts.DefaultCaretPosition.Y ); var move = new ChangeBoundsCommand( cmd.CreatedEditor, (Size)newLoc - (Size)cmd.CreatedEditor.Figure.Location, Size.Empty, Directions.None, new [] { cmd.CreatedEditor } ); if (useCommandExecutor) { editor.Site.CommandExecutor.Execute(move); } else { move.Execute(); } if (useCommandExecutor) { editor.Site.CommandExecutor.EndChain(); } } return(new[] { cmd.CreatedEditor }); } }