Автозаполнение ведомости рабочих чертежей - Страница 12
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автозаполнение ведомости рабочих чертежей

Автозаполнение ведомости рабочих чертежей

Ответ
Поиск в этой теме
Непрочитано 29.10.2007, 09:15 3 |
Автозаполнение ведомости рабочих чертежей
wetr
 
инженер
 
Владивосток
Регистрация: 09.08.2006
Сообщений: 1,536

Те кто видел КОМПАС меня поймут: хочу чтобы ведомость рабочих четрежей заполнялась автоматически. Пользую поля - ссылки на объекты. В моем случае ссылаюсь на блок(рамка) с аттрибутами "№листа" и "наименование листа". Вроде бы все отлично. Убивает трудоемкость создания данной таблицы. Т.е. как я делаю(может не правильно?):
создаем мтекст-вставить поле-объект-выбрать- а дальше проблемка - рамка то находится в лайоутах. А перелистывать лайоуты в режиме выбора нельзя... Приходится сначала открывать лайоут, затем копировать текст вида
"%<\AcObjProp Object(%<\_ObjId 2130566400>%).TextString>%"
в отдельный файл, затем вставлять в нужное мне поле. Есть другие варианты узнать ObjID? Или другие варианты создать эту таблицу?
И еще: в каких случаях меняется этот ID? А то я боюсь теперь эти блоки редактировать - все собьется нафиг
*******************************************************************************************************************
...Прошел год
VVA сделал отличную программу по созданию Ведомости рабочих чертежей (Компас отдыхает)

ВОЗМОЖНОСТИ:
- Ведомость создается в виде таблицы с полями.
- Обязательно использование блока с атрибутами "ЛИСТ" и "НАИМЕНОВАНИЕ.ЧЕРТЕЖА".
- Таблицы вставляется в слое _Таблица. Если слоя нет - он создается. Настройки слоя можно поменять в ЛИСПе
- Таблицы вставляются в Стиле таблиц "Ведомость чертежей" оформленной по ГОСТу. Настройки стиля см. в ЛИСПе
- Запускать командой VRC в командной строке или сделать себе кнопку


ОСОБЕННОСТИ:
- В таблице и блоке используется шрифт "MIPGOST.SHX". Скачать можно здесь. Не нравится? Открывай код и меняй под себя.
- В блок-рамке используется многострочный атрибут, который работает только в AutoCAD 2008 и старше.
Если у вас более ранняя версия - программа будет работать, но атрибут будет однострочный.
- При заполнении многострочного атрибута "НАИМЕНОВАНИЕ.ЧЕРТЕЖА" не используйте ENTER. Текст перескочит на новую строку сам.(Это актуально если лисп вставляет поля. Варианты лиспа VRCTS и VRCTN отрабатывают без проблем)

ПРО БЛОК:
- Рамка пестрит полями - название проекта заполнять на титульном листе, в рамке обновится
- ШИФР проекта заполнять на титульном листе
- Формат листа - ссылка на lookup внутри блока, обновляется.
- Для того, чтобы количество листов прописывалось автоматом, я сделал себе макрос на кнопку, запускающую VRC
Цитата:
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;all;;vrc
Внимание! Если у вас используется переменная USERI1, могут возьникнуть проблемы!
**********************

Для тех, кому не нравиться что программа создает стили и слои, вариант от VVA и Red Nova

************************************
***Обновление от 04.02.2008. **********
************************************
Добавлена возможность заполнять таблицу полями, текстом, выбирать или нет листы. Подробности в начале лиспа.
Команды:
VRC - таблица с полями, все листы
VRCTS - таблица с Tекстом, выбор (S) листов
VRCTN - таблица с Tекстом, нет (N) выбора листов
VRCFS - таблица с полями (F), выбор (S) листов

************************************
***Обновление от 06.09.2010. ***********
***********************************
Добавлена возможность выбора стиля таблиц
Версия для x64 : http://forum.dwg.ru/showpost.php?p=349807&postcount=159

************************************
***Обновление от 16.04.2025. ***********
***********************************
Актуальная для меня задача - создание ведомости из нескольких открытых файлов реализована с помощью Gemini 2.5 Pro.
Новая версия обрабатывает все открытые файлы, собирает данные из блоков с атрибутами "ЛИСТ" и "СОДЕРЖИМОЕ" и вставляет таблицу.
Тестировал на Автокад 2020.
Файл OVRC.lsp, запускать командой OVRC.

