Добрый день!
Для этого Вы можете вызвать у него метод FindItem() и передать туда Guid этой коллекции.
var terrains = pr.FindItem(new Guid("2986169F-A8D6-40d9-9329-1975F215E5B8")) as TerrainModels.
Отмечу, что использование ссылок на Topomatic.Dtm.Core это не очень хорошая практика. Лучше не допускать перекрестных ссылок между модулям и не ссылаться на такие модули как как Topomatic.*.Core и Topomatic.*.Controller. Исключение составляют модули Topomatic.Core и Topomatic.Alg.Core.
Если Вам необходимо создать новую поверхность или получить список всех поверхностей, лучше воспользоваться методами представленными в классе Topomatic.Alg.Runtime и использовать следующий код для создания новой поверхности:
Код:
//получаем общую коллекцию моделей
var models = AlignmentWatcher.GetModelsCollection();
//получаем коллекцию поверхностей
var terrains = AlignmentWatcher.GetCollection(AlignmentWatcher.Te rrainModelsCollectionId);
if (terrains != null)
{
//находим относительный путь в проекте к коллекции поверхностей
var terrains_path = CoreUtils.GetCoreObjectPath(models, terrains);
//создаем новый объект, внутри коллекции поверхностей и получаем его относительный путь
var terrain_id = AlignLibrary.CreateObjectId(models, terrains, Path.Combine(path, "Имя Вашей поверхности"));
if (terrain_id != null)
{
//получаем этот объект, используя относительный путь
var result = terrain_id.GetCoreObject(models) as ICoreCollectionItem;
if (result != null)
{
//получаем поверхность этого объекта
var container = result.WrappedObject as ISurfaceContainer;
if (container != null)
{
//блокируем объект для редактирования (актуально в режиме коллективной работы)
result.Lock();
try
{
var sfc = container.Surface;
//начинаем операцию изменения
sfc.BeginUpdate();
try
{
try
{
//Ваши операции по изменению поверхности
}
finally
{
//обновляем и перестраиваем индекс поверхности
sfc.Invalidate();
}
}
finally
{
//заканчиваем операцию изменения
sfc.EndUpdate();
}
//обновляем дерево структуры проекта, для секции ЦММ
ApplicationHost.Current.AddIns.Invoke(CoreConsts.I D_REFRESH_PROJECT_EXPLORER, new ExecuteEventArgs(new object[] { result }));
}
finally
{
//разблокируем объект для редактирования (актуально в режиме коллективной работы)
result.Unlock();
}
}
}
}
}
Или такой, для возврата списка всех поверхностей:
Код:
//получаем общую коллекцию моделей
//если Вас интересуют исключительно поверхности ЦММ, то нужно выполнить поиск по
//AlignmentWatcher.GetCollection(AlignmentWatcher.Te rrainModelsCollectionId)
var models = AlignmentWatcher.GetModelsCollection();
if (models != null)
{
//получаем все элементы, которые соответствуют определенному предикату
foreach (var item in models.GetItems(delegate(ICoreCollectionItem obj)
{
//проверяем, что это нужный нам элемент, т.е. элемент содержащий поверхность
return obj.WrappedObject is ISurfaceContainer;
}))
{
//возвращаем поверхность из найденного контейнера
var container = item.WrappedObject as ISurfaceContainer;
if (container != null)
{
yield return container.Surface;
}
}
}