Штриховки, файлы форм, или Как прикоснуться к искусству
Штриховка – незаменимый инструмент визуализации. С давних времен художники осваивают различные ее техники; правильный выбор типа штриховки помогает передать объем, светотени, шероховатость и саму сущность объекта. Так и в процессе проектирования возникают ситуации, когда становится необходимым применение различных штриховок как инструмента графического обозначения материалов. На сегодня одним только ГОСТом предусмотрено порядка 70 типов штриховки под разные материалы, а некоторые предприятия используют еще и собственные штриховки. Может штриховка различаться и масштабом: более мелким деталям – более мелкий масштаб. Так что при выборе среды проектирования одним из главных вопросов является способность этой среды обеспечить пользователя удобными инструментами штриховки. Предоставляет ли nanoCAD такие инструменты? Давайте рассмотрим на примере.
Для большей наглядности постараемся, используя платформу nanoCAD 21, воспроизвести в собственном стиле картину «Звездная ночь» Винсента ван Гога (рис. 1-2). Если приглядеться, на разных ее участках совокупность отдельных движений кистью представляет собой не что иное как штриховку.
Рис. 1. Винсент ван Гог. Звездная ночь
Рис. 2. «Звездная ночь» сквозь призму nanoCAD
Не слишком погружаясь в поиск правильных контуров, обведем картину сплайнами (команда СПЛАЙН) и окружностями (команда ОКРУЖНОСТЬ), а для начала скопируем ее в буфер обмена (Ctrl+C) и вставим в пространство модели (Ctrl+V). При этом не обязательно замыкать каждый контур, заштриховать можно и разомкнутые контуры.
Мы получили основу для будущих творений (рис. 3)!
Рис. 3. Первый этап: основа будущих творений
Рассмотрим диалоговое окно штриховки. Для этого либо переходим во вкладку Главная → группа Черчение → Штриховка, либо вводим в командной строке слово ШТРИХ. В появившемся диалоговом окне Штриховка есть две вкладки: Штриховка и Градиент. Здесь всё интуитивно понятно, отмечу лишь некоторые особенности. Раскроем дополнительное окно, кликнув в правом нижнем углу диалогового окна по стрелке «вправо» (рис. 4).
Рис. 4. Диалоговое окно штриховки
- Прежде всего хотелось бы отметить предустановленную библиотеку стандартных типов штриховок. Ею можно воспользоваться, выбрав из списка необходимый тип либо вызвав диалог Образцы штриховки (щелчок правой кнопкой мыши по кнопке справа от выбора образца или по структуре). Вся библиотека файлов форм (*.shx) и штриховок (*.pat) хранится в папке SHX, расположенной по пути C:\ProgramData\Nanosoft\nanoCAD x64 21.0\SHX. Туда же следует добавлять файлы с собственными штриховками и формами. После добавления новых файлов перезапустите nanoCAD.
- Для более «чистого» исполнения штриховки можно выбрать исходную точку (рис. 5) и сохранить ее значение, установив галочку перед строкой Исходную точку по умолчанию (системная переменная HPORIGIN).
Рис. 5. Изменение выбора исходной точки
- При указании области штриховки/заливки удобно пользоваться кнопкой Добавить: точки выбора – это верхняя кнопка в блоке Контуры. Для динамической подсветки потенциального контура установите галочку перед строкой Предварительный поиск контуров.
В то же время бывают случаи – допустим, если область находится в другой плоскости, – когда удобнее указать границы штриховки (кнопка Добавить: выбрать объекты).
- Штриховке можно назначить ассоциативность – при изменении области она будет подстраиваться под новые границы.
- Чтобы обеспечить штриховку незамкнутых областей, необходимо ввести допуск замкнутости (от 0 до 5000 в единицах чертежа). Зазоры, не превышающие этот допуск, будут игнорироваться, а контур – считаться замкнутым.
Работа со вкладкой Градиент тоже вряд ли вызовет затруднения. Приведу только примеры типов градиентной заливки (рис. 6).
Рис. 6. Виды градиентной заливки
Итак, раскрасим нашу картину с помощью градиентной заливки, а поверх будем наносить штрихи. «Луну» пока можно оставить без заливки – для нее мы подготовим пользовательскую форму[1].
[1] Формы – стандартизованные изображения, описанные в SHX-файле тем же способом, что и SHX-шрифты.
Работа на скорость: если все контуры прорисованы, можно воспользоваться командой БЫСТРШТРИХ/БЫСТРГРАД – в таком случае используются параметры предыдущих штриховки/градиента.
Вот что получилось у меня (в скобках указаны номера цветов) – рис. 7.
Рис. 7. Второй этап: заливка градиентом
Далее приступаем к одному из сложных моментов – созданию пользовательской штриховки.
Штриховки хранятся в файлах с расширением *.pat, которые можно просматривать с помощью любого текстового редактора. В одном файле могут располагаться несколько разных видов штриховки. При передаче файлов *.dwg, где использовалась уникальная штриховка, обязательно следует передавать и файлы штриховок; для успешной передачи воспользуйтесь командой eTransmit.
В нашем случае штриховкой предстоит покрыть практически всю картину. К счастью, большая часть необходимых штриховок уже имеется в nanoCAD, но напишем и собственную – ради лучшего представления о возможностях программы. У меня это будет штриховка для крыш
Рис. 8. Штриховка для крыш домов
Создать пользовательскую штриховку можно двумя способами.
- Графический способ создания штриховки
Модуль СПДС позволяет создавать штриховки с помощью команды SPHPATTERN. Чтобы создать штриховку именно таким способом, необходимо выполнить следующие действия:
- создать границы эскиза – квадрат с габаритными размерами, не превышающими 300х300 мм. Левый нижний угол квадрата поместить в начало координат (0,0,0);
- создать эскиз одного элемента штриховки. Эскиз должен быть выполнен только отрезками (команда LINE), криволинейные участки также аппроксимируются отрезками;
- поскольку распознавание периодичности происходит по цветам отрезков, каждому отрезку необходимо назначить собственный цвет;
- создать массив полученного эскиза в пределах заданной области. Для правильного распознавания конечный эскиз должен представлять собой квадратную матрицу, содержащую как минимум девять элементов. Если линия в штриховке предполагается непрерывной, в конечном эскизе она также должна быть непрерывным отрезком. На рис. 9 красные отрезки были размножены массивом (девять отрезков – три столбца, три ряда, между столбцами и рядами 100 мм), синие отрезки – копированием (пять отрезков) и обрезкой/удлинением до границ эскиза.
Рис. 9. Конечный вид рисунка для создания штриховки
Важно! Каждый отрезок должен быть не только параллелен одноименному отрезку, но и лежать с ним на одной прямой.
Далее нужно выбрать элементы штриховки и вызвать команду SPHPATTERN. После распознавания появится диалог сохранения и выбор папки для размещения (рис. 10).
Рис. 10. Сохранение штриховки
- Создание штриховки через текстовый редактор
Написание штриховки начинается с указания ее уникального имени (оформляем его, начиная со знака «*»: *Уникальное имя штриховки), далее через запятую может идти краткое описание. Комментарии к записям вносятся через точку с запятой.
Следующие строки описывают расположение отрезков и выстраиваются по принципу «одна строка – один отрезок». Отрезок описывается числами: через запятую и в определенном порядке заносим числа, обозначения которых представлены в таблице 1.
Таблица 1. Описание отрезка
1 | 2 | 3 | 4 | 5 | 6 |
Угол наклона отрезка от оси X мировой системы координат | Координаты точки начала отрезка X, Y в мировой системе координат | Смещение отрезка по оси X в системе координат отрезка (локальной) | Смещение отрезка по оси Y в системе координат отрезка (локальной) | Длина отрезка | Расстояние пробела со знаком «-» |
Итак, начнем! Создадим штриховку «Roof» через текстовый редактор. Как уже сказано, написание штриховки начинается со знака «*», далее следуют ее название и комментарии.
На следующей строке пропишем один из отрезков. Пусть это будет красный отрезок, и, чтобы быстро и безошибочно определить всю геометрию, поместим его начало в точку (0,0) мировой системы координат (МСК). Каждый одинаковый участок для наглядности расположим в квадрате стороной мм (рис. 11).
Рис. 11. Определение геометрии штриховки
Первые два столбца из таблицы заполнить несложно: угол наклона от оси Ox – (до четырех знаков после запятой), координаты начала отрезка в МСК – 0,0. Локальная система координат (ЛСК) расположена в точке начала отрезка, ось Ox является продолжением отрезка, Oy – перпендикуляром к отрезку. Для определения смещения необходимо выбрать любой из ближайших одноименных отрезков. Допустим, мы выбираем отрезок справа от начального. Теперь мы находимся в ЛСК и определяем перемещения первого отрезка: , , далее длина отрезка – , и значение пробела до одноименного отрезка, лежащего на одной прямой с первым.
Для синего отрезка порядок определения будет таким же, с той только разницей, что синий отрезок – непрерывный, поэтому написание завершится после определения смещений. Конечный результат показан на рис. 12.
Рис. 12. Определение отрезков
Нанесем нашу штриховку на крыши и подберем некоторые из имеющихся типов. Вот так это выглядит у меня (рис. 13).
Рис. 13. Третий этап: применение штриховки
Да, мы создали штриховку двумя разными способами, но ведь сама штриховка достаточно проста. Что же делать, если с первого раза не получается подобрать правильное расположение фигуры в штриховке или некоторые фигуры представляют собой залитые фигуры «SOLID»? Возможно, вы уже догадались, как справиться с такими сложностями и обойтись только отрезками. Ну а если нет, обязательно поговорим об этом в следующий раз…
Далее будем наполнять картину формами. Для вызова диалогового окна Выбор формы необходимо перейти во вкладку Главная → группа Черчение → Форма (команда SHAPE, ФОРМА). В nanoCAD уже имеется библиотека файлов форм – это файлы GOST 2.303-68.shx и ltypeshp.shx. Но как и раньше, при работе со штриховкой, добавим пользовательские формы (рис. 14).
Рис. 14. Пользовательские формы
Для начала, так же как и в случае со штриховкой, создадим в текстовом редакторе файл описаний форм в формате *.shp, а затем скомпилируем на его основе файл с расширением *.shx. Чтобы использовать формы в среде nanoCAD, их необходимо поместить в папку C:\ProgramData\Nanosoft\nanoCAD x64 21.0\SHX.
Описание формы содержит:
*Номер_формы, количество_байт, ИМЯ
байт1, байт2, …, байт , 0
где N ≤ 2000
Номер формы является уникальным в пределах одного shp-файла. В байтах содержится информация о длине и направлении вектора формы.
Каждый код длины и направления представляет собой строку из трех символов. Первым символом такого кода всегда является 0 (он указывает программе, что два следующих символа интерпретируются как шестнадцатеричные числа). Второй символ задает длину вектора в единицах чертежа. Длина может принимать значения от 1 (одна единица) до F (15 единиц). Третий символ задает направление вектора. Соответствие кода и направления приведено на рис. 15.
Рис. 15. Соответствие кода и направления вектора
Для создания дополнительных геометрических форм (окружностей и сегментов) мы будем использовать специальные коды. Опишу лишь наиболее применяемые, с остальными вы всегда сможете ознакомиться на просторах интернета (табл. 2).
Таблица 2. Специальные коды
Код | Описание | Пояснение |
0 | Конец отрисовки формы | Конец отрисовки формы. |
001 | Опускание пера (включить режим отрисовки) | Режим отрисовки включается в начале каждой формы. При включенном режиме отрисовки происходит отрисовка линий, заданных векторами. |
002 | Поднятие пера (отключить режим отрисовки) | При отключенном режиме отрисовки происходит перенос пера к новой позиции без проведения линии. |
003 | Деление длин векторов на значение следующего байта | Удобно использовать, когда значение длины вектора не является целым числом (например, 0,5) либо когда длина вектора в несколько раз превышает максимально допустимое значение (F). |
004 | Умножение длин векторов на значение следующего байта | Значение масштабного коэффициента накапливается для формы; то есть умножение на 2, а потом на 6 дает в результате масштабный коэффициент 10. Необходимо отменять результат применения масштабных коэффициентов в конце формы – программа не выполняет сброс масштабного коэффициента. |
008 | Смещение по осям X-Y, заданное двумя следующими байтами | Стандартные коды позволяют выполнять отрисовку линий только в 16 фиксированных направлениях, причем максимальная длина вектора составляет 15 единиц (F). Это ограничение повышает эффективность процедуры построения форм, но существенно ограничивает ее возможности. Код 8 определяет смещение по осям X-Y, заданное следующими двумя байтами. За кодом 8 должны следовать два байта в формате: Значения X-Y-смещений могут находиться в диапазоне от -128 до +127. Для улучшения читаемости можно использовать скобки. После того как вектор по смещению отрисован, восстанавливается режим построения стандартных векторов. |
009 | Ряд смещений из нескольких векторов | Код 9 используется для последовательности «нестандартных» векторов. После него может следовать любое количество пар значений смещения по X-Y. В следующем примере описывается построение трех нестандартных векторов с последующим возвратом в обычный режим: 009,(2,5),(7,1),(4,-5),(0,0) Последовательность завершается значением (0,0). Если не завершить последовательность смещений X-Y-парой (0,0), программа не сможет правильно трактовать идущие далее векторы нормали и специальные коды. |
00A | Октантная дуга (задается следующими двумя байтами) |
Дуга стягивает один или несколько 45-градусных октантов, причем начало и конец дуги лежат точно на границах октантов. Октанты нумеруются в направлении против хода часовой стрелки, начиная с положения «0», как показано на рисунке.
Описание дуги имеет вид: 10, (Радиус, ) Первый байт (10) – код для задания дуги. Второй байт – радиус; значение радиуса может находиться в диапазоне от 1 до 255. Третий байт описания указывает направление дуги (знак «+» для отрисовки против хода часовой стрелки, «-» для отрисовки по ходу часовой стрелки), начальный октант ( , значение от 0 до 7) и количество охватываемых дугой октантов ( , значение от 0 до 7, где 0 соответствует полной окружности). Для удобства при чтении используют круглые скобки. |
00B | Дробная дуга, заданная следующими пятью байтами |
00B, (смещение начала, смещение конца, большой радиус, радиус, ) Смещение начала и смещение конца задают величины удаления начальной и конечной точек дуги от границ октанта. Большой радиус – это старшие 8 бит значения радиуса; они остаются нулевыми, если большой радиус не превышает 255 единиц. Для того чтобы получить значение радиуса дуги, превышающего 255 единиц, нужно умножить большой радиус на 256 и добавить к полученному числу радиус. Радиус и завершающий байт задаются точно так же, как и для описанной ранее октантной дуги (код 00A). Смещение начала определяется путем вычисления разности (в градусах) между начальной границей октанта (кратной 45 градусам) и началом дуги. Затем эта разность умножается на 256 и делится на 45. Смещение конца вычисляется аналогичным образом, но при этом используется разность (в градусах) между последней границей октанта, пересеченной дугой, и концом дуги. Если дуга начинается/заканчивается на границе октанта, соответствующее смещение равно 0. Например, дробная дуга радиусом 3 единицы, проведенная между направлениями 55 и 95 градусов, кодируется так:
11,(56,28,0,3,012) Смещение начала = 56, т.к. ((55 - 45) 256 / 45) = 56 Смещение конца = 28, т.к. ((95 - 90) 256 / 45) = 28 Большой радиус = 0, т.к. (радиус 255) Радиус = 3 Начальный октант = 1, т.к. дуга начинается с октанта в 45 Конечный октант = 2, т.к. дуга заканчивается октантом в 90 |
00С | Дуга, заданная смещением X-Y и коэффициентом прогиба |
За кодом 00C должны следовать три байта в формате:
ОС, Х - перемещение, Y - перемещение, Коэф.прогиба Смещения по XиYи прогиб, который задает кривизну дуги, могут принимать значения от -127 до +127.Коэффициент прогиба вычисляется следующим образом: Если дуга рисуется по часовой стрелке, знак перед коэффициентом «-». |
00D | Несколько дуг, заданных прогибом | За кодом полидуги следуют тройки параметров, описывающих элементарные дуговые сегменты. Полидуга заканчивается смещением (0,0). |
Используя таблицу с подсказками, не составит большого труда написать собственные формы (рис. 16).
Рис. 16. Код для форм «MOON», «SEGMENT», «STARS»
Все формы расположены в одном файле (Shapes3.shx). После добавления файла форм в папку SHX диалоговое окно выбора формы будет выглядеть так, как показано на рис. 17.
Рис. 17. Диалоговое окно Выбор формы
Как и в случае со штриховками, при передаче файлов *.dwg, где использовались уникальные формы, необходимо передавать и сами файлы форм; для успешной передачи воспользуйтесь командой eTransmit.
Работа с формами в целом подобна работе с блоками, но, помимо выбора угла поворота, можно выбрать и размер формы при вставке. Кроме того, есть возможность заливки формой (Главная → группа Черчение → Заливка формой; команда ЗАЛИВКАФОРМА), так же, как и штриховкой, только без опции Ассоциативность. Стандартной формой WAVE из файла GOST 2.303-68.shx зальем полосу над горизонтом.
После вставки формы MOON можем залить различным градиентом каждое кольцо на Луне (в центре более ярко, ближе к краям – темнее). Итоговый на сегодня вариант представлен на рис. 18.
Рис. 18. Четвертый этап: применение форм
Итак, сегодня мы уже знаем ответы на следующие вопросы:
- Как пользоваться штриховкой/градиентом в nanoCAD 21?
- Что такое файлы форм и как их использовать?
- Как залить область формой?
- Где хранятся файлы со штриховками и файлы форм, как их передавать?
- Как создать собственные штриховку и формы?
Возможно, у вас возник вопрос об участках, не залитых штриховкой и формами, ведь в конечной версии картины («Звездная ночь сквозь призму nanoCAD») не должно быть «пустых» областей. На данном этапе незалитым участкам можно подобрать другую штриховку или форму. А в моем случае это были линии, состоящие из формы «SEGMENT». Как создать такую линию, где ее хранить и как передавать будет рассказано в следующей статье: «Типы линий, и где они хранятся».
Удачного проектирования!
Скачать все материалы можно по ссылке: https://ftp.nanosoft.su/file_19117187246061ba1ccfd32
Асель Бексултанова,
технический специалист
по Платформе nanoCAD
«Нанософт разработка»