RUS  ENG 

Копирование из слоя InMemory в постоянный слой

Страницы: 1
RSS
Копирование из слоя InMemory в постоянный слой
 
Создаю слой в памяти Map.Layers.AddInMemory(LayerName), туда копирую объекты, затем редактирую, затем нужно перенечти то, что получилось в постоянный слой. Создаю слой в файле и копирую так :
Функция CopyAllElements(LayerOut, LayerIn) Экспорт

LayerIn.StartSequentialWriteMode();

Попытка
Elements = LayerOut.EnumElements();

Elements.MoveFirst();

Пока НЕ Elements.IsEOF() Цикл
LayerIn.AddEnumElement(Elements, Elements.ElemID, 0);
Elements.MoveNext();
КонецЦикла;

LayerIn.FinishSequentialWriteMode();

Исключение
Сообщить(ОписаниеОшибки());
LayerIn.FinishSequentialWriteMode();
КонецПопытки;

КонецФункции

Но элементов в слое, который в памяти, = 0, хотя ElementKeys = 201
Как скопировать элементы?
 
А в чем вопрос? Все работает.
 
Проблема в том, что в цикл по элементам не заходит, вот тут:
Пока НЕ Elements.IsEOF() Цикл
LayerIn.AddEnumElement(Elements, Elements.ElemID, 0);
Elements.MoveNext();
КонецЦикла;

Соответственно ничего в новый слой не копируется, а в слое в памяти элементы есть (я их вижу и свойство слоя ElementKeys.Count = 201 и если делаю так LayerOut.Elements.Item(1), то элемент тоже есть), но вот с использованием LayerOut.EnumElements(); скопировать не получается. Может в циклом по ElementKeys и доставать элементы через Elements.Item(Key)?
Версия Зулу серверная
 
Используйте Elements

Dim Els As Elements
Set Els = L.Elements
Dim El As Element
Set El = Els.FirstItem
Do
If El.Key = -1 Then Exit Do
LL.AddElementEx El, El.Key, 0
Set El = Els.NextItem
Loop
 
Создаю слой в файле и копирую так

Опять же не нашел функции создания слоя в файле =(
 
string PathMap = m_mapdoc.PathName.Substring(0, m_mapdoc.PathName.LastIndexOf('\\'));
Layer layer = new Layer();
int index = m_mapdoc.Layers.AddInMemory("Жилые Здания");
if (m_mapdoc.Layers[(short)index].CopyLayer(PathMap + "\\Doma.b00", "Жилые Здания", 0x8000000))
{
m_mapdoc.AddLayer(PathMap + "\\Doma.b00");
}
List<Layer> layerszu = new List<Layer>();
for (short i = 1; i <= m_mapdoc.Layers.Count;i++ )
{
if (m_mapdoc.Layers[i].InMemory)
m_mapdoc.Layers.Remove(i);
}
m_mapdoc.Save();

и это создает слой Ужос. Неужели попроще нельзя было попроще реализовать создание пустого слоя =(
 
http://politerm.com.ru/zuludoc/zuluax/ZuluTools_LayerCreate.htm
ZuluTools получаем либо от MapCtrl либо просто создаете как объект.
Страницы: 1