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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Печать многослойного файла по слоям.

Печать многослойного файла по слоям.

Ответ
Поиск в этой теме
Непрочитано 28.06.2007, 10:44 #1
Печать многослойного файла по слоям.
TheBuTeK
 
преподавание
 
Москваград
Регистрация: 28.09.2005
Сообщений: 131

Уважаемые программисты, помогите кодом, пожалуйста!
Имеется файл, содержащий порядка 300 слоев, из которых половина включена, а половина выключена.
Требуется сделать распечатку этого файла, последовательно включая отключенные слои по одному, а затем отключая их после распечатки чертежа.
Сам чертеж выполнен в пространстве модели.
Возможно ли как-то автоматизировать процесс:
включил слой, распечатал модель в границах, отключил слой, включил следующий и т.д.
Заранее благодарю за помощь.
__________________
Добрым словом и пистолетом можно добиться гораздо большего, чем одним добрым словом.
Просмотров: 3334
 
Непрочитано 28.06.2007, 11:31
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


В порядке бреда:
Код:
[Выделить все]
(defun try-to-plot (/ *error* adoc lst)
  (defun *error* (msg)
    (vlax-for item lst
      (vla-put-layeron item :vlax-false)
      ) ;_ end of vlax-for
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vlax-for item (vla-get-layers
                   (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
                   ) ;_ end of vla-get-layers
    (if (= (vla-get-layeron item) :vlax-false)
      (setq lst (cons item lst))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (foreach item lst
    (vla-startundomark adoc)
    (vla-put-layeron item :vlax-true)
    (command "_.plot")
    (while (/= (logand (getvar "cmdactive") 31) 0)
      (command pause)
      ) ;_ end of while
    (vla-put-layeron item :vlax-false)
    (vla-endundomark adoc)
    ) ;_ end of foreach
  (princ)
  ) ;_ end of defun
не тестировал совсем. Так что файл лучше всего сначала сохранить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.06.2007, 11:54
#3
TheBuTeK

преподавание
 
Регистрация: 28.09.2005
Москваград
Сообщений: 131
<phrase 1=


Алексей, тысяча извинений.
Но что-то не пойму, как пользоваться.
То есть загрузил программу через Tools->Autolisp->Load Application.
AutoCAD ошибок не выдал, но при попытке вызвать функцию try-to-plot сообщает о том, что такая функция не найдена. Может, аргументы какие надо задать?
Ну не шарю я в Лиспе, но теперь, похоже, придется разбираться.
__________________
Добрым словом и пистолетом можно добиться гораздо большего, чем одним добрым словом.
TheBuTeK вне форума  
 
Непрочитано 28.06.2007, 11:57
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Черт, дурная привычка у меня есть - не создавать функции, вызываемые с ком.строки
Вызывай так:
Код:
[Выделить все]
Command: (try-to-plot)
Или попробуй такой код:
Код:
[Выделить все]
(defun c:try-to-plot (/ *error* adoc lst)
  (defun *error* (msg)
    (vlax-for item lst
      (vla-put-layeron item :vlax-false)
      ) ;_ end of vlax-for
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vlax-for item (vla-get-layers
                   (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
                   ) ;_ end of vla-get-layers
    (if (= (vla-get-layeron item) :vlax-false)
      (setq lst (cons item lst))
      ) ;_ end of if
    ) ;_ end of vlax-for
  (foreach item lst
    (vla-startundomark adoc)
    (vla-put-layeron item :vlax-true)
    (command "_.plot")
    (while (/= (logand (getvar "cmdactive") 31) 0)
      (command pause)
      ) ;_ end of while
    (vla-put-layeron item :vlax-false)
    (vla-endundomark adoc)
    ) ;_ end of foreach
  (princ)
  ) ;_ end of defun
(princ "\nДля запуска наберите в ком.строке TRY-TO-PLOT")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.06.2007, 12:08
#5
TheBuTeK

преподавание
 
Регистрация: 28.09.2005
Москваград
Сообщений: 131
<phrase 1=


А какой принтер использует функция?
Она находит первый принтер в списке? Но точно не тот, что стоит по умолчанию. А потом при попытке узнать "?" список принтеров зацикливается.
__________________
Добрым словом и пистолетом можно добиться гораздо большего, чем одним добрым словом.
TheBuTeK вне форума  
 
Автор темы   Непрочитано 28.06.2007, 12:14
#6
TheBuTeK

преподавание
 
Регистрация: 28.09.2005
Москваград
Сообщений: 131
<phrase 1=


Все в порядке!
Просто необходимо для модели в диспетчере параметров листов задать требуемый принтер по умолчанию.
И естественно, на запрос детальной настройки печати для каждого листа отвечать "нет".
Огромное спасибо!
__________________
Добрым словом и пистолетом можно добиться гораздо большего, чем одним добрым словом.
TheBuTeK вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Печать многослойного файла по слоям.