Форум НПФ  

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10-21-2016, 6:18
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию Расширение функционала - модули C#

Добрый день.

Появился ряд вопросов, интересует возможность реализации описанного функционала:
1. Возможность в свойствах объектов (например отрезок), добавить собственные поля.
2. Возможность добавить кнопку "Масштаб" на вкладках "Профиль", "Поперечник", как на вкладке "План".
3. Возможность изменения плотности отметок на планах в зависимости от масштаба.
4. Возможность автоматического изменения условных знаков в зависимости от масштаба, согласно "Условные знаки для топографических планов масштабов 1:5000, 1:2000, 1:1000, 1:500".
5. Возможность повернуть заливку растительности относительно рамки листа с соблюдением шахматности.
6. Возможность создать свою вкладку на ряду с вкладками: план, профиль, поперечник.
7. Возможность привязать подземные и наземные коммуникации к черной земле.
Может некоторые пункты можно решить и без написания модулей, т.е. есть альтернативные способы или методы.

Спасибо.
Ответить с цитированием
  #2  
Старый 10-21-2016, 14:39
Зайцев Максим Зайцев Максим вне форума
Разработчик Robur
 
Регистрация: Sep 2016
Сообщения: 9
По умолчанию

1. Добавить свойства, которые бы были видны пользователю, добавить нельзя. Но можно добавить данные, которые можно потом прочитать программно.
if (!line.HasExtensionDictionary)
{
line.CreateExtensionDictionary();
}
var dictionary = line.GetExtensionDictionary();
dictionary.SetString("prop", "Some value");
2. Такой функции пока нет.
3. Такой функции пока нет.
4. В библиотеке условных знаков предусмотрена возможность назначения условного знака для каждого масштаба.
5. Именно так это и работает
6. var project = ApplicationHost.Current.ActiveProject;
var window = project.AddDocumentWindow("MYWINDOW");
window.Text = "Caption";
var frame = window.AddCadViewFrame("MYFRAME", "Model");
7. Все коммуникации на плане привязаны к точкам поверхности.
Ответить с цитированием
  #3  
Старый 10-21-2016, 16:10
Тимофей Ананичев Тимофей Ананичев вне форума
Разработчик Robur
 
Регистрация: Sep 2012
Сообщения: 18
По умолчанию

Дмитрий, добрый день!

Готовый пример реализации собственного окна (вкладки) Вы можете найти в моем ответе на ваши вопросы по электронной почте от 27 июля.

Для открытия проекта необходима Microsoft Visual Studio 2015.

Если необходимо, я могу его продублировать.
Ответить с цитированием
  #4  
Старый 10-22-2016, 15:28
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию

Цитата:
Сообщение от Тимофей Ананичев
Дмитрий, добрый день!

Готовый пример реализации собственного окна (вкладки) Вы можете найти в моем ответе на ваши вопросы по электронной почте от 27 июля.

Для открытия проекта необходима Microsoft Visual Studio 2015.

Если необходимо, я могу его продублировать.

Продублируйте пожалуйста, так как письма не получал.
Ответить с цитированием
  #5  
Старый 10-22-2016, 15:32
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию

И еще небольшой вопрос. Как программно создать слой, добавить его в текущий документ и перенести выборочно туда объекты, DwgEntity например?

Спасибо.
Ответить с цитированием
  #6  
Старый 10-24-2016, 10:37
Тимофей Ананичев Тимофей Ананичев вне форума
Разработчик Robur
 
Регистрация: Sep 2012
Сообщения: 18
По умолчанию

Доброе утро! Хорошо, продублирую.

По поводу слоев: для добавления слоя DrawingLayer в чертеж (модель) имеется метод Drawing.Layers.Add(...). А у примитивов (наследников DwgEntity) свойство Layer, определяющее их принадлежность к одному из слоев.
Ответить с цитированием
  #7  
Старый 10-25-2016, 13:41
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию

Цитата:
Сообщение от Зайцев Максим
4. В библиотеке условных знаков предусмотрена возможность назначения условного знака для каждого масштаба.

Не могли бы описать по шагам как это сделать?

Спасибо.
Ответить с цитированием
  #8  
Старый 10-25-2016, 17:11
Сергей Круглов Сергей Круглов вне форума
Разработчик Robur
 
Регистрация: Jun 2013
Сообщения: 1,140
По умолчанию

Точечный УЗ по масштабу можно добавить, для пользовательской библиотеки, создав ее и новый элемент см рис.1
Также предлогаем посмотреть видео где создается новый объект семантики, там есть момент где показано как создать новую библиотеку точечных уз:
https://www.youtube.com/watch?v=1IQ...XRGxIfa&index=9
Изображения
 
