/// <summary> /// Вставить компоненты схемы из буфера обмена /// </summary> public bool PasteFromClipboard(int x, int y) { try { if (SchemeView == null) { throw new ScadaException(Localization.UseRussian ? "Схема не загружена." : "Scheme is not loaded."); } lock (SchemeView.SyncRoot) lock (clipboard) lock (selComponents) { selComponents.Clear(); History.BeginPoint(); foreach (BaseComponent srcComponent in clipboard) { BaseComponent newComponent = srcComponent.Clone(); newComponent.ID = SchemeView.GetNextComponentID(); newComponent.Location = new Point(newComponent.Location.X + x, newComponent.Location.Y + y); SchemeView.Components[newComponent.ID] = newComponent; SchemeView.SchemeDoc.OnItemChanged(SchemeChangeTypes.ComponentAdded, newComponent); selComponents.Add(newComponent); } History.EndPoint(); } OnSelectionChanged(); PointerMode = PointerModes.Select; return(true); } catch (ScadaException ex) { log.WriteError(string.Format(Localization.UseRussian ? "Ошибка при вставке компонентов схемы из буфера обмена: {0}" : "Error pasting scheme components from clipboard: {0}", ex.Message)); return(false); } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при вставке компонентов схемы из буфера обмена" : "Error pasting scheme components from clipboard"); return(false); } }
/// <summary> /// Создать компонент схемы /// </summary> public bool CreateComponent(int x, int y) { try { // проверка возможности создания компонента if (SchemeView == null) { throw new ScadaException(Localization.UseRussian ? "Схема не загружена." : "Scheme is not loaded."); } if (string.IsNullOrEmpty(NewComponentTypeName)) { throw new ScadaException(Localization.UseRussian ? "Не определён тип создаваемого компонента." : "Type of the creating component is not defined."); } // создание компонента BaseComponent component = compManager.CreateComponent(NewComponentTypeName); if (component == null) { return(false); } else { component.ID = SchemeView.GetNextComponentID(); component.Location = new Point(x, y); component.SchemeView = SchemeView; component.ItemChanged += Scheme_ItemChanged; // добавление компонента на схему lock (SchemeView.SyncRoot) { SchemeView.Components[component.ID] = component; } SchemeView.SchemeDoc.OnItemChanged(SchemeChangeTypes.ComponentAdded, component); // выбор добавленного компонента lock (selComponents) { selComponents.Clear(); selComponents.Add(component); } OnSelectionChanged(); PointerMode = PointerMode.Select; return(true); } } catch (ScadaException ex) { log.WriteError(string.Format(Localization.UseRussian ? "Ошибка при создании компонента схемы: {0}" : "Error creating scheme component: {0}", ex.Message)); return(false); } catch (Exception ex) { log.WriteException(ex, Localization.UseRussian ? "Ошибка при создании компонента схемы" : "Error creating scheme component"); return(false); } }