Как получить список листов чертежа и имена принтеров для каждого листа?

Автор Тема: Как получить список листов чертежа и имена принтеров для каждого листа?  (Прочитано 20554 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Добрый день, коллеги!

Увы, с Lisp-ом я на «Вы».

У меня вопрос: как получить список имен листов чертежа и имена принтеров, настроенных каждому листу, а затем вывести эту информацию в файл?
Или подскажите где поискать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ну, перечень листов, насколько я помню (сейчас отвечаю с телефона), можно получить через функцию (layouts). В крайнем случае - vla-get-layouts. Совсем в крайнем случае - получить коллекцию блоков документа, и отфильтровать те, которые не являются Layout.
А потом надо просто проверять свойства объектов, мне кажется. Если вечером еще буду живой, и при этом не забуду, попробую посмотреть подробнее.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Именно на лиспе???

К сожалению. Я пока не имею представления, как это сделать иначе. Может я что-то пропустил?!

Если вечером еще буду живой, и при этом не забуду, попробую посмотреть подробнее.

Буду очень Вам благодарен.



Заранее озвучу для чего нам это надо. Требуется данный скрипт прогонять через AcCoreConsole.exe и выуживать информацию о листах чертежей. Это требуется для дальнейшей обработки через PDM Lotsia. Не уверен, что кому-то стало легче от моего описания, но всё же.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Нашёл материал о том, что в AcCoreConsole.exe можно скармливать свой модуль через команду _NETLOAD, но бегло пробежавшись по AcCoreMdg.dll не увидел возможность считывать информацию о листах. Буду искать дальше.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Поскольку планируется запускать консольный вариант, мои ответы точно не подойдут: они ориентированы на использование ActiveX, а он в консоли не работает. ObjectDBX можно использовать?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
ObjectDBX можно использовать?

Не знаю. Если есть решение в данном направлении, то я готов и его рассмотреть.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ну, готового нет. Но его можно сделать ;)
Как вариант, особо не гонял:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. ;; (GET-ALL-PLOTCONFIGS "D:\\Ошибки и заявки")
  4.  
  5. (defun _kpblc-odbx (/)
  6.   (cond ((< (atof (getvar "acadver")) 15.06)
  7.          (alert "ObjectDBX method not applicable\nin this AutoCAD version")
  8.          nil
  9.          )
  10.         ((= (fix (atof (getvar "acadver"))) 15)
  11.          (if (not (vl-registry-read "HKEY_CLASSES_ROOT\\ObjectDBX.AxDbDocument\\CLSID"))
  12.            (startapp "regsvr32.exe" (strcat "/s \"" (findfile "axdb15.dll") "\""))
  13.            ) ;_ end of if
  14.          (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument")
  15.          )
  16.         (t
  17.          (vla-getinterfaceobject
  18.            (vlax-get-acad-object)
  19.            (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "acadver"))))
  20.            ) ;_ end of vla-getinterfaceobject
  21.          )
  22.         ) ;_ end of cond
  23.   ) ;_ end of defun
  24. (defun _kpblc-odbx-open (file odbx / res obj tmp_file)
  25.                         ;|
  26. *    Открытие любого файла, даже в режиме "ReadOnly"
  27. *    Параметры вызова:
  28.   file  полное имя открываемого файла. Только строка, контроля не
  29.     выполняется
  30.   odbx  ObjectDBX-интерфейс, созданный (_kpblc-odbx).
  31. *    Возвращает список вида:
  32.   '(("obj" . <vla-указатель на гарантированно открытый документ>)
  33.     ("close" . t | nil)  ; допускается ли закрытие файла
  34.     ("save" . t | nil)  ; допускается ли сохранение файла
  35.     ("write" . t | nil)  ; допускается ли запись в файл
  36.     ("name" . <строка имени файла>))
  37. *    Пример вызова:
  38. (_kpblc-odbx-open "c:\\file.dwg" (setq conn (_kpblc-odbx)))
  39. |;
  40.   (cond ((not file)
  41.          (setq res (list (cons "obj" (vla-get-activedocument (vlax-get-acad-object)))
  42.                          (cons "write" t)
  43.                          (cons "name" (vla-get-fullname (vla-get-activedocument (vlax-get-acad-object))))
  44.                          ) ;_ end of list
  45.                ) ;_ end of setq
  46.          )
  47.         ((member (strcase file)
  48.                  (mapcar (function (lambda (x) (strcase (vla-get-fullname x))))
  49.                          (_kpblc-conv-vla-to-list (vla-get-documents (vlax-get-acad-object)))
  50.                          ) ;_ end of mapcar
  51.                  ) ;_ end of member
  52.          (setq res (list (cons "obj"
  53.                                (car (vl-remove-if-not
  54.                                       '(lambda (x) (= (strcase (vla-get-fullname x)) (strcase file)))
  55.                                       (_kpblc-conv-vla-to-list (vla-get-documents (vlax-get-acad-object)))
  56.                                       ) ;_ end of vl-remove-if-not
  57.                                     ) ;_ end of car
  58.                                ) ;_ end of cons
  59.                          (cons "write" t)
  60.                          (cons "save" t)
  61.                          (cons "name" file)
  62.                          ) ;_ end of list
  63.                ) ;_ end of setq
  64.          )
  65.         ((and (findfile file) (_kpblc-is-file-read-only file))
  66.          (vl-file-copy
  67.            file
  68.            (setq tmp_file (strcat (vl-filename-mktemp (strcat (vl-filename-base file) (vl-filename-extension file)))))
  69.            ) ;_ end of vl-file-copy
  70.          (vla-open odbx tmp_file)
  71.          (setq res (list (cons "obj" odbx) (cons "close" t) (cons "save" nil) (cons "write" nil) (cons "name" file)))
  72.          )
  73.         ((and (findfile file) (not (_kpblc-is-file-read-only file)))
  74.          (vla-open odbx file)
  75.          (setq res (list (cons "obj" odbx) (cons "close" t) (cons "save" t) (cons "write" t) (cons "name" file)))
  76.          )
  77.         ) ;_ end of cond
  78.   res
  79.   ) ;_ end of defun
  80. (defun _kpblc-odbx-close (conn)
  81.                          ;|
  82. *    Закрытие файла, открытого ранее через _kpblc-odbx-*. С попыткой сохранения
  83. *    Параметры вызова:
  84.   conn  соединение с ObjectDBX, созданное ранее через (_kpblc-odbx) либо список:
  85.     '(("conn" . <ObjectDBXConnection>)  ; то же самое
  86.       ("save" . t)      ; сохранять или нет изменения
  87.       ("file" . "c:\\temp\\tmp.dwg")  ; имя, под которым сохранять. nil -> использовать текущее
  88.       )
  89. |;
  90.   (if (and (= (type conn) 'list) (cdr (assoc "save" conn)))
  91.     (progn (vlax-invoke
  92.              (cond ((cdr (assoc "conn" conn)))
  93.                    (t (cdr (assoc "obj" conn)))
  94.                    ) ;_ end of cond
  95.              'saveas
  96.              (cond ((cdr (assoc "file" conn))
  97.                     (strcat (_kpblc-dir-path-and-splash
  98.                               (vl-filename-directory
  99.                                 (cond ((cdr (assoc "file" conn)))
  100.                                       ((cdr (assoc "name" conn)))
  101.                                       ) ;_ end of cond
  102.                                 ) ;_ end of vl-filename-directory
  103.                               ) ;_ end of _kpblc-dir-path-and-splash
  104.                             (vl-filename-base
  105.                               (cond ((cdr (assoc "file" conn)))
  106.                                     ((cdr (assoc "name" conn)))
  107.                                     ) ;_ end of cond
  108.                               ) ;_ end of vl-filename-base
  109.                             ".dwg"
  110.                             ) ;_ end of strcat
  111.                     )
  112.                    (t
  113.                     (vla-get-name
  114.                       (cond ((cdr (assoc "conn" conn)))
  115.                             (t (cdr (assoc "obj" conn)))
  116.                             ) ;_ end of cond
  117.                       ) ;_ end of vla-get-name
  118.                     )
  119.                    ) ;_ end of cond
  120.              ) ;_ end of vlax-invoke
  121.            ) ;_ end of progn
  122.     ) ;_ end of if
  123.   (vl-catch-all-apply
  124.     '(lambda ()
  125.        (vlax-release-object
  126.          (if (= (type conn) 'list)
  127.            (cond ((cdr (assoc "conn" conn)))
  128.                  (t (cdr (assoc "obj" conn)))
  129.                  ) ;_ end of cond
  130.            conn
  131.            ) ;_ end of if
  132.          ) ;_ end of vlax-release-object
  133.        ) ;_ end of lambda
  134.     ) ;_ end of vl-catch-all-apply
  135.   (setq conn nil)
  136.   ) ;_ end of defun
  137. (defun _kpblc-conv-vla-to-list (value / res) ;|
  138. *    Преобразовывает vlax-variant или vlax-safearray в список.
  139. |;
  140.   (cond ((listp value) (mapcar (function _kpblc-conv-vla-to-list) value))
  141.         ((= (type value) 'variant) (_kpblc-conv-vla-to-list (vlax-variant-value value)))
  142.         ((= (type value) 'safearray)
  143.          (if (>= (vlax-safearray-get-u-bound value 1) 0)
  144.            (_kpblc-conv-vla-to-list (vlax-safearray->list value))
  145.            ) ;_ end of if
  146.          )
  147.         ((and (= (type value) 'vla-object) (vlax-property-available-p value 'count))
  148.          (vlax-for sub value (setq res (cons sub res)))
  149.          )
  150.         (t value)
  151.         ) ;_ end of cond
  152.   ) ;_ end of defun
  153. (defun _kpblc-is-file-read-only (file-name / file_hangle res)
  154.                                 ;|
  155. *    Проверяет, является ли файл "read-only". Возвращает t, если да. Проверки
  156. * наличия файла не выполняется.
  157. *    Параметры вызова:
  158. *  file-name  полное имя файла, с путем.
  159. (_kpblc-is-file-read-only "Z:\\КТО transit\\Разное\\Устройство молниезащиты.dwg")
  160. |;
  161.   (and file-name
  162.        (findfile file-name)
  163.        (or (not (vl-file-systime file-name))
  164.            ((lambda (/ svr obj res)
  165.               (setq svr (vlax-get-or-create-object "Scripting.FileSystemObject")
  166.                     obj (vlax-invoke-method svr 'getfile file-name)
  167.                     res (vlax-get-property obj 'attributes)
  168.                     ) ;_ end of setq
  169.               (vlax-release-object obj)
  170.               (vlax-release-object svr)
  171.               (setq obj nil
  172.                     svr nil
  173.                     ) ;_ end of setq
  174.               (/= (* 2 (/ res 2)) res)
  175.               ) ;_ end of lambda
  176.             )
  177.            ) ;_ end of or
  178.        ) ;_ end of and
  179.   ) ;_ end of defun
  180. (defun _kpblc-dir-path-and-splash (path)
  181.                                   ;|
  182. *    Возвращает путь со слешем в конце
  183. *    Параметры вызова:
  184. *  path  - обрабатываемый путь
  185. *    Примеры вызова:
  186. (_kpblc-dir-path-and-splash "c:\\kpblc-cad")  ; "c:\\kpblc-cad\\"
  187. |;
  188.   (strcat (vl-string-right-trim "\\" path) "\\")
  189.   ) ;_ end of defun
  190. (defun _kpblc-browsefiles-in-directory-nested (path mask)
  191.                                               ;|
  192. *    Функция возвращает список файлов указанной маски, находящихся в
  193. * заданном каталоге
  194. *    Параметры вызова:
  195.   path  путь к корневому каталогу. nil недопустим
  196.   mask  маска имени файла. nil или список недопустим
  197. *    Примеры вызова:
  198. (fun_browsefiles-in-directory-nested "c:\\documents" "*.dwg")
  199. |;
  200.   (apply (function append)
  201.          (cons (if (vl-directory-files path mask 1)
  202.                  (mapcar (function (lambda (x) (strcat (vl-string-right-trim "\\" path) "\\" x)))
  203.                          (vl-directory-files path mask 1)
  204.                          ) ;_ end of mapcar
  205.                  ) ;_ end of if
  206.                (mapcar (function
  207.                          (lambda (x)
  208.                            (_kpblc-browsefiles-in-directory-nested (strcat (vl-string-right-trim "\\" path) "\\" x) mask)
  209.                            ) ;_ end of lambda
  210.                          ) ;_ end of function
  211.                        (vl-remove ".." (vl-remove "." (vl-directory-files path nil -1)))
  212.                        ) ;_ end of mapcar
  213.                ) ;_ end of cons
  214.          ) ;_ end of apply
  215.   ) ;_ end of defun
  216.  
  217. ;;;
  218. (defun get-all-plotconfigs (path / file_lst odbx res)
  219.   (if (setq file_lst (_kpblc-browsefiles-in-directory-nested path "*.dwg"))
  220.     (progn (setq odbx (_kpblc-odbx)
  221.                  res  (mapcar (function (lambda (file / conn _lst)
  222.                                           (setq conn (_kpblc-odbx-open file odbx)
  223.                                                 _lst (mapcar (function (lambda (lay)
  224.                                                                          (vl-remove nil
  225.                                                                                     (mapcar (function (lambda (pr / tmp)
  226.                                                                                                         (if (vlax-property-available-p lay pr)
  227.                                                                                                           (cons (strcase pr t) (vlax-get-property lay pr))
  228.                                                                                                           ) ;_ end of if
  229.                                                                                                         ) ;_ end of lambda
  230.                                                                                                       ) ;_ end of function
  231.                                                                                             '("configname" "CanonicalMediaName" "Name")
  232.                                                                                             ) ;_ end of mapcar
  233.                                                                                     ) ;_ end of vl-remove
  234.                                                                          ) ;_ end of lambda
  235.                                                                        ) ;_ end of function
  236.                                                              (vl-sort (_kpblc-conv-vla-to-list (vla-get-layouts (cdr (assoc "obj" conn))))
  237.                                                                       (function (lambda (a b) (< (vla-get-taborder a) (vla-get-taborder b))))
  238.                                                                       ) ;_ end of vl-sort
  239.                                                              ) ;_ end of mapcar
  240.                                                 ) ;_ end of setq
  241.                                           ;; (_kpblc-odbx-close (cdr (assoc "obj" conn)))
  242.                                           (cons file _lst)
  243.                                           ) ;_ end of lambda
  244.                                         ) ;_ end of function
  245.                               file_lst
  246.                               ) ;_ end of mapcar
  247.                  ) ;_ end of setq
  248.            (_kpblc-odbx-close odbx)
  249.            res
  250.            ) ;_ end of progn
  251.     ) ;_ end of if
  252.   ) ;_ end of defun
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Нашёл материал о том, что в AcCoreConsole.exe можно скармливать свой модуль через команду _NETLOAD, но бегло пробежавшись по AcCoreMdg.dll не увидел возможность считывать информацию о листах. Буду искать дальше.
Вообще-то эта информация в AcDbMgd.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вообще-то эта информация в AcDbMgd.dll

Я не спорю. Однако я взял за основу статью http://through-the-interface.typepad.com/through_the_interface/2012/02/the-autocad-2013-core-console.html, в которой не упоминалась эта библиотека.
Изначально, когда я попробовал создать свой модуль, с подключением Autodesk.AutoCAD.ApplicationServices.Application, то получил фатальную ошибку при попытке скормить её в AcCoreConsole.exe, поэтому даже не стал пытаться дальше это делать, я просто стал смотреть примеры в интернете, но не увидел ничего другого, кроме:

Код - vb.net [Выбрать]
  1. Dim AcApp As DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager

Вот и подумал, что в данном случае другого варианта у меня нет. После этого обратился за помощью на форум.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
У меня на чистом Autolisp получилось так:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun C:LIST_LAYOUTS ( / lays e LyaoutName PrinterName FormatName)
  2.   (setq lays (cdr (assoc -1  (dictsearch (namedobjdict) "ACAD_LAYOUT"))))
  3.   (setq e (reverse (dictnext lays T)))
  4.   (while e
  5.      (setq LayoutName (cdr (assoc 1 e)))
  6.      (princ (strcat "\nLayout = " LayoutName))
  7.      (setq PrinterName (cdr (assoc 2 e)))
  8.      (if (/= PrinterName nil)
  9.        (princ (strcat "\nPrinter = " PrinterName))
  10.      )
  11.      (setq FormatName (cdr (assoc 4 e)))
  12.      (if (/= FormatName nil)
  13.        (princ (strcat "\nFormat = " FormatName))
  14.      )
  15.      (setq e (reverse (dictnext lays nil)))    
  16.   )
  17.   (princ)
  18. )

Command: LIST_LAYOUTS

Layout = Layout1
Printer = HP LaserJet P2015 Series PCL 6
Format = A4
Layout = Layout2
Printer = Autodesk DWF Writer for 2D
Format = User119
Layout = Model
Printer = none_device
Format = ISO_A4_(210.00_x_297.00_MM)
« Последнее редактирование: 21-03-2017, 15:04:43 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
У меня на чистом Autolisp получилось так:

В самом AutoCAD срабатывает идеально! А вот консоль пишет что не знает команду LIST_LAYOUTS. Может её нужно запускать как-то иначе?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну как минимум нужно загрузить lisp-файл, причем из доверенного каталога (или SECURELOAD установить в 0).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Под руками у меня сейчас только 2013 версия. Исходник я сохранил в файл C:/l1.lsp. Проверяю на чертеже C:/l1.dwg
Вот результат:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вот результат:

Завидую Вам. А у меня почему-то не хочет так работать.
Может с кодировкой файлов имеются проблемы?

Я запускаю с помощью *.bat файла с кодировкой OEM 866

run.bat

Код - INI [Выбрать]
  1. "C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe" /i "D:\Пашин Евгений\Рабочий стол\PDF to Rastr\1_2014.dwg" /s "D:\TestSCR\7.scr"
  2. pause

7.scr

(setvar "SECURELOAD" 0)
(load "D:/TestSCR/L1.lsp")
list_layouts

L1.lsp

Код - Auto/Visual Lisp [Выбрать]
  1.     (defun C:LIST_LAYOUTS ( / lays e LyaoutName PrinterName FormatName)
  2.       (setq lays (cdr (assoc -1  (dictsearch (namedobjdict) "ACAD_LAYOUT"))))
  3.       (setq e (reverse (dictnext lays T)))
  4.       (while e
  5.          (setq LayoutName (cdr (assoc 1 e)))
  6.          (princ (strcat "\nLayout = " LayoutName))
  7.          (setq PrinterName (cdr (assoc 2 e)))
  8.          (if (/= PrinterName nil)
  9.            (princ (strcat "\nPrinter = " PrinterName))
  10.          )
  11.          (setq FormatName (cdr (assoc 4 e)))
  12.          (if (/= FormatName nil)
  13.            (princ (strcat "\nFormat = " FormatName))
  14.          )
  15.          (setq e (reverse (dictnext lays nil)))    
  16.       )
  17.       (princ)
  18.     )
  19.     (princ "\nLIST_LAYOUTS loaded!")
  20.     (princ)
  21.  

/* Я исправил код так, как он должен выглядеть. Александр Ривилис */
« Последнее редактирование: 21-03-2017, 15:57:29 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis

Что у тебя происходит? Запиши видео или хотя-бы отдельные скришоты.
Может с кодировкой файлов имеются проблемы?
Что ты подразумеваешь под кодировкой файлов?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Добрался до AutoCAD Core Console 2017 Russian. Тоже всё работает нормально:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Что ты подразумеваешь под кодировкой файлов?




Аааааааааааа!!!!!!!!!!!
не
Код - Auto/Visual Lisp [Выбрать]
  1. (load D:/TestSCR/L1.lsp)
а
Код - Auto/Visual Lisp [Выбрать]
  1. (load "D:/TestSCR/L1.lsp")
Где двойные кавычки ограничивающие строку?????



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Где двойные кавычки ограничивающие строку??

Аааа, я тааак надеялся. Всё равно не работает?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Всё равно не работает?
Это вопрос или утверждение?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я уже подумываю о другом решении:
1. Выгружать DXF-файлы из DWG (_dxfout).
2. Затем пропарсить их на предмет наличия AcDbPlotSettings (c помощью регулярных выражений).
3. Затем сформировать DSD файл (в кодировке 1251).
4. Завершить это пакетной печатью (_publish).

Как оказалось у AcCoreConsole существенная чувствительность к кодировке запускаемых файлов.

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Это вопрос или утверждение?

Прошу прощения - это было утверждение. Конец дня тяжёлый :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я уже подумываю о другом решении:
1. Выгружать DXF-файлы из DWG (dxfout).
2. Затем пропарсить их на предмет наличия AcDbPlotSettings (c помощью регулярных выражений).
3. Затем сформировать DSD файл (в кодировке 1251).
4. Завершить это пакетной печатью (_publish).
Задача в чем заключается? Ты какие-то обрывки мыслей/заданий кидаешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Вот тебе в 2014-ом:

Мне кажется, что я Вас уже замучал :) Пока не выходит.



Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Задача в чем заключается? Ты какие-то обрывки мыслей/заданий кидаешь.

Цель:
1. С помощью СЭД Лоция проводить пакетную печать DWG в PDF. Мой предыдущий модуль по автоматическому переводу файлов чертежей в PDF c помощью СЭД Лоция забраковали, поскольку он работает медленно. Пользователям проще оказалось делать это вручную.
2. Научиться быстро переводить DWG в PDF файлов чертежей с подложками в виде растровых изображений и PDF-подложек. И всё это сделать через СЭД Лоция.

Мне подсказали, что это можно сделать с помощью AcCoreConsole.exe - вот поэтому я это всё и делаю.

Для начала я должен был узнать, а как выуживать информацию из чертежей?!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Мне кажется, что я Вас уже замучал :) Пока не выходит.
Да. Проверь, что у тебя файл называется именно L1.lsp и находится в каталоге D:/TestSCR/ Если файла там нет или в нём ошибка никаких сообщений при загрузке его не будет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Да.

Я приношу свои извинения. Давайте я уж как-то сам ещё попробую. Если что-то будет, то сможем обсудить.

Проверь, что у тебя файл называется именно L1.lsp и находится в каталоге D:/TestSCR/





От себя добавлю: AcCoreConsole.exe великолепная штука оказалась!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я в твоём сообщении внёс ряд правок: http://adn-cis.org/forum/index.php?topic=7689.msg25241#msg25241Проверь.

Всё верно! Спасибо!

Завтра отпишусь о результате!

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Я не очень понимаю, а почему не использовать подшивку / публикацию сразу? Без танцев с бубнами?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Я не очень понимаю, а почему не использовать подшивку / публикацию сразу? Без танцев с бубнами?

Потому что для начала её нужно сформировать (то есть не только сформировать, но и учесть только те листы, которые настроены на PDF-принтер, остальные проигнорировать), причём нужно убедиться, что печать пройдёт без «ой» и «ай-я-яй» (определить параметры настройки печати для каждого листа, а то вдруг какой-то лист имеет настройку на PDF-принтер, а рамка для печати смещена или ещё чего).

Эта задача подразумевает предварительную обработку данных по каждому чертежу.



Я нашёл решение, но увы, оно не в рамках LISP-программирования, но с помощью AcCoreConsole.exe. Подготавливаю ответ. Только вот хочу узнать у Александра Наумовича: выкладывать его здесь? Или создать другую тему?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если мне не изменяет мой склероз, то выводить на pdf / dwf подшивку можно независимо от того, на какой физический принтер был настроен лист. Правый пинок -> печать в pdf (если, опять же, не ошибаюсь).
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Если мне не изменяет мой склероз, то выводить на pdf / dwf подшивку можно независимо от того, на какой физический принтер был настроен лист. Правый пинок -> печать в pdf (если, опять же, не ошибаюсь).

Вы правы, но только лишь в том случае, если формат листа, настроенного на физический принтер, также имеется и в PDF-принтере. Однако тогда печать такого листа (настроенный на физический принтер) будет иметь не совсем корректный (по ГОСТу) внешний вид. Именно по этой причине важно сперва определять данные о листе и его настройке принтера.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ну, ко мне можно и на "ты" ;)
А так - насколько я помню, последние версии ГОСТ по ЕСКД допускали определенные вольности в оформлении листов. Особенно в части полей.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
А так - насколько я помню, последние версии ГОСТ по ЕСКД допускали определенные вольности в оформлении листов. Особенно в части полей.

Может быть, только в нашей организации пока таких вольностей не допускают.

Ну, ко мне можно и на "ты"

Хорошо, понял.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я нашёл решение, но увы, оно не в рамках LISP-программирования, но с помощью AcCoreConsole.exe. Подготавливаю ответ. Только вот хочу узнать у Александра Наумовича: выкладывать его здесь? Или создать другую тему?
Можешь выложить здесь. Если понадобится - я перенесу.

P.S.: Так мой код у тебя заработал или нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Пашин Евгений 22-03-2017, 16:43:26

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
P.S.: Так мой код у тебя заработал или нет?

Увы, но не заработал.

Можешь выложить здесь. Если понадобится - я перенесу.

Итак, предупреждаю, решение не является оптимальным:

1. С помощью AcCoreConsole.exe (AutoCAD 2014) и скрипта start.scr я получаю dxf-файл.

start.scr выглядит так:

Код - INI [Выбрать]
  1. _filedia
  2. 0
  3. _dxfout
  4. "C:\Users\PASHIN~1\AppData\Local\Temp\DWG2PDF22032017172702888554\start.dxf"
  5. 16
  6. _filedia
  7. 1
  8.  

2. Парсим dxf-файл с помощью регулярных выражений и определяем листы с их настройками принтера. В моём случае я ограничился поиском тех листов, у которых имя принтера «DWG_To_PDF_Gallurgy.pc3». Для этого я создал свой класс, в который складывал имена принтеров, имена листов и форматы принтера. Затем я отсеял ненужные мне листы:

Как я парсил DXF-файл:
Код - vb.net [Выбрать]
  1.     Public Sub Read_DXF_And_Generate_DSD(ByVal OriginalDWG As String, ByVal DXFPath As String, ByVal DSDPath As String)
  2.         Dim DXF As String
  3.         DXF = IO.File.ReadAllText(DXFPath)
  4.  
  5.         Dim DSD As New acDsdData
  6.  
  7.         Dim regexp As New Regex("AcDbPlotSettings(.*?)• 71")
  8.         Dim regexpName As New Regex("•  2(.*?)•  4")
  9.         Dim regexpFormat As New Regex("•  4(.*?)•  6")
  10.         Dim regexpLayout As New Regex("•AcDbLayout(.*?)• 70")
  11.  
  12.         Dim PrinterName As String
  13.         Dim PrinterFormat As String
  14.         Dim LayoutName As String
  15.  
  16.         Dim i As Integer
  17.         Dim m As MatchCollection
  18.  
  19.         DXF = DXF.Replace(Chr(10), "•")
  20.  
  21.         m = regexp.Matches(DXF)
  22.         For i = 0 To m.Count - 1
  23.  
  24.             Dim mm As MatchCollection
  25.             mm = regexpName.Matches(m.Item(i).Value)
  26.             Try
  27.                 PrinterName = (mm.Item(0).Value)
  28.                 PrinterName = PrinterName.Replace("•  2", "")
  29.                 PrinterName = PrinterName.Replace("•  4", "")
  30.                 PrinterName = PrinterName.Replace(Chr(13), "")
  31.                 PrinterName = PrinterName.Replace("•", "")
  32.  
  33.                 Dim mmm As MatchCollection
  34.                 mmm = regexpFormat.Matches(m.Item(i).Value)
  35.                 PrinterFormat = (mmm.Item(0).Value)
  36.                 PrinterFormat = PrinterFormat.Replace("•  4", "")
  37.                 PrinterFormat = PrinterFormat.Replace("•  6", "")
  38.                 PrinterFormat = PrinterFormat.Replace(Chr(13), "")
  39.                 PrinterFormat = PrinterFormat.Replace("•", "")
  40.  
  41.                 Dim mmmm As MatchCollection
  42.                 mmmm = regexpLayout.Matches(m.Item(i).Value)
  43.                 LayoutName = (mmmm.Item(0).Value)
  44.                 LayoutName = LayoutName.Replace("•AcDbLayout", "")
  45.                 LayoutName = LayoutName.Replace("•  1", "")
  46.                 LayoutName = LayoutName.Replace("• 70", "")
  47.                 LayoutName = LayoutName.Replace(Chr(13), "")
  48.                 LayoutName = LayoutName.Replace("•", "")
  49.  
  50.                 Dim DSDL As New acLayoutInfo
  51.                 DSDL.PrinterFormat = PrinterFormat
  52.                 DSDL.PrinterName = PrinterName
  53.                 DSDL.LayoutName = LayoutName
  54.  
  55.                 DSD.Layouts.Add(DSDL)
  56.             Catch ex As Exception
  57.                 MsgBox(ex.Message)
  58.             End Try
  59.         Next
  60.  
  61. StartHerePlease:
  62.  
  63.         For Each DSDL As acLayoutInfo In DSD.Layouts
  64.  
  65.             If DSDL.LayoutName.Trim = "Model" Then
  66.                 DSD.Layouts.Remove(DSDL)
  67.                 GoTo StartHerePlease
  68.             End If
  69.  
  70.             If DSDL.LayoutName.Trim = "Модель" Then
  71.                 DSD.Layouts.Remove(DSDL)
  72.                 GoTo StartHerePlease
  73.             End If
  74.  
  75.             If DSDL.LayoutName.Trim = "Элементы оформления" Then
  76.                 DSD.Layouts.Remove(DSDL)
  77.                 GoTo StartHerePlease
  78.             End If
  79.  
  80.             If DSDL.PrinterName <> "DWG_To_PDF_Gallurgy.pc3" Then
  81.                 DSD.Layouts.Remove(DSDL)
  82.                 GoTo StartHerePlease
  83.             End If
  84.  
  85.         Next
  86.  
  87.         Make_DSD_File(OriginalDWG, DSDPath, DSD)
  88.  
  89.     End Sub
  90.  

Как я генерировал DSD-файл:

Код - vb.net [Выбрать]
  1.     Public Function Make_DSD_File(ByVal OriginalDWG As String, ByVal PathName As String, ByRef DSD As acDsdData) As Boolean
  2.  
  3.         Make_DSD_File = False
  4.  
  5.         Dim DsdFile As New List(Of String)
  6.  
  7.         If DSD.Layouts.Count > 0 Then
  8.  
  9.             ' Создаем DSD-файл
  10.             With DsdFile
  11.                 .Add("[DWF6Version]")
  12.                 .Add("Ver=1")
  13.                 .Add("[DWF6MinorVersion]")
  14.                 .Add("MinorVer=1")
  15.  
  16.                 For Each DSDL As acLayoutInfo In DSD.Layouts
  17.                     If DSDL.LayoutName.Trim = "Model" Then
  18.                     ElseIf DSDL.LayoutName.Trim = "Модель" Then
  19.                     ElseIf DSDL.LayoutName.Trim = "Элементы оформления" Then
  20.                     Else
  21.                         If DSDL.PrinterName = "DWG_To_PDF_Gallurgy.pc3" Then
  22.                             .Add("[DWF6Sheet:" & IO.Path.GetFileNameWithoutExtension(OriginalDWG) & "-" & DSDL.LayoutName & "]")
  23.                             .Add("DWG=" & OriginalDWG)
  24.                             .Add("Layout=" & DSDL.LayoutName)
  25.                             .Add("Setup=")
  26.                             .Add("OriginalSheetPath=" & OriginalDWG)
  27.                             .Add("Has Plot Port=0")
  28.                             .Add("Has3DDWF=0")
  29.                         End If
  30.                     End If
  31.                 Next
  32.  
  33.                 .Add("[Target]")
  34.                 .Add("Type=6")
  35.                 .Add("DWF=" & PathName.Replace("start.dsd", IO.Path.GetFileNameWithoutExtension(OriginalDWG) & ".pdf"))
  36.                 .Add("OUT=" & IO.Path.GetDirectoryName(PathName.Replace("start.dsd", IO.Path.GetFileNameWithoutExtension(OriginalDWG) & ".pdf")) & "\")
  37.                 .Add("PWD=")
  38.  
  39.                 .Add("[MRU block template]")
  40.                 .Add("MRU=0")
  41.                 .Add("[MRU Local]")
  42.                 .Add("MRU=3")
  43.                 .Add("File0=" & IO.Path.GetDirectoryName(PathName.Replace("start.dsd", IO.Path.GetFileNameWithoutExtension(OriginalDWG) & ".pdf")) & "\")
  44.                 .Add("File1=" & IO.Path.GetDirectoryName(PathName.Replace("start.dsd", IO.Path.GetFileNameWithoutExtension(OriginalDWG) & ".pdf")) & "\")
  45.                 .Add("File2=" & IO.Path.GetDirectoryName(PathName.Replace("start.dsd", IO.Path.GetFileNameWithoutExtension(OriginalDWG) & ".pdf")) & "\")
  46.                 .Add("[MRU Sheet List]")
  47.                 .Add("MRU=0")
  48.  
  49.                 .Add("[AutoCAD Block Data]")
  50.                 .Add("IncludeBlockInfo=0")
  51.                 .Add("BlockTmplFilePath=")
  52.  
  53.                 .Add("[SheetSet Properties]")
  54.                 .Add("IsSheetSet=FALSE")
  55.                 .Add("IsHomogeneous=FALSE")
  56.                 .Add("SheetSet Name=")
  57.                 .Add("NoOfCopies=1")
  58.                 .Add("PlotStampOn=FALSE")
  59.                 .Add("ViewFile=FALSE")
  60.                 .Add("JobID=0")
  61.                 .Add("SelectionSetName=")
  62.                 .Add("AcadProfile=<<Профиль без имени>>")
  63.                 .Add("CategoryName=")
  64.                 .Add("LogFilePath=")
  65.                 .Add("IncludeLayer=FALSE")
  66.                 .Add("LineMerge=FALSE")
  67.                 .Add("CurrentPrecision=")
  68.                 .Add("PromptForDwfName=TRUE")
  69.                 .Add("PwdProtectPublishedDWF=FALSE")
  70.                 .Add("PromptForPwd=FALSE")
  71.                 .Add("RepublishingMarkups=FALSE")
  72.                 .Add("PublishSheetSetMetadata=FALSE")
  73.                 .Add("PublishSheetMetadata=TRUE")
  74.                 .Add("3DDWFOptions=0 1")
  75.             End With
  76.             IO.File.WriteAllLines(PathName.Replace(".dsd", "_1251.dsd"), DsdFile, System.Text.Encoding.GetEncoding(1251))
  77.  
  78.             Make_DSD_File = True
  79.  
  80.         Else
  81.  
  82.             MsgBox("Файл " & PathName & " не может быть переведен в PDF поскольку отсутствуют листы, настроенные на принтер DWG_To_PDF_Gallurgy.pc3")
  83.             Exit Function
  84.  
  85.         End If
  86.  
  87.         Return Make_DSD_File
  88.  
  89.     End Function

3. Запускаем AcCoreConsole.exe и Publish.scr:

Publish.scr

Код - INI [Выбрать]
  1. _filedia
  2. 0
  3. _-publish
  4. C:\Users\PASHIN~1\AppData\Local\Temp\DWG2PDF22032017172702888554\start_1251.dsd
  5. _filedia
  6. 1
  7.  

Как я запускаю AcCoreConsole.exe:

Код - vb.net [Выбрать]
  1.         Dim ExecutablePath As String = "C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe"
  2.         Dim arg As String = " /i """ & Path & """ /s """ & TempFolder &
  3.                 "\" & TempSCRFile & """ /l en-US"
  4.         DXF_OUT_START(ExecutablePath, arg)

Код - vb.net [Выбрать]
  1.     Public Sub DXF_OUT_START(ByVal ExecutableAppPath As String, ByVal Args As String)
  2.  
  3.         Try
  4.             Dim connect As System.Diagnostics.Process
  5.             connect = New System.Diagnostics.Process()
  6.             With connect
  7.                 .StartInfo.FileName = ExecutableAppPath
  8.                 .StartInfo.Arguments = Args
  9.                 .StartInfo.WindowStyle = ProcessWindowStyle.Hidden
  10.                 .StartInfo.UseShellExecute = False
  11.                 .StartInfo.RedirectStandardOutput = True
  12.                 .StartInfo.CreateNoWindow = True
  13.                 .Start()
  14.  
  15.                 Dim result2 As String = connect.StandardOutput.ReadToEnd ' Вот без преувеличения - это ВАЖНАЯ строка! Она не даёт подвисать AcCoreConsole.exe!!! Почему? Не знаю пока.
  16.  
  17.             End With
  18.         Catch ex As Exception
  19.  
  20.         End Try
  21.  
  22.     End Sub

Дополнительно:

1. Если тестировать будете с помощью BAT-файла, то кодировка должна быть OEM-866 (или просто 866). Содержание файла:

Код - INI [Выбрать]
  1. "C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe" /i "D:\Пашин Евгений\Рабочий стол\Лоция checker\для Пашина\22.132-04501-АП\22.132-04501-АП-17-Кабельный журнал.dwg" /s "C:\Users\PASHIN~1\AppData\Local\Temp\DWG2PDF22032017172702888554\Publish.scr" /l en-US
  2. Pause

2. SCR - файлы должны быть в кодировке UTF-8 (без BOM)
3. DSD - файлы должны быть в кодировке 1251
4. К сожалению, нет обратной связи с AcCoreConsole.exe (это я хотел бы как-то исправить, если кто знает как - подскажите!)
5. Пока неизвестно как всё это работает с файлами, созданными в разных вертикальных решениях AutoCAD-a.
6. Факт: вместо 10 минут (по старому варианту) вся обработка и публикация для 19 файлов заняла чуть менее 2 минут!!! Попробовал публикацию файлов с подложками, который старый вариант вообще никак не мог опубликовать, это решение выполнило публикацию за 6 секунд. Это просто неслыханно круто!

Вот видео готового решения:



Проверил для AcCoreConsole.exe AutoCAD 2017 - тоже отлично работает!

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
От себя добавлю: стоит подумать о создании на форуме раздела под AcCoreConsole.exe. Эта штука незаслуженно «пылится на полке».

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну если работает, то и слава Богу. Правда dxf-файлы бывают очень большими - сотни мегабайт, а то и гигабайты. А ты его сразу считываешь весь в память. Тут может быть проблема.
Смысла в отдельном разделе для AcCoreConsole я не вижу. Если использовать скрипты (.scr), как ты, то это сюда: http://adn-cis.org/forum/index.php?board=12.0 если lisp, то в этот раздел, а если .NET - то в раздел .NET
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин ЕвгенийАвтор темы

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Правда dxf-файлы бывают очень большими - сотни мегабайт, а то и гигабайты.

Один файл у меня занимал 134 Мб - файл Civil-a. Довольно шустро он с ним отработал. Всего 9 секунд на всё: создание dxf-файла, парсинг и публикацию в PDF. Я пока не обратил внимания на проблемы со скоростью создания dxf-файлов. Я использую File.ReadAllText - метод, чтобы затем пропарсить dxf-файл. Пока затрудняюсь сказать, будут ли проблемы с большими файлами - я, увы, не эксперт по данному направлению.

Если использовать скрипты (.scr), как ты, то это сюда: http://adn-cis.org/forum/index.php?board=12.0

То есть использование скриптов (.scr) в рамках AcCoreConsole.exe тоже можно перенести в этот раздел?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
То есть использование скриптов (.scr) в рамках AcCoreConsole.exe тоже можно перенести в этот раздел?
Пусть эта тема остаётся здесь, так как в неё есть предложения и средствами lisp.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение