Нет такого понятия как "принтер текущего чертежа" =)) Есть конфигурации плоттеров, которые относятся не к чертежу, а к автокаду в целом.
Александр правильно сказал по поводу того, что нет плоттеров чертежа.
Полностью согласен с этим. Название темы взял незамысловатое, простое, но если считаете, что его стоит поменять, то я не против.
Собствено говоря у тебя в коде это и есть список плоттеров, которые AutoCAD может использовать: Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
Ну а тебе нужно будет еще проверить:
PlotSettings.PlotPaperSize
PlotSettings.PlotPaperMargins
Я, как всегда, искал где угодно, но только не здесь
Однако меня смущает одна деталь:
Public Sub Get_All_Formats_Of_All_Printers()
' Подключаемся к приложению
Dim AcApp As Autodesk.AutoCAD.ApplicationServices.DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager
' Подключаемся к активному документу
Dim AcDoc As Autodesk.AutoCAD.ApplicationServices.Document = AcApp.MdiActiveDocument
' Подключаемся к базе данных чертежа
Dim AcDB As Database = AcDoc.Database
' Получаем из устройств службы печати список настроек печати
Dim Devices As Autodesk.AutoCAD.PlottingServices.PlotConfigInfoCollection = Autodesk.AutoCAD.PlottingServices.PlotConfigManager.Devices
' Перебираем каждый элемент списка настроек печати
For Each PlotterInfo As PlotConfigInfo In Devices
Dim NewPrinter As New PashinEugene.galPrinter
With NewPrinter
.PrinterName = PlotterInfo.DeviceName
.PrinterType = PlotterInfo.DeviceType.ToString
End With
' Записываю в базу данных текущий принтер
GDB.Printers.Add(NewPrinter)
' Новый PlotSettings
Using plSet As PlotSettings = New PlotSettings(True)
Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
' Устанавливаем плоттер и формат, НО я решил попробовать ничего в формат не добавлять!!! Только имя принтера!!!
acPlSetVdr.SetPlotConfigurationName(plSet, PlotterInfo.DeviceName, Nothing)
Dim cnt As Integer = 0
For Each mediaName As String In acPlSetVdr.GetCanonicalMediaNameList(plSet)
' Вывод имён по каноническому имени mediaName
Dim NewPrinterFormat As New PashinEugene.galPrinterFormat
With NewPrinterFormat
.PrinterID = NewPrinter.PrinterID
.PrinterFormatCanonicalName = mediaName
.PrinterFormatLocaleName = acPlSetVdr.GetLocaleMediaName(plSet, cnt)
.PaperSizeWidht = plSet.PlotPaperSize.X
.PaperSizeHeight = plSet.PlotPaperSize.Y
.MarginLeft = plSet.PlotPaperMargins.MinPoint.X
.MarginRight = plSet.PlotPaperMargins.MaxPoint.X
.MarginTop = plSet.PlotPaperMargins.MaxPoint.Y
.MarginBottom = plSet.PlotPaperMargins.MinPoint.Y
End With
cnt = cnt + 1
' Записываю в базу данных формат текущего принтера
GDB.PrinterFormats.Add(NewPrinterFormat)
Next
End Using
Next
End Sub
Получаю следующую картину:
...
<galPrinterFormat>
<PrinterID>99e38cac-a1c3-4262-9d81-c7b097fe790b</PrinterID>
<PrinterFormatID>d3837fe1-74d7-406c-bd00-d1a992bade6b</PrinterFormatID>
<PrinterFormatCanonicalName>UserDefinedMetric (420.00 x 1189.00мм)</PrinterFormatCanonicalName>
<PrinterFormatLocaleName>A3x4_ver (420 x 1189 mm)</PrinterFormatLocaleName>
<PaperSizeWidht>210</PaperSizeWidht> ?????
<PaperSizeHeight>297</PaperSizeHeight> ?????
<MarginLeft>0.793749988079071</MarginLeft> ?????
<MarginRight>0.7937469482421875</MarginRight> ?????
<MarginTop>0.79376220703125</MarginTop> ?????
<MarginBottom>0.793749988079071</MarginBottom> ?????
</galPrinterFormat>
...
Откуда появились поля, если у меня они равны 0? И размеры не те! Вот блин, а я то уже порадовался. Везде один и тот же размер указан 210х297 мм.
Я явно что-то не то определяю!