Ответить с цитированием
  #9  
Старый 11-08-2016, 13:55
TestUser TestUser вне форума
Новичок
 
Регистрация: Jul 2016
Сообщения: 9
По умолчанию

Добрый день.

Появился следующий вопрос.
При добавлении точек на профиль (Профиль->Добавить точку на черный профиль), включается отображение уже существующих точек. Есть ли возможность программно включить отображение этих точек из своего модуля и если да то как?

P.S. С получением этих точек (позиций и имен пикетов) проблем нет, а вот как их отобразить не понятно.
Ответить с цитированием
  #10  
Старый 11-09-2016, 13:21
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 27
По умолчанию

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

1. Если эти точки нужны вам постоянно - то целесообразнее написать для их отрисовки отдельный слой и рисовать их там. В этом случае вы сможете работать со слоем этих точек, включать и отключать его видимость и так далее.

2. Если вам необходимо их отобразить только на время выполнения какой-либо функции, то можно сделать динамическую отрисовку на время выполнения этой функции.

В качестве примера рассмотрим второй вариант, примерно так сделано в функции "Добавить точку на чёрный профиль".


Код:
//для уменьшения размера кода, допустим что мы уже получили подобъект alignment и текущий профиль в transition, //CadView плана в cadView и находимся внутри нашей функции //создаем делегат который будет осуществлять динамическую отрисовку DrawCursorEvent onDraw = delegate(CadPen pen, Vector3D point) { //получаем контекст для отрисовки var dc = pen.DeviceContext; //получаем текущий масштаб на CadView float scale = (float)cadView.AnnotationScale; //вычисляем размер точек, чтобы они выглядели одинаково, независимо от масштаба float thickness = (pen.DeviceContext.IsPerspective) ? 3f : (float)(0.5 * scale / dc.OrthoScale); if (thickness < 1) { thickness = 1; } //сохраняем старые значения цвета, толщины и размытия var dc_thickness = dc.Thickness; var point_smooth = dc.PointSmooth; var color = dc.Color; try { //назначаем новые значения цвета, толщины и размытия dc.Color = Color.Lime; dc.Thickness = thickness; dc.PointSmooth = thickness > 2; //рисуем точки черного профиля for (int i = 0; i < transition.EgProfile.Count; i++) { //если отрисовка прервана, выходим if (dc.Terminated) return; //получаем точку профиля var node = transition.EgProfile[i]; Vector2D pos; //получаем её координаты в плане if (alignment.Plan.CompoundLine.StaOffsetToPos(node.S tation, 0.0, out pos)) { //проверяем попала ли она в текущие видимые границы if (dc.Box.Contains(pos) != ContainmentType.Disjoint) { //рисуем точку dc.gVertex(pos); } } } } finally { //восстанавливаем старые значения цвета, толщины и размытия dc.Color = color; dc.Thickness = dc_thickness; dc.PointSmooth = point_smooth; } double sta, offs; //получаем пикет и смещение точки курсора по её плановому положению if (alignment.Plan.CompoundLine.PosToStaOffset(point. Pos, out sta, out offs)) { Vector2D pos; //получаем плановые координаты точки на оси по этому пикету if (alignment.Plan.CompoundLine.StaOffsetToPos(sta, 0, out pos)) { //проверяем включен ли режим коллективной работы в рамках одного подобъекта if (alignment.IsLimitedChange) { //если мы находимся в пределах участка разрешенного для редактирования при коллективной работе if (alignment.StationInLimits(sta, true, true)) { //переносим курсор на ось трассы cadView.CurrentCursorPointF = pos; } else { //рисуем в позиции курсора ошибку AuxiliaryDrawer.DrawCursorMessageIcon3d(dc, point, MessageBoxIcon.Error); } } else { //переносим курсор на ось трассы cadView.CurrentCursorPointF = pos; } } else { //рисуем в позиции курсора ошибку AuxiliaryDrawer.DrawCursorMessageIcon3d(dc, point, MessageBoxIcon.Error); } } else { //рисуем в позиции курсора ошибку AuxiliaryDrawer.DrawCursorMessageIcon3d(dc, point, MessageBoxIcon.Error); } }; //назначаем наш делегат на динамическую отрисовку cadView.DynamicDraw += onDraw; try { //запрашиваем у пользователя ввод точек while (CadCursors.GetPoint(cadView, out planPos, "Укажите положение точки на плане")) { //обрабатываем ввод на корректность и если необходимо выполняем какие-нибудь действия } } finally { //не забываем убрать нашу отрисовку, когда она больше не нужна cadView.DynamicDraw -= onDraw; }
Ответить с цитированием
Ответ


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

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

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

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



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

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

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