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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сменить установленное имя принтера на "Нет" ?

Как сменить установленное имя принтера на "Нет" ?

Ответ
Поиск в этой теме
Непрочитано 23.06.2016, 10:03
Как сменить установленное имя принтера на "Нет" ?
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 451

Всем добрый день!

Имеется такая задача: нужно программно (!!!) сделать действие,
которое легко выполняется через диалоговые окна, а именно:

а. Вызываем _pagesetup и в конфигурации плоттеров выбираем "Нет".
б. Нажимаем ОК.

Это нужно для того, чтобы можно было выбрать форматы листов бумаги
не от "использованного до этого принтера", например А3, А4 и прочую
"мелочевку", а А0 - А1 - А2 после передачи файла в другой отдел.

Запутано? Проще можно? Возможно, но тут такие вот орг. заморочки...

В общем - ещё раз:

1. Запускаем _plot , видим выбранный ранее принтер LaserJet.
Огорчаемся, закрываем окно.
2. Вызываем _pagesetup и в конфигурации плоттеров выбираем "Нет".
Нажимаем ОК.
3. Запускаем _plot , видим выбранный принтер "Нет"
Радуемся, выбираем тот принтер/плоттер, который нужно, переходим
к печати.

Пункты 1 и 3 делает один человек, а пункт 2 - другой.

Нужно сделать пункт 2 без диалоговых окон.

а) Может быть, эту "Нет" можно загнать в какую-нибудь системную переменную?

б) Вызов _-pagesetup (т.е. с "минусом") в данном случае не работает.

Счастливо,
Алексей
__________________
Счастливо, Алексей!
Просмотров: 4507
 
Непрочитано 23.06.2016, 16:59
#21
Нечаев Андрей

Начальник конструкторского отдела ОАО ТСМУ «Волгостальмонтаж»
 
Регистрация: 12.12.2007
Тамбов
Сообщений: 74
<phrase 1= Отправить сообщение для Нечаев Андрей с помощью Skype™


А разговор идет о чистом AutoCAD? Или нет?

----- добавлено через ~17 мин. -----
Я что-то сразу не вспомнил (сейчас чертёж печатал и осенило), что в окне печати в разделе «Параметры печати» (правый столбец) есть «галка» «Сохранить параметры». Она у Вас случайно не поставлена?
Нечаев Андрей вне форума  
 
Непрочитано 23.06.2016, 18:34
#22
VVA

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


Цитата:
Сообщение от ===AAA=== Посмотреть сообщение
Нужно буквально 2-3 строчки программного кода (какие функции
использовать, где это значение "Нет" в файле хранится-то?) остальное
сделаю сам.
Сбрасывает принтер текущего листа. Применимо для русского и английского Автокада
Нюанс, что в русском Автокаде имя конфигурации "нет", в английском "none"
Код:
[Выделить все]
(vla-RefreshPlotDeviceInfo
	(setq lay
		(vla-item
			(vla-get-Layouts
				(vla-get-activedocument (vlax-get-acad-object))
			)
			(getvar "CTAB")
		)
	)
)
(vla-put-configname
  (vla-item
    (vla-get-Layouts
      (vla-get-activedocument (vlax-get-acad-object))
      )
      (getvar "CTAB")
      )
  (if (vl-string-search "(ru)" (ver))   "нет"  "none" )
)
Источник
Неплохой набор функций Plot Device functions for AutoLISP
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 24.06.2016 в 17:14. Причина: см #25
VVA вне форума  
 
Непрочитано 24.06.2016, 08:59
#23
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Из Help: "Do not assign the ConfigName property a value of "None." Attempting to do so results in unexpected behavior."
P_S вне форума  
 
Автор темы   Непрочитано 24.06.2016, 13:34
#24
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Всем привет!

VVA - большое спасибо, а то я уже действительно начал сомневаться,
что задаю вопрос в правильном месте. Однако, как уже отметил P_S,
метод этот дает нестабильный результат.

Проявляется (по крайней мере у меня) это следующим образом (для наглядности
чуть изменил предложенный код на вот такой вот):

(vl-load-com)
(setq a1 (vlax-get-acad-object))
(print a1)
(setq a2 (vla-get-activedocument a1))
(print a2)
(setq a3 (vla-get-Layouts a2))
(print a3)
(setq a4 (vla-item a3 (getvar "CTAB")))
(print a4)
(setq a5 (vla-put-configname a4 "Нет"))
(print a5)
(princ)

Что получается.

1. Открываем файл в Автокаде выполняем вышеприведенный код

Получаем:

