Программы

Цель:
1) Ускорить нумерацию листов чертежей.
2) Исключить ошибки от человеческого фактора в нумерации.
3) Исключить ошибки в информационной графе - размер листа.

Дополнительные цели по ходу автоматизации в проектировании:
4) Подготовка к пакетной конвертации DWG в PDF файлы.
5) Подготовка к пакетной печати на бумагу.
6) Подготовка к "раскидыванию" чертежей по разным DWG файлам.


Постановка задачи:
1) Создать динамический блок для всех форматов листа.
2) Предусмотреть возможность расширения функций динамического блока.
3) Регламентировать оформление.


Решение задач:

Программа N_U_P.VLX

Программа предназначена для: нумерации, обновления версии форматок и подготовка к пакетной печати (NUMERATION, UPDATE, PREPARING TO PRINT).
Обязательным требованием работы программы является использование форматки Rform последней версии. Файл документа чертежа должен быть при этом новый.
Модуль нумерации позволяет автоматически пронумеровать все листы чертежа не зависимо от того сколько чертежей одновременно находится в документе DWG.
Для исключении зацикливания программы необходимо все чертежи размещать в первой координатной четверти листа.
Каждый чертеж должен иметь уникальный шифр. После нумерации происходит транслитерация обозначения (шифра) каждого листа при этом значение записывается в атрибут ТРАНСЛИТ с учетом номера листа и изменения. Затем происходит подготовка к пакетной печати.
Подготовка пакетной печати включает в себя преобразование значения ТРАНСЛИТ в атрибут Fname_DWG_TO_PDF (на листах он не отображается) и обвода всех форматок красной рамкой, которая заноситься в слой «Форматка_рамка_2» . Если такого слоя не было – он создается. При повторной нумерации проверка рамок не производиться, поэтому их предварительно нужно удалять. Из значения Fname_DWG_TO_PDF будет формироваться название файла документа при пакетном сохранении.
Так же важно в выделенных слоях ни какие другие объекты (линии, текст, блоки и прочее) не размещать.
Модуль обновления форматок служит для замены старых версий на новые при этом сохраняя значения заполненных атрибутов. Если пользователь самостоятельно занес в форматку свои объекты (например, подписи), то они не сохраняются. Все, что пользователь наложил поверх форматок остается неизменным.
Создана форматка- динамический блок со свойствами (описаны свойства доступные на момент написания статьи):
Динамический блок форматки Rform_14_07_15
Динамический блок форматки Rform_14_07_17

Таблица свойств настроена на форматы:
A4 210 297
A4x3 631 297
A4x4 841 297
A4x5 1051 297
A4x6 1261 297
A4x7 1472 297
A4x8 1682 297
A4x9 1892 297
A4x10 2102 297
A4x11 2313 297
A3 420 297
A3x3 420 892
A3x4 420 1189
A3x5 420 1486
A3x6 420 1783
A3x7 420 2081
A3x8 420 2378
A3x9 420 2675
A3x10 420 2972
A3x11 420 3270
A2 420 594
A2x3 1261 594
A2x4 1682 594
A2x5 2102 594
A1 841 594
A1x3 841 1783
A1x4 841 2378
A1x5 841 2972
A0 841 1189
A0x2 1682 1189
A0x3 2523 1189

Также была добавленна одна видимость:
0) Первый лист пустой - без логотипа для возможности поверх блока вставлять любой логотип или надпись.
1) Первый лист с логотипом организации в которой я работаю.
2) Первый лист в логотипом организации в которой я работаю как субподрядная + логотип нашего заказчика.
3) Последующий лист - лист с маленьким штампом.
4) Лист без штампа, но с рамкой.


Еще есть атрибуты (некоторые многострочные) для заполнения основной надписи:
Многие спорят как должны называться поля в штампе! Пусть спорят, а я сделал так как сделал, ибо спорить и делать разные вещи.
ЗАКАЗЧИК - без пояснения.
НАЗВАНИЕ_ПРОЕКТА - без пояснения.
НАЗВАНИЕ_ЧЕРТЕЖА - без пояснения.
СТАДИЯ - без пояснения.
ЛИСТ - без пояснения.
ЛИСТОВ - без пояснения.
ФОРМАТ - см. описание ниже.
ДАТА1 - У нас заполняются четыре строки (Разраб., Пров., Н.Контр. и ГИП). Соответственно атрибутов под дату тоже четыре.
ДАТА2 - Ссылка на значение ДАТА1. Понятно, что по факту такого быть не может, но как есть.
ДАТА3 - Ссылка на значение ДАТА1.
ДАТА4 - Ссылка на значение ДАТА1.
ШИФР - без пояснения.
ТРАНСЛИТ - у заказчика оформление такое, что слева от "Копировал" записыается название файла на транслите + версия файла + нумерация листов + расширение DWG.
REV - оставил строкой до лучших времен. Ревизия чертежа т.е. сколько раз вносили изменения.
Fname_DWG_TO_PDF - этот атрибут для пакетной обработки. Такой же как и ТРАНСЛИТ, но нет расширение DWG.
MAS - масштаб листа. Атрибут для кабельного журнала, что бы длины считались в нужном масштабе.

