Поиск подходящего размера листа

Автор Тема: Поиск подходящего размера листа  (Прочитано 6161 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
Добрый день. При определённых обстоятельствах мне требуется изменить размер листа. В Автокаде нет возможности сделать произвольный размер листа, только выбрать из возможных для текущего принтера размеров.
Поэтому я написал метод для изменения размера листа, но вот доступный мне вызов подбора подходящего листа через PlotSettingsValidator.SetClosestMediaName выдаёт не понятную мне ошибку eInvalidInput, хотя, вроде бы, данные переданы верно. Подскажите, что именно я передал не правильно?

Код - C# [Выбрать]
  1.        public void SetLayoutSize(Size need_layout_size, ObjectId layout_id, string printer_device_name) {
  2.             var doc = Application.DocumentManager.MdiActiveDocument;
  3.             using (doc.LockDocument()) {
  4.                 using (var tr = doc.TransactionManager.StartTransaction()) {
  5.                     using (var layout = tr.GetObject(layout_id, OpenMode.ForWrite) as Layout) {
  6.                         if (layout == null) throw new Exception("Не найден только что созданный лист");
  7.                         var psv = PlotSettingsValidator.Current;
  8.                         psv.SetPlotConfigurationName(layout, printer_device_name, null);
  9.                         psv.RefreshLists(layout);
  10. //                        psv.SetClosestMediaName(layout, need_layout_size.Width, need_layout_size.Height, PlotPaperUnit.Millimeters, true); // не понятно почему, но тут постоянно вываливается с ошибкой eInvalidInput, поэтому пришлось писать свою функцию взамен стандартной
  11.                         var media_name = GetClosestMediaName(psv.GetCanonicalMediaNameList(layout), printer_device_name, need_layout_size);
  12.                         if (media_name == "") {
  13.                             throw new Exception("Лист с подходящим размером найти не удалось");
  14.                         }
  15.                         psv.SetCanonicalMediaName(layout, media_name);
  16.  
  17.                         psv.SetPlotPaperUnits(layout, PlotPaperUnit.Millimeters);
  18.                         psv.SetPlotRotation(layout, PlotRotation.Degrees000);
  19.                         psv.SetPlotOrigin(layout, Point2d.Origin);
  20.                         psv.SetPlotWindowArea(layout, new Extents2d(0, 0, need_layout_size.Width, need_layout_size.Height));
  21.                         psv.SetPlotType(layout, PlotType.Window);
  22. //                    layout.PlotPaperMargins = new Extents2d(0, 0, 0, 0);
  23.                         if (!layout.TabSelected) {
  24.                             LayoutManager.Current.CurrentLayout = layout.LayoutName;
  25.                         }
  26.                     }
  27.                     tr.Commit();
  28.                 }
  29.             }
  30.         }

Примеры используемых мною размеров, которые передаются через need_layout_size: 420х297, 594x420
Принтер printer_device_name: "DWG To PDF.pc3"
« Последнее редактирование: 26-09-2014, 11:45:00 от JohnJ »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Поиск подходящего размера листа
« Ответ #1 : 26-09-2014, 12:00:50 »
Привествую на форуме!
PlotSettingsValidator.SetClosestMediaName выдаёт не понятную мне ошибку eInvalidInput, хотя, вроде бы, данные переданы верно. Подскажите, что именно я передал не правильно?
Ибо как сказано в документации (см. в ObjectARX SDK):
Цитировать
This function is not implemented.
Т.е. функция не реализована. Почему возвращается eInvalidInput, а не NotImplementedYet - это я сказать не могу.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 05-10-2014, 03:13:23

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн JohnJАвтор темы

  • ADN Club
  • **
  • Сообщений: 78
  • Карма: 1
  • c# autocad
  • Skype: johnj255work
Re: Поиск подходящего размера листа
« Ответ #3 : 26-09-2014, 12:11:18 »
Интересная информация. Примерно таким же способом этот метод реализовал и я, только возможность поворота не предусмотрел. Основной его недостаток: медленно работает, пока переберёт все листы.
Спасибо!