Программы



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

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

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

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

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

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


Тэги: AutoLISP

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

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


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