Вложения
Тип файла: rar mipgost.rar (6.1 Кб, 1272 просмотров)
Тип файла: dwg
DWG 2004
Пример Ведомость чертежей.dwg (110.4 Кб, 35042 просмотров)
Тип файла: lsp vrc_VVA.lsp (34.6 Кб, 1183 просмотров)
Тип файла: lsp OVRC.lsp (13.7 Кб, 10 просмотров)

__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 16.04.2025 в 04:45.
Просмотров: 136819
 
Непрочитано 19.04.2014, 15:07
#221
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


zz07, номер поста откуда взял коды и файл примера. а так же версия и разрядность автокада. немного побольше информации
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.04.2014, 16:49
#222
zz07


 
Регистрация: 01.07.2007
Москва
Сообщений: 26


VVA, код и файл примера взял из шапки темы, номер поста #69.
Autocad 2013, английский, x64
zz07 вне форума  
 
Непрочитано 19.04.2014, 22:08
#223
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


zz07, Дело в разрядности. Смотри вариант из #159
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.04.2014, 14:52
#224
zz07


 
Регистрация: 01.07.2007
Москва
Сообщений: 26


VVA, спасибо, все работает.
А текст можно как-то в названии чертежа принудительно переносить на другую строку?
zz07 вне форума  
 
Непрочитано 20.04.2014, 18:19
#225
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


используй многострочный атрибут
Red Nova вне форума  
 
Непрочитано 19.01.2015, 08:26
#226
diek


 
Регистрация: 26.02.2007
от туда
Сообщений: 372


какой-то не понятный глюк, когда перезагружаешь файл, то все номера листов превращаются в 1 (ну или в любой другой номер листа на котором сохранился перед выходом) регениратьсия не помогает, после того как зайдешь на каждый лист то все встает на свои места
diek вне форума  
 
Непрочитано 18.11.2015, 13:23
#227
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Перешел на 2015х64. Не работает...
Код:
[Выделить все]
VRC - таблица с полями, все листы
VRCTS - таблица с Tекстом, выбор (S) листов
VRCTN - таблица с Tекстом, нет (N) выбора листов
VRCFS - таблица с полями (F), выбор (S) листов

Добавлено. Заработало после того как поменяли в региональных настройках windows US на Russia...

Последний раз редактировалось Red Nova, 18.11.2015 в 14:28.
Red Nova вне форума  
 
Непрочитано 25.11.2015, 15:38
#228
b00


 
Регистрация: 21.10.2008
Петербург
Сообщений: 19
<phrase 1=


Добрый день. А возможно каким-то образом получить номер листа не из атрибута блока рамки, а взять из порядкового номера вкладки листа?
Т.е. через
Код:
[Выделить все]
 $(substr, $(getvar,CTAB), X, Y)
я могу получить символы с X по X+Y из названия вкладки, но мне не нужны номера листов в названиях - достаточно расставить вкладки в нужном порядке. Вот к этим порядковым номерам хочется получить доступ, чтобы после перетаскивания вкладки на новое место автоматически менялся номер в штампе в соответствии с её новым порядковым номером.

Последний раз редактировалось b00, 22.10.2016 в 07:55.
b00 вне форума  
 
Непрочитано 27.11.2015, 10:19
1 | #229
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


b00, задачка довольно интересная.
Думаю, тут только программно. Штатно нельзя сослаться полем на порядковый номер листа. Если мы говорим НЕ о номере листа в подшивке. И то, там мы сошлемся не на порядковый номер листа в списке, а на жестко заданное свойство "Номер листа подшивки", которое не поменяется автоматом при перетасовке листов.
В общем, если я правильно понял задачу, а именно: номер листа представлен атрибутом, который находится в составе блока форматки, этот блок находится в пространстве листа, при этом атрибуту нужно присвоить порядковый номер листа, на котором он находится, и при замене листов местами этот атрибут, содержащий поле, должен обновиться вне зависимости от цифр, входящих в имя листа, но в завимости от порядкового номера листа, - то вот (пока) тестовая, набросанная на скорую руку версия кода, без обработок ошибок и прочих пряничков:
Код:
[Выделить все]
 (vl-load-com)
