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

ADN Club => AutoCAD .NET API => Тема начата: ДмитрийПетров от 03-03-2020, 12:04:22

Название: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 12:04:22
Всем добра! Необходимо создать плагин для создания динамически расширяемых (по высоте) таблиц, в которые необходимо заносить данные на основе вычисления длин линий (в чертеже это профиль и план) на основании двух видов.

в файл .csv заносит данные и формирует длины линий, но не совсем такие, как в файле тестовый расчет.xlsx (в прикреплении два архива). Не могу понять пока, как сделать, что бы все веерные линии в разрезе укорачивались по условию длин линий в плане. Прошу помощи сообщества. Спасибо!
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 12:11:21
Приветствую на форуме!
Необходимо создать плагин для создания динамически расширяемых (по высоте) таблиц
Не существует "динамически расширяемых по высоте таблиц". Есть просто таблицы. И сколько строк ты в них добавишь, столько и будет. Т.е. в твоём коде необходимо провести расчеты (какие именно я даже не хочу разбираться - это твоя специфика), а затем создать таблицу с необходимым количеством строк и выполнить её построчное заполнение.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 12:20:00
Не существует "динамически расширяемых по высоте таблиц". Есть просто таблицы. И сколько строк ты в них добавишь, столько и будет. Т.е. в твоём коде необходимо провести расчеты (какие именно я даже не хочу разбираться - это твоя специфика), а затем создать таблицу с необходимым количеством строк и выполнить её построчное заполнение.

Про таблицы, спасибо Александр, буду пробовать! а вот на счет того как создать условие пересчета линий разреза относительно плана, думаю какой метод применить?
p.s. а на счет расчетов, там переводится длина линий профиля и делиться на cos угла линий в плане, что бы получить итоговую длину линий в пространстве массива.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 12:23:05
а вот на счет того как создать условие пересчета линий разреза относительно плана, думаю какой метод применить?
Пока мы говорим на разных языках и я не понимаю о чем речь. Думаю, что самый простой вариант - это запуск по кнопке команды для пересчета и построения таблицы. Не думаю, что следует усложнять логику работы программы.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 13:26:45
Пока мы говорим на разных языках и я не понимаю о чем речь. Думаю, что самый простой вариант - это запуск по кнопке команды для пересчета и построения таблицы. Не думаю, что следует усложнять логику работы программы

На счет кнопки подумаю, спасибо. До таблиц я пока не дошел, но думаю это будет не так сложно. Понимаю, логику я всегда стараюсь упростить, что бы самому потом не запутаться. В плагине есть команда gattable она пока для дебага, в данный момент плагин создает файл в который заносит данные длин, эти длины должны не сильно отличаться от длин которые посчитаны в файле тестовый пример.7z/тестовый расчет.xlsx (столбик - общая длина, м), а они пока отличаются, т.к. я пока не придумал метод который будет обрезать длины в разрезе (файл автокад в прикреплении) относительно длин в плане, другими словами, т.к длина линий в плане в зависимости от граничных условий уменьшается, то и веер длин в профиле тоже должен уменьшаться до тех же длин как мы видим на плане. Думаю как сделать так, что бы все длины правильно посчитались  в дебагерной таблице .csv. Собственно поэтому я и прошу вашей помощи.

Перезалил архив тестовый пример.7z (в файле тестовый расчет.dwg убрал ненужные слои и добавил слой CalcLayer и переместил туда два вида разрез и план, а так же изменил цвет линий в разрезе на синий, т.к в плагине реализован цветовой фильтр)
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 13:35:47
Ну как минимум углы должны быть в радианах, а не в градусах. Math.Cos() оперирует радианами.
И что это такое:
Код - C# [Выбрать]
  1. int aaa =  Convert.ToInt16(Math.Round(val * 57.3, 0));  //57,3 переводим из рад в градус

