RUS  ENG 

Уничтожение слоя

Страницы: 1
RSS
Уничтожение слоя
 
Здравствуйте!
У меня к Вам два вопроса:
1. Подскажите пожалуйста, как программно сделать операцию "Слой->Уничтожить..." на Билдере 6
Пробую так:
ZuluCtrl->Tools->LayerDelete(WideString("d:\\map\\MyObjects.b00"));
метод почему то возвращает -1, хотя визуально слой исчезает, а после закрытия проекта и повторного открытия выскакивает окно "Не найден слой" MyObjects.b00
Чего не хватает?

2. По ходу работы приложения частенько приходится программно удалять и создавать много символов в слое. Когда слой новый, проблем нет, но постепенно после нескольких удалений/создаваний символов, он начинает безумно тормозить во время этих операций. Сложилось предположение, что это из-за того, что не обнуляется ID символа при удалении всех символов. Что с этим делать? Можно ли как-то ПОЛНОСТЬЮ обнулять слой, включая ID символов? Пока вижу только один способ - периодически удалять и создавать слой заново.
Спасибо!!!
 
1. LayerDelete в случае успеха возвращает VARIANT_TRUE, который и равен -1. "Не найден слой" именно потому что он успешно удален.
2. Как динамичное хранилище символов слой не рассматривали. Предполагалось, что данные объектов слоя меняются гораздо чаще чем структура слоя, частью которой является библиотека символов. Посмотрю, что там с тормозами. Скажите, много символов это сколько и с какой частотой они изменяются?
Полностью очстить слой можно создав его заново.
 
С удалением\созданием символов кое-что подускорил. Не кардинально, но существенно: на тесте тысяча символов добавлялась раньше за 70 секунд. Сейчас меньше одной. Качайте обновление.
ID символов там не очень причем. Но можно их и самому бесконечно не наращивать, используя не просто Symbol.RemoveItem и Symbol.AddItem, а Symbol.ReplaceItem и Symbol.AddItemEx, где ID добавляемого символа можно задать.
 
Спасибо, разобрался! Надо после каждой манипуляции со слоями писать еще Map->Map->Save(), тогда "Не найден слой" не выскакивает.
По второму вопросу... символов в слое может быть примерно 100, а удалять/создавать их приходится частенько, несколько раз в день. Соответственно ID растет с неимоверной скоростью, и с такой же скоростью уменьшается скорость удаления/создания этих самых символов.
Решил эту проблему путем периодического удаления и повторного создания слоя, т.к. эта операция проходит моментально, а затем в чистый слой символы создаются так же очень быстро!

Других вариантов пока не вижу, кроме как если бы был метод, например, полной инициализации символьной базы слоя... что-то типа InitSymbols(), по которому удаляются все символы слоя, а ID сбрасывается к нулю!
Страницы: 1