(defun C:SLN nil (C:SETLAYOUTNUMBERS))
(defun C:LN nil (C:LAYOUTNUMERATOR))
(defun C:SETLAYOUTNUMBERS ( / lyt-lst lyt-collection i lyt lyt-name var-name attr)
	(C:LAYOUTNUMERATOR)
	(setq lyt-lst (layoutlist)
		  lyt-collection (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
	)
	(repeat (setq i (length lyt-lst))
		(setq lyt (vla-Item lyt-collection (nth (setq i (1- i)) lyt-lst))
			  lyt-name (vla-get-Name lyt)
		)
		(setvar "CTAB" lyt-name)
		(setq var-name (vl-string-translate " " "-" lyt-name))
		(setq attr (vlax-ename->vla-object (car (nentsel "\nУкажите атрибут, содержащий номер текущего листа: "))))
		(vla-put-TextString attr (strcat "%<\\AcVar.17.0 Lisp." var-name ">%"))
		(vla-regen (vla-get-activedocument (vlax-get-acad-object)) AcActiveViewport)
	)
)
(defun C:LAYOUTNUMERATOR ( / lyt-lst lyt-collection i lyt lyt-name var-name lyt-nmbr )

	(setq lyt-lst (layoutlist)
		  lyt-collection (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
	)
	(repeat (setq i (length lyt-lst))
		(setq lyt (vla-Item lyt-collection (nth (setq i (1- i)) lyt-lst))
			  lyt-name (vla-get-Name lyt)
			  var-name (vl-string-translate " " "-" lyt-name)
			  lyt-nmbr (vla-get-TabOrder lyt)
		)
		(set (read var-name) lyt-nmbr)
	)
	(vla-regen (vla-get-activedocument (vlax-get-acad-object)) AcAllViewports)
)
Доступны две команды:
1. SetLayoutNumbers или SLN - начнется поочередное переключение листов (пока не в порядке их следования во вкладках, а в алфавитном порядке), на каждом из них пользователю будет предложено выбрать атрибут, в котором хранится номер листа. Это может быть и текст или Мтекст, но тогда обязательно не в блоке, потому как в этом случае он будет одинаковым на всех листах. Эту команду можно будет исключить в принципе, если принять определенные соглашения. Например, этот атрибут должен иметь определенное имя или находиться на определенном слое и т.д. Тут лучше бы мне увидеть файл с примером - понимания будет больше. Данный вариант - хоть и требует по одному клику на лист - универсальный при условии, что в листе есть блок с атрибутом. Промахнуться мимо атрибута пока нельзя - вылетит с ошибкой.
2. LayoutNumerator или LN - далее эту команду следует вызывать после того, как был изменен порядок следования листов. Произойдет изменение полей. Пока сделал принудительную регенерацию. Если файлы большие, и возникнут тормоза, можно будет ее убрать, и тогда для обновления полей придется производить регенерацию вручную, по мере необходимости. Не уверен, но думаю, что данную команду можно заменить реактором (т.е она будет вызываться автоматически при изменении листов) - пока не проверял.

Ограничения: имя листа должно начинаться с буквы (русской или латинской) и не должно содержать: (, ) − левой и правой скобок, . − точки, − апострофа, − кавычек, ; − точки с запятой. Пробелы - можно. Эти ограничения реально обойти - было бы желание.
Алгоритм работы следующий. При вызове первой команды сначала происходит создание глобальных переменных, имена которых совпадают с именами листов, но пробелы преобразуются в тире. Это и является причиной ограничений - они те же, что и при именовании переменных в лиспе. Каждой из этих переменных присваивается числовое значение, совпадающее с порядковым номером соответствующего листа. На значение этой переменной и ссылается программно созданное поле. При вызове второй команды происходит приведение в соответствие этих переменных новым порядковым номерам листов и регенерация

Последний раз редактировалось skkkk, 27.11.2015 в 10:42.
skkkk вне форума  
 
Непрочитано 27.11.2015, 14:23
#230
b00


 
Регистрация: 21.10.2008
Петербург
Сообщений: 19
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
Если мы говорим НЕ о номере листа в подшивке.
Нет, не о подшивке.
Цитата:
Сообщение от skkkk
В общем, если я правильно понял задачу, а именно: ...
Да, именно так.
Цитата:
Сообщение от skkkk
Эту команду можно будет исключить в принципе, если принять определенные соглашения. Например, этот атрибут должен иметь определенное имя или находиться на определенном слое и т.д. Тут лучше бы мне увидеть файл с примером - понимания будет больше.
Можно заранее определить имя блока и имя атрибута в блоке, которые должны обрабатываться командой. Какие они будут - мне всё равно, это несложно в коде поменять. Примера у меня нет, задача пока теоретическая, чтобы в дальнейшем пользоваться удобной автонумерацией.
Цитата:
Сообщение от skkkk
Не уверен, но думаю, что данную команду можно заменить реактором (т.е она будет вызываться автоматически при изменении листов) - пока не проверял.
На мой взгляд - нет необходимости.
Цитата:
Сообщение от skkkk
Алгоритм работы следующий. При вызове первой команды сначала происходит создание глобальных переменных, имена которых совпадают с именами листов, но пробелы преобразуются в тире. Это и является причиной ограничений - они те же, что и при именовании переменных в лиспе. Каждой из этих переменных присваивается числовое значение, совпадающее с порядковым номером соответствующего листа. На значение этой переменной и ссылается программно созданное поле. При вызове второй команды происходит приведение в соответствие этих переменных новым порядковым номерам листов и регенерация
Т.е. информация о номере листа нигде не содержится? Но как тогда порядок вкладок сохраняется от открытия к открытию файла?

И сопутствующий вопрос - для обработки строки в Diesel есть только функция substr?
Т.е. вкладки листов имеют имена вида: 01_2.1_Название_листа, 02_2.2_Название_листа и т.п.
Первые 2 (или X) символов до первого знака _ при помощи $(substr,$(getvar,CTAB),1,X) я вырезаю из имени вкладки и добавляю к полю, высчитывающему по формуле сквозной номер листа в томе (именно от этой операции хочется избавиться, получая данную информацию из порядка расположения вкладки листа, что и делает Ваш скрипт).
Следующие X символов до второго знака _, которые должны быть подставлены в номер листа в основной надписи, простым substr универсально описать не получается, можно ли в Diesel применить регулярку типа ^(\d+)_([.\d]+).*$ ?
b00 вне форума  
 
Непрочитано 27.11.2015, 15:10
1 | #231
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от b00 Посмотреть сообщение
Т.е. информация о номере листа нигде не содержится?
Она содержится в свойстве листа TabOrder, но доступ к ней только программный, из полей - нет (по крайней мере, насколько я знаю, могу ошибаться). Чтобы к ней был доступ из полей, и была придумана данная программка. Она назначает это свойство одноименной (за исключением замененных пробелов на тире) глобальной переменной, на которую уже можно сослаться полем.
Цитата:
Сообщение от b00 Посмотреть сообщение
Но как тогда порядок вкладок сохраняется от открытия к открытию файла?
Этот порядок и сохраняется в указанном свойстве каждого листа. Точнее в файле. Ведь всегда после закрытия порядок следования листов остается неизменным, правда? Иными словами это свойство напрямую зависит от положения листа по порядку и может принимать только одно значение - целое число. Функцией vla-get-TabOrder мы это число можем получить, функцией vla-put-TabOrder - задать, при этом произойдет физическое перемещение листа в соответствующую позицию, остальные номера поменяются согласно ряду натуральных целых чисел.
Цитата:
Сообщение от b00 Посмотреть сообщение
Можно заранее определить имя блока и имя атрибута в блоке, которые должны обрабатываться командой.
Можно, и это довольно просто, но все же желательно сначала потестировать на живом примере, поскольку писал быстро, я запросто мог не учесть каких-то нюансов, которые могут подпортить ситуацию. Думаю, помимо этого найдется еще что добавить или подправить. Хотелось бы как можно меньше раз возвращаться к этому вопросу. Дали ТЗ - получили решение - будьте добры выдать замечания и предложения. На форуме так принято.

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

Однако, меня одолевает ощущение, что мы отошли от основной темы топика... Косвенная связь, конечно, есть, но к ведомости чертежей наш код имеет посредственное отношение. Если есть интерес, и он достаточно велик, предлагаю попросить модераторов перебросить это обсуждение в отдельную тему, если они сочтут это целесообразным.
skkkk вне форума  
 
Непрочитано 02.12.2015, 10:31
#232
PutnikAda

Менеджер проектов
 
Регистрация: 03.11.2015
Полтава
Сообщений: 28


А я через "Извлечение данных" эту ведомость делаю, как и многие другие. Никаких проблем.
PutnikAda вне форума  
 
Непрочитано 02.12.2015, 13:58
#233
kifa


 
Регистрация: 03.12.2009
Сообщений: 1,847


Цитата:
Сообщение от PutnikAda Посмотреть сообщение
А я через "Извлечение данных" эту ведомость делаю, как и многие другие. Никаких проблем.
а нумерация нормальная? а то пришлось тут проект в модели делать....так вот 1-10 листы не по порядку пришлось попыхтеть покопировать немного.
kifa вне форума  
 
Непрочитано 02.12.2015, 14:02
#234
baksconstructor


 
Регистрация: 05.11.2014
Сообщений: 944


Цитата:
Сообщение от kifa Посмотреть сообщение
а нумерация нормальная? а то пришлось тут проект в модели делать....так вот 1-10 листы не по порядку пришлось попыхтеть покопировать немного.
Как вариант- мы из Реверс получаем ведомость, может пригодится.
baksconstructor вне форума  
 
Непрочитано 02.12.2015, 14:03
#235
kifa


 
Регистрация: 03.12.2009
Сообщений: 1,847


Да меня то вполне устраивает этот лисп. Просто иногда вот приходится работать без листов, все в модели, тогда и плююсь )
kifa вне форума  
 
Непрочитано 02.12.2015, 19:24
#236
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


Коллеги, кто-нибудь может видео на камстасии закинуть, как оно работает, хотел наглядно посмотреть, не хочу свою предыдущую от VVA удалять она меня устраивает на все 100%
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 04.12.2015, 15:17
#237
PutnikAda

Менеджер проектов
 
Регистрация: 03.11.2015
Полтава
Сообщений: 28


Цитата:
Сообщение от kifa Посмотреть сообщение
а нумерация нормальная? а то пришлось тут проект в модели делать....так вот 1-10 листы не по порядку пришлось попыхтеть покопировать немного.
У меня в блоке штампа три атрибута: номер листа и еще два поля с названием листа и частью проектируемого объекта, изображенного на конкретном листе. Сортирую по номеру листа. Все отлично.
PutnikAda вне форума  
 
Непрочитано 08.12.2015, 12:45
#238
b00


 
Регистрация: 21.10.2008
Петербург
Сообщений: 19
<phrase 1=


Цитата:
Сообщение от skkkk Посмотреть сообщение
Дали ТЗ - получили решение - будьте добры выдать замечания и предложения. На форуме так принято.
Мне достаточно приведенного решения, благодарю. С учетом полученных пояснений по теме извлечения и установки свойства TabOrder (стал ясен смысл отдельного программного создания списка с номерами листов из TabOrder - чтобы получить доступ к ним через поля) я Ваш скрипт, при нужде, под себя перепишу, в т.ч. пропишу и имя атрибута блока.
b00 вне форума  
 
Непрочитано 08.06.2016, 17:21
#239
meccp


 
Регистрация: 08.06.2016
Сообщений: 15


Здравствуйте!
Акад 13. Прошу научить в несколько шагов сделать а/заполнение ведомости чертежей. Чертеж на листах. Многострочные атрибуты (будущие названия чертежей) не получаются. Ссылки на эти атрибуты на разные листы неизвестно как ставить. Помогите плиз. Или хоть ветку дайте из этого моря.
meccp вне форума  
 
Непрочитано 08.06.2016, 17:37
#240
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Цитата:
Сообщение от meccp Посмотреть сообщение
Здравствуйте!
Акад 13. Прошу научить в несколько шагов сделать а/заполнение ведомости чертежей. Чертеж на листах. Многострочные атрибуты (будущие названия чертежей) не получаются. Ссылки на эти атрибуты на разные листы неизвестно как ставить. Помогите плиз. Или хоть ветку дайте из этого моря.
Смотрите подшивку.
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автозаполнение ведомости рабочих чертежей



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение ведомости чертежей и автонумерация листов в спдс 6 Кукурузо_Джон_Горыныч ПО от CSoft 34 15.02.2019 08:13
Ведомость рабочих чертежей основного комплекта 13Rossoneri Архитектура 3 22.08.2015 00:21
Аннулирование комплекта рабочих чертежей путем замены Elena.sh Разное 8 26.05.2011 05:47
Хочу быстрее заполнять ведомости рабочих чертежей! a-alex Программирование 2 19.02.2008 19:09