Тема: Как вставить блок из внешнего файла с несколькими блоками?
Есть внешний файл с несколькими блоками. Как из него вставить в чертеж нужный блок (как обратиться к блоку по имени)? Подскажите, пожалуйста.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Как вставить блок из внешнего файла с несколькими блоками?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Есть внешний файл с несколькими блоками. Как из него вставить в чертеж нужный блок (как обратиться к блоку по имени)? Подскажите, пожалуйста.
Очень просто.
Делай раз: Вставить файл с несколькими блоками (Команда: Insert) в требуемый проект.
Делай два: Удалить этот вставленный блок-файл командой (Erase).
Делай три: Команда Insert (Вставка блока) и выбрать из списка требуемый блок.
Вот и все.
готовая функция в разделе лиспа:
https://www.caduser.ru/forum/topic6943.html
С помощью Deign Center.
Design Center не годится - я пишу программу,, которая должна сама вставлять в чертеж блоки из библиотеки, а не отсылать куда-то User'a,. Лисп не годится - пишу на VBA. А вот насчет "делай три" хотелось бы поподробнее. Спасибо.
> 3dcad
После "раз" вы получите в свой файл не только требуемый блок (если он вообще там есть), но и все вообще блоки, определённые в библиотеке. Пока юзер найдёт нужный ему блок среди нескольких библиотек, его собственный файл распухнет ого-го. Есть, конечно, команда Purge.
Но, имхо, красивей будет так:
0. Запомнить объект "текущий чертеж" в переменную.
1. открыть чертёж-библиотеку как отдельный документ
2. попросить юзера выбрать нужный блок (а уж они там должны быть "выставлены")
3. программно дать команду WBLOCK и сбросить этот выбранный блок во временный файл (если временный файл - это для вас некрасиво, то можно скопировать выбранный объект-блок в буфер обмена, тоже соотв. командой Акада).
4. закрыть файл-библиотеку.
5. активизировать исходный документ
6. вставить блок из буфера обмена или из внешнего файла.
> Вера
"делай три" - значит вставить командой Insert тот блок, который нужен юзеру, выбравшего его имя из "выпадающего" списка в диалоговом окне вашей команды. Проблема тут в том, что бедный юзер должен будет выбирать блок по имени (а не по "картинке"), да ещё среди всех блоков, что были в той библиотеке, плюс "старые" блоки исходного чертежа...
Мой вариант, имхо, получше.
А при чем тут "бедный юзер должен будет выбирать блок по имени (а не по "картинке") ", когда блок должен вставляться программно и имя его известно заранее, если конечно я правильно понимаю задачу. Имхо, более подходит способ 3dcad + команда Purge в конце.
Для Маxima T:
Может быть Вы что-то не поняли, но мне кажется, что речь идет не о файле, содержащем тысячи элементов, а просто о проекте, где уже есть нужный блок, и задача его просто отдельно вставить. Зачем так делать, если вообще проще вынести его во внешний блок - непонятно, но тему задали не мы, а решение требовалось конкретное.
> Maxim T
А ты не помог бы кодом:
Доступ к информации о блоках в библиотеке блоков не открывая ее?
Понимаешь, отсортировать библиотеку блоков - дело техники (по слоям, по названиям) равно, как и сделать ее удобной юзеру, а вот как технически иметь к ней доступ не открывая ее?
> AASer
не открывая её - имхо, дело тёмное и бесперспективное. То есть ковырять dwg-файл... Имхо, > 3dcad (2004-06-29 13:26:41) прав: Зачем так делать, если вообще проще вынести его во внешний блок , то есть надо держать блоки "россыпью". А уж если в одном файле, то надо или юзать Дизайн-центр, или (если у вас автоматизация:)) - как я описал...
Даже если ковырять dwg-файл, все равно, как минимум придется открыть его для чтения.
Может запустить еще один экземпляр АКАД в невидимом режиме (кажись, так можно сделать), да поковыряться через него в "интересной" библиотеке на предмет "а что там есть?". А после дернуть оттуда нужный блок. Вроде бы должно получиться.
А вот как с Дизайн-центром программно работать - что то совсем не соображу. В том смысле, что из программы передать управление в Дизайн-центр с нужными параметрами (имя файла, открыть ветку "блоки"), чтоб юзер ткнул в нужный блок и потом продолжить программу.
Что значат эти слова:
"Зачем так делать, если вообще проще вынести его во внешний блок , то есть надо держать блоки "россыпью". "
Что значит - внешний блок и держать россыпью?
> AASer (2004-06-30 21:06:58
Это значит - создавать блоки через "_EXPORT" ("ЭКСПОРТ"), сбрасывая их (каждый) на диск в виде отдельных ".dwg"-файлов в специально созданную для них папку (базу блоков), чтобы потом вставлять их (эти ".dwg"-файлы) из этой папки как блоки...
Вообще-то, я считал, что внешний блок создается командой "WBLOCK".
Или просто сохранить dwg файл на диске.
Вообще-то, я считал, что внешний блок создается командой "WBLOCK". Или просто сохранить dwg файл на диске.
Эту самую "WBLOCK" теперь ни в панельках, ни в менюшках
не найдешь (AutoDESK видимо считает ее устаревшей),
однако с командной строки (пока еще) - доступна :
"_WBLOCK" или "ПБЛОК"
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Как вставить блок из внешнего файла с несколькими блоками?
Форум работает на PunBB, при поддержке Informer Technologies, Inc