Показать сообщение отдельно
  #4  
Старый 02-21-2019, 14:03
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Добрый день!

Для этого Вы можете вызвать у него метод 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; } } }
Ответить с цитированием