???
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 13:47:20
Ну как минимум углы должны быть в радианах, а не в градусах. Math.Cos() оперирует радианами.
И что это такое:
Код - C# [Выбрать]
  1. int aaa =  Convert.ToInt16(Math.Round(val * 57.3, 0));  //57,3 переводим из рад в градус

???

а что не так, округляем и переводим в градусы

 мне необходимо получить сравнительные данные длин и углов что бы они совпадали с данным расчета в эксель
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 13:54:37
Я пас:
1) не вижу нормальной постановки задачи.
2) куча терминов из прикладной области, в которую я вникать не собираюсь.
Я бы мог помочь с задачей, которая вынесена в название темы - а именно "создание таблицы с данными из чертежа", но не буду разбираться с тем, как пересчитывать из длин отрезков по каким-то запутанным алгоритмам.
3) В AutoCAD принято работать с радианами и только в таблицу можешь заносить округленные градусы.
Поэтому расчет длин доводи сам. А вот про остальное, связанное с AutoCAD .NET API можешь спрашивать - обязательно отвечу.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 14:04:50
Я пас:
1) не вижу нормальной постановки задачи.
2) куча терминов из прикладной области, в которую я вникать не собираюсь.
Я бы мог помочь с задачей, которая вынесена в название темы - а именно "создание таблицы с данными из чертежа", но не буду разбираться с тем, как пересчитывать из длин отрезков по каким-то запутанным алгоритмам.
3) В AutoCAD принято работать с радианами и только в таблицу можешь заносить округленные градусы.
Поэтому расчет длин доводи сам. А вот про остальное, связанное с AutoCAD .NET API можешь спрашивать - обязательно отвечу.

1. Постановку задачи причешу
2. Согласен, что в теме присутствуют прикладные термины, могу их заменить на более простые.
3. Считал вначале в радианах, но для получения промежуточной таблицы с длинами я ввел переводной коэффициент в градусы, обязательно сделаю в конечном релизе перевод в градусы при формировании таблицы.
4. Придется запилить новую тему для приведения длин к нормальным значениям.
Спасибо за конструктивную критику.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 14:08:08
4. Придется запилить новую тему для приведения длин к нормальным значениям.
Именно. Причем с картинками, и цифрами. На примере одного отрезка. Что есть и какое значение нужно получить.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 14:19:39
4. Придется запилить новую тему для приведения длин к нормальным значениям.
Именно. Причем с картинками, и цифрами. На примере одного отрезка. Что есть и какое значение нужно получить.

Ок.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Привалов Дмитрий от 03-03-2020, 14:41:59
1. Постановку задачи причешу
2. Согласен, что в теме присутствуют прикладные термины, могу их заменить на более простые.

С таким подходом скорее всего задача не будет решена.  Т.к. чувствуется желание автоматизировать задачу, но нет представления с какого конца взяться и возможно нет опыта автоматизации.

Нужно начать с описания задачи, простыми словами. Чтоб кто-нибудь подсказал в каком направлении двигаться.

Общая задача по описанию походит на какое-то уплотнение грунта, только вместо вместо вбивания свай происходит бурение скважин под разными углами  и заливка цементом?

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

Исходными данными судя по всему является план и разрез на которм уже кто-то расставил скважины.

Скорее всего задачу надо решать в объеме т.е. это построение этого объема по заданным условиям, построение линий в пространстве и считывание результатов пересечений. А уже полученные данные занести в таблицу.

С первого взгляда задача непростая, полуавтоматизированная и стоит подумать решать ли ее вообще, так ли ее решать или как-то по другому, или может не в Autocad а в Civil3d. Ну уж точно не начинать с заполнения таблицы.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 15:33:10
Исходными данными судя по всему является план и разрез на которм уже кто-то расставил скважины.

Скорее всего задачу надо решать в объеме т.е. это построение этого объема по заданным условиям, построение линий в пространстве и считывание результатов пересечений. А уже полученные данные занести в таблицу.

