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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Есть ли переменная содержащая количество листов (layouts)?

Есть ли переменная содержащая количество листов (layouts)?

Ответ
Поиск в этой теме
Непрочитано 25.11.2008, 11:27 #1
Есть ли переменная содержащая количество листов (layouts)?
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,970

Нужно полем вставить количество листов содержащихся в файле. Есть ли для этого переменная?
__________________
Блог
Просмотров: 14551
 
Непрочитано 25.11.2008, 13:20
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 11,017


Переменной нет. Но есть "коллекции" различных объектов. Получить количество объектов, их списки, свойства и прочее можно обратившись к коллекции.

Например, количество Layouts:
Код:
[Выделить все]
 
(vla-get-count (vla-get-layouts  (vla-get-activedocument (vlax-get-acad-object))))
Это один из вариантов написания. Можно сделать и через имена свойств

Код:
[Выделить все]
 
(vlax-get-property (vlax-get-property  (vlax-get-property  (vlax-get-acad-object) 'Activedocument) 'Layouts)'Count)
Первый вариант более компактен, но заточен конкретно для AutoCAD. Второй вариант более правильный теоретически для работы с любыми COM-объектами.
ShaggyDoc вне форума  
 
Непрочитано 25.11.2008, 13:43
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


Да, но в полях, по-моему, невозможно использовать лисповые функции...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.11.2008, 14:49
#4
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 11,017


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да, но в полях, по-моему, невозможно использовать лисповые функции...
В каких "полях", не понял? "Поле" - это Property, свойство?
Есть функция vlax-get-property, которой надо передать имя свойства в виде строки. Типа 'Layouts или "Layouts". Наверное его можно и функцией сконструировать, но не пробовал.

А "более правильно" потому что для любого языка подходит и более соотносится с концепцией ООП - работать с объектами через их свойства, и не влезать в потроха с помощью функций. Когда Autodesk сделала функции типа vla-get-layouts, это сделали черный ход. Типа, для пролетариата удобней, чем через парадное.

Насколько помню, при появлении COM в R14 таких дырок не было.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 25.11.2008, 16:40
#5
Red Nova

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


ShaggyDoc,
Поле это field. Нужно чтобы количество листов можно было вставить как field в атрибут или мтекст.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 25.11.2008, 22:11
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 11,017


Ах, "ви в ЭТОМ смысле" (С). Виноват, не разглядел, что в исходном вопросе было про "поле".

Я бы не заморачивался с тем, чтобы в единственном месте в штамп автоматически вставлять единственную цифру, если речь о заполнении основной надписи.
ShaggyDoc вне форума  
 
Непрочитано 25.11.2008, 23:38
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


Red Nova, попробуй все же сделать подшивку и с ней поиграться.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.11.2008, 03:51
#8
ACAD


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


Как перенести чертёж из "Лист" в "Модель"?
Сейчас в "Модели" пусто.
ACAD вне форума  
 
Непрочитано 26.11.2008, 08:26
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


ACAD, а ты ничего не перепутал? Например, с топиком...
P.S. chspace тебе в руки
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 26.11.2008, 09:29
#10
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,030


удалил

Последний раз редактировалось Хмурый, 29.11.2008 в 23:47.
Хмурый вне форума  
 
Непрочитано 26.11.2008, 12:46
#11
Zouss


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


варианты ShaggyDoc дают число на единичку больше - ярлычок модели тоже считается
от себя добавлю еще один вариант получения количества листов
Код:
[Выделить все]
(length (layoutlist))
только в поле это дело затолкать не получается
Zouss вне форума  
 
Непрочитано 26.11.2008, 13:11
#12
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Код:
[Выделить все]
(setvar "USERI1" (length(layoutlist)))
ЗЫ Взято отсюда
Makswell вне форума  
 
Автор темы   Непрочитано 26.11.2008, 16:58
#13
Red Nova

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


Так понял что в поле засунуть количество листов нереально. Чтож, и так бывает.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 09:07
#14
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


В файл acaddoc.LSP добавь код из поста #12

Код для поля будет такой:
Код:
[Выделить все]
%<\AcVar USERI1>%
Makswell вне форума  
 
Автор темы   Непрочитано 27.11.2008, 09:35
#15
Red Nova

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


Makswell,
У меня АutoCAD 2009, файла acaddoc.LSP не нашел
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 09:42
#16
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Тогда создай его и помести в папку, находящуюся в одном из путей поддержки.
Или же наоборот - помести его в какую-нибудь папку и добавь в путь к ней в список путей поддержки.
Makswell вне форума  
 
Непрочитано 27.11.2008, 09:45
#17
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,030


C:\Program Files\AutoCAD 2009\Support\acad2009doc.lsp
Хмурый вне форума  
 
Непрочитано 27.11.2008, 09:47
#18
Zouss


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


Red Nova, здесь посмотрите про эти файлы, второй пост особенно хорош
Zouss вне форума  
 
Автор темы   Непрочитано 27.11.2008, 10:01
#19
Red Nova

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


Спасибо за подсказки. Нашел

Makswell, А
Код:
[Выделить все]
%<\AcVar USERI1>%
надо вписать ка дизель, или как? Ато у меня не вышло, говорит
invalid field code
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 10:05
#20
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Просто скопируй этот код в буфер обмена и вставь это в текст, мтекст и т.п.
Makswell вне форума  
 
Автор темы   Непрочитано 27.11.2008, 10:24
#21
Red Nova

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


К сожалению не обновляется если количество листов изменить. regen all не помогает, нужно заново открыть файл и заново вставить поле, чтобы количество листов было заново учтено.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 27.11.2008, 10:40
#22
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


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

ЗЫ Опять по той же ссыке, можно сделать кнопку, принудительно изменяющую поле с количеством листов.
Код:
[Выделить все]
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
Makswell вне форума  
 
Непрочитано 27.11.2008, 11:08
#23
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,649


В свойствах чертежа можно какое-либо из них (в смысле, свойств - "Ключевые слова" там и т.д.) отвести под количество листов (или новое создать на вкладке "Прочие", если основные свойства уже используются) Ну и в штампах - таблицах использовать field со ссылкой на это свойство.
Конечно, при изменении кол-ва листов придется значение это ручками менять, но всего в одном месте. А может, и программно можно - отследить события удаления-добавления листов...
AlexV вне форума  
 
Непрочитано 29.11.2008, 14:03
#24
ACAD


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
ACAD, а ты ничего не перепутал? Например, с топиком...
Хорошо. Создал отдельную тему.
http://forum.dwg.ru/showthread.php?t=27464

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
chspace тебе в руки
ACAD вне форума  
 
Непрочитано 28.01.2009, 10:53
#25
alexxandr


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


Господа!
Хотелось бы все таки осилить тему счетчика листов. Не ЛИСПами а полями.
Подскажите пожалуйста.

При вставке вышеуказанного выражения Makswellа в текст получается значение - 0
Как с этим бороться?
alexxandr вне форума  
 
Непрочитано 28.01.2009, 12:26
#26
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Без лиспа всё равно никак. В том выражении в поле вставляется значение переменной USERI1, которая заполняется всё равно программно.

PS Всё таки, если не секрет, какоё прикладное значение имеет количество вкладок листа? Подшивку никто не пытался использовать?
Makswell вне форума  
 
Непрочитано 28.01.2009, 13:35
#27
alexxandr


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


Да прикладное значение элементарное - Сделал штамп динамическим блоком - рамка меняет форматы, сбоку выбираешь есть/нет штампик СОГЛАСОВАНО, поля штампа заполняются сами...ну вобщем все дела, И завис на счетчике листов. Хочу чтобы два этих пункта заполнялись сами - чтобы один атрибут считал сколько листов в чертеже, а другой выводил номер листа на котором находится.
И эту рамку вставляю на все листы, чем с себя снимаю постоянные гемор с проверкой - Все ли штампики заполнил? Переделал ли нумерацию в поле - Лист/Листов при перемещении/создании нового листа и т.д
А через подшивку не делаю потому как пока не внедрил еще ее в работу, но уже движусь по этому направлению (на нее у меня грандиозные планы) Да и с расстановкой нумерации листов в каждом отдельно взятом альбоме подшивки мне она врятли поможет... Насколько я понял из своих экспериментов с ней, с ее помощью я смогу посчитать только количество листов во ВСЕЙ подшивке.

А не хочу Лспом потому что тогда каждому из мох коллег придется ставить это лисп, объяснять че к чему...ну и т.д... Помоему было бы проще и функциональнее (со всех сторон) сделать это в виде некого атрибута...
alexxandr вне форума  
 
Непрочитано 28.01.2009, 14:21
#28
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Вопросы:
1. Я так понял весь проект в одном файле. Не тормозит? Хотя нет, лучше так: какой объём файла?

Для примера посмотрел 1-й попавшийся проект у себя: 10-этажный жилой дом, альбом АС - 20 файлов *.dwg общим объемом 11Mb. Если всё это запихнуть в один файл, то можно предположить, что он будет весить не менее 10Mb. Мой комп пока такое вряд ли потянет.

2. Как заполняютя твои штампы? Конкретно, если например меняется шифр проекта или стадия, в скольких местах надо изменить, чтобы поменялось во всём проекте?

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

2. В подшивке все данные штампа, кроме названия и номера листа можно прописать в одном месте.

3. Справедливости ради надо отметить, что в пошивке всё таки нет поля для количества листов. Но ничто не мешает сделать доп. свойство подшивки "кол-во листов" и полем ссылаться на него. Не автоматически, но всё равно достаточно быстро.

4. И ещё справедливовсти ради надо отметить, что многострочные атрибуты в блоке, использующие поля подшивки (как показала статистика - именно подшивки!) иногда глючат. Об этом я уже упоминал в другой теме.
Makswell вне форума  
 
Непрочитано 28.01.2009, 15:07
#29
alexxandr


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


Ну у меня гдето 4-6Mb не тормозит вроде ниче...
Меняются путем ввода данных в Свойствах чертежа. (создал пару пользовательских свойств, ну и соответственно там у меня все данные штампа. Один раз ввел, на всех листах поставилось.)
Да. Поле - Номер листа есть, но опятьже номер листа относительно ВСЕХ листов в подшивке (надо глянуть может возможно сделать номер листа определенной группы)

Ну и взаключение подмогните Нармальным стопроцентов работающим лиспом(я о щетчике) посажу его на кнопочку и буду нажимать...Раз другого выхода нет...
alexxandr вне форума  
 
Непрочитано 28.01.2009, 15:33
#30
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Ну раз всё в одном файле, так сделай пользовательское свойство в _DWGPROPS "кол-во_листов" и в штампе поле со ссылкой на него. Тоже самое получится: "Один раз ввел, на всех листах поставилось".

Насчёт "нармального" лиспа, чем лисп (setvar "USERI1" (length(layoutlist))) вкупе с полем %<\AcVar USERI1>% не устраивает?

PS Мне бы такой комп как у тебя. У меня 4-6Mb всё же подтормаживает. Даже завидно.
Makswell вне форума  
 
Непрочитано 28.01.2009, 17:49
#31
alexxandr


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


Лисп, кстати говоря, при ближайшем рассмотрении меня вполне устроил!
Только растолкуйте мне что за переменная USERI1?
Как я понял используется она для хранения какихто устанавливаемых пользователем значений? Ну типа записной книжки...Я прав? Или я не верно понял?
alexxandr вне форума  
 
Непрочитано 28.01.2009, 20:10
#32
alexxandr


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


Для полноты картины нужно еще чтобы значение ЛИСТ заполнялось

Неужели в автокаде нет казалосьбы элементарной функции - Учета количества листов?!
alexxandr вне форума  
 
Непрочитано 29.01.2009, 08:20
#33
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,251


Цитата:
Сообщение от alexxandr Посмотреть сообщение
Только растолкуйте мне что за переменная USERI1?
Как я понял используется она для хранения какихто устанавливаемых пользователем значений? Ну типа записной книжки...Я прав? Или я не верно понял?
Так и есть. Значение переменной сохраняется в файле рисунка. Подробности в справке.
Цитата:
Сообщение от alexxandr Посмотреть сообщение
Для полноты картины нужно еще чтобы значение ЛИСТ заполнялось
В подшивке это можно реально сделать. И ещё ведомость чертежей создать. Для твоего варианта не вижу ничего лучшего, как проставлять номер листа вручную. Хотя если листы расположены последовательно, то можно в принципе написать лисп.
Цитата:
Сообщение от alexxandr Посмотреть сообщение
Неужели в автокаде нет казалосьбы элементарной функции - Учета количества листов?!
Функция layoutlist возвращает список из имён вкладок листов.
Функция length считает количество элементов в списке.
Makswell вне форума  
 
Непрочитано 29.01.2009, 10:32
#34
alexxandr


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


Конечно последовательно. Тут, я думаю, нужно нечто ссылающиеся на номер листа на котором находится...

Последний раз редактировалось alexxandr, 29.01.2009 в 10:40.
alexxandr вне форума  
 
Непрочитано 29.01.2009, 18:54 Предлагаю вариант решения вопроса вашего топика
#35
compositum


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


Вариант решения есть и при этом довольно таки простой и изящный на мой взгляд - написать код обработчиков событий, скомпилировать это в dll-сборку и подключить к автокаду. Что я и сделал.

Только сразу предупреждаю - писал я это под 2009-й автокад. Тестировал в нем же. У меня всё замечательно работает.
Протестировать на другом акаде/компе нет возможности. Кроме того, на компе должен быть установлен .Net Framework 3.5 SP1 (если он у вас не установлен, то скачать его можно абсолютно бесплатно с официального сайта Майкрософт отсюда

В общем вот выкладываю архив, в нем лежит readme.txt о том как правильно установить (всё до безобразия просто).
Любопытно услышать замечания/пожелания.
__________________
С уважением Андрей.
compositum вне форума  
 
Непрочитано 30.01.2009, 14:52
#36
alexxandr


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


compositum
Чет не получается...
Да я думаю вышепредложенное вполне приемлемое решение. Еще сценарий на выполнения макроса написать и все.
А на счет атрибута - ЛИСТ у тебя никаких идей нет?

Последний раз редактировалось alexxandr, 30.01.2009 в 15:09.
alexxandr вне форума  
 
Непрочитано 30.01.2009, 19:25
#37
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Переменная "CTAB", если ее вставить в FIELD то с прерменой лайоута она будет менятся. Кроме того если сделать лисп то его тоже можно загнать в FIELD начиная с 2008 акада.
__________________
Сквозь тернии к звездам.... и обратно :yes:
Startrek вне форума  
 
Непрочитано 30.01.2009, 19:35
#38
alexxandr


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


Если я вставлю в поле CTAB то отображатся будет Имя листа на котором нахожусь, а нужен его номер.
alexxandr вне форума  
 
Непрочитано 21.04.2009, 07:23
#39
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,553
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Startrek Посмотреть сообщение
Кроме того если сделать лисп то его тоже можно загнать в FIELD начиная с 2008 акада.
Лисп загнать в FIELD..................
У меня голова под вечер не варит или это то, о чем я думаю?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 07.07.2010, 16:21
#40
EvilHouse


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


Такая переменная должна быть! Откуда он берёт эти цифры? [IMG]http://s53.***********/i139/1007/83/eadb966464f1.jpg[/IMG]. Вот только как её (переменную) найти...
EvilHouse вне форума  
 
Непрочитано 31.05.2013, 21:43
#41
BIzzzzzzON


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


Здравствуйте.
Тоже интересно, как можно с помощью поля отобразить "номер листа" и "количество листов". Может, появилась или стала известна системная переменная, или у кого-то есть наработки? Желательно, без лиспа, точнее, чтобы не вносить изменения в файлы автокада и без внешних подключаемых лисп-файлов. Тут писали про возможность вставки лиспа в филд, как это реализовать?
Спасибо.
BIzzzzzzON вне форума  
 
Непрочитано 01.06.2013, 17:10
#42
Walkmax


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


Тут смотрели?
Walkmax вне форума  
 
Непрочитано 02.06.2013, 10:23
#43
BIzzzzzzON


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


Walkmax, спасибо.
Предложенный вами вариант очень хорош по функционалу, особенно благодаря автоматическому обновлению, но он опять требует внесения изменений в файлы автокада или в реестр, но мне это не совсем удобно, так как, если правильно понимаю, открытый на другом компе автокадовский файл уже не будет обладать корректно работающим счетчиком. Всё же надеялся, что есть что-то встроенное и доступное по умолчанию хотя бы последним версиям автокада.
BIzzzzzzON вне форума  
 
Непрочитано 08.02.2016, 12:11 Как достать эту переменную?
#44
Awave

Инженер-проектировщик
 
Регистрация: 12.10.2010
Москва
Сообщений: 41
<phrase 1=


Переменная считающая листы есть, как её получить для использования. Как получить её адрес?
Миниатюры
Нажмите на изображение для увеличения
Название: листов в группе.png
Просмотров: 275
Размер:	31.2 Кб
ID:	164923  
Awave вне форума  
 
Непрочитано 08.02.2016, 12:36
#45
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,812


Залезть в подшивку программно, посчитать листы в перечислении. С чего вы решили - что это переменная?
Сергей812 вне форума  
 
Непрочитано 08.02.2016, 12:53
#46
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 696


попадалось такое решение, кажется от VVA и wetr:
1. (setvar "USERI1" (length(layoutlist))) - системной переменной user1 задается значение (length(layoutlist))
2. В поле прописывается dieselexpression $(-,$(getvar,USERI1),0)
http://forum.dwg.ru/showthread.php?t=14548 - здесь подробнее всё описано

Последний раз редактировалось kacugu, 08.02.2016 в 13:05. Причина: неправильно понял вопрос
kacugu вне форума  
 
Непрочитано 03.07.2019, 10:46
#47
allar8


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


Цитата:
Сообщение от Walkmax Посмотреть сообщение
Тут смотрели?
Интересно, но для меня например было бы достаточно просто чтоб обновлялось кол-во листов в файле в этом поле %<\AcVar USERI1>%
Как я понял стандартная переменная в акад отсутствует и поэтому это можно только реализовать на той машине где произведены необходимые манипуляции, написан код, подгружена библиотека и т.п.
Ну раз уж так то для себя сделал след образом - стандартную команду регенерировать все ВСЕРЕГЕН превратил в макросик, т.е. дополнил ее всем уже известной тут строчкой
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
В результате у меня на кнопке ВСЕРЕГЕН
прописано так ^C^C_regenall ^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
Т.е. что получили
При открытии файла конечно не обновляется это поле, но обновляется при выполнении команды регенерировать все
Но может, кто нить подскажет как без подгрузки библиотек допилить такую простую схему чтоб и при открытии файла обновлялось?
allar8 вне форума  
 
Непрочитано 03.07.2019, 10:51
1 | #48
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


allar8, fieldeval поменяй на 31 (подробнее в справке)
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.07.2019, 10:53
#49
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
allar8, fieldeval поменяй на 31 (подробнее в справке)
Да в 31 и стоит у меня. Да и это не совсем, то.
У меня не речь не про обновление полей, а про обновление конкретного поля, под обновлением которого подразумевается загон в переменную USERI1 кол-ва листов в документе и отображение значение этой переменной в поле
Т.е. по сути все как бы просто при открытии файла мне надо чтоб запустился макрос на моей кнопке
^C^C_regenall ^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;

Последний раз редактировалось allar8, 03.07.2019 в 11:11.
allar8 вне форума  
 
Непрочитано 03.07.2019, 11:21
#50
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


Поменяй acaddoc.lsp или acad.mnl
Код:
[Выделить все]
(setvar "useri1" (length (layoutlist)))
(vl-cmdf "_.updatefield" "_all" "")
Код не проверял
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.07.2019, 12:08
#51
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Поменяй acaddoc.lsp или acad.mnl
acaddoc.lsp не нашел
а в acad.mnl вот это
(setvar "useri1" (length (layoutlist)))
(vl-cmdf "_.updatefield" "_all" "")
вставить просто в конец файла?
allar8 вне форума  
 
Непрочитано 03.07.2019, 12:31
1 | #52
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,682


Да, только проверь корректность кода. Может быть, будет иметь смысл заменить на
Код:
[Выделить все]
(vl-cmdf "_.updatefield _all  ")
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.07.2019, 12:39
#53
allar8


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да, только проверь корректность кода. Может быть, будет иметь смысл заменить на
Код:
[Выделить все]
(vl-cmdf "_.updatefield _all  ")
Спасибо, ща попробую

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
(setvar "useri1" (length (layoutlist)))
(vl-cmdf "_.updatefield" "_all" "")
Работает. Спасибо!

Сведем в одно сообщение рабочее решение теперь.

Создаем поле %<\AcVar USERI1>%
Стандартную команду регенерировать все ВСЕРЕГЕН превращаем в макросик, т.е. дополняем ее всем уже известной тут строчкой
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
В результате получаем кнопку ВСЕРЕГЕН с макросом ^C^C_regenall ^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
Т.е. что получили
при выполнении регенерировать все ВСЕРЕГЕН - это поле (%<\AcVar USERI1>%) обновляется, но при открытии файла обновления не происходит.
А с помощью Кулика Алексея удалось и при открытии файла выполнить обновление этого поля см. #50
У меня из #50 зарабатало с файлом acad.mnl
В конце файла acad.mnl прописал, рекомендуемые Куликом Алексеем строчки:

(setvar "useri1" (length (layoutlist)))
(vl-cmdf "_.updatefield" "_all" "")

Мелоч казалось бы - обновляемое поле с кол-вом лайотов, а приятно)))

