Снова вернулся к теме.
На данный момент никак не могу разобраться со способом уточнения границ печати и выбором нужного конфигуратора печати (PlotConfig).
Итак, первый вариант кода работает без конфигуратора, при этом я использую обращение к Layout пространства модели (работаем в ней):
Sub Fer()
Dim block As AcadBlockReference
Dim pt As Variant
Dim PlotConfig As AcadPlotConfiguration
Dim PtObj As AcadPlot
Dim BackPlot As Variant
Dim point1 As Variant, point2 As Variant
Dim config As AcadPlotConfiguration
point1 = ThisDrawing.Utility.GetPoint(, "Л-Н")
ReDim Preserve point1(0 To 1)
point2 = ThisDrawing.Utility.GetPoint(, "П-В")
ReDim Preserve point2(0 To 1)
'BackPlot = ThisDrawing.GetVariable("BACKGROUNDPLOT")
'ThisDrawing.SetVariable "BACKGROUNDPLOT", 0
Set PtObj = ThisDrawing.Plot
Set Plotlayout = ThisDrawing.ModelSpace.Layout
With Plotlayout
.ConfigName = "DWG To PDF.pc3"
.SetCustomScale 1, 1
ThisDrawing.Regen acActiveViewport
'.CanonicalMediaName = "ISO_A0_(841.00_x_1189.00_mm)"
.CenterPlot = True
.StyleSheet = "Acad.ctb"
.SetWindowToPlot point1, point2
.PlotType = acWindow
.PlotRotation = ac0degrees
End With
PtObj.PlotToFile Replace(ThisDrawing.FullName, "dwg", "pdf")
'PtConfigs.Item("PDF").Delete
'Set PlotConfig = Nothing
End Sub
На выходе получаю рамку в pdf как и хотел, но если в настройках pc3 поменяю (везде ставлю 0) область печати у формата, то получаю чистый лист в pdf - это ПРОБЛЕМА#1
ПРОБЛЕМА#2
Пытался создать собственный формат с именем "myname", однако по такому имени указать формат не получается
.CanonicalMediaName = "myname"
, попытался выявить как это имя воспринимается AutoCAD'ом. Для этого воспользовался методом:
.GetCanonicalMediaNames()
В итоге созданный мною формат "myname" читается как UserDefineMetric_A0_(841.00_x_1189.00_mm).
Как задать "особое" имя формата, т.е. такое, которое можно задать кодом?
Теперь покажу вариант с использованием PlotConfig
Sub Fer7()
Dim PtConfigs As AcadPlotConfigurations
Dim PlotConfig As AcadPlotConfiguration
Dim PtObj As AcadPlot
Dim BackPlot As Variant
Dim point1 As Variant, point2 As Variant
' Get first point in window
point1 = ThisDrawing.Utility.GetPoint(, "Click the lower-left of the window to plot.")
ReDim Preserve point1(0 To 1) ' Change this to a 2D array by removing the Z position
' Get second point in window
point2 = ThisDrawing.Utility.GetPoint(, "Click the upper-right of the window to plot.")
ReDim Preserve point2(0 To 1) ' Change this to a 2D array by removing the Z position
Set PtObj = ThisDrawing.Plot
Set PtConfigs = ThisDrawing.PlotConfigurations
PtConfigs.Add "PDF", False
Set PlotConfig = PtConfigs.Item("PDF")
PlotConfig.StandardScale = acScaleToFit
PlotConfig.RefreshPlotDeviceInfo
PlotConfig.ConfigName = "DWG To PDF.pc3"
PlotConfig.StyleSheet = "Acad.ctb"
PlotConfig.PlotWithPlotStyles = True
PlotConfig.SetWindowToPlot point1, point2
BackPlot = ThisDrawing.GetVariable("BACKGROUNDPLOT")
ThisDrawing.SetVariable "BACKGROUNDPLOT", 0
PlotConfig.RefreshPlotDeviceInfo
PtObj.PlotToFile Replace(ThisDrawing.FullName, "dwg", "pdf"), PlotConfig.ConfigName
PtConfigs.Item("PDF").Delete
Set PlotConfig = Nothing
ThisDrawing.SetVariable "BACKGROUNDPLOT", BackPlot
End Sub
Здесь я пытался сделать все классически, но на выходе чистый pdf указанного формата.
Прошу помощи по следующим вопросам:
Как создавать свои форматы так, чтобы их можно было указывать при печати программно?
.CanonicalMediaName = "myname"
Каким способом осуществлять печать программно? Как задавать границы печати так чтобы они попадали в размеры рамки формата?
Проще говоря какие методы Plotconfig или Layot задавать?
Интернет весь облазил и протестировал большинство примеров, где печатают всю видимую область. Буду признателен любым советам.
P.s. все рамки-блоки - правильного размера, AutocAD 2015 64, VBA enabler, руки вроде не кривые