Тема: Печать с помошью VBA
Как с помощью VBA вывести на печать с настройками PAGE NAME SETUP из меню PLOT?
Для (PAGE NAME SETUP) не нашел не одного свойства, метода и т.п.
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Печать с помошью VBA
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как с помощью VBA вывести на печать с настройками PAGE NAME SETUP из меню PLOT?
Для (PAGE NAME SETUP) не нашел не одного свойства, метода и т.п.
Смотреть
Application>Document>PlotConfiguraitons>PlotConfiguration,
Application>Document>Plot
Ничего нужгого для вкладки "PAGE NAME SETUP" не нашел. Версия моего акада ADT3.3 (autocad2002). Все функции по печати есть, а этой нет. Подскажите, может она по другому называется?
> Sliver
я так понял, требуется доступ к элементам выпадающего списка "Page Setup Name", расположенного справа вверху в диалоговом окне печати. Ctrl E совершенно правильно написал Application>Document>PlotConfiguraitons>PlotConfiguration. Только от этих объектов мало толку, разве что использовать их событие Modified. Посмотри всё-таки хелп по данному объекту! Если хочешь программно модифицировать текущий "Page Setup", тогда выполни SendCommand "_.-PLOT" ... там в самом конце, перед вопросом об отправке на печать, будет вопрос - обновить текущий сетап ? Ответишь "Y", а на печать не отправляй :) (то есть после этого сразу ответишь "N"). Вот ещё, посмотри код:
Sub a() Dim pc As AcadPlotConfiguration Dim i As Integer i = 0 For Each pc In ActiveDocument.PlotConfigurations MsgBox "Object " & pc.ObjectName & " #" & CStr(i) i = i + 1 Next pc End Sub
Сначала создай несколько Page Setup'ов вручную, запомни их количество, затем запусти этот макрос. Он их все переберёт по одному.
Может, тут поможет Лисп и системные словари ?
Ага, я уже разобрался и написал программку для печати всех сохраненок на всех layout'ах. Тока выбранная конфигурация не подставляется и печатается оди и тоже чертеж. Как активировать выбранный Page Setup?
А без события Modified не обойтись. Если так то как его использовать в макросе?
> Sliver
Надо же, я смотрел хелп по объекту PlotConfigurations, а надо было по PlotConfiguration - там намного больше методов и свойств. Как активировать ? Похоже, никак. Надо вызвать команду печати и подставить свойства от нужной конфигурации.
для того, что бы применились изменённые настройки конфигурации принтера необходимо обновлять текущий PlotConfiguration. Я с этим делом тоже долго возился, но так и не смог програмно создать свой, пользовательский Page Setup. Пришлось из программы вызывать стандартное окно настройки принтера, и после всех желаемых изменений просить пользователя сохранять текущий Page Setup с определённым именем, а потом, после перехода управления к программе, переименовывать только что созданный Page Setup на нужное имя. Если интересно поподробнее, пишите.....
> програмно
создать свой, пользовательский Page Setup.
А что-нибудь наподобие ThisDrawing.PlotConfigurations.Add ?
Потом можно еще CopyFrom.
может конечно и так, но у меня почему то этот метод не работал.....
Может пригодиться:
Sub AllPlotA4_L() Dim a As AcadDocument Dim dwgOrient As String Dim VarExtmin As Variant Dim VarExtmax As Variant Dim Start For Each a In ThisDrawing.Application.Documents a.Activate VarExtmin = ThisDrawing.GetVariable("extmin") VarExtmax = ThisDrawing.GetVariable("extmax") If VarExtmax(0) - VarExtmin(0) > VarExtmax(1) - VarExtmin(1) Then dwgOrient = "L" Else dwgOrient = "P" End If ThisDrawing.SendCommand "-plot Y Model" & vbCr & "HP deskjet 1180c Printer" & vbCr ThisDrawing.SendCommand "Формат А4 (210 x 297 мм) " & vbCr & "M" & vbCr & dwgOrient & vbCr & "Y e f" & vbCr ThisDrawing.SendCommand "c" & vbCr & "y" & vbCr & "monochrome.ctb" & vbCr & "y n n y y" & vbCr ThisDrawing.Application.ZoomExtents Start = Timer Do While Timer < Start + 3 DoEvents ' Yield to other processes. Loop Next End Sub
Все, программку закончил. Позволяет распечатать все Layout'ы из файла. Сделал как посоветовал Maxsim T командой -plot.
Т.к. так как информация о Layout'е не содержится в сохраненке Page Name Setup (имеется в виду к какому Layout'у относится данная сохраненка), поэтому для работы такой программы необходимо пользоваться следующими правилами:
1. Имя сохраненки должно на первом месте содержать полное имя Layout'а, далее следует символ "#".
2. Далее имя принтера (любая послед.симв.), снова "#".
3. Номер листа.
Теперь можно печатать фильтруя сохраненки по имени Layout'а, имени принтера, и номеру листа.
Т.к. для распечатки с Layout'а необязательно отрисовывать Layout, то увеличивается скорость печати главное чтобы была отрисована модель один раз. Я раньше для этого, переходя из модели, держал клавишу ESC а потом просто выбирал сохраненку и печатал.
Но для использования этой программы я не знаю как задать нажатие ESC при переключении Layout'ов, поэтому необходимо дополнительно вызвать макрос в режиме, например, загрузки одного слоя (чтобы долго не ждать). Он установит область видимости в Layout'е за пределами чертежей (например -100.000,-100.000,0 и -110.000,110.000,0) и при переключении Layout'ов отрисовываться они не будут. Так же используется команда REGENAUTO на время отключающая авто.прорис.
И еще вопрос: как получить список печ.устройств установленных в системе? Хочу еще сделать выбор на какй принтер вывести.
Программку выложу как приведу ее в порядок на сайт: http://lithium80.narod.ru/HTML/Download.html
Еще макрос отрисовки фракталов с помощью сфер. Красивая трехмерная картинка особенно если с тенями (с настройками).
2 Sliver
может приготится, делал что то подобное, прожка для вывода на печать (и еще кое чего). код открыт. лежит она тута: http://dwg.ru/dwl/153
1. C помощью VBA находясь в одном layoute меняю свойства viewport'ов другого, но при переключении на этот layout происходит сброс VBA изменений viewport'ов. Как этого избежать?
2. Как с помощью VBA сделать временную задержку (не цикл for, next)
1. C помощью VBA находясь в одном layoute меняю свойства viewport'ов другого, но при переключении на этот layout происходит сброс VBA изменений viewport'ов. Как этого избежать?
Неплохо было бы взглянуть на код... А то можно гадать и гадать...
Это конечно не цикл FOR но тоже цикл. :)
Timer Function Example This example uses the Timer function to pause the application. The example also uses DoEvents to yield to other processes during the pause. Dim PauseTime, Start, Finish, TotalTime If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then PauseTime = 5 ' Set duration. Start = Timer ' Set start time. Do While Timer < Start + PauseTime DoEvents ' Yield to other processes. Loop Finish = Timer ' Set end time. TotalTime = Finish - Start ' Calculate total time. MsgBox "Paused for " & TotalTime & " seconds" Else End End If
> Sliver
1. попробуй отследить событие переключения на другой лейаут. Но это надо писать на Лиспе. Там есть реактор (vlr-miscellaneous-reactor ...), он отслеживает событие :vlr-layoutSwitched и передаёт заданной пользовательской ф-ии ИМЯ нового лейаута в качестве параметра. По-моему, это как раз то, что нужно. Про реакторы лучше всего написано у Н.Полещук "Visual Lisp и секреты адаптации AutoCAD", вообще это имхо бест по лиспу из того, что есть на русском языке, хотя автор сейчас готовит новое дополненное издание.
2. то есть такую задержку, во время которой можно выполнять что-то другое ? имхо, никак. Прочитай в хелпе про оператор DoEvents, но он часто не работает, к тому же он по определению передаёт процессорное время ДРУГИМ (не-акадским) процессам, но никак не самой твоей программе. Вот ещё почитай это https://www.caduser.ru/forum/topic16118.html
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Печать с помошью VBA
Форум работает на PunBB, при поддержке Informer Technologies, Inc