Последний раз редактировалось allar8, 03.07.2019 в 13:26.
allar8 вне форума  
 
Непрочитано 19.08.2019, 09:04
#54
allar8


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


Вопрос всем Гуру программирования. Позскажите плиз, направьте так скать в нужное русло. Нужно создать поле со значением с зависимым от кол-ва лайотов в чертеже.
Т.е. конкретно нуно чтоб поле выдавало значение "0" если число кол-ва лайотов двузначное, т.е. больше 9.
и значение "00" если число кол-ва лайотов однозначное, т.е. меньше 10
Нужно еното мне чтоб в шифре у меня автоматически менялась концовка шифра типа - 001, 002... 010,011 и.т.д.
где 1,2...10 число лайотов - с этим нет проблем. Проблема с автовыбором кол-ва нулей перед значение кол-ва листов
Зачем мне это не спрашивайте - такие правила оформления в нашей конторе. В шифре документа такое должно быть окончание.
И вообще такое реально сделать? Если да - подскажите с помощью каких средств и как
Заранее благодарен.
allar8 вне форума  
 
Непрочитано 19.08.2019, 09:13
#55
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,812


Ничего не понял, но в .Net это решается так, например)

----- добавлено через ~31 мин. -----
А вообще то ГОСТ Р 21.1101 еще не отменили:
Цитата:
4.2.5 Допускается оформление основного комплекта рабочих чертежей отдельными документами с присвоением им обозначения, состоящего из базового обозначения, марки основного комплекта, и добавлением через точку порядкового номера документа арабскими цифрами.
нигде не говорится, что должны быть лидирующие нули) Это введено в стандарт предприятия или личный маразм нормоконтроля?)
Сергей812 вне форума  
 
