Программно печатать выбранные блоки по координам блоков

Автор Тема: Программно печатать выбранные блоки по координам блоков  (Прочитано 9666 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Здравствуйте. хочу усложнить себе задачу которая была тут https://adn-cis.org/forum/index.php?topic=10105.0, теперь хочу еще и переводить в pdf выбранные блоки и название файла должно быть из атрибута.

1. Нашли Objectid всех блоков с определенным именем которые в модели.
Дальше нужно заполнять программно окно печати:
2. По этим Id находим координаты блока  в  What to Plot надо выбрать Window и указываем крайние координаты блока.
3. Есть атрибут блока котором прописан формат А4, А3 и тд и в dwgtopdf у менять есть размеры листов соответствующий этим форматам, и надо выбрать тот которой равен атрибуты Формат.
4. Проставляем Plot Scale 1:1 Plot offset 0,0.
5. Надо исправить Drawing Orientation на сооветствующий.
6. Печатаем сохраняем в папку исходного файла с названием атрибута "Номер чертежа"

https://adn-cis.org/forum/index.php?topic=2707.msg10897#msg10897
здесь рекомендуют в листы переводить, но у нас есть программа перевода в листы от bargool, но хочется сразу с модели
Это все возможно программно сделать или тяжеловато будет, думаю заполнение окна можно сделать (хотя еще не знаю как), только мне кажется с выбором нужного размера листа могут быть проблемы?


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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Вопрос в чем?
Вопрос в координатах блока и в назначение в окне печати нужного размера печати, это возможно выбирать на основании атрибута блока, например атрибут блока А1х4 искать в размерах листа этот размер?

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

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

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Не вижу ничего невозможного, кроме того, что форматы печати не могут быть произвольными.
Не могу найти как при печати указывать 2 точку окна, первую вроде указываем BlockReference.Position а для второй что указывать ни длины ни координат не могу найти?
ура кажется нашел в Extents3d есть Min/Max Point

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Не вижу ничего невозможного, кроме того, что форматы печати не могут быть произвольными.
Подскажите как и где указывать полученные координаты блока, не могу найти окно печати?

Как вот в таких ситуациях надо искать то чего не знаю, например окно печати в api как найти, по скорей хочется разобраться в api?

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Подскажите как и где указывать полученные координаты блока, не могу найти окно печати?
Ничего не понял. Переведи.
Как вот в таких ситуациях надо искать то чего не знаю, например окно печати в api как найти, по скорей хочется разобраться в api?
Окна печати в API нет. Есть конфигурация печати. Ищи готовые примеры и разбирай их построчно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Ничего не понял. Переведи.
не могу задать правильно границы печати вот отрывок кода, печатает пустоту
Код - C# [Выбрать]
  1.                 acPlSetVdr.SetPlotPaperUnits(acPlSet, PlotPaperUnit.Millimeters);
  2.                 // Set the plot type
  3.                 Point2d minPoint2d = new Point2d(3645.9284, 1697.3971);
  4.                 Point2d maxPoint2d = new Point2d(4065.9284, 1994.3971);
  5.                 Extents2d points = new Extents2d(minPoint2d, maxPoint2d);
  6.                 acPlSetVdr.SetPlotWindowArea(acPlSet, points);
  7.                 acPlSetVdr.SetPlotType(acPlSet, Autodesk.AutoCAD.DatabaseServices.PlotType.Window);
  8.  
  9.  

как назначить в SetPlotConfigurationName mediaName если у меня название просто "A3", "А1Х4" почему то говорит - "eInvalidInput", даже такие пробовал "A1x6_(3567.00x841.00_mm)" почему то не получается ?
Код - C# [Выбрать]
  1. // Set the plot scale
  2.                 acPlSetVdr.SetUseStandardScale(acPlSet, true);
  3.                 acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit);
  4.                 // Center the plot
  5.                 acPlSetVdr.SetPlotCentered(acPlSet, true);
  6.                 // Set the plot device to use
  7.                 acPlSetVdr.SetPlotConfigurationName(acPlSet, "DWG To PDF_all_formats1.pc3", "A1x6_(3567.00x841.00_mm)");
  8.  
p.s нашел проблему с координатами, оказывается надо конвертирова в UCS, опять же спасибо Александру Наумовичу Ривилису!
p.p.s нашел и на второй вопрос ответ оказывается надо задавать каноническое имя формата https://adn-cis.org/forum/index.php?topic=7028.msg19933#msg19933
ТОлько оказывается перебирает все которые есть в определенном pc3 файле, не учитывая фильтр, можно читать только те которые показывает в Paper size окна Plot.
Еще возникал вопрос, а не остановится ли печать при попытке печати следующего листа если печать текущая не закончилась, прочитав тему указанную выше убедился, надо ждать, если я правильно понял, только если PlotProgressPos = 100; начнется следующая печать
Код - C# [Выбрать]
  1. acPlProgDlg.PlotProgressPos = 100;
  2. acPlProgDlg.OnEndPlot();
  3.  
« Последнее редактирование: 10-11-2020, 15:23:20 от Yusuf »

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Вроде все понятно, только не могу сделать текущим "DWG To PDF.pc3"

Код - C# [Выбрать]
  1. PlotSettingsValidator acPlSetVdr = PlotSettingsValidator.Current;
  2. PlotConfig pConfig = PlotConfigManager.SetCurrentConfig("DWG To PDF.pc3");
  3. int cnt = 0;
  4. foreach (string mediaName in acPlSetVdr.GetCanonicalMediaNameList(acPlSet))
  5.                 {
  6.                     string localName = acPlSetVdr.GetLocaleMediaName(acPlSet, cnt);
  7.                     // Выводим имена форматов (Locale и Canonical) принтера текущей настройки принтера
  8.                     acDoc.Editor.WriteMessage("\n  " + mediaName + " | " + localName);
  9.                     cnt = cnt + 1;
  10.                 }
  11.  


после того как вручную выставляю потом только показывает размеры с DWG To PDF.pc3, как назначить его текущим ?

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Подскажите пожалуйста как то можно получить какой принтер установлен в данный момент чтобы пользователю выходила ошибка, чтобы установил DWG To PDF.pc3, что то не справился с назначением этого принтера программно?

Отмечено как Решение Yusuf 11-11-2020, 14:36:27

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

  • Administrator
  • *****
  • Сообщений: 13898
  • Карма: 1790
  • Рыцарь ObjectARX
  • Skype: rivilis
Вроде все понятно, только не могу сделать текущим "DWG To PDF.pc3"
Что-то похожее на это:
Код - C# [Выбрать]
  1. acPlSetVdr.SetPlotConfigurationName(pConfig, "DWG To PDF.pc3", "ISO_expand_A4_(210.00_x_297.00_mm)");
Только ты делаешь его не текущим, а устанавливаешь в конфигурации для печати.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ***
  • Сообщений: 117
  • Карма: 4
Вроде все понятно, только не могу сделать текущим "DWG To PDF.pc3"
Что-то похожее на это:
Код - C# [Выбрать]
  1. acPlSetVdr.SetPlotConfigurationName(pConfig, "DWG To PDF.pc3", "ISO_expand_A4_(210.00_x_297.00_mm)");
спасибо решил, накидал с разных тем и сам себя запутал, теперь отдельно сделал метод который ищет локальное имя в DWG To PDF.pc3 согласно атрибута блока и возвращает каноническое имя. Спасибо!