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

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

Подскажите про извлечение данных из чертежей!

Ответ
Поиск в этой теме
Непрочитано 03.11.2011, 08:03 #1
Подскажите про извлечение данных из чертежей!
Asher
 
Самара
Регистрация: 08.10.2009
Сообщений: 12

Задача такая: требуется сделать извлечение данных из нескольких чертежей, простой подсчет количества однотипных блоков. Вот хотелось бы, чтобы данные представали в виде этакой двумерной таблицы, где по горизонтали, например, название блока, а по вертикали название чертежа, т.е. знать СКОЛЬКО блоков в КАЖДОМ чертеже. Возможно ли это?
Просмотров: 3007
 
Непрочитано 03.11.2011, 08:51
#2
ie.spb

Инженер
 
Регистрация: 21.08.2007
Сообщений: 598
<phrase 1=


Конечно возможно извлечение данных
__________________
Склероз нельзя вылечить, но о нем можно забыть.
(Ф. Раневская)
ie.spb вне форума  
 
Автор темы   Непрочитано 03.11.2011, 09:16
#3
Asher


 
Регистрация: 08.10.2009
Самара
Сообщений: 12


По ссылке не нашел то, что нужно.. DATAEXTRACTION выдает таблицу, где один столбец - имена блоков, другой столбец - имена файлов, в которых эти блоки находятся. А мне нужно, чтобы имена блоков были в строку, не в столбец, а их количество было бы на пересечении строки с именем блока и столбца с именем файла
Asher вне форума  
 
Непрочитано 03.11.2011, 11:51
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Asher, можно программно
Код:
[Выделить все]
 
(defun c:Rep-Bls()
  (vl-load-com)
  ((lambda(folder)
     (if folder
       ((lambda(report_file)
          (if report_file
            (get-blocks-report folder report_file)
            )
          )
         (getfiled "Сохранить файл отчета" "C:/" "csv" 1)
         )
       )
     )
    (Directory-Dia "Укажите папку: ")
    )
  (princ)
  ); end c:Rep-Bls