Непрочитано 19.08.2019, 10:03
#56
allar8


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
нигде не говорится, что должны быть лидирующие нули) Это введено в стандарт предприятия или личный маразм нормоконтроля?)
Я же говорил - не спрашивайте зачем))). Спорить с местными правилами я не вправе. Приходится подстраиваться. Тем более руководство и НК в другом городе). Я просто проектировщик а не законадатель мод в конторе. Подскажите лучше по теме вопроса, чем рассуждать о том что по Гост или нет)))
allar8 вне форума  
 
Непрочитано 19.08.2019, 10:13
#57
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,812


Так уже подсказал
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ничего не понял, но в .Net это решается так, например)
С такими загонами руководства просто заполнял программно бы блоки основных надписей без всяких полей. А программно можно любой маразм реализовать, если он укладывается в алгоритмизацию)

Можно еще попробовать DIESEL, но с ним толком и не работал.
Сергей812 вне форума  
 
Непрочитано 19.08.2019, 10:15
#58
allar8


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Можно еще попробовать DIESEL, но с ним толком и не работал.
как раз на него и обращал внимание - но блин не обновляет(

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
С такими загонами руководства просто заполнял программно бы блоки основных надписей без всяких полей. А программно можно любой маразм реализовать, если он укладывается в алгоритмизацию)
Я не один работаю - всех тоже не способен переучить - есть особенности. В обчем мине нуно так. Про маразм не спорю. Есть у всех это НК). Да ладно бы конторка была маленькая - можно поспорил бы еще с НК). Компания всероссийская. Я в филиальчике работаю). Все закреплено на уровне местных нормативных документов)

Последний раз редактировалось allar8, 19.08.2019 в 10:22.
allar8 вне форума  
 
Непрочитано 19.08.2019, 10:21
1 | #59
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,812


Ну тут по тем же граблям бегали)
Сергей812 вне форума  
 
Непрочитано 19.08.2019, 10:24
#60
allar8


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Ну тут по тем же граблям бегали)
погляжу) спасибо! Грабли это наша тема)
allar8 вне форума  
 
Непрочитано 19.08.2019, 10:35
#61
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,812


Offtop:
Цитата:
Сообщение от allar8 Посмотреть сообщение
Компания всероссийская. Я в филиальчике работаю). Все закреплено на уровне местных нормативных документов)
я только одного не пойму - почему обычный исполнитель из филиальчика ломает голову над шаблонами всероссийской компании? За столько лет компания даже свои шаблоны нормальные не могла сделать?)
Сергей812 вне форума  
 
Непрочитано 19.08.2019, 10:38
#62
allar8


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


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
я только одного не пойму - почему обычный исполнитель из филиальчика ломает голову над шаблонами всероссийской компании? За столько лет компания даже свои шаблоны нормальные не могла сделать?)
Offtop: Шаблоны есть но не допилены на мой взгляд. Голову не ломаю - просто интересно)))
allar8 вне форума  
 
Непрочитано 20.08.2019, 13:14
#63
allar8


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


Цитата:
Сообщение от allar8 Посмотреть сообщение
Работает. Спасибо!

Сведем в одно сообщение рабочее решение теперь.

Создаем поле %<\AcVar USERI1>%
Стандартную команду регенерировать все ВСЕРЕГЕН превращаем в макросик, т.е. дополняем ее всем уже известной тут строчкой
^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
В результате получаем кнопку ВСЕРЕГЕН с макросом ^C^C_regenall ^C^C(setvar "USERI1" (length(layoutlist)));_updatefield;_all;;
Т.е. что получили
при выполнении регенерировать все ВСЕРЕГЕН - это поле (%<\AcVar USERI1>%) обновляется, но при открытии файла обновления не происходит.
А с помощью Кулика Алексея удалось и при открытии файла выполнить обновление этого поля см. #50
У меня из #50 зарабатало с файлом acad.mnl
В конце файла acad.mnl прописал, рекомендуемые Куликом Алексеем строчки:
Т.е. нуно чтоб только обновлялось это поле %<\AcVar USERI1>%

(setvar "useri1" (length (layoutlist)))
(vl-cmdf "_.updatefield" "_all" "")

Мелоч казалось бы - обновляемое поле с кол-вом лайотов, а приятно)))
Люди подскажите плиз как запретить строчке (vl-cmdf "_.updatefield" "_all" "") трогать поля из подшивки, или может другое есть решение описанной тут задачи)
(vl-cmdf "_.updatefield" "_all" "") - в решетки превращает зараза) подшивочные поля - если с подшивкой связи нет - а не надо бы трогать то подшивочные поля то.
ВСЕРЕГЕН жи не трогает, а другие поля обновляет)
Т.е. нужно чтоб обновлялось только это поле %<\AcVar USERI1>%

Разобралси - вместо (vl-cmdf "_.updatefield" "_all" "") нуно (command "_regenall")

Последний раз редактировалось allar8, 20.08.2019 в 13:31.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Есть ли переменная содержащая количество листов (layouts)?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменная содержащая имя листа deConstructor AutoCAD 6 11.11.2007 17:57
Есть ли такая системная переменная? {Smirnoff} Программирование 6 19.08.2005 12:11
Количество листов в layout AleXYZ AutoCAD 6 06.05.2004 17:40