Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: ДмитрийПетров от 09-06-2020, 16:19:44

Название: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 16:19:44
Здравствуйте!

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

(https://i.postimg.cc/ZvWRPSWs/example.png) (https://postimg.cc/ZvWRPSWs)
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: avc от 09-06-2020, 16:23:43
А в чем собственно проблема? Считываете линии, анализируете их геометрию, составляете какие вам нужны списки, вставляете в чертеж MText'ы, копируете что надо в clipboard... все примитивные задачи, на все есть примеры...
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 16:25:02
Только тогда, когда Вы сможете сформулировать четкое ТЗ - только тогда Вы сможете рассчитывать на помощь. Впрочем, при четком ТЗ Вы и сами сможете его реализовать. Я вижу две абстрактных картинки, на нижней из них отрезки пронумерованы, но не по длине, а сверху вниз.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 16:44:09
отсортировать примитивы по длинам углам линий
Я так понимаю, что под линиями подразумеваются отрезки (класс 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. }
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 16:49:01
Только тогда, когда Вы сможете сформулировать четкое ТЗ - только тогда Вы сможете рассчитывать на помощь. Впрочем, при четком ТЗ Вы и сами сможете его реализовать. Я вижу две абстрактных картинки, на нижней из них отрезки пронумерованы, но не по длине, а сверху вниз.

Да четкого ТЗ нет признаю, тк задача довольно объемная. Пардон, я немного скорректировал вопрос, сортировку необходимо сделать по углам начиная с середины с присваиванием номера и буферизировать эти порядковые номера. Да там где разрез, отрезки пронумерованы с верху вниз 1-5, так как мы видим в разрезе среднюю часть плана. А нужна нумерация именно как на плане и именно что бы в нижней части плана была нумерация со звездочкой (*), т.к. длины нижней части если смотреть на план = верхней части плана.
p.s. Мне бы пример хоть какой, что бы хоть как-то сориентироваться.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 16:49:48
Я так понимаю, что под линиями подразумеваются отрезки (класс Line). В этом случае угол наклона отрезка к оси 0X вычисляется как угол между векторами Line.EndPoint - Line.StartPoint и Vector3d.XAxis, т.е. (без проверки):

Да, совершенно верно отрезки это Line
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 16:53:40
отсортировать примитивы по длинам углам линий
Я так понимаю, что под линиями подразумеваются отрезки (класс 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, могу прикрепить
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 16:57:16
ДмитрийПетров,
Задача явно не объемная. Только Ваши объяснения меня уже совсем запутали. Как получить угол я уже показал. Что-такое угол начиная с середины я не знаю, но догадываюсь, что речь идет о том, что нужно сортировать по углу наклона отрезка с осью 0X (или по модулю угла наклона).
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 16:58:38
Дело в том, что в плагине все длины уже посчитаны на основе плана и разреза и уже имеют конечную длину в объеме и оформлены в дебагерную таблицу .csv теперь в следующем этапе необходимо пронумеровать это хозяйство как в чертеже (см.план)
Я пас. Тем более, что длина никак не определяет угол.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 17:06:23
Я пас. Тем более, что длина никак не определяет угол.

Согласен что длина не определяет угол. Просто с середины (см. план) начинается счет (угол средней линии = 0), а сортировка это как вспомогательный метод для получения нумерации (как на плане).
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 17:13:48
Я пас. Тем более, что длина никак не определяет угол.

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

Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 17:30:02
Ваша формулировка задачи не позволяет её решить. Или Вы:
1. формулируете задачу нормально
2. разбиваете её на отдельные этапы
3. на тех этапах, на которых не знаете что делать - просите помощь
Или Вам придётся искать исполнителя для этой задачи. И тогда Вам сюда: https://adn-cis.org/forum/index.php?board=38.0

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

так для исполнителя тоже нужно будет все тоже самое объяснять..
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Александр Ривилис от 09-06-2020, 17:34:47
так для исполнителя тоже нужно будет все тоже самое объяснять..
Безусловно. И в процессе последовательного объяснения ТЗ Вы и сами поймёте как разложить эту задачу на составные части. И тогда возможно и исполнитель не понадобится.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 09-06-2020, 17:51:19
Безусловно. И в процессе последовательного объяснения ТЗ Вы и сами поймёте как разложить эту задачу на составные части. И тогда возможно и исполнитель не понадобится.

возможно вы правы
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Привалов Дмитрий от 09-06-2020, 20:30:39
Просто с середины (см. план) начинается счет (угол средней линии = 0)
Если средняя линия не определена четко в ТЗ, как горизонталь, вертикаль, средняя между отрезками, средняя линия веера и т.д. то рекомендую явно указать отрезок который является средней линией и от него отсчитывать углы.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 10-06-2020, 14:59:20
Если средняя линия не определена четко в ТЗ, как горизонталь, вертикаль, средняя между отрезками, средняя линия веера и т.д. то рекомендую явно указать отрезок который является средней линией и от него отсчитывать углы.

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

В пятом столбце таблицы посчитана итоговая длина от двух углов (плана и разреза). На длины холостого хода и на выделенные желтым цветом окна не обращай внимание это контрольные скважины в чертеже они определены как (dashed), их нумеровать пока не будем.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Привалов Дмитрий от 10-06-2020, 15:54:38
Как это разбить на более мелкие задачи я пока не могу сказать.
выбрал синие отрезки определил угол, отсортировал, промаркировал, расставил углы
выбрал зеленые отрезки определил углы отсортировал, 3 условия маркировки нулевая линия, отрезки с углом 0-90 и 270-360, в зависимости от этого маркируешь.
расставил углы.

полученную информацию запомнил где-то и в таблицу
...чет типа того.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 10-06-2020, 16:12:19
промаркировал
выбрал синие отрезки определил угол, отсортировал, промаркировал, расставил углы
выбрал зеленые отрезки определил углы отсортировал, 3 условия маркировки нулевая линия, отрезки с углом 0-90 и 270-360, в зависимости от этого маркируешь.
расставил углы.

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


хм..Спасибо, а про маркировку куда глянуть? пример бы что б ясность в голове появилась)
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Привалов Дмитрий от 10-06-2020, 16:23:35
хм..Спасибо, а про маркировку куда глянуть? пример бы что б ясность в голове появилась)
Ищи "как создать DBText", MText или типа того.
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 10-06-2020, 16:26:02
Ищи "как создать DBText", MText или типа того.

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

А вот где почитать про маркировку и нумерацию элементов в массиве? Спасибо
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: Привалов Дмитрий от 10-06-2020, 18:31:48
А вот где почитать про маркировку и нумерацию элементов в массиве?
Это относится к C#, а не AutoCAD API.
вариантов несколько, в зависимости от опыта.

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

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

сходу точно не подскажу, тут подумать нужно....
Название: Re: нумератор линий в чертеже с сортировкой по длине и присваиванием номера
Отправлено: ДмитрийПетров от 10-06-2020, 19:23:03
А вот где почитать про маркировку и нумерацию элементов в массиве?
Это относится к C#, а не AutoCAD API.
вариантов несколько, в зависимости от опыта.

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

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

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

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