Как перерисовать Мультивыноску чтобы корректно отображались линии указатели?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как перерисовать Мультивыноску чтобы корректно отображались линии указатели?

Как перерисовать Мультивыноску чтобы корректно отображались линии указатели?

Ответ
Поиск в этой теме
Непрочитано 31.07.2024, 13:06 #1
Как перерисовать Мультивыноску чтобы корректно отображались линии указатели?
power85
 
Регистрация: 03.02.2017
Сообщений: 61

Здравствуйте
Как перерисовать Мультивыноску чтобы линии указатели отображались корректно?
Нужно перерисовать после метода TextLocation (перемещения текста мультивыноски).
Платформа Net.



Миниатюры
Нажмите на изображение для увеличения
Название: mleader.jpg
Просмотров: 138
Размер:	33.1 Кб
ID:	264019  

Просмотров: 831
 
Непрочитано 01.08.2024, 08:31
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


У мультивыноски есть метод mleader.SetDogleg(i, mLeaderTextDoglegDirection); который и задает нужный Вам параметр.
Как это все работает можно посмотреть на примере вот этого кода: https://www.keanw.com/2016/09/jiggin...using-net.html там есть строки:
Цитата:
// Set the direction of the text to depend on the X of the end-point
// (i.e. is if to the left or right of the start-point?)
var dl = new Vector3d((_end.X >= _start.X ? 1 : -1), 0, 0);
ml.SetDogleg(_index, dl);
Boxa вне форума  
 
Автор темы   Непрочитано 01.08.2024, 14:58
#3
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Спасибо. За ответ.
Как я понял ml.SetDogleg устанавливает горизонтальную длину от линии до полки. А где там обновляем по ссыкле пока понять не могу.

Пока сообразил такой способ у меня работает. Это все линии указатели удалить с сохранением координат, а потом их заново добавить при этом линии указатели корректно от рисуются.

Код:
[Выделить все]
' Сохранение точек концов всех текущих линий указателей
Dim list_point_end_leader As New List(Of Point3d) ' список точек которые не посредствено указывают
Dim list_leader_Indexes As ArrayList = mleader.GetLeaderIndexes() ' массив индексов имеющихся линий указателей слева и справо текста мультивыноски (если 0 есть слева, 1 есть справа если не ошибаюсь)
For Each leaderIndex As Integer In list_leader_Indexes ' проход по этому массиву
    Dim leaderLineIndexes As ArrayList = mleader.GetLeaderLineIndexes(leaderIndex) ' массив индексов имеющихся линии указателей с одной стороны текста мультивыноски
    For Each leaderLineIndex As Integer In leaderLineIndexes ' проход по этому массиву
        Dim point_end_leader As Point3d = mleader.GetVertex(leaderLineIndex, 0) ' точка конца указывающий линии (индекс 0 указывает на концевую точку линии)
        list_point_end_leader.Add(point_end_leader)
    Next
Next

' Установка новой позиции текста
mleader.TextLocation = newTextPosition

' Удаление всех текущих линий указателей
For Each leaderIndex As Integer In list_leader_Indexes
    mleader.RemoveLeader(leaderIndex)
Next

' Добавление линий указателей в тех же координатах концов
For Each point_end_leader As Point3d In list_point_end_leader
    mleader.AddLeaderLine(point_end_leader)
Next
----- добавлено через ~10 мин. -----
Цитата:
Как это все работает можно посмотреть на примере вот этого кода: https://www.keanw.com/2016/09/jiggin...using-net.html там есть строки:
Кстати офигенная команда написано по ссылке по рисованию мультивыноски сначала текст пишешь потом указываешь куда ставить видя сам текс. Прямо это не хватало
Надо будет потом это использовать и по другому мультивыноски вставлять.
power85 вне форума  
 
Непрочитано 01.08.2024, 15:10
#4
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от power85 Посмотреть сообщение
Как я понял ml.SetDogleg устанавливает горизонтальную длину от линии до полки
Вы не правильно поняли "горизонтальную длину от линии до полки" устанавливает свойство ml.DoglegLength=50 , а метод ml.SetDogleg() устанавливает сторону с которой будет выноска, параметрами к этому методу передается индекс выноски, для которой нужно установить сторону и единичный вектор, показывающий с какой стороны её рисовать.
Boxa вне форума  
 
