В сообщение вкладываю исходные тексты простейшей функции и рабочей карты (+ЛОГИ). (СКАЧАТЬ) Просьба пояснить почему число объектов найденных функцией mapSelectSeekAreaFrame бесконечно (до конца не дождался) ? Вопрос, когда будет выполнена ревизия всех топологичесикх функций ? Неужели в КБ с математикой и геометрией нет дружбы?
П.С на карте около полутора тысяч объектов всего.
Не тот глуп кто не знает, а тот, кто не знает где искать.
Я бы ТАК не хулиганил с флагами WO_FIRST, WO_NEXT. --- Кстати, есть функция mapSeekSelectObjectCount(). Её можно поюзать после вызова mapSelectSeekAreaFrame().
Я бы ТАК не хулиганил с флагами WO_FIRST, WO_NEXT.
WO_FIRST = 0 WO_NEXT = 4 проверяем:
Код
j :=0;
while mapSeekSiteSelectObject(Map, SpcSite, curr, Select, 4*byte(J>0))<>0 do
begin
inc (j);
end;
при j=0, флаг попадающий внутрь функции mapSeekSiteSelectObject byte(J>0) = 0 при умножении на 4 = 0 что соотвествует WO_FIRST после первого прохода j=1 b более, попадающий внутрь функции mapSeekSiteSelectObject byte(J>0) = 1 при умножении на 4 = 4 что соотвествует WO_NEXT --------- С этим разобрались. 2-е. Такая конструкция у меня используется во всех модулях причём много лет 3-е. Я никогда не пользовался функцией mapSelectSeekAreaFrame, это был первый раз... и после этих "событий" она попала для меня в разряд mapSeekObjectByNumber
Не тот глуп кто не знает, а тот, кто не знает где искать.
Видимо произошёл какой то "хитрый" сбой в структуре карты, и в файл(ы) прописались "деффектные данные". При открытии карты , происходит структурный контроль автоматически, начиная с 11-й версии НО контроль структуры карты, ни к чему не привёл, "хитрый сбой" остался незамеченным. Кроме того, этот сбой структуры, скорее всего, формирует для функций поиска условие, при котором один из циклов не заканчивается никогда. Скорее всего, где-то сбрасывается смещение при чтении следующего блока в ноль, и цикл становится бесконечным. ----- Это мнение выработано мной и коллегой, анализируя меняющуюся информацию внутри цикла.
Не тот глуп кто не знает, а тот, кто не знает где искать.
В каждом вопросе желательно указывать номера версий продуктов, чтобы проверка была идентичной. Заниматься изысканиями со способами задания флажков (4*byte(J>0)) никто не будет. Должно быть задано сначала WO_FIRST, а при следующих проходах - WO_NEXT. Остальные варианты рассматриваться не будут.