Как сделать нумерацию в автокаде последовательно

Добавил пользователь Morpheus
Обновлено: 04.10.2024

Задача:
Сделать схему границ полигона с угловыми точками (вершинами) и приложить к этой карте список координат соответствующих угловых точек. При этом надо сделать соответсвующую нумерацию вершин на карте и в таблице.
Что уже сделано:
Слой с множеством полигонов конвертирован в точечный слой (точки=вершины границ полигонов).
Определены координаты точек.
На чем остановился:
В таблице атрибутов нужно пронумеровать по-порядку выделенную группу точек, чтобы впоследствии надписать номера вершин на карте, а таблицу атрибутов преобразовать в обычную таблицу Exel или Word.

Раньше подобную операцию делал в ArcView GIS 3.2 с помощью скрипта "Коллекция скриптов 3.0" (на сколько помню название..). Там была нужная мне кнопочка Auto ID. Однако сейчас ArcView GIS 3.2 практически не пользуюсь, даже не устанавливал на комп. Надеюсь, что такую простую задачу можно каким-либо образом проделать в ArcGIS 10.
У кого какие идеи?

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

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


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

Также была добавленна одна видимость:
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 достигунта.
Все поставленные задчи перед собой выполнил.

Допустим, нумерация помещений пойдет у нас от ста.
Попробуем немного автоматизировать нумерацию строк в таблице.
Пишем "100" в первой ячейке. Ее "адрес в таблице - А2. Запомним это. Далее используем Fields - выбираем ячейку ниже заполненной (см. скрин), заходим в нее и нажимаем "Ctrl+F". Появляется диалоговое окно:

Выбираем в списке опций слева Formula и дальше будем работать с суммами. Нам необходим в каждой последующей ячейке прибавлять "1", чтобы получить приращение. Т.е. строчка ниже ячейки с значением "100" будет выглядеть как 101+1 или A2+1, если мы вспомним "адрес" этой ячейки. Смотрим на скрин ниже - в поле для формулы пишем строку "Sum(A2)+1". В поле Preview можно увидеть, как это будет выглядеть(нам не нужно число с запятой)

На предпросмотре все ок. Кликаем Ok и идем обратно в модель. Получаем в ячейке текст с серым фоном - это и есть текст с автозаполнением.
Теперь все просто - копируем ячейку с серым фоном в буфер обмена (выделив ее предварительно) и вставляем ее в последующие ячейки:

Можем поменять начальное число (например, хотим сделать нумерацию помещений для 2-ого этажа). Для этого перебьем в первой ячейке со "100" на "200", введем с клавиатуры команду "RE" (REGEN) и обновим поля автозаполнения во всем чертеже:


Миша, респект! Можно экспериментировать дальше.
PS. При команде REGEN происходит обновление полей (Field) при значении переменной FIELDEVAL "16" и "31"

Все настройки команды нумерации полностью идентичны настройкам Таблица Данных .

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

Группировка - если вам нужно сбрасывать номер на 1 в начале каждой группы, то задайте группировку. В поле Группа укажите любой набор подстановок . Обычно здесь пишут подстановку %block%, чтоб нумеровать по блокам-сборкам. Но можно добавить и слой, материал, толщину и любые другие свойства. В одной группе нумерации окажутся все детали для которых все эти свойства идентичны.

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

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

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

Подробнее обо всех настройках читайте на странице программы Таблица Данных .

Записать в - вы можете выбрать в какое свойство объекта записать номер. Обычно это Имя объекта. Но можно выбрать Тип и Инфо (Описание). Если вы закажите доработку плагинов, то сможете записывать номера и в прочие ваши свойства тоже.

Шаблон - вы можете задать текст и любые свойства объекта, которые будут записаны в Имя (или в Тип, или в Инфо). В шаблоне обязательно должна быть подстановка номера строки таблицы %row%. Именно в это место шаблона записывается номер. Обычно весь шаблон - это просто подстановка %row%. Подстановки можно форматировать. Номер строки - это целое число и к нему применимы все форматы целых чисел. По умолчанию используется формат 000. Это означает, что номера меньше 100 будут дополнены нулями в начале. Но вы можете задать любой другой свой формат. В том числе можно вывести номер римской цифрой, буквой английского или русского алфавита. Подробности - в статье о подстановках .

Цифры - для удобства форматирования номеров вы можете выбрать из списка нумерацию обычными числами, римскими числами, английским алфавитом или русским. Более сложное форматирование номера пишите в шаблоне в формате подстановки %row%.

Сквозная - непрерывная нумерация всех объектов во всех группах. Опция имеет смысл, только если вы задали какую-нибудь группировку. Если вы отключите этот параметр, то в каждой группе нумерация будет начинаться с 1. Если нужна отдельная нумерация с 1 внутри каждого блока-сборки, то запишите в Группу %block% и сбросьте галочку Сквозная.

Перезаписать – записывать номер в любом случае. Если отключить эту опцию, то программа заполнит только пусты и цифровые имена. Нецифровые имена не в этом случае программа трогать не будет, считая, что вы заполнили свойство Имя/Тип/Инфо вручную. Но номер все равно будет пропущен. Если вы записали в шаблон какие либо другие свойства или тексты, или нумеруете по алфавиту, то для перезаписи номеров вам непременно надо будет включить опцию Перезаписывать.

Запрос Префикса - Вы можете добавлять любой текст перед номерами не меняя шаблон. Если опция включена, то программа будет запрашивать ввести префикс при каждом вызове.

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

Читайте также: