21/01/2017
Печать границ окна при помощи VBA
Я получил вопрос от партнера ADN почему его код, который печатает содержимого окна в действительности ничего не печатает, а для других чертежей печатает нормально.
Ключевая проблема в том что API для печати принимает координаты в системе координат дисплея DCS (ДСК). Так что координаты указанные пользователем следует преобразовать из ПСК (UCS) в ДСК (DCS).
Важно: Имейте в виду, что преобразование в ДСК (DCS) требуется и в других API (C++ и .NET API).
Код - VBA: [Выделить]
- Public Sub Example_SetWindowToPlot()
- ' Пример позволяет пользователю выбрать область на листе
- ' и показать предпросмотр печати выбранной области.
- AppActivate ThisDrawing.Application.Caption
- Dim point1 As Object, point2 As Object
- ' Выбираем первую точку окна
- point1 = ThisDrawing.Utility.GetPoint(, "Выберите нижний левый угол окна.")
- ' Выбираем вторую точку окна
- point2 = ThisDrawing.Utility.GetPoint(, "Выбираем правый верхний угол окна для печати.")
- Dim point1DCS As Object, point2DCS As Object
- ' Преобразовываем координаты из WCS (МСК) в DCS (ДСК)
- point1DCS = ThisDrawing.Utility.TranslateCoordinates(point1, acWorld, acDisplayDCS, False)
- point2DCS = ThisDrawing.Utility.TranslateCoordinates(point2, acWorld, acDisplayDCS, False)
- ReDim Preserve point1DCS(0 To 1) ' Преобразуем в 2D массив для удаления координаты Z
- ReDim Preserve point2DCS(0 To 1) ' Преобразуем в 2D массив для удаления координаты Z
- ' Устанавливаем информацию для окна
- ThisDrawing.ActiveLayout.SetWindowToPlot(point1DCS, point2DCS)
- ' Считываем снова информацию о окне
- ThisDrawing.ActiveLayout.GetWindowToPlot(point1DCS, point2DCS)
- MsgBox "Нажмите любую клавишу для печати выбранного окна:" & vbCrLf & vbCrLf & _
- "Нижний левый угол: " & point1(0) & ", " & point1(1) & vbCrLf & _
- "Правый верхний угол: " & point2(0) & ", " & point2(1)
- ' Устанавливаем стиль печати - окно
- ThisDrawing.ActiveLayout.PlotType = acWindow
- ' Печатаем в окно для просмотра
- ThisDrawing.ActiveLayout.ConfigName = "DWG to PDF.pc3"
- ThisDrawing.Plot.DisplayPlotPreview acFullPreview
- End Sub
Источник: http://adndevblog.typepad.com/autocad/2016/05/plot-to-window-extents-using-vba.html
Автор перевода: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=7569
Опубликовано 21.01.2017