Тема: Вставка блока из DWG файла

Как вставить блок из внешнего dwg-файла, в котором имеется несколько блоков.

Re: Вставка блока из DWG файла

по-моему, сделать это средствами ЛИСПа проблематично
Проще сделать каждый блок отдельным файлом

Re: Вставка блока из DWG файла

Главная проблема на мой взгляд бутет если в текущем чертеже и во вставляемом есть блоки с одинак. именами. В этом случае приоритет будет за "местным" блоком, т.е. переопределения блока не произойдёт.

Re: Вставка блока из DWG файла

> LAA
Возможен такой вариант:(не очень хороший)
Вставить блок из внешнего файла командой insert.
Удалить его (entdel(entlast)).
В таблицу блоков текущего рисунка пропишется не только общий блок под именем внешнего файла ,но и все блоки которые были во внешнем
файле.После этого ненужные блоки удалить.

Re: Вставка блока из DWG файла

Блок, в котором есть другие блоки, обычно называется библиотекой блоков. Мы их делаем специально. Так удобнее. В библиотеке обычно маленькие блочишки по определенной теме. Внедрение библиотеки блоков  в рисунок функцией

(defun ru-block-lib-insert (block_lib_name block_name / block_lib_file_name)
;;; Внедрение библиотечного блока block_lib_name в котором живет блок  block_name
;;; Пример (ru-block-lib-insert "R2000_00000000" "НОМЕР_УЗЛА") > T
;;;Пример (ru-block-lib-insert "R2000_00000000" "_НОМЕР_УЗЛА") > nil
  (if (tblsearch "block"  block_name)
    T
    (progn
      (setq block_lib_file_name (ru-file-block-lib block_lib_name))
      (if (findfile (strcat block_lib_file_name ".DWG"))
    (progn
      (princ "\nПодождите...")
      (setvar "CMDECHO" 0)
      (command "_.INSERT" block_lib_file_name)
      (command) ; прерываем вставку, блок
            ; невидимый
      (if (tblsearch "block"  block_name)
        ;;Проверим блок после внедрения
        T
        (progn
          (ru-msg-alert    (strcat    "ОШИБКА!\n Блок\n"
                 block_name
                "\nотсутствует в библиотеке\n"
                block_lib_file_name
                "!\nОбратитесь к администратору системы!"
            ) ;_ end of strcat
          ) ;_ end of ru-msg-alert
          NIL
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
    (progn
      (ru-msg-info (strcat "Не найден библиотечный блок\n" block_lib_file_name))
      NIL
    ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

После отработки функции  определение требуемого блока есть в рисунке и с ним можно делать что угодно. Если после чисток и будут удалены определения неиспользованных блоков, блоки вставятся заново, так как перед любыми операциями вставок библиотечных блоков всегда вызывается эта функция.
Из книги "САПР на базе AutoCAD. Как это делается"

Re: Вставка блока из DWG файла

Как выделить диапазон ячеек при помощи VBA, от активной до заданной

Re: Вставка блока из DWG файла

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