Форум НПФ  

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #81  
Старый 04-22-2019, 15:56
bambr bambr вне форума
Пользователь
 
Регистрация: Jan 2019
Сообщения: 91
По умолчанию

Как происходит изменение семантики у SurfacePoint?
point.Code = 1017 не подходит
Ответить с цитированием
  #82  
Старый 04-22-2019, 16:21
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Вам необходимо менять значения точек поверхности используя класс PointEditor. Обратите внимание на первый пример.

Цитата:
Сообщение от Василий Гончаров
В общем виде изменение отметок точек структурной линии можно разделить на две части:
  • Изменение отметок точек поверхности, на которые опирается структурная линия
  • Изменение превышений узлов структурной линии над точками поверхности, если линия ситуационная

В первом случае алгоритм действий должен быть такой:
Код:
... Surface surface = ... StructureLine line = ... double our_elevation = ... //начинаем изменение поверхности surface.BeginUpdate(); try { //создаем редактор точек var editor = new PointEditor(surface); for (int i = 0; i < line.Count; i++) { //поскольку нас интересует только изменение отметки - то получаем положение точки var vertex = surface.Points[line[i].Index].Vertex; //назначаем новую отметку vertex.Z= our_elevation; //применяем её к точке поверхности editor.SetVertex(line[i].Index, vertex); } } finally { //заканчиваем изменение поверхности surface.EndUpdate(); }

В этом случае мы меняем точки поверхности на которые опирается структурная линия.

Во втором случае:
Код:
... StructureLine line = ... double our_behavior_elevation = ... //начинаем изменение поверхности surface.BeginUpdate(); try { Debug.Assert(line.IsSituation, "Линия не ситуационная") for (int i = 0; i < line.Count; i++) { //мы меняем только превышение в каждом узле var node = line[i]; node.Elevation = our_behavior_elevation; line[i] = node; } } finally { //заканчиваем изменение поверхности surface.EndUpdate(); }

В этом случае отметки точки поверхности на которые опирается структурная линия останутся неизменными, а изменится только превышение каждого узла линии.
Ответить с цитированием
  #83  
Старый 04-23-2019, 9:50
bambr bambr вне форума
Пользователь
 
Регистрация: Jan 2019
Сообщения: 91
По умолчанию

Редактор точек оперирует готовыми точками. А в готовых точках для семантики только геттеры public int Code { get; } и public SemanticDataSet Semantic { get; }
Ответить с цитированием
  #84  
Старый 04-23-2019, 11:52
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Вся работа с дополнительной информацией точки происходит через экземпляр класса SurfacePointExtensiveInformation. Чтобы назначить смемантику точки Вам необходимо получить информацию через метод GetExtensiveInformation у SurfacePointArray и там назначить код семантики.
Код:
int code = ... int index = ... Surface surface = ... var points = surface.Points; surface.BeginUpdate(); try { //для существующей точки var point = points[index]; var information = points.GetExtensiveInformation(index); information.DataHJolder.Clear(); information.Code = code //для добавляемой точки var editor = new PointEditor(); var add_point = new SurfacePoint(new Vector3D(0, 0, 0)); index = editor.Add(add_point); var information = points.GetExtensiveInformation(index); information.DataHJolder.Clear(); information.Code = code } finally { surface.EndUpdate(); }
Ответить с цитированием
  #85  
Старый 04-25-2019, 11:09
bambr bambr вне форума
Пользователь
 
Регистрация: Jan 2019
Сообщения: 91
По умолчанию

Спасибо, работает, но не до конца. Вместе с семантикой не вставляется точечный условный знак.
Во вложении скрин с автоматической заменой и ручным изменением. В первом случае строки "Блок" нет
Изображения
Тип файла: jpg 2019 04 25 1.JPG (21.5 Кбайт, 1110 просмотров)
Тип файла: jpg 2019 04 25 2.JPG (22.5 Кбайт, 1102 просмотров)
Ответить с цитированием
  #86  
Старый 04-25-2019, 12:01
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Вам необходимо дополнительно воспользоваться методами расширения SurfaceExtentions описанными в Topomatic.Sfc.Layer и назначить блок и слой, соответствующие Вашему коду:
Код:
using Topomatic.Sfc.Layer; ... Surface surface = ... SurfacePointExtensiveInformation information = ... surface.RefreshPointLayer(information); surface.RefreshPointSign(information);
Ответить с цитированием
  #87  
Старый 04-26-2019, 15:31
bambr bambr вне форума
Пользователь
 
Регистрация: Jan 2019
Сообщения: 91
По умолчанию

В чем разница наследников Topomatic.Cad.View.SelectionSet

Topomatic.Cad.View.CompoundSelectionSet
Topomatic.Cad.View.DefaultSelectionSet
Topomatic.Cad.View.EditableItems.EditableItemsSele ctionSet
Topomatic.Cad.View.MultiLayerSelectionSet
Ответить с цитированием
  #88  
Старый 04-26-2019, 17:44
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Topomatic.Cad.View.CompoundSelectionSet - SelectionSet для CompoundLayer,
Topomatic.Cad.View.EditableItems.EditableItemsSele ctionSet - SelectionSet для слоя EditableItemsLayer
Topomatic.Cad.View.MultiLayerSelectionSet- SelectionSet для слоя MultiLayer

все реализации учитывают специфику слоёв с которыми они работают.

Topomatic.Cad.View.DefaultSelectionSet - SelectionSet по умолчанию - пустая заглушка без возможности выделения элементов
Ответить с цитированием
  #89  
Старый 06-14-2019, 4:10
VSP VSP вне форума
Новичок
 
Регистрация: Jun 2019
Сообщения: 22
По умолчанию

Здравствуйте!
Как задать условный знак для точки?
Ответить с цитированием
  #90  
Старый 06-14-2019, 10:20
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 154
По умолчанию

Добрый день!

Вам необходимо задать семантику Вашего условного знака для точки. Сделать это можно следующим образом:
Цитата:
Сообщение от Василий Гончаров
Вся работа с дополнительной информацией точки происходит через экземпляр класса SurfacePointExtensiveInformation. Чтобы назначить смемантику точки Вам необходимо получить информацию через метод GetExtensiveInformation у SurfacePointArray и там назначить код семантики.
Код:
int code = ... int index = ... Surface surface = ... var points = surface.Points; surface.BeginUpdate(); try { //для существующей точки var point = points[index]; var information = points.GetExtensiveInformation(index); information.DataHJolder.Clear(); information.Code = code //для добавляемой точки var editor = new PointEditor(); var add_point = new SurfacePoint(new Vector3D(0, 0, 0)); index = editor.Add(add_point); var information = points.GetExtensiveInformation(index); information.DataHJolder.Clear(); information.Code = code } finally { surface.EndUpdate(); }


Дополнительно необходимо сделать это:
Цитата:
Сообщение от Василий Гончаров
Вам необходимо дополнительно воспользоваться методами расширения SurfaceExtentions описанными в Topomatic.Sfc.Layer и назначить блок и слой, соответствующие Вашему коду:

Код:
using Topomatic.Sfc.Layer; ... Surface surface = ... SurfacePointExtensiveInformation information = ... surface.RefreshPointLayer(information); surface.RefreshPointSign(information);

Ответить с цитированием
Ответ


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

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

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

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



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

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

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