//------------------------------------------- #endregion #region Arrow public void ArrowSelect(object obj) { if (obj != текущаяСвязь && obj is Связь) { текущаяСвязь = obj as Связь; } }
// данный сценарий нужен когда неизвестно нужно Вам сообщение или нет, забирать или нет решать ВАм // Есть категория активностей,типа данных температуры, которые можно только скопировать, стереть невозможно // данные для многократного забора void Забери() { Связь.СигналОПоступленииСообщения(); // это для забора из адреса исходщего сообщения вызови метод Забрать() // вставка своих методов // ЗабратьСообщение можно путем 1.простого копирования 2. забор адреса и очистка удаленногоИсходящего //3.запуска удаленного метода }
Адрес СоздайНовуюАктивность() { var активностьНовая = new АктивностьЗначение(); var адресАктивности = АктивностьЗначение.СоздайАктивность(ВнутреннееПространство); //Хранилище.Добавить(активностьНовая);//это создать активность во внешнем пространстве var новаяСвязь = new Связь() { Канал = new КаналПамятьПсевдо(), ЯвляетсяКлиентом = true }; var адрессвязи = ДобавьСвязь(новаяСвязь); var ещеАдресСвязи = ВнутреннееПространство.Добавить(новаяСвязь); var связьНовойАктивности = new Связь() { Канал = new КаналПамятьПсевдо(), ЯвляетсяСервером = true, АдресУдаленнойСвязи = адрессвязи }; // можно адрес не укзывать при первом соединении, адрес определиться и запомниться var адресСвязиНовойАктивности = ВнутреннееПространство.Добавить(связьНовойАктивности); var адресНовойСвязиАктивности = активностьНовая.ДобавьСвязь(связьНовойАктивности); новаяСвязь.АдресУдаленнойСвязи = адресНовойСвязиАктивности; return(адресАктивности.адрес); }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { var строка = (СтрокаЮникода)сообщение; СтрокаЮникода.Создать(строка); ОкноХранилища.окноХранилища.ОбновитьОкно(); }
private void ArrowEnd() { if (текущаяСвязь != null && объектВыбранный != null) { текущаяСвязь.ОбъектПредыдущий.Opacity = 1; текущаяСвязь = null; } }
void ОставитьИСообщитьВТекущемПотоке(ПримитивИлиАдрес объект) // с прерыванием ожидания { _ВходящееСообщение = объект; Связь.СигналОПоступленииСообщения();// здесь происходит аренда потока, Связь или Активность сама решает // связь должна взять входящее сооьщение передать в активность // активность должна быстро что-то сделать, (возможно вызвать передатьИсходящее=ОставитьИ уйти) // и вернуть поток // либо запустить обработку входящих в собственном потоке }
private void ArrowAddMoreLink() { Связь newArrow = new Связь(); Point mousePos = Mouse.GetPosition(this); newArrow.X1 = mousePos.X; // newArrow.Y1=current_arrow.Margin.Top+ //(x-x3)/[-(у2-y1)]=(y-y3)/(x2-x1) }
public override void ПолучиСообщение(Связь связь, АМОбъект сообщение) { строка = (СтрокаЮникода)сообщение; if (окно.Dispatcher.Thread == Thread.CurrentThread) { Обработать(); } //отправить сообщение else { окно.Dispatcher.Invoke(Обработать); //для вывода из другого потока } }
private void ArrowMove(bool move) { if (текущаяСвязь != null) { if (move) { ArrowEndChange(); } else { текущаяСвязь = null; } } }
public void DeleteLinks(Связь current_arrow) { if (current_arrow != null) { if (current_arrow.ОбъектПредыдущий != null && current_arrow.ОбъектПредыдущий != this) { current_arrow.ОбъектПредыдущий.DeleteLinksEnd(current_arrow); } if (current_arrow.ОбъектСледующий != null && current_arrow.ОбъектСледующий != this) { current_arrow.ОбъектСледующий.DeleteLinksStart(current_arrow); } } }
public void ArrowBreak() { if (текущаяСвязь != null) { if (текущаяСвязь.ОбъектПредыдущий != null) { текущаяСвязь.ОбъектПредыдущий.DeleteArrow(текущаяСвязь); } if (текущаяСвязь.ОбъектСледующий != null) { текущаяСвязь.ОбъектСледующий.DeleteArrow(текущаяСвязь); } AreaGrid.Children.Remove(текущаяСвязь); текущаяСвязь = null; } }
public void AddArrows(Связь current_arrow) { if (current_arrow != null) { Связи.Add(current_arrow); if (current_arrow.ОбъектСледующий == this && current_arrow.ОбъектПредыдущий != null) { ОбъектыПредыдущие.Add(current_arrow.ОбъектПредыдущий); current_arrow.ОбъектПредыдущий.AddObjectEnd(current_arrow.ОбъектСледующий); } ЕстьСвязи = true; } }
public Связь ДайСвязьСЭлементом(int номер) { var адрес = new АдресАбсолютный() { АдресРегистратора = СобственныйАдресПримитива, АдресОтносительный = new АдресВГруппе { НомерВГруппе = номер } }; var связь = new Связь { АдресУдаленнойСвязи = адрес }; var активность = new АктивностьУдаленноеЗначение(); активность.ДобавьСвязь(связь); return(связь); }
public void ArrowBegin() { if (объектТекущий != null) { объектВыбранный =о бъектТекущий; объектТекущий = null; } if (объектВыбранный != null) { текущаяСвязь = new Связь(); offset.X = объектВыбранный.Margin.Left + объектВыбранный.Width; offset.Y = объектВыбранный.Margin.Top + объектВыбранный.Height / 2; текущаяСвязь.Stroke = Brushes.Red; текущаяСвязь.StrokeThickness = 3; текущаяСвязь.X1 = offset.X; текущаяСвязь.Y1 = offset.Y; ArrowEndChange(); AreaGrid.Children.Add(текущаяСвязь); Panel.SetZIndex(текущаяСвязь, -1); текущаяСвязь.ОбъектПредыдущий = объектВыбранный; объектВыбранный.AddArrows(текущаяСвязь); } }
public void DeleteArrow(Связь arrow) { Связи.Remove(arrow); }
// внешние команды , но настройка внутренняя путем присвоения делегату Получи void ПередатьНапрямую(ПримитивИлиАдрес сообщение) { Связь.ПолучиСообщение(сообщение); }
protected void DeleteLinksEnd(Связь arrow) { ОбъектыСледующие.Remove(arrow.ОбъектСледующий); arrow.ОбъектПредыдущий.DeleteArrow(arrow); }