/// <summary> /// /// </summary> /// <param name="group"></param> /// <param name="x"></param> /// <param name="y"></param> public void DropAsClone(XGroup group, double x, double y) { try { double sx = _editor.Project.Options.SnapToGrid ? Editor.Snap(x, _editor.Project.Options.SnapX) : x; double sy = _editor.Project.Options.SnapToGrid ? Editor.Snap(y, _editor.Project.Options.SnapY) : y; var clone = Clone(group); if (clone != null) { _editor.Deselect(_editor.Project.CurrentContainer); clone.Move(sx, sy); _editor.AddWithHistory(clone); _editor.Select(_editor.Project.CurrentContainer, clone); if (_editor.Project.Options.TryToConnect) { _editor.TryToConnect(clone); } } } catch (Exception ex) { if (_editor.Log != null) { _editor.Log.LogError("{0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace); } } }
/// <summary> /// /// </summary> /// <param name="group"></param> /// <returns></returns> public XGroup Clone(XGroup group) { try { var json = _serializer.Serialize(group); if (!string.IsNullOrEmpty(json)) { var clone = _serializer.Deserialize<XGroup>(json); if (clone != null) { var shapes = Enumerable.Repeat(clone, 1).ToList(); TryToRestoreStyles(shapes); TryToRestoreRecords(shapes); return clone; } } } catch (Exception ex) { if (_editor.Log != null) { _editor.Log.LogError("{0}{1}{2}", ex.Message, Environment.NewLine, ex.StackTrace); } } return null; }