Форум НПФ  

Вернуться   Форум НПФ "ТОПОМАТИК" > Программные продукты "Топоматик Robur" на платформе "Robur AP3" > Средства разработки Топоматик Robur > Вопросы и ответы
Ник
Пароль
Регистрация FAQ Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #11  
Старый 01-20-2017, 12:54
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию Таблицы грунтов и выработок

Спасибо большое очень помогли в прошлый раз.

Тут появилось еще пара вопросов. Необходимо заполнить программно таблицу выработок и по каждой добавить грунты из таблицы грунтов. Как это можно реализовать? Таблицу грунтов и выработок в иерархии классов нашел, но как их получить и заполнить?

Модели кстати из активного документа получил следующим образом.

Код:
var pr = ApplicationHost.Current.ActiveProject as ICoreProject; var models = pr.FindItem(new Guid("610c9396-da4c-4315-9fcf-0e1a93a8b60a")) as ICoreCollection;
Ответить с цитированием
  #12  
Старый 01-20-2017, 16:01
Кузмичев Алексей Кузмичев Алексей вне форума
Администратор
 
Регистрация: Jun 2009
Сообщения: 1,975
По умолчанию

Цитата:
Сообщение от TestUser
Спасибо большое очень помогли в прошлый раз.

Тут появилось еще пара вопросов. Необходимо заполнить программно таблицу выработок и по каждой добавить грунты из таблицы грунтов. Как это можно реализовать? Таблицу грунтов и выработок в иерархии классов нашел, но как их получить и заполнить?


По данному вопросу подготовим подробный ответ в начале следующей недели.
Ответить с цитированием
  #13  
Старый 01-24-2017, 17:35
Александр Анатольевич Александр Анатольевич вне форума
Разработчик Robur
 
Регистрация: Jan 2017
Сообщения: 1
По умолчанию