#<VLA-OBJECT IAcadApplication 00a88728>
#<VLA-OBJECT IAcadDocument 00f27cec>
#<VLA-OBJECT IAcadLayouts 00f72964>
#<VLA-OBJECT IAcadLayout 00f713a4> Ошибка Automation. Invalid input

Вместо "Нет" можно ставить имя существующего принтера - не важно.
Не работает.

Но!

2. Стоит только вызвать _pagesetup и не делая в появившемся окне ничего (!)
закрыть его через кнопку "ОК", как всё начинает работать.

Тот же код дает прекрасный результат

#<VLA-OBJECT IAcadApplication 00a88728>
#<VLA-OBJECT IAcadDocument 00f27cec>
#<VLA-OBJECT IAcadLayouts 00f72964>
#<VLA-OBJECT IAcadLayout 00f713a4>
nil

Спокойно меняя принтеры как на любой из списка, так и на "Нет".

Видимо, действие _pagesetup -> "ОК" то ли меняет какой-то указатель
на/в таблице принтеров, то ли дает какой-то другой "внутренний пинок"
структурам файла в памяти. Ну типа того, как в ранних версиях Автокада
приходилось иногда для корректности работы ssget, вызываемой где-то
посреди программы, рисовать и тут же стирать (программно, конечно)
ма-а-а-ленький такой отрезок где-нибудь ближе к точке (0,0).

Вот интересно, какой (vla .... ) дает этит "пинок" ?!
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 24.06.2016, 15:15
#25
frostmourn


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


Может, так? Хотя у меня не получилось эту ошибку вызвать...
Код:
[Выделить все]
(vla-RefreshPlotDeviceInfo
	(setq lay
		(vla-item
			(vla-get-Layouts
				(vla-get-activedocument (vlax-get-acad-object))
			)
			(getvar "CTAB")
		)
	)
)
(vla-put-configname
	lay
	(if (vl-string-search "(ru)" (ver))   "нет"  "none" )
)
frostmourn вне форума  
 
Автор темы   Непрочитано 24.06.2016, 16:25
#26
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Да, предложенный frostmourn код работает более стабильно,
пока никаких нештатых действий не проявилось.

И - уж для полного счастья (!) - подскажите, плиз:

а) как получить список доступных для выбора вариантов бумаги
(уже после того, как принтер установлен в "Нет" - встроенных,
"автокадовских") - удобнее всего получить их в виде списка.

б) как назначить один из этих размеров бумаги.

Выбор из списка и подбор бумаги по форматке пользователя
(размер и ориентацию) сделаю сам функциями обычного LISP'a.
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 24.06.2016, 17:05
#27
frostmourn


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


Наверное, так -
а)
Код:
[Выделить все]
(vlax-safearray->list(vlax-variant-value(vla-getCanonicalMediaNames lay)))
б)
Код:
[Выделить все]
(vla-put-CanonicalMediaName lay <тут строка-имя формата>)
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) acAllViewports)
frostmourn вне форума  
 
Автор темы   Непрочитано 24.06.2016, 17:12
#28
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Спасибо, обязательно попробую.
Но уже только в понедельник.

Удачных выходных!

:-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 27.06.2016, 08:57
#29
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 451


Всем добрый день.

Попробовал.

Работает стабильно и делает ровно то, что требовалось.

Спасибо большое всем откликнувшимся и отдельное -
приславшим строчки кода.

А есть где-нибудь описание всех этих vla- vlax- функций
на русском языке?

А то я как в своё время отошел от активного программирования
(ещё во времена 2000-го Автокада), так только описание функций
"классического" АвтоЛиспа и имею...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 27.06.2016, 20:22
#30
VVA

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


цитата отсюда
Цитата:
Что касается программирования, то наилучшая книга - "AutoLisp и VisualLisp в среде AutoCAD" - П.Лоскутов и Н.Полещук. И Петр Витальевич, и Николай Николаевич чрезвычайно добросовестные люди. Если что-то написали, то так и есть. К сожалению, эта книга почему-то плохо замечена. Но скоро станет библиографической редкостью.

"AutoCAD: разработка приложений, настройка и адаптация" - не продолжение, а наоборот -"введение". Написана и хронологически и по смыслу раньше. Тоже очень нужна, но там иной пласт разрабатывается.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сменить установленное имя принтера на "Нет" ?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autocad 2012 x64 sp2 как решить проблему не выбирающегося принтера? Z_Felix AutoCAD 5 17.03.2015 15:44
Вызвать окно «Замена принтера в PC3-файле» AlphaGeo AutoCAD 16 21.01.2014 14:46
В Autocad 2006 не отображаются сетевые принтера vova_king AutoCAD 8 19.04.2013 21:32
Как создать нестандартный формат листа для принтера с помощью Lisp'а Shraybicus LISP 15 27.01.2011 13:02