нумератор линий в чертеже с сортировкой по длине и присваиванием номера

Автор Тема: нумератор линий в чертеже с сортировкой по длине и присваиванием номера  (Прочитано 9018 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Здравствуйте!

Вопрос. Каким образом я могу реализовать нумератор и отсортировать примитивы по длинам углам линий с присваиванием порядкового номера, начиная с середины как на чертеже в плане? Эти номера нужно будет поместить в буфер, что бы с ними работать дальше.
p.s. пишу плагин под autocad2015 и нигде не мог найти чего-то похожего!
Заранее спасибо!



Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 809
  • Карма: 166
    • Мои плагины к Автокаду
А в чем собственно проблема? Считываете линии, анализируете их геометрию, составляете какие вам нужны списки, вставляете в чертеж MText'ы, копируете что надо в clipboard... все примитивные задачи, на все есть примеры...

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Только тогда, когда Вы сможете сформулировать четкое ТЗ - только тогда Вы сможете рассчитывать на помощь. Впрочем, при четком ТЗ Вы и сами сможете его реализовать. Я вижу две абстрактных картинки, на нижней из них отрезки пронумерованы, но не по длине, а сверху вниз.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
отсортировать примитивы по длинам углам линий
Я так понимаю, что под линиями подразумеваются отрезки (класс Line). В этом случае угол наклона отрезка к оси 0X вычисляется как угол между векторами Line.EndPoint - Line.StartPoint и Vector3d.XAxis, т.е. (без проверки):
Код - C# [Выбрать]
  1. public double angleLineAndXAxis(Line ln)
  2. {
  3.    return (ln.EndPoint - ln.StartPoint).GetAngleTo(Vector3d.XAxis);
  4. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Только тогда, когда Вы сможете сформулировать четкое ТЗ - только тогда Вы сможете рассчитывать на помощь. Впрочем, при четком ТЗ Вы и сами сможете его реализовать. Я вижу две абстрактных картинки, на нижней из них отрезки пронумерованы, но не по длине, а сверху вниз.

Да четкого ТЗ нет признаю, тк задача довольно объемная. Пардон, я немного скорректировал вопрос, сортировку необходимо сделать по углам начиная с середины с присваиванием номера и буферизировать эти порядковые номера. Да там где разрез, отрезки пронумерованы с верху вниз 1-5, так как мы видим в разрезе среднюю часть плана. А нужна нумерация именно как на плане и именно что бы в нижней части плана была нумерация со звездочкой (*), т.к. длины нижней части если смотреть на план = верхней части плана.
p.s. Мне бы пример хоть какой, что бы хоть как-то сориентироваться.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Я так понимаю, что под линиями подразумеваются отрезки (класс Line). В этом случае угол наклона отрезка к оси 0X вычисляется как угол между векторами Line.EndPoint - Line.StartPoint и Vector3d.XAxis, т.е. (без проверки):

Да, совершенно верно отрезки это Line

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
отсортировать примитивы по длинам углам линий
Я так понимаю, что под линиями подразумеваются отрезки (класс Line). В этом случае угол наклона отрезка к оси 0X вычисляется как угол между векторами Line.EndPoint - Line.StartPoint и Vector3d.XAxis, т.е. (без проверки):
Код - C# [Выбрать]
  1. public double angleLineAndXAxis(Line ln)
  2. {
  3.    return (ln.EndPoint - ln.StartPoint).GetAngleTo(Vector3d.XAxis);
  4. }

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

Если нужен сам плагин для контроля, скомпилированный под acad2015, могу прикрепить

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
ДмитрийПетров,
Задача явно не объемная. Только Ваши объяснения меня уже совсем запутали. Как получить угол я уже показал. Что-такое угол начиная с середины я не знаю, но догадываюсь, что речь идет о том, что нужно сортировать по углу наклона отрезка с осью 0X (или по модулю угла наклона).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Дело в том, что в плагине все длины уже посчитаны на основе плана и разреза и уже имеют конечную длину в объеме и оформлены в дебагерную таблицу .csv теперь в следующем этапе необходимо пронумеровать это хозяйство как в чертеже (см.план)
Я пас. Тем более, что длина никак не определяет угол.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Я пас. Тем более, что длина никак не определяет угол.

Согласен что длина не определяет угол. Просто с середины (см. план) начинается счет (угол средней линии = 0), а сортировка это как вспомогательный метод для получения нумерации (как на плане).

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я пас. Тем более, что длина никак не определяет угол.

Согласен что длина не определяет угол. Просто с середины (см. план) начинается счет (угол средней линии = 0), а сортировка это как вспомогательный метод для получения нумерации (как на плане).
Еще раз повторюсь. Ваша формулировка задачи не позволяет её решить. Или Вы:
1. формулируете задачу нормально
2. разбиваете её на отдельные этапы
3. на тех этапах, на которых не знаете что делать - просите помощь
Или Вам придётся искать исполнителя для этой задачи. И тогда Вам сюда: https://adn-cis.org/forum/index.php?board=38.0

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Ваша формулировка задачи не позволяет её решить. Или Вы:
1. формулируете задачу нормально
2. разбиваете её на отдельные этапы
3. на тех этапах, на которых не знаете что делать - просите помощь
Или Вам придётся искать исполнителя для этой задачи. И тогда Вам сюда: https://adn-cis.org/forum/index.php?board=38.0

..чуть не нажал галочку - Решение).. ладно попробую разбить на еще более мелкие этапы.
 
И тогда Вам сюда: https://adn-cis.org/forum/index.php?board=38.0

так для исполнителя тоже нужно будет все тоже самое объяснять..

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
так для исполнителя тоже нужно будет все тоже самое объяснять..
Безусловно. И в процессе последовательного объяснения ТЗ Вы и сами поймёте как разложить эту задачу на составные части. И тогда возможно и исполнитель не понадобится.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Безусловно. И в процессе последовательного объяснения ТЗ Вы и сами поймёте как разложить эту задачу на составные части. И тогда возможно и исполнитель не понадобится.

возможно вы правы

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Просто с середины (см. план) начинается счет (угол средней линии = 0)
Если средняя линия не определена четко в ТЗ, как горизонталь, вертикаль, средняя между отрезками, средняя линия веера и т.д. то рекомендую явно указать отрезок который является средней линией и от него отсчитывать углы.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Если средняя линия не определена четко в ТЗ, как горизонталь, вертикаль, средняя между отрезками, средняя линия веера и т.д. то рекомендую явно указать отрезок который является средней линией и от него отсчитывать углы.

Дим, средняя линия взята условно в середине, так как ее угол = 0гр и от нее нужно начинать нумерацию, но тут хитро надо нумеровать (в исходнике у меня два массива с веерами - это разрез и план по которым пробегаемся foreach из этих двух массивов считаем результирующую длину относительно проекции на ось Х и угла линии (в плане и разрезе), что бы получить в итоге длину отрезков в объемном массиве в 3d. В результате получаем данные на выходе с массивом отрезков и углами. Отрезок Line на плане, тот что в середине, вот его нужно определить началом счета для нумератора (счет сверху вниз) и нумеровать в той последовательности которая отображена на плане. Как это разбить на более мелкие задачи я пока не могу сказать. :-\
 
P.s. Что бы было понятно, можно попробовать мой пример я перекомпилировал под AutoCad2016 в аттаче. Необходимо на диске C: создать папку PluginsAutocad после загрузки примера test_drawing и загрузки плагина netload, выполняется команда gettable, в созданной папке увидим файл Objects.csv(debug файл) это пока конечные выходные данные стримрайтера и соответственно мне нужно понять как все это хозяйство пронумеровать, что бы получилась нумерация как на чертеже test_drawing (см.план). source code в прикреплении_
В прикрепленной таблице Object.csv сгруппированы данные углы и длины,  а так же в последних двух столбах дебажная инфа true false.
« Последнее редактирование: 10-06-2020, 15:45:07 от ДмитрийПетров »

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
В прикрепленной таблице Object.csv сгруппированы данные

В пятом столбце таблицы посчитана итоговая длина от двух углов (плана и разреза). На длины холостого хода и на выделенные желтым цветом окна не обращай внимание это контрольные скважины в чертеже они определены как (dashed), их нумеровать пока не будем.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Как это разбить на более мелкие задачи я пока не могу сказать.
выбрал синие отрезки определил угол, отсортировал, промаркировал, расставил углы
выбрал зеленые отрезки определил углы отсортировал, 3 условия маркировки нулевая линия, отрезки с углом 0-90 и 270-360, в зависимости от этого маркируешь.
расставил углы.

полученную информацию запомнил где-то и в таблицу
...чет типа того.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
промаркировал
выбрал синие отрезки определил угол, отсортировал, промаркировал, расставил углы
выбрал зеленые отрезки определил углы отсортировал, 3 условия маркировки нулевая линия, отрезки с углом 0-90 и 270-360, в зависимости от этого маркируешь.
расставил углы.

полученную информацию запомнил где-то и в таблицу
...чет типа того.


хм..Спасибо, а про маркировку куда глянуть? пример бы что б ясность в голове появилась)

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
хм..Спасибо, а про маркировку куда глянуть? пример бы что б ясность в голове появилась)
Ищи "как создать DBText", MText или типа того.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Ищи "как создать DBText", MText или типа того.

Спасибо поищу..типа того)

А вот где почитать про маркировку и нумерацию элементов в массиве? Спасибо
« Последнее редактирование: 10-06-2020, 17:26:42 от ДмитрийПетров »

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
А вот где почитать про маркировку и нумерацию элементов в массиве?
Это относится к C#, а не AutoCAD API.
вариантов несколько, в зависимости от опыта.

например можно взять коллекцию и выбрать подходящую Array, List, Dictionary и т.д.
https://metanit.com/sharp/tutorial/4.3.php

И положить туда структуру или класс
https://metanit.com/sharp/tutorial/2.13.php

сходу точно не подскажу, тут подумать нужно....

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
А вот где почитать про маркировку и нумерацию элементов в массиве?
Это относится к C#, а не AutoCAD API.
вариантов несколько, в зависимости от опыта.

например можно взять коллекцию и выбрать подходящую Array, List, Dictionary и т.д.
https://metanit.com/sharp/tutorial/4.3.php

И положить туда структуру или класс
https://metanit.com/sharp/tutorial/2.13.php

сходу точно не подскажу, тут подумать нужно....

Спасибо Дим! Уже читаю ментанит, хороший ресурс. Тоже буду думать как эту задачу решить малой кровью.