Для того, что бы графа формата заполнялась сама, был создан атрибут в который информация помещалась из таблицы свойств.

Цель №3 достигунта

Были версии, где был и штам привязки дополнительной видимостью. Опыт показал, что при изменении блока, дополнительный параметр видимости придется переопределять, что не очень удобно. А в добавок еще нужна другая версия Автокада.
Да и не так часто нужен этот штамп. (Признаюсь, что в планах есть создать новый релиз "Создание дополнительных параметров Visibility Set в динамических блоках" от Supermax.)
В общем к этой версии не сразу пришел.





Для достижения остальных целей пришлось в блок рамки вставить точку со смещением от правого нижнего угла на 10мм по двум осям.
Практика показала, что при пакетной конвертации листов в PDF, даже если все листы находятся на одной линии, что иногда происходит рассортировка последовательности. Да можно сделать погрешность на размещение в 0.1мм например (equal X1 X2 0.1) (equal Y1 Y2 0.1). Не помню уже точно, но решил оставить как есть т.к. это явное смещение на 10мм. и к томуже пригодится для последующей автоматизации (к примеру найти лист по номеру, если знаем, что каждый лист смещается на -10 по Y, а длина может быть любой, то так искать будет проще).
Дополнительная автоматизация без программирования достиглась, за счет размещения форматок парой. Это одна с большим штампом, а вторая с маленьким (последующий лист). В последующем листе в атрибуте шифра сделал ссылку на первый лист. Как следствие шифр достаточно менять в первом листе. Для того, что бы дополнительные последующие листы получали шифр автоматически- нужно копировать второй лист. В итоге, если поменять шифр у первого листа, то все листы в "строке" примут один и тот же шифр.

Примечание: обновление атрибутов командой РЕГЕН или REGEN т.е. регенерация окна файла.

Дальше нужно регламентировать оформление (рассматриваем оформление всех чертежей в окне Model или Layout):
1) один чертеж в одной "строке", где все листы чертежа смещены на 10мм оп Y
2) новый чертеж начинать с новой "строки"
3) не маловажное правило в процессе тестирования обнаружилось - размещать всю графическую(нужную) часть необходимо в первой координатной четверти. Причиной тому стали вычисления размеров между листами. А именно суммирование или вычитание чичес с разными знаками (плюс минус). Можно было воспользоваться командой ABS, но лучше регламентировать оформление сразу, что бы не ломать голову в поисках ошибки в других программах.
4) все форматки должны быть размещены в отдельном слое для быстрого нахождения их.
5) ни каких других блоков в этом слое быть не должно! Как и любой другой графической информации.

Цель №4, 5 и 6 достигунта.





Все, что осталось это написать программу для нумерации.

Что мы имеем:
Один чертеж из нескольких листов в одной "строке".

Как пронумеровать:
Создаем набор (общий или главный) из всех блоков в нужном слое, лучше. Кто-то может порекомендовать добавить фильт блока по имени, но если версия блока поменятся, то придется прописывать все версии т.е. с каждой новой версией форматки выпускать новую версию программы. Ну и еще пару мелочей есть связаных с этим.
В наборе берем первый(нулевой с точки зрения программы) блок - проверяем какой это лист (первый или последующий). Ищем первый - дальше берем шифр.
Создаем временный набор (это простая переменная которую будем перезаписывать когда возьмемся работать с новым чертежем)- кладем в него тот блок, а из общего удаляем.
Пробегаемся по главному набору и переклаываем все блоки у которых шифр совпадает с нужным.
Можно было бы срзу нумеровать скажете Вы, но нет - в Автокаде есть список последовательности вставки примитивов, причем если вставлять группу примитивов, то их последовательность сохраняется (объяснить проще только наглядно).
Поэтому на этом этапе нумерация еще не допустима- просто продумеруется в такой же последовательности в какой были вставлены/нарисованы.
Следует добавить, что нужно учитвать видимость блока т.к. в блоке два атрибута: шифр и шифр1- для первого и последующего листа, а держать два одинаковых атрибута это к ошибке.

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

Добавлю, что помимо нумерции листов я произвожу транслитерацию ширфа и записываю в другой атрибут, еще в один атрибут записываю информацию для пакетной обработки.

Таким образом
Цель №1 и 2 достигунта.
Все поставленные задчи перед собой выполнил.


Тэги: AutoLISP

Добавить комментарий

Администратор оставляет за собой право удалять любой комментарий без разъяснения.


Защитный код
Обновить