Автор темы   Непрочитано 01.08.2024, 15:54
#5
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Понятно.
В данном случаи мне не хотел бы еще определять с какой стороны текста нужно будет рисоваться линии указательные.
Жалко нет метода просто regen или update мультивыноски.
power85 вне форума  
 
Непрочитано 01.08.2024, 16:30
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от power85 Посмотреть сообщение
мне не хотел бы еще определять с какой стороны текста нужно будет рисоваться линии указательные
И потому Вам проще перерисовать вообще все выноски... в справке можно найти методы Point3d GetFirstVertex(int leaderLineIndex) и Point3d GetLastVertex(int leaderLineIndex) и используя их написать что то типа:
Код:
[Выделить все]
      var ml = new Db.MLeader();
      for (int i = 0; i < ml.LeaderCount; i++)
      {
        Gem.Point3d start = ml.GetFirstVertex(i);
        Gem.Point3d end = ml.GetLastVertex(i);
        var dl = new Gem.Vector3d((end.X >= start.X ? 1 : -1), 0, 0);
        ml.SetDogleg(i, dl);
      }
код я даже не компилил, потому и пишу "что то типа".
Цитата:
Сообщение от power85 Посмотреть сообщение
Жалко нет метода просто regen или update мультивыноски.
И что должно происходить при вызове этих методов?

Последний раз редактировалось Boxa, 01.08.2024 в 16:39.
Boxa вне форума  
 
Автор темы   Непрочитано 01.08.2024, 16:50
#7
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Ясно, можно по другому. А можете дать ссылку на справку чтобы почитать что делает этот метод и что требует? Пытался найти не нашел.
Например что делает GetFirstVertex он получает первую вершину, а это какую, и тоже про GetLastVertex.

Цитата:
И что должно происходить при вызове этих методов?
Автоматическая перерисовка мультивыности чтобы линии указательные были самыми короткими и корректными.
power85 вне форума  
 
Непрочитано 01.08.2024, 17:51
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Т.к. автодеск ушел из РФ и заблочил доступ к онлайн справке, то я смотрю в веб архиве http://web.archive.org/web/202406260...0-55F6A939B6F2
или можно смотреть в скачанном SDK, там в папке docs лежат файлы справки,
можно просто выделив в студии тип объекта и нажав F12 посмотреть свойства и методы выбранного типа и по смыслу подобрать нужное,
например: приведенные выше методы Point3d GetFirstVertex(int leaderLineIndex) и Point3d GetLastVertex(int leaderLineIndex) -> тут как бы имя передаваемого в эти методы аргумента (leaderLineIndex),
тип возвращаемого объекта (Point3d) и имена самих методов (GetFirstVertex и GetLastVertex)намекают,
что вызывая эти методы и передавая им индекс нужной выноски на выходе получите координаты точек начала или конца выноски.

Цитата:
Сообщение от power85 Посмотреть сообщение
Автоматическая перерисовка мультивыности чтобы линии указательные были самыми короткими и корректными.
Это очень не однозначное требование, с учетом того, что линии выносок могут иметь множество вершин и вообще быть криволинейными, да и понятие "корректными" каждый понимает под ним, что то свое...
Вот вполне корректное обозначение, но не соответствующее Вашим критериям:

Именно по этому программисту даются инструменты сделать так как он хочет.

Забыл. Ну и конечно Google, если зпросы начинать со слов "autocad api c#" то найти можно очень много =)

Последний раз редактировалось Boxa, 01.08.2024 в 18:03.
Boxa вне форума  
 
Автор темы   Непрочитано 01.08.2024, 21:59
#9
power85


 
Регистрация: 03.02.2017
Сообщений: 61


Хорошо. Спасибо.
power85 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Как перерисовать Мультивыноску чтобы корректно отображались линии указатели?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой стиль текста нужно установить, чтобы корректно отображались окна в Scad ? jula89 SCAD 3 08.10.2019 15:19
Несплошные линии, X-refы и... задача Vova AutoCAD 6 20.04.2018 16:14
отображаются не корректно кривые линии в автокаде Marianna AutoCAD 9 11.04.2008 11:41
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57