С первого взгляда задача непростая, полуавтоматизированная и стоит подумать решать ли ее вообще, так ли ее решать или как-то по другому, или может не в Autocad а в Civil3d. Ну уж точно не начинать с заполнения таблицы.

Я вижу что Вам эта задача тоже понравилась!:) Да примерно так все и выглядит. Есть план есть разрез есть посчитанная заполненная таблица на чертеже и есть та же самая таблица в эксель только не отсортированная по группам длин. В конечном итоге должна получиться таблица, которая в автокадовом чертеже. И да, есть линии с проекциями на ось Х и углами , весь этот массив пересчитывается математически, что бы получить объемные длины, и затем вертикальным группам, если смотреть на план присваиваются порядковые номера, все сортируется по группам длин и раскладывается по ячейкам в таблице. В Civil3D я не работаю, поэтому все будет решаться по средствам автокада и этого плагина.
Это не что иное как цементация массива через пробуренные дырки (скважины). Если это решилось в эксель, то мне подумалось что тоже самое можно сделать автоматически в автокаде.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 15:43:00
Скорее всего задачу надо решать в объеме т.е. это построение этого объема по заданным условиям, построение линий в пространстве и считывание результатов пересечений. А уже полученные данные занести в таблицу.

да это тоже подразумевалось в будущем, но пока я сам рисую все линии в плане и разрезе.. что очень сильно напрягает, т.к. процесс я сам контролирую
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Александр Ривилис от 03-03-2020, 15:46:31
но пока я сам рисую все линии в плане и разрезе..
Вручную или программно по данным из какого-то файла?
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Привалов Дмитрий от 03-03-2020, 15:49:11
Есть план есть разрез есть посчитанная заполненная таблица на чертеже и есть та же самая таблица в эксель только не отсортированная по группам длин.
Если это решилось в эксель, то мне подумалось что тоже самое можно сделать автоматически в автокаде.

Важно не торопиться и хорошенько обдумать что надо. Чтоб время зря не потратить.
Возможно не нужно делать то же самое в автокаде?
Может нужно взять готовые данные из  эксель и по ним заполнить таблицу в автокаде?
Может даже и автокад не нужен, если результат отдельная таблица, а не чертеж, то может ее в экселе и строить?
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 15:59:18
Вручную или программно по данным из какого-то файла?

Сам вручную вычерчиваю по средствам команды line в автокаде, эксель мне нужен что бы сгруппировать данные длин углов и затем отсортировать по группам длин, а уже потом сам заполняю конечную таблицу в чертеже автокада. Это жутко долго. Поэтому и решился на создание этого адского плагина.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 16:09:07
Важно не торопиться и хорошенько обдумать что надо. Чтоб время зря не потратить.
Возможно не нужно делать то же самое в автокаде?
Может нужно взять готовые данные из  эксель и по ним заполнить таблицу в автокаде?
Может даже и автокад не нужен, если результат отдельная таблица, а не чертеж, то может ее в экселе и строить?

1. Торопиться не стоит согласен, но когда тебе нужно сделать 25+ заходок примерно одинаковой длины в плане, но с разными граничными условиями зон цементации, то сразу хочется завыть волком (условно). А если поменяются граничные условия (зигзагообразные линии голубого цвета), то пересчитывать все 25+ заходок та еще мутатень :(
2. Тоже самое в автокаде не делаю, автокад это первичное, эксель таблица вторичное вспомогательное средство.
3. Взять да, но для этого необходимо сгруппировать их по длинам. и формировать каждый раз новую таблицу эксель, еще та задача.
4. Чертеж первичен, я проектирую расположение вееров, они (веера) должны соответствовать определенным критериям, поэтому на откуп я этот процесс автоматике пока не доверю.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 03-03-2020, 17:04:57
Общая задача по описанию походит на какое-то уплотнение грунта, только вместо вместо вбивания свай происходит бурение скважин под разными углами  и заливка цементом?

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

Все так и есть. :)
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: Привалов Дмитрий от 04-03-2020, 08:24:09
но когда тебе нужно сделать 25+ заходок примерно одинаковой длины в плане, но с разными граничными условиями зон цементации, то сразу хочется завыть волком (условно). А если поменяются граничные условия (зигзагообразные линии голубого цвета), то пересчитывать все 25+ заходок та еще мутатень

