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

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

Автоматизация вставки блоков в чертеж.

Ответ
Поиск в этой теме
Непрочитано 01.08.2008, 11:41 #1
Автоматизация вставки блоков в чертеж.
gest
 
GEODATA Engineering S.p.A.
 
Монино
Регистрация: 11.02.2005
Сообщений: 680

Имеется большое количество геоподоснов Мосгоргеотреста, структура чертежей (все находятся по отдельным папкам)



необходимо собрать полную геоподоснову, вставкой блоков (отдельных чертежей) с разбивкой, в один файл.
Может быть кто подскажет как сделать это проще, или программным путем ускорить работу?
Примерно так, указываешь папку и все внутренние вставляются в точку 0,0,0 с одинаковым масштабом в открытый файл.
Просмотров: 2953
 
Непрочитано 01.08.2008, 12:36
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Попробуй это. Выбираешь файл и все файлы в этой директории вставляются как Xref в точку 0,0
Код:
[Выделить все]
;|=============================================================================
*    функция z-files-in-directory возвращает список файлов находящаяся в заданной
* директории
*    Автор : Зуенко Виталий (ZZZ)
*  Параметры:
*    directory  путь к папке например "D:\\Мои документы\\ZEF\\Lisp"
*    pattern    шаблон например "*.lsp" или список '("*.dwg" "*.dxf")
*    nested    искать в вложенных папках: t (да) или nil (нет)
* Пример вызова:
(z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" "*.dwg" t)
(z-files-in-directory "D:\\Мои документы\\ZEF\\Lisp" '("*.dwg" "*.dwt") t)
=============================================================================|;
(defun z-files-in-directory (directory pattern nested /)
  (if (not (listp pattern))(setq pattern (list pattern)))
  (if nested (apply 'append (append (mapcar	'(lambda (_pattern)
   (mapcar '(lambda (f) (strcat directory "\\" f))
   (vl-directory-files directory _pattern 1)))	pattern) ;_ mapcar
   (mapcar '(lambda (d) (z-files-in-directory (strcat directory "\\" d)
   pattern nested))
  (vl-remove "." (vl-remove ".." (vl-directory-files directory nil -1))))))
  (apply 'append (mapcar '(lambda (_pattern)(mapcar '(lambda (f) (strcat directory "\\" f))
  (vl-directory-files directory _pattern 1))) pattern))))
;;; Insert нескольких блоков сразу
(defun C:XrefIn ( / col icol dX dY dYmax fil dwglist pt ptv adoc p1 p2)
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vla-StartUndoMark adoc)  
(setvar "CMDECHO" 0)
(setq col 10  ;_По 10 элементов в строку
      icol 0 dX 0 dY 0 dYmax 0)
(if *LAST_DIR*
    (setq fil (getfiled "Выберите файл для вставки" *LAST_DIR* "dwg" 16))
    (setq fil (getfiled "Выберите файл для вставки" "" "dwg" 16))
  ) ;_ end of if
(if fil (progn
 (setq *LAST_DIR* (strcat (vl-filename-directory fil) "\\"))
 (VL-PROPAGATE '*LAST_DIR*)
 (setq dwglist (z-files-in-directory (vl-filename-directory fil) '"*.dwg" nil))
 (setq pt '(0 0 0) ptv pt)
(foreach dwg dwglist
 (princ "\nОбрабатываю ")(princ dwg)
 (vl-cmdf "_-XREF" "_Attach" dwg '(0 0 0) "1" "1" "0")
  )
 )
  )
  (vla-EndUndoMark adoc)
  (vl-cmdf "_ZOOM" "_ALL")
  (princ))
(princ "\nНаберите XrefIn")
;;; Insert нескольких блоков сразу
(defun C:DwGIn ( / col icol dX dY dYmax fil dwglist pt ptv adoc p1 p2)
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vla-StartUndoMark adoc)  
(setvar "CMDECHO" 0)
(setq col 10  ;_По 10 элементов в строку
      icol 0 dX 0 dY 0 dYmax 0)
(if *LAST_DIR*
    (setq fil (getfiled "Выберите файл для вставки" *LAST_DIR* "dwg" 16))
    (setq fil (getfiled "Выберите файл для вставки" "" "dwg" 16))
  ) ;_ end of if
(if fil (progn
 (setq *LAST_DIR* (strcat (vl-filename-directory fil) "\\"))
 (VL-PROPAGATE '*LAST_DIR*)
 (setq dwglist (z-files-in-directory (vl-filename-directory fil) '"*.dwg" nil))
 (setvar "EXPERT" 5)
 (foreach dwg dwglist
 (princ "\nОбрабатываю ")(princ dwg)
 (vl-cmdf "_.-INSERT" (strcat "*" dwg) '(0 0 0) 1 0)
 (while (> (getvar "CMDACTIVE") 0)(command ""))  
  )
 )
  )
  (vla-EndUndoMark adoc)
  (vl-cmdf "_ZOOM" "_ALL")
  (princ))
(princ "\nНаберите DwgIn")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 01.08.2008 в 14:27.
VVA вне форума  
 
Автор темы   Непрочитано 01.08.2008, 14:09
#3
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 680


VVA, спасибо. Дело в том что при вставке xref, нужно потом внедрять внешние ссылки, потому что необходимо получить один файл со слоями которые можно редактировать, и при вставке внешними ссылками изменяются названия слоев.
Может возможно собрать все из блоков с разбитием?
90-то папок подоснов, вручную собирать по блокам еще долго буду (.
gest на форуме  
 
Непрочитано 01.08.2008, 14:27
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Добавил DWGIN в #2
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 01.08.2008, 14:54
#5
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 680


Огромное спасибо именно то, что нужно.
gest на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Автоматизация вставки блоков в чертеж.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить точку вставки блока Apelsinov AutoCAD 43 04.02.2022 18:34
Проблема вставки Динамических блоков Владимир М Программирование 11 12.09.2007 15:42
Поворот блоков при вставке в чертеж Werwolf AutoCAD 11 20.06.2007 13:43
Как сделать правильный чертеж pk77 Разное 64 03.04.2007 16:36
Изменение точки вставки блока v_alex AutoCAD 5 10.04.2006 13:01