(defun get-blocks-report(path_folder path_rep_file / fl lst_files path_file odbx index lst_blocks com_lst_blocks lst_report blk_def ent ss)
  (vl-load-com)
  (setq index 1)
  (if path_folder
    (if (setq lst_files (mapcar '(lambda (x) (strcat path_folder x)) (vl-directory-files path_folder "*.dwg" 1)))
      (progn
        (setq fl (open path_rep_file "w")
              ss ";"
              )
      	(foreach path_file lst_files
          (setvar "MODEMACRO" (strcat "Всего файлов: " (itoa (length lst_files)) "     Обработано: " (itoa index) "     Текущий файл: " path_file))
          (if (setq odbx (_lispru-odbx))
            (progn
              (vla-open odbx path_file)
              (vlax-for blk_def (vla-get-blocks odbx)
                (if (equal (vla-get-islayout blk_def) :vlax-true)
                  (vlax-for ent blk_def
                    (if (= (vla-get-objectname ent) "AcDbBlockReference")
                      ((lambda(ef_name)
                         (if (not (member ef_name com_lst_blocks))
                           (setq com_lst_blocks (cons ef_name com_lst_blocks))
                           )
                         ((lambda(rec)
                            (if rec
                              (setq lst_blocks (subst (cons ef_name (1+ (cdr rec))) rec lst_blocks))
                              (setq lst_blocks (cons (cons ef_name 1) lst_blocks))
                              )
                            )
                           (assoc ef_name lst_blocks)
                           )
                         )
                        (vla-get-effectivename ent)
                        )
                      )
                    )
                  )
                )
              (vla-saveas odbx path_file)
              (vlax-release-object odbx)
              (setq odbx nil
                    lst_report (cons (list path_file lst_blocks) lst_report)
                    lst_blocks nil
                    )
              )
            )
          (setq index (1+ index))
          )
        (foreach item (acad_strlsort com_lst_blocks)
          (setq ss (strcat ss item ";"))
          )
        (write-line ss fl)
        (foreach item lst_report
          (setq ss (strcat (car item) ";"))
          (foreach bl_name com_lst_blocks
            ((lambda(rec)
               (if rec
                 (setq ss (strcat ss (itoa (cdr rec)) ";"))
                 (setq ss (strcat ss ";"))
                 )
               )
              (assoc bl_name (cadr item))
              )
            )
          (write-line ss fl)
          )
        (close fl)
      	)
      )
    )
  (setvar "MODEMACRO" "")
  (alert (strcat "Отчет сохранен в файле " path_rep_file))
  (princ)
  ); end replace_txt



;|	Для работы с неактивным документом используется метод ObjectDBX
	http://autolisp.ru/2010/04/08/proceed-unactive-document/
|;
; Функции _lispru-acad-version и _lispru-odbx взяты отсюда http://autolisp.ru/2010/04/08/proceed-unactive-document/
;	Directory-Dia - http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=23&TID=48293&MID=269115#message269115 пост #2


(defun _lispru-acad-version ()	; http://autolisp.ru/2010/04/08/proceed-unactive-document/
;|
*    Возвращает номер сборки AutoCAD'a. Для 2005 вернет 16.1, для 2006 - 16.2
* и т.д.
|;
(atof (getvar "acadver"))
) ;_ end of defun


(defun _lispru-odbx (/)	; http://autolisp.ru/2010/04/08/proceed-unactive-document/
                    ;|
*    функция возвращает интерфейс IAxDbDocument (для работы с файлами DWG без
* их открытия). Если интерфейс не поддерживается, возвращает nil. Проверено
* на ACAD 2002, 2004, 2005, 2006, 2007, 2008, 2010
*    Автор - Fatty aka Олег jr. 
*    Параметры вызова:
* нет
*    Примеры вызова:
(_lispru-odbx)
|;
  (cond
    ((< (_lispru-acad-version) 15.06)
     (alert
       "ObjectDBX method not applicable\nin this AutoCAD version"
       ) ;_ end of KPBLC-MSG-ALERT
     nil
     )
    ((= (fix (_lispru-acad-version)) 15)
     (if (not (vl-registry-read
                "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"
                ) ;_ end of vl-registry-read
              ) ;_ end of not
       (startapp "regsvr32.exe"
                 (strcat "/s \"" (findfile "axdb15.dll") "\"")
                 ) ;_ end of startapp
       ) ;_ end of if
     (vla-getinterfaceobject
       (vlax-get-acad-object)
       "ObjectDBX.AxDbDocument"
       ) ;_ end of vla-getinterfaceobject
     )
    (t
     (vla-getinterfaceobject
       (vlax-get-acad-object)
       (strcat "ObjectDBX.AxDbDocument." (itoa (fix (_lispru-acad-version))))
       ) ;_ end of vla-getinterfaceobject
     )
    ) ;_ end of cond
) ;_ end of defun


; Исходный код http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=23&TID=48293&MID=269115#message269115 пост #2
(defun Directory-Dia (Message / sh folder folderobject result)
    ;; By Tony Tanzillo
    ;; Modified by Tim Willey
    ;; 16 Will let you type in the path
    ;; 64 Will let you create a new folder
    ;; Use
    ;; (Directory-Dia "Create Sheet Index \nSelect directory to grab Drawings \nBy Tim Willey 09/13/07")

    (setq sh
      (vla-getInterfaceObject
        (vlax-get-acad-object)
        "Shell.Application"
      )
    )
    (setq folder
      (vlax-invoke-method
        sh
        'BrowseForFolder
        (vla-get-HWND (vlax-get-Acad-Object))
        Message
        0 ;;; This is the bit number to change.
               ;;; Вместо 0 можно попробовать (+ 16 64)
		;;; 16 - позволяет набирать путь 
		;;; 64 - позволяет создавать новую папку
	""	; - корневой каталог, не обязательный параметр !!! НЕЛЬЗЯ БУДЕТ ВЕРНУТЬСЯ НА УРОВЕНЬ ВЫШЕ !!!
      )
    )
    (vlax-release-object sh)
    (if   folder
      (progn
   (setq folderobject
          (vlax-get-property folder 'Self)
   )
   (setq result
          (vlax-get-property FolderObject 'Path)
   )
   (vlax-release-object folder)
   (vlax-release-object FolderObject)
   (if (/= (substr result (strlen result)) "\\")
     (setq result (strcat result "\\"))
     result
   )
      )
    )
) ;_ end of defun
P. S. Загрузить лисп. На чистом чертеже вызвать команду Rep-Bls. Выбрать папку с чертежами (будут выбраны все файлы из указанной папки, без учета вложенных папок) задать место и имя для файла отчета. Файл отчета будет сформирован в виде csv файла для просмотра которого можно воспользоваться Excel
Важно! Ни один из файлов в указываемой папке не должен быть открыт в момент работы программы, в том числе и текущий чертеж, в котором запускается программа, не должен находиться в указываемой папке
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 03.11.2011, 11:55
#5
Сергей Богатов


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


Цитата:
Сообщение от Asher Посмотреть сообщение
По ссылке не нашел то, что нужно.. DATAEXTRACTION выдает таблицу, где один столбец - имена блоков, другой столбец - имена файлов, в которых эти блоки находятся. А мне нужно, чтобы имена блоков были в строку, не в столбец, а их количество было бы на пересечении строки с именем блока и столбца с именем файла
Засунь полученную таблицу в Эксель. С помощью "сводной таблицы" сделай выборку по тем параметрам которые тебе нужны.
P.S.
Причём лучше сделать "сводку" в другом файле, используя экспортированый из Автокада файл в качестве внешнего источника данных. Т.о. при переделках ты автоматически будешь получать обновлённую сводку - не придётся каждый раз заниматься ручным копированием и форматированием. Один раз сделал и навсегда

P.P.S.
Вложение смотри. Там пример
Вложения
Тип файла: rar !!!!!!!Dataextraction.rar (97.2 Кб, 83 просмотров)
__________________
Я-проектировщик бывший проектировщик!

Последний раз редактировалось Сергей Богатов, 03.11.2011 в 12:29.
Сергей Богатов вне форума  
 
Непрочитано 18.04.2012, 10:46
#6
Константин Михайлович

инженер-конструктор
 
Регистрация: 29.09.2005
Красноярск
Сообщений: 26
<phrase 1=


а как сделать выборку по внешним ссылкам?
нужно узнать сколько каких ссылок вставлено, и собрать данные в таблицу вида:
ссылка 1 - 5 шт
ссылка 2 - 1 шт
....
Константин Михайлович вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Подскажите про извлечение данных из чертежей!



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Извлечение данных из 3DSOLID Cylinder. Victor-85 AutoCAD 21 19.12.2011 17:31
Извлечение данных из 3D тел Antonio555 AutoCAD 7 19.05.2010 09:15
Подскажите программу для быстрого создания компоновочных чертежей электрических щитов Sunchez Прочее. Программное обеспечение 1 11.07.2008 11:21
Подскажите про подсчет металла Zodchiy Разное 7 14.05.2007 14:16
Подскажите пожалуйста как создать БАЗУ ДАННЫХ!!!??? master_blaster AutoCAD 5 12.04.2006 10:46