Форум НПФ  

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03-02-2020, 21:33
ZaharovMaxim ZaharovMaxim вне форума
Новичок
 
Регистрация: Feb 2019
Сообщения: 12
По умолчанию Изменить семантику точки

Здравствуйте.
Можно программно поменять свойства точки?
Вот пример кода
Код:
Dim rp As Topomatic.Cad.Foundation.Vector3D Dim boopos As Boolean = Hints.CadCursors.GetPoint(CadView, rp, Укажите точку: ") Dim SurvPoint As SurfacePoint = New SurfacePoint(rp) Dim NPointt As Integer = New Topomatic.Sfc.PointEditor(surface).Add(SurvPoint) Dim CogoPoint As Topomatic.Sfc.Layer.Wrappers.SurfacePointWrapper = New Wrappers.SurfacePointWrapper(surfaceLayer, NPointt) '\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\ 'меняем код точки на Пункт государственной геодезической сети (1000) Dim code As New KeyValuePair(Of Integer, Surface)(1000, surface) CogoPoint.ObjectCode = code 'получаем семантику Dim semantic_obj As Topomatic.Smt.SemanticDataSet = CogoPoint.Semantic Dim col As ICollection(Of Integer) = semantic_obj.Keys Dim obj As Double = 123.12 Dim bool As Boolean = semantic_obj.TryGetValue(8, obj)

Я бы хотел изменить поле Отметка центра
Спасибо
Ответить с цитированием
  #2  
Старый 03-03-2020, 11:31
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 128
По умолчанию

Добрый день!
Да, это возможно. Вы можете менять семантические значения как по целочисленному ключу, так и по тэгу, если он задан. Конкретно для поля "отметка центра" в семантике условного знака задан тэг "CENTER". Вы можете воспользоваться следующим кодом:
Код:
Dim surface as Topomatic.Sfc.Surface = ...; Try surface.BeginUpdate(); 'Создаём редактор для добавления точек поверхности Dim editor as Topomatic.Sfc.PointEditor = new Topomatic.Sfc.PointEditor(surface) 'Запрашиваем положение точки Dim rp As Topomatic.Cad.Foundation.Vector3D Dim has_point As Boolean = Hints.CadCursors.GetPoint(CadView, rp, "Укажите точку: ") If has_point Then Dim point As Topomatic.Sfc.SurfacePoint = new Topomatic.Sfc.SurfacePoint(rp) 'Добавили точку в поверхность и получили её индекс в списке точек Dim point_index As Int = editor.Add(point) 'Получили расширенную информацию о точке Dim information As Topomatic.Sfc.SurfacePointExtensiveInformation = surface.Points.GetExtensiveInformation(index); 'Назначили изыскательский код information.ExplorationCode = "1000"; 'Назначили код объекта information.Code = 1000; 'Обновили условный знак объекта surface.RefreshPointSign(index); 'Обновили слой объекта surface.RefreshPointLayer(index); 'Указали поле "отметка центра" используя его семантический код information.Semantic["CENTER"] = 123.12; End If Finally surface.EndUpdate(); End Try
Ответить с цитированием
  #3  
Старый 03-03-2020, 22:13
ZaharovMaxim ZaharovMaxim вне форума
Новичок
 
Регистрация: Feb 2019
Сообщения: 12
По умолчанию

Спасибо, получилось.
Ответить с цитированием
  #4  
Старый 01-12-2021, 9:33
VSP VSP вне форума
Новичок
 
Регистрация: Jun 2019
Сообщения: 19
По умолчанию

Здравствуйте! При запуске на питоне:
surface.RefreshPointLayer(index)
AttributeError: 'Surface' object has no attribute 'RefreshPointLayer'
Хотя surface is Topomatic.Sfc.Surface object. К какому классу относится метод RefreshPointLayer?

Последний раз редактировалось VSP, 01-12-2021 в 9:48.
Ответить с цитированием
  #5  
Старый 01-12-2021, 12:16
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 128
По умолчанию

Добрый день!

Метод RefreshPointLayer объявлен в пространстве имён Topomatic.Sfc.Layer, и реализован как метод расширения у статического класса SurfaceExtentions. При разработке на VisualBasic средства разработки допускают использование методов расширения, как методы классов и поэтому вызов surface.RefreshPointLayer является допустимым. В случае разработки на python вам потребуется вызывать этот метод напрямую, в виде SurfaceExtentions.RefreshPointLayer(surface, index). Более подробно https://ironpython.net/documentatio...tension-methods.
Ответить с цитированием
  #6  
Старый 05-14-2021, 2:41
VSP VSP вне форума
Новичок
 
Регистрация: Jun 2019
Сообщения: 19
По умолчанию

Добрый день! Подскажите, пожалуйста, как создать выноску (leader) с заданными параметрами (расположением и текстом)? (на python)
Ответить с цитированием
  #7  
Старый 05-17-2021, 18:13
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 128
Плохо

Добрый день!

Для того чтобы создать выноску, Вам необходимо получить объект чертежа Drawing на котором Вы создаёте выноску. В простейшем случае, если у Вас есть экземпляр видового экрана CadView. Код будет выглядеть примерно так:
Код:
from Topomatic.Dwg.Layer import DrawingLayer from Topomatic.Dwg.Entities import DwgLeader cad_view = ... drawing = DrawingLayer.GetDrawingLayer(cadview) drawing.BeginUpdate() try: #создаём выноску text = DwgLeader() #заполняем основные свойства примитива по умолчанию text.Prepare(drawing) #назначаем текст text.Content = "Выноска" #размер шрифта text.Height = 1.0 #положение текста выноски text.Position = Vector2D(10, 10) #положение стрел выноски (может быть несколько) text.Add(Vector2D(0, 0)) text.Add(Vector2D(0, 5)) finally: drawing.EndUpdate()
Ответить с цитированием
  #8  
Старый 05-18-2021, 9:45
VSP VSP вне форума
Новичок
 
Регистрация: Jun 2019
Сообщения: 19
По умолчанию

Спасибо! Получилось.
Как получить точку, лежащую на линии?
Пользователь выбрал полилинию.
Получаем координаты точки клика из cadview.LastPoint.
Затем уточняем координаты.
Похоже на PolylineExtentions.GetNearestPoint. Как применить в этом случае?
Ответить с цитированием
  #9  
Старый 05-18-2021, 16:38
Василий Гончаров Василий Гончаров вне форума
Разработчик Robur
 
Регистрация: Oct 2016
Сообщения: 128
По умолчанию

Добрый день!

Для того, чтобы уточнить координаты на полилинии, вы можете использовать метод расширение PosToStaOffset и StaOffsetToPos. Они позволяют спроецировать точку на полилинию, и получить её координаты в системе координат "расстояние от начала линии, смещение" и преобразовать эти координаты в точку. Например:

Код:
CadView cadView = ... IPolyline3D polyine = ... position = cadView.LastPoint #особенности работы с ref и out параметрами в IronPython #более подробно https://ironpython.net/documentation/dotnet/dotnet.html#ref-and-out-parameters s = clr.Reference[double]() o = clr.Reference[double]() if (PolylineExtentions.PosToStaOffset(polyline, position, s, o)): #нас интересует только расстояние от начала, чтобы получить точку на линии выбираем в качестве смещения 0 polyline_position = PolylineExtentions.StaOffsetToPos(polyline, s.Value, 0.0)
Ответить с цитированием
  #10  
Старый 07-02-2021, 12:27
VSP VSP вне форума
Новичок
 
Регистрация: Jun 2019
Сообщения: 19
По умолчанию

Здравствуйте!
Подскажите, пожалуйста, как изменить свойства выноски (DwgLeader).
Надо изменить выравнивание текста Слева, Справа, По центру
Ответить с цитированием
Ответ


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

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

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

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



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

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

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