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

ADN Club => AutoCAD .NET API => Тема начата: Александр Пекшев aka Modis от 24-09-2019, 21:57:51

Название: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 21:57:51
Всем привет. Все мы знаем, что штриховки состоят из паттернов - повторяющихся квадратов с одинаковым содержимым.
Паттерн состоит из линий. Паттерн описывается в файле с расширением .pat. Каждая линия паттерна описывается в одной строчке по схеме:
Цитировать
angle, x-origin, y-origin, shift, offset, dash, space
где:
angle - угол поворота линии
x, y origin - координаты начала линии
shift - смещение вдоль линии (каждая следующая повторяющаяся линия смещается относительно предыдущей (или начала паттерна???) на это значение вдоль самой линии)
offset - расстояние между повторяющимися линиями
dash, space - не обязательно - для создания пунктира: черточка, пробел

Паттерны бывают как достаточно простыми:
Цитировать
*ANGLE, Уголки
0, 0, 0, 0, 6.985, 5.08, -1.905
90, 0, 0, 0, 6.985, 5.08, -1.905

Так и достаточно сложными (объемными точнее):
Цитировать
*AR-CONC, Бетон
50, 0, 0, 104.896, -149.807, 19.05, -209.55
355, 0, 0, -51.76101082,187.25814969, 15.24, -167.64058417
100.4514447,15.182007,-1.3282535,145.5569059,-176.270089,16.1900088,-178.0902446
46.1842, 0, 50.8, 157.343, -224.71, 28.575, -314.325
96.63555761,22.5899,47.2965,218.33577212,-264.40480444,24.28502314,-267.13560816
351.18415117,0,50.8,196.67912063,280.88740361,22.85996707,-251.45973192
21, 25.4, 38.1, 104.89565868, -149.80652586, 19.05, -209.55
326, 25.4, 38.1, -51.7604, 187.258, 15.24, -167.64
71.451445,38.0345326,29.5779001,145.5567546,-176.2700748,16.1900088,-178.0899376
37.5, 0, 0, 53.9242, 65.2018, 0,        -165.608, 0, -170.18, 0, -168.275
7.5, 0, 0, 79.3242, 90.6018, 0, -97.028, 0, -161.798, 0, -64.135
-32.5, -56.642, 0, 117.434, 68.0212, 0, -63.5, 0, -198.12, 0, -262.89
-42.5, -82.042, 0, 92.0344, 118.821, 0, -82.55, 0, -131.572, 0, -186.69

Мой вопрос в следующем - как, имея только вот эти цифры, определить размер паттерна?
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 22:20:35
Мой вопрос в следующем - как, имея только вот эти цифры, определить размер паттерна?
А что ты понимаешь под размером паттерна?
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 22:44:09
Мой вопрос в следующем - как, имея только вот эти цифры, определить размер паттерна?
А что ты понимаешь под размером паттерна?
Как я написал в вопросе - я считаю, что паттерн - это квадратный сегмент. Штриховка состоит из постоянного повторения этих сегментов. Я думаю, что изначально в автодеске в это понятие заложено именно тоже самое, что и скажет нам википедия.
Однако, перерыв все справки (как в автокаде, так и в ревите) я не натыкался на то, чтобы автодеск давал определение того, что такое паттерн в их понимании.
В любом случае - чтобы из себя не представлял паттерн, у него обязательно есть допустимо максимальные значения. Не могу же я создать паттерн с узором в несколько километров. Значит вот из этих всех цифр как-то можно определить размер паттерна.
Ревит определяет размер "на лету" - там есть импорт прям из pat файла с возможностью указать масштаб импорта. И этот масштаб всегда разный в зависимости от выбранного паттерна
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 22:57:42
Как я написал в вопросе - я считаю, что паттерн - это квадратный сегмент.
Насколько я помню он не квадрат, а прямоугольник.
Значит вот из этих всех цифр как-то можно определить размер паттерна.
Ну так построй его по тем правилам, которые сам описал и получишь его размеры.
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 23:15:56
Ну так построй его по тем правилам, которые сам описал и получишь его размеры.
И я бы пошел с удовольствием изучать вопрос по этому пути, но первая банальная штриховка с прямыми линиями под 45 градусов сразу ставит палки в колеса - по ней не понятно как определить где кончается одна повторяющаяся часть и начинается другая
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 23:16:38
Да и вопрос в том, чтобы определить размер не строя ничего, а анализируя числа
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 23:18:34
Ну так построй его по тем правилам, которые сам описал и получишь его размеры.
И я бы пошел с удовольствием изучать вопрос по этому пути, но первая банальная штриховка с прямыми линиями под 45 градусов сразу ставит палки в колеса - по ней не понятно как определить где кончается одна повторяющаяся часть и начинается другая
Приведи её описание.
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 23:19:12
Да и вопрос в том, чтобы определить размер не строя ничего, а анализируя числа
Я имел в виду фигурально "строить".
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 23:20:03
Приведи её описание.
Например вот
Цитировать
*SOLID, Заливка
45, 0,0, 0,.125
или вот
Цитировать
*ANSI31,ANSI металл, кирпич, каменная кладка
45, 0, 0, 0, 3.175
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 23:28:09
Цитировать

    *SOLID, Заливка
    45, 0,0, 0,.125
Странный у тебя SOLID

Цитировать

    *ANSI31,ANSI металл, кирпич, каменная кладка
    45, 0, 0, 0, 3.175
Ну тут как бы всё очевидно. Квадрат с диагональю 3.175
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 23:33:16
Странный у тебя SOLID
Это не у меня, это из файла acadiso.pat =))
Ну тут как бы всё очевидно. Квадрат с диагональю 3.175
Значит при других углах нужно будет считать катеты?
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 23:38:28
Значит при других углах нужно будет считать катеты?
Считать все линии, которые в этом патерне.
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Пекшев aka Modis от 24-09-2019, 23:43:36
Считать все линии, которые в этом патерне.
Вот в этом и есть мой вопрос - что именно считать?
Должен ли как-то учитываться shift? Должны ли учитываться dash и space?
Я должен получить какое-то значение по каждой линии (строке), а потом среди них выбрать наибольшее, что и будет искомым значением?
Название: Re: Определить размер штриховки (паттерна)
Отправлено: Александр Ривилис от 24-09-2019, 23:47:44
Должен ли как-то учитываться shift? Должны ли учитываться dash и space?
Да.
Я должен получить какое-то значение по каждой линии (строке), а потом среди них выбрать наибольшее, что и будет искомым значением?
Да. Только с учетом направления. Если угол 0 - то это размер по горизонтали. Если 90 - по вертикали. А остальные углы умножаешь на синус угла для размера по Y и на косинус угла для размера по X. Вроде ничего не напутал.