TestUser, я подготовил для вас ответ на ваш вопрос.
Прежде всего следует отметить, что вопрос работы с геологией уже поднимался ранее на форуме в данной теме:
http://topomatic.ru/forum/showthread.php?t=5299
В данном посте был выложен простой пример работы с глобальной геологией (GlgGAccess.zip):
http://topomatic.ru/forum/showpost....972&postcount=4
------------
В Робур кроме глобальной геологии (Легенда грунтов и Глобальные выработки) есть ещё локальная геология (Грунты и выработки на текущем подобъекте (т.е. текущей трассе (трассу задаёт класс Alignment) ). Глобальная легенда грунтов и таблица грунтов на конкретной трассе имеют одинаковую структуру, которую описывает класс GroundTable. Таблица грунтов (GroundTable) состоит из списка объектов типа Ground (грунт). Класс Ground описывает грунт (id грунта, шифр, наименование, цвет, состояние, штриховка и пр.). Таблицы выработок в глобальном и локальном случае наследуются от базового абстрактного класса BoreholeTable и описываются классами-наследниками GlobalBoreholeTable и AlignmentBoreholeTable соответственно. При этом GlobalBoreholeTable состоит из списка объектов типа GlobalBorehole, а AlignmentBoreholeTable - из объектов типа AlignmentBorehole. В свою очередь GlobalBorehole и AlignmentBorehole - это наследники от базового абстрактного класса Borehole, описывающего базовые параметры выработки (номер выработки, её тип и т.п., а также список слоёв грунтов на различных глубинах). AlignmentBorehole добавляет к этим параметрам данные о местоположении выработки в привязке к конкретному Alignment-у (к подобъекту, т.е. к трассе) - пикет и смещение. А GlobalBorehole хранит местоположение выработки в глобальных координатах.
-------------
В старой версии примера была показана работа с глобальной геологией: как получить ссылки на таблицы грунтов и выработок, как создавать глобальные выработки и пр. Я добавил в пример новый экшен (action) с именем actFillGroundsAndBoreholes ("Заполнить грунты и выработки"), который иллюстрирует как программно заполнять локальные грунты и выработки по текущему подобъекту. Прежде всего требуется получить ссылку на текущий подобъект alignment (св-во CurrentAlignment), взять по нему локальную геологию (ф-ция GetLocalGeology):
Код:
//Возвращает текущий (активный) подобъект protected Alignment CurrentAlignment { get { var pr = ApplicationHost.Current.ActiveProject as ICoreProject; if (pr != null) { var a = pr.FindItem(new Guid("30061C68-0D76-4a29-BF5C-B5ECADBCA3FE")) as ICoreCollection; if (a != null) { if (a.ActiveItem != null) { if (a.ActiveItem.WrappedObject is IAlignmentContainer) { return ((IAlignmentContainer)a.ActiveItem.WrappedObject). Alignment; } return null; } } } return null; } } //Получение модели локальной геологии на подобъекте private AlignmentGeology GetLocalGeology(Alignment alignment) { object value; if (alignment.Plugins.TryGetValue(GeologyConsts.Plugi nUID, out value)) { return ((IAlignmentGeologyContainer)value).Geology; } return null; }


И получить ссылки на таблицы грунтов и выработок:

Код:
Alignment alignment = CurrentAlignment; //получаем текущий подобъект (трассу) AlignmentGeology localGeology = GetLocalGeology(alignment); //получаем локальную геологию на подобъекте alignment GroundTable groundTable = localGeology.GroundTable; //таблица грунтов по трассе BoreholeTable boreholeTable = localGeology.BoreholeTable; //таблица выработок по трассе

------
Создание грунтов - очень простое. Требуется лишь создать новый грунт, назначить ему характеристики и добавить его в таблицу грунтов:

Код:
// Создаем новый грунт и добавляем в таблицу грунтов var ground = new Ground(groundTable); ground.Name = "Новый грунт 1"; ground.Cipher = "01"; ground.Genesis = "Генезис1"; groundTable.Add(ground);


В цикле можно добавить сколько нужно грунтов. Большинство свойств для грунта назначаются непосредственно. Единственный нетривиальный момент - это назначение штриховки для грунта. Требует знаний по работе со структурой семантики, семантическими узлами и пр. Тем не менее добавлен пример того, как можно назначать грунту штриховку по её имени в библиотеке площадных условных знаков - функция SetHatch():

Код:
SetHatch(ground, "01 - Алевролит");

------

Что касается выработок, то каждая выработка (AlignmentBorehole) состоит из списка слоёв грунтов, каждый из которых описывается классом BoreholeGround и хранит в себе глубину слоя, а также ссылку на конкретный грунт из таблицы грунтов.

Код:
//Создание новой выработки: var borehole = new AlignmentBorehole(boreholeTable); borehole.Number = "Скв.-1"; //Создание слоя грунта внутри выработки: var boreholeGround = new BoreholeGround(borehole); boreholeGround.Depth = 5.0; // Глубина слоя грунта в выработке var ground = groundTable[0]; //берём ссылку на первый грунт в таблице грунтов boreholeGround.Ground = ground; //задаём у слоя грунта в выработке ссылку на первый грунт в таблице грунтов borehole.Add(boreholeGround); //добавляем слой в выработку


---------------

Следует иметь в виду, что множественные операции по удалению, добавлению либо изменению свойств грунтов и выработок следует заключать между вызовами BeginUpdate() и EndUpdate() у объекта, содержащего внутри себя все изменяемые объекты, чтобы они были оформлены как единая транзакция (только одна запись в Undo-истории на все произведенные изменения):

Код:
localGeology.BeginUpdate(); try { //Множественные изменения грунтов и выработок } finally { localGeology.EndUpdate(); }


Обновленный и дополненный исходный код примера прикреплён к этому посту - GlgGAccess.zip .
Для открытия требуется Visual Studio 2015.
Вложения
Тип файла: zip GlgGAccess.zip (63.9 Кбайт, 659 просмотров)
Ответить с цитированием
  #14  
Старый 01-27-2017, 14:58
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию

Спасибо за предоставленные примеры. Очень помогли.
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:29.

Навигация по основному сайту
Главная Каталог продуктов и услуг Где купить Сопровождение
Вакансии О компании Обзоры Канал на YouTube

vBulletin v3.0.7 , Copyright ©2000-2020, Jelsoft Enterprises Ltd.
Copyright © 2003-2020, НПФ "ТОПОМАТИК".