Добрый день. При определённых обстоятельствах мне требуется изменить размер листа. В Автокаде нет возможности сделать произвольный размер листа, только выбрать из возможных для текущего принтера размеров.
Поэтому я написал метод для изменения размера листа, но вот доступный мне вызов подбора подходящего листа через PlotSettingsValidator.SetClosestMediaName выдаёт не понятную мне ошибку eInvalidInput, хотя, вроде бы, данные переданы верно. Подскажите, что именно я передал не правильно?
public void SetLayoutSize(Size need_layout_size, ObjectId layout_id, string printer_device_name) {
var doc = Application.DocumentManager.MdiActiveDocument;
using (doc.LockDocument()) {
using (var tr = doc.TransactionManager.StartTransaction()) {
using (var layout = tr.GetObject(layout_id, OpenMode.ForWrite) as Layout) {
if (layout == null) throw new Exception("Не найден только что созданный лист");
var psv = PlotSettingsValidator.Current;
psv.SetPlotConfigurationName(layout, printer_device_name, null);
psv.RefreshLists(layout);
// psv.SetClosestMediaName(layout, need_layout_size.Width, need_layout_size.Height, PlotPaperUnit.Millimeters, true); // не понятно почему, но тут постоянно вываливается с ошибкой eInvalidInput, поэтому пришлось писать свою функцию взамен стандартной
var media_name = GetClosestMediaName(psv.GetCanonicalMediaNameList(layout), printer_device_name, need_layout_size);
if (media_name == "") {
throw new Exception("Лист с подходящим размером найти не удалось");
}
psv.SetCanonicalMediaName(layout, media_name);
psv.SetPlotPaperUnits(layout, PlotPaperUnit.Millimeters);
psv.SetPlotRotation(layout, PlotRotation.Degrees000);
psv.SetPlotOrigin(layout, Point2d.Origin);
psv.SetPlotWindowArea(layout, new Extents2d(0, 0, need_layout_size.Width, need_layout_size.Height));
psv.SetPlotType(layout, PlotType.Window);
// layout.PlotPaperMargins = new Extents2d(0, 0, 0, 0);
if (!layout.TabSelected) {
LayoutManager.Current.CurrentLayout = layout.LayoutName;
}
}
tr.Commit();
}
}
}
Примеры используемых мною размеров, которые передаются через need_layout_size: 420х297, 594x420
Принтер printer_device_name: "DWG To PDF.pc3"