RUS  ENG 

Проблема со "слоем в памяти"

Страницы: 1
RSS
Проблема со "слоем в памяти"
 
Здравствуйте! Я решаю следующую задачу: отключен ряд отключающих устройств, выделить цветом отключенные участки сети. Нормального способа я не нашел, поэтому использую "ход конем". А именно:

Layer.InMemory:=true; //Слой в памяти
for i := 0 to ZL.Count - 1 do
Layer.DeleteElement(integer(ZL[i])); //удаляем задвижки
Layer.NetWorkTools.AddFlag(FlagItem); //ставим флажок внутри сети
Layer.NetworkTools.ResultsColor:=0; //черный цвет
Layer.NetworkTools.ResultsVisible:=true;
Layer.NetworkTools.FindConnected; //Находим связанные
Layer.InMemory:=false; //возвращаем задвижки

при этом все хорошо за исключением одной детали: перекрашиваются все участки сети, кроме тех которые непосредственно примыкают к удаленным задвижкам.
Эти участки почему то не считаются соединенными. Я много экспериментировал, по-моему это именно ошибка в программе.
 
Если у участка на конце нет узла, то он не является элементом сети и в топологическом анализе не участвует. А у Вас как раз нет узла, так как Вы его удалили.
Нормальный способ - это поменять режим задвижек на "Закрыто". Можно реально сменить режим:
Layer.Elements.Item(ZL[i]).Mode = 2 // Если есть такой режим
либо для всех сразу через SetElemsModes
Но это редактирование.
Можно не редактируюя временно переназначить состояние отсекающего элемента: Layer.NetworkTools.OverloadElemState (ZL[i], eSwitchOff)
Слой в памяти без надобности не используйте. У него усеченная функциональность, не все методы могут с ним работать.
 
Режим "закрыто" это имеется ввиду состояние "разомкнут" в структуре слоя?
 
Я делаю так: Layer.NetworkTools.OverloadElemState(ZadvList.Item[i],eSwitchOff);
и потом: OtklList:=Layer.NetWorkRecalc;
но он выдает только список отключенных потребителей
а я хочу показать все отключенные объекты сети
 
Все работает, разобрался, спасибо
Немного заклинило меня :)
 
Кстати, чтобы покрасить все отключенные можно вызывать FindDisconnected вместо FindConnected
Страницы: 1