А что за объекты шахта, метро, подвалы?

Ну если автоматизировать с расстановкой, то как-то так:
1. Построить твердое тело средствами автокада(граничные условия), без допусков, например по максимальным габаритам.
2. Автоматизировать расстановку веера - отрезков. Тут много что нужно обдумать. (Как они идут из одной точки, с определенным углом, или все вручную.)
После расстановки можнопокрутить в 3D и посмотреть как идет пучек.
3. Поискать на форуме или спросить в новой теме как найти пересечение отрезка и твердого тела. Возможно есть функция которая выдает точки пересечения.
4. А дальше с этой информацией продумывать как строить автоматом сечение, разрез, и заполнять таблицу.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 04-03-2020, 09:58:18
А что за объекты шахта, метро, подвалы?

Ну если автоматизировать с расстановкой, то как-то так:
1. Построить твердое тело средствами автокада(граничные условия), без допусков, например по максимальным габаритам.
2. Автоматизировать расстановку веера - отрезков. Тут много что нужно обдумать. (Как они идут из одной точки, с определенным углом, или все вручную.)
После расстановки можнопокрутить в 3D и посмотреть как идет пучек.
3. Поискать на форуме или спросить в новой теме как найти пересечение отрезка и твердого тела. Возможно есть функция которая выдает точки пересечения.
4. А дальше с этой информацией продумывать как строить автоматом сечение, разрез, и заполнять таблицу.

Да, это строительная отрасль.
1. Твердое тело можно построить только для теста, типа так возможно, но никто его (solid) по средствам автокада строить не будет, нужно именно из двух видов план, профиль + граничные условия. Так как все чертежи у нас плоские. Автоматизировать расстановку веера нужно, но необходимо, что бы обеспечивались некоторые условия, такие как, пересечение условно, круглоцилиндрических поверхностей диаметром 1,7м на 0,2м, на концах этих поверхностей. Эти поверхности образуются условно из пробуренных скважин (дырок). Все линии (скважины) выходят из одной точки для удобства разметки участков начала бурения.
2,3,4. Все из п.1.
p.s. Нужно вначале эту задачу разбить на более мелкие и решать их с получением промежуточных результатов. И сравнивать с расчетной таблицей эксель. 
В будущем, думаю, что нужно, при отрисовке линий веера из одной точки, разбивать отрезок линий в точках пересечения граничных условий и присваивать им определенный цвет (в разрезе - для холостого бурения  - желтый, для основного бурения цементации - синий, отдельная линия поверх тех двух - общая длина бурения - красный. В плане - теже цвета, кроме общей длины бурения - зеленый цвет) это как вариант. Задача построить 3d массив именно из двумерного вида по средствам математики и тригонометрии и получить табличные данные с этими длинами. Исходные данные в чертеже прикрепленного архива.
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 04-03-2020, 10:02:14
немного 3d для понимания что к чему..это другой, но похожий массив. все строятся по одному принципу из одной точки
(https://i.postimg.cc/0z9y7F0Y/3-D.png) (https://postimg.cc/0z9y7F0Y)
Название: Re: Как создать таблицу с данными из примитивов в чертеже
Отправлено: ДмитрийПетров от 04-03-2020, 13:16:26
Ну как минимум углы должны быть в радианах, а не в градусах. Math.Cos() оперирует радианами.
И что это такое:
Код - C# [Выбрать]
int aaa =  Convert.ToInt16(Math.Round(val * 57.3, 0));  //57,3 переводим из рад в градус


можно так, в последней правке поменял

return val > Math.PI ? val - Math.PI*2 : val;