Тема: Печать с помошью VBA

Как с помощью VBA вывести на печать с настройками  PAGE NAME SETUP из меню PLOT?
Для (PAGE NAME SETUP) не нашел не одного свойства, метода и т.п.

Re: Печать с помошью VBA

Смотреть
Application>Document>PlotConfiguraitons>PlotConfiguration,
Application>Document>Plot

Re: Печать с помошью VBA

Ничего нужгого для вкладки "PAGE NAME SETUP" не нашел. Версия моего акада ADT3.3 (autocad2002). Все функции по печати есть, а этой нет. Подскажите, может она по другому называется?

Re: Печать с помошью VBA

> 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'ов вручную, запомни их количество, затем запусти этот макрос. Он их все переберёт по одному.
Может, тут поможет Лисп и системные словари ?

Re: Печать с помошью VBA

Ага, я уже разобрался и написал программку для печати всех сохраненок на всех layout'ах. Тока выбранная конфигурация не подставляется и печатается оди и тоже чертеж. Как активировать выбранный Page Setup?
А без события  Modified не обойтись. Если так то как его использовать в макросе?

Re: Печать с помошью VBA

> Sliver
Надо же, я смотрел хелп по объекту PlotConfigurations, а надо было по PlotConfiguration - там намного больше методов и свойств. Как активировать ? Похоже, никак. Надо вызвать команду печати и подставить свойства от нужной конфигурации.

Re: Печать с помошью VBA

для того, что бы применились изменённые настройки конфигурации принтера необходимо обновлять текущий PlotConfiguration. Я с этим делом тоже долго возился, но так и не смог програмно создать свой, пользовательский Page Setup. Пришлось из программы вызывать стандартное окно настройки принтера, и после всех желаемых изменений просить пользователя сохранять текущий Page Setup с определённым именем, а потом, после перехода управления к программе, переименовывать только что созданный Page Setup на нужное имя. Если интересно поподробнее, пишите.....

Re: Печать с помошью VBA

> програмно
создать свой, пользовательский Page Setup.
А что-нибудь наподобие ThisDrawing.PlotConfigurations.Add ?
Потом можно еще CopyFrom.

Re: Печать с помошью VBA

может конечно и так, но у меня почему то этот метод не работал.....

Re: Печать с помошью VBA

Может пригодиться:

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

Re: Печать с помошью VBA

Все, программку закончил. Позволяет распечатать все  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
Еще макрос отрисовки фракталов с помощью сфер. Красивая трехмерная картинка особенно если с тенями (с настройками).

Re: Печать с помошью VBA

2 Sliver
может приготится, делал что то подобное, прожка для вывода на печать (и еще кое чего). код открыт. лежит она тута: http://dwg.ru/dwl/153

Re: Печать с помошью VBA

1. C помощью VBA находясь в одном layoute меняю свойства viewport'ов  другого, но при переключении на этот layout происходит сброс VBA изменений viewport'ов. Как этого избежать?
2. Как с помощью VBA сделать временную задержку (не цикл for, next)

Re: Печать с помошью VBA

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

Re: Печать с помошью VBA

> Sliver
1. попробуй отследить событие переключения на другой лейаут. Но это надо писать на Лиспе. Там есть реактор (vlr-miscellaneous-reactor ...), он отслеживает событие :vlr-layoutSwitched и передаёт заданной пользовательской ф-ии ИМЯ нового лейаута в качестве параметра. По-моему, это как раз то, что нужно. Про реакторы лучше всего написано у Н.Полещук "Visual Lisp и секреты адаптации AutoCAD", вообще это имхо бест по лиспу из того, что есть на русском языке, хотя автор сейчас готовит новое дополненное издание.
2. то есть такую задержку, во время которой можно выполнять что-то другое ? имхо, никак. Прочитай в хелпе про оператор DoEvents, но он часто не работает, к тому же он по определению передаёт процессорное время ДРУГИМ (не-акадским) процессам, но никак не самой твоей программе. Вот ещё почитай это https://www.caduser.ru/forum/topic16118.html