ADN Open CIS
Сообщество программистов Autodesk в СНГ

21/01/2017

Печать границ окна при помощи VBA

Я получил вопрос от партнера ADN  почему его код, который печатает содержимого окна в действительности ничего не печатает, а для других чертежей печатает нормально.

Ключевая проблема в том что API для печати принимает координаты в системе координат дисплея DCS (ДСК). Так что координаты указанные пользователем следует преобразовать из ПСК (UCS) в ДСК (DCS).

Важно: Имейте в виду, что преобразование в  ДСК (DCS) требуется и в других API (C++ и .NET API).

 

Код - VBA: [Выделить]
  1. Public Sub Example_SetWindowToPlot()
  2.         ' Пример позволяет пользователю выбрать область на листе
  3.         ' и показать предпросмотр печати выбранной области.
  4.  
  5.         AppActivate ThisDrawing.Application.Caption
  6.  
  7.         Dim point1 As Object, point2 As Object
  8.  
  9.         ' Выбираем первую точку окна
  10.         point1 = ThisDrawing.Utility.GetPoint(, "Выберите нижний левый угол окна.")
  11.  
  12.         ' Выбираем вторую точку окна
  13.         point2 = ThisDrawing.Utility.GetPoint(, "Выбираем правый верхний угол окна для печати.")
  14.  
  15.  
  16.  
  17.         Dim point1DCS As Object, point2DCS As Object
  18.  
  19.         ' Преобразовываем координаты из WCS (МСК) в DCS (ДСК)
  20.  
  21.         point1DCS = ThisDrawing.Utility.TranslateCoordinates(point1, acWorld, acDisplayDCS, False)
  22.         point2DCS = ThisDrawing.Utility.TranslateCoordinates(point2, acWorld, acDisplayDCS, False)
  23.  
  24.         ReDim Preserve point1DCS(0 To 1)   ' Преобразуем в 2D массив для удаления координаты Z
  25.         ReDim Preserve point2DCS(0 To 1)   ' Преобразуем в 2D массив для удаления координаты Z
  26.         ' Устанавливаем информацию для окна
  27.         ThisDrawing.ActiveLayout.SetWindowToPlot(point1DCS, point2DCS)
  28.  
  29.         ' Считываем снова информацию о окне
  30.         ThisDrawing.ActiveLayout.GetWindowToPlot(point1DCS, point2DCS)
  31.  
  32.         MsgBox "Нажмите любую клавишу для печати выбранного окна:" & vbCrLf & vbCrLf & _
  33.                "Нижний левый угол: " & point1(0) & ", " & point1(1) & vbCrLf & _
  34.                "Правый верхний угол: " & point2(0) & ", " & point2(1)
  35.  
  36.         ' Устанавливаем стиль печати - окно
  37.         ThisDrawing.ActiveLayout.PlotType = acWindow
  38.  
  39.         ' Печатаем в окно для просмотра
  40.         ThisDrawing.ActiveLayout.ConfigName = "DWG to PDF.pc3"
  41.         ThisDrawing.Plot.DisplayPlotPreview acFullPreview
  42.  
  43.     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