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

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

Хранение определения блока в отдельном файле. Динамические изменения вхождений

Ответ
Поиск в этой теме
Непрочитано 22.01.2010, 17:40 #1
Хранение определения блока в отдельном файле. Динамические изменения вхождений
hwd
 
C, C++, C#
 
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762

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

п.с. Насколько я знаю - пока решения нет, но на всякий случай задаю вопрос, т.к. вполне возможно, что ошибаюсь.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
Просмотров: 9365
 
Непрочитано 22.01.2010, 19:22
#2
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


ну, если программирование и надо, то совсем простое. в автозагрузку поставить код типа
Код:
[Выделить все]
(command "_-insert" "my_dyn_block=" (command))
Знак "=" после имени блока указывает, что его надо переопределить в соответствии с содержимым файла, где записан эталон блока. Пустая функция (command) соответствует нажатию ESC, чтобы не создавать лишний экземпляр блока, а только обновить его определение.
Всевозможные проверки ошибок по вкусу

При добавлении этого кода в автозагрузку обновление будет происходить каждый раз при открытии файла, куда вставлен блок
kp+ вне форума  
 
Непрочитано 22.01.2010, 20:00
#3
Кулик Алексей aka kpblc
Moderator

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


Если вставка блока выполняется с палитры инструментов, то можно попытаться кликнуть правой кнопкой на инструменте и выбрать "Redefine". Не оно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2010, 11:01
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если вставка блока выполняется с палитры инструментов, то можно попытаться кликнуть правой кнопкой на инструменте и выбрать "Redefine". Не оно?
Если выполнить эту команду, то файле происходит переопределение блока. и новые вхождения имеют откорректированный вид. однако те вхождения блока, которые были вставлены в чертеж до выполнения "Redefine" у меня не изменили вид в соответствие с переопределённым блоком.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 25.01.2010, 11:02
#5
Кулик Алексей aka kpblc
Moderator

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


_.regenall не помогает?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2010, 11:07
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
_.regenall не помогает?
пробовал конечно же - но не помогло. )))
я выделил оба варианта вхождений блока (до "Redefine" - тот что слева, и после - тот что справа). В окне свойств видим, что имя у определения блока одно и то же.
Т.е. теоретически, вхождения должны были бы выглядеть одинаково (скрин в конце сообщения).

Цитата:
kp+
ну, если программирование и надо, то совсем простое. в автозагрузку поставить код типа
Код:
(command "_-insert" "my_dyn_block=" (command))

Знак "=" после имени блока указывает, что его надо переопределить в соответствии с содержимым файла, где записан эталон блока. Пустая функция (command) соответствует нажатию ESC, чтобы не создавать лишний экземпляр блока, а только обновить его определение.
Всевозможные проверки ошибок по вкусу

При добавлении этого кода в автозагрузку обновление будет происходить каждый раз при открытии файла, куда вставлен блок
честно говоря - не понял... у меня ведь блок во внешнем файле. мне нужно не сам файл в виде блока вставить, а конкретный блок из этого файла.
Миниатюры
Нажмите на изображение для увеличения
Название: скрин.jpg
Просмотров: 201
Размер:	44.3 Кб
ID:	32349  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

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

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


По-моему, они одинаковые. Покажи поближе
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2010, 11:14
#8
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
По-моему, они одинаковые. Покажи поближе
кликни мышью по изображению - оно увеличится. На скрине видно, что одно вхождение имеет в своём составе окружность, а второе - нет.

однако если я выберу из контекстного меню вхождения блока "reset block" - то изображение обновится (что собственно мне и требуется) в соответствии с произведёнными изменениями.

Пока, как вариант можно последовательно выполнить два действия:
1. "Redefine" из контекстного меню блока, находящегося на палитре инструментов
2. вызов команды _resetblock _all (закину её на панель инструментов).

Но на самом деле вариант плохой, поскольку вхождения динамических блоков настроены каждый по своему, а reset сбросит все настройки...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 25.01.2010 в 11:42.
hwd вне форума  
 
Непрочитано 25.01.2010, 11:47
#9
Кулик Алексей aka kpblc
Moderator

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


Точно, "слона-то я и не приметил". Хотя я специально проверил на нескольких дин.блоках из комплекта поставки AutoCAD 2010 Eng + SP1, вроде все работает корректно. Пользовательские блоки не проверял.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2010, 11:54
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Хотя я специально проверил на нескольких дин.блоках из комплекта поставки AutoCAD 2010 Eng + SP1, вроде все работает корректно. Пользовательские блоки не проверял.
Т.е. у тебя обновлялись вхождения блоков после того, как вызывал "Redefine" из контекстного меню блока, находящегося на палитре инструментов с последующей регенерацией графической части?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 25.01.2010, 12:02
#11
Кулик Алексей aka kpblc
Moderator

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


Именно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2010, 12:05
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Именно.
вопрос снят. я понял почему у меня не обновлялись вхождения...

У меня ведь в примере блоки с атрибутами. Я думал, что вызывать команду "_battman" с последующим указанием нужного блока нужно только тогда, когда в составе блока обновлены атрибуты. Оказывается нет. В моём примере блок имеет атрибуты. Изменив определение блока я добавил примитив, не затрагивая атрибуты. Однако если вызвать выше указанную команду - все вхождения обновятся, как того и требуется. Если же блок не содержит атрибутов - то такие вхождения обновляеюся сразу же после выполнения контекстного "redefine" (даже регенерация не требуется)...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 25.01.2010 в 13:24.
hwd вне форума  
 
Непрочитано 25.01.2010, 15:23
#13
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
честно говоря - не понял... у меня ведь блок во внешнем файле. мне нужно не сам файл в виде блока вставить, а конкретный блок из этого файла.
ну, если в файле несколько блоков, и надо вставить один из них - тогда, конечно, одной строчкой кода не отбудешься. Обсуждалось на форуме, целое дело.
А если в файле один блок, почему бы не вставлять его полностью? (возможно, перед этим надо wblock применить один раз)

"Redefine" из контекстного меню блока, находящегося на палитре инструментов надо НЕ ЗАБЫВАТЬ нажимать. А я так понял, что синхронизировать копии блока с эталоном НАДО АВТОМАТИЧЕСКИ. Или не надо?
kp+ вне форума  
 
Автор темы   Непрочитано 25.01.2010, 15:38
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
"Redefine" из контекстного меню блока, находящегося на палитре инструментов надо НЕ ЗАБЫВАТЬ нажимать. А я так понял, чтобы синхронизировать копии блока с эталоном НАДО АВТОМАТИЧЕСКИ. Или не надо?
в идеале - нужно автоматически. но это значит нужно мониторить файлы на их изменение. В случае наличия изменения - синхронизировать изменения с определением блока в файле с последующим обновлением вхождений. Это можно сделать только программно (как я понимаю). Например Добавить каждой записи определения блока дополнительную информацию с именем внешнего файла и блока в его составе, который нужно проверять на наличие изменений. И запускать проверку на эти изменения при каждом открытии файла чертежа, содержащего вхождения этого блока, а при желании юзер должен иметь возможность выполнить проверку принудительно вручную.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 25.01.2010 в 15:56.
hwd вне форума  
 
Непрочитано 25.01.2010, 16:38
#15
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Цитата:
Добавить каждой записи определения блока дополнительную информацию с именем внешнего файла и блока в его составе
Зачем так сложно?
Если соблюден принцип "один блок - один файл", то имя блока и есть имя внеш. файла (полный путь прописывается в настройках Акада). Этот файл не должен включать в себя нужный блок, он сам должен быть определением блока. Может, сумбурно объяснил, пример тут

И тогда все получится, как я написал в посте №2

Последний раз редактировалось kp+, 25.01.2010 в 16:47.
kp+ вне форума  
 
Автор темы   Непрочитано 25.01.2010, 16:40
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от kp+ Посмотреть сообщение
Если соблюден принцип "один блок - один файл", то имя блока и есть имя внеш. файла (полный путь прописывается в настройках Акада). Этот файл не должен включать в себя нужный блок, он сам должен быть определением блока. Может, сумбурно объяснил, пример тут

И тогда все получится
дык тема-то по сути закрыта. ) на предмет программного обновления пока не заморачиваюсь - пока достаточно того, что имею, спасибо )
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 10.10.2011, 10:52
#17
4ydik

Инженер
 
Регистрация: 08.10.2009
Красноярск
Сообщений: 16


Цитата:
Сообщение от kp+ Посмотреть сообщение
ну, если программирование и надо, то совсем простое. в автозагрузку поставить код типа
Код:
[Выделить все]
(command "_-insert" "my_dyn_block=" (command))
Знак "=" после имени блока указывает, что его надо переопределить в соответствии с содержимым файла, где записан эталон блока. Пустая функция (command) соответствует нажатию ESC, чтобы не создавать лишний экземпляр блока, а только обновить его определение.
Всевозможные проверки ошибок по вкусу

При добавлении этого кода в автозагрузку обновление будет происходить каждый раз при открытии файла, куда вставлен блок
Вопрос такой, а если много блоков (т.е. много отдельных файлов) как их все разом обновить? как будет правильно написать лисп?
4ydik вне форума  
 
Непрочитано 10.10.2011, 14:03
#18
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,171


Использовать vl-directory-files для получения списка файлов, а там foreach или другой вариант цикла с (command "_-insert" (strcat iterator ".dwg=") (command))
Акада под рукой нет, рабочий код не напишу
kp+ вне форума  
 
Непрочитано 11.10.2011, 05:23
#19
4ydik

Инженер
 
Регистрация: 08.10.2009
Красноярск
Сообщений: 16


Цитата:
Сообщение от kp+ Посмотреть сообщение
Использовать vl-directory-files для получения списка файлов, а там foreach или другой вариант цикла с (command "_-insert" (strcat iterator ".dwg=") (command))
Акада под рукой нет, рабочий код не напишу
Спасибо за помощь, но
Команда: (command "_-insert" (strcat iterator ".dwg=") (command))
_-insert Имя блока или [?] <dcclpdata>: ; ошибка: неверный тип аргумента:
stringp nil
Имя блока или [?] <dcclpdata>: *
*Неверно*
вот что выдает!
4ydik вне форума  
 
Непрочитано 11.10.2011, 05:31
#20
Кулик Алексей aka kpblc
Moderator

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


4ydik, а что в расширении файла делает знак "="?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Хранение определения блока в отдельном файле. Динамические изменения вхождений



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ненужные документы. Посмотрите, кому что нужно Дмитрий832 Поиск литературы, чертежей, моделей и прочих материалов 73 18.12.2010 22:55