Расположение области печати относительно 0,0 пространства листа

Здравствуйте Уважаемые специалисты NanoCAD!

Подскажите пожалуйста, почему после задания в окне "Печать" принтера (встроенный PDF), области печати (Лист, x,y= 0,0) область печати смещена от 0,0 СК в Листе?

Тэги темы:

Ответы

  • Привязка к координатам работает, если выбрать "Рамку"

    Если выбрать "Лист" вместо "Рамка" то переброски (подвязки) области не происходит. Ну, это вроде, норм.

  • Спасибо, пытаюсь это программно как-то исправлять.

  • doctorRAZ
    отредактировано November 2024

    Покажи настройки печати

    А лучше файл чертежа

    Настройки печати сделаны руками или программно?

  • Вижу такое расположение, как на рисунке и хотелось бы программно установить настройки печати (для разных форматов).

  • дык устанавливай,

    что сделано?

    в SDK имха примеров достаточно

  • ну и тема не в том разделе тогда, если программно требуется

  • Olga94
    отредактировано November 2024

    У меня нет SDK

    Тему надо перенести (заново создать в другом разделе)?

    Пока так:

    namespace LayoutDocument
    {
    public partial class LayoutsDocument
    {
    [Teigha.Runtime.CommandMethod("LayoutDocA1")]
    public void LayoutDocumentA1()
    {
    // Получение ссылки на активный документ
    HostMgd.ApplicationServices.Document doc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
    nanoCAD.Document comDoc = doc.AcadDocument as nanoCAD.Document;

            // Получение ссылки на его базу данных
    Teigha.DatabaseServices.Database db = doc.Database;

    // Получение ссылки на редактор активного документа
    HostMgd.EditorInput.Editor ed = doc.Editor;

    // Получение ссылки на активный лист документа
    OdaX.AcadLayout activeLayout = comDoc.ActiveLayout;

    // Получение ссылки на свойство Plot активного документа
    nanoCAD.Plot plot = (nanoCAD.Plot)comDoc.Plot;

    // Получение ссылки на расширенные настройки печати активного листа
    nanoCAD.InanoCADPlotCustomParams customPlotSettings = plot.CustomPlotSettings[activeLayout];

    try
    {
    // Вывод в консоль настроек до изменения
    ed.WriteMessage("");
    ed.WriteMessage("before: {0}:{1},{2},{3}", activeLayout.Name, activeLayout.ConfigName, activeLayout.CanonicalMediaName, activeLayout.PlotType);

    // Назначение активному листу настроек печати
    activeLayout.ConfigName = "Встроенный PDF-принтер";
    activeLayout.CanonicalMediaName = "ISO A1";

    // Добавляем область печати "Рамка" в активный лист
    customPlotSettings.PlotAreas.Clear();
    // Добавление области печати "Рамка" в коллекцию PlotAreas
    customPlotSettings.PlotAreas.Add(new double[] { 0, 0 }, new double[] { 594, 841 });

    // Проверка, установлен ли активному листу тип области печати "Рамка"
    if (activeLayout.PlotType != OdaX.AcPlotType.acWindow)
    activeLayout.PlotType = OdaX.AcPlotType.acWindow;

    // Определяем, как выровнять область печати на листе
    customPlotSettings.PaperOutMargins = 1;
    customPlotSettings.Alignment = 36;

    // Передаем измененные настройки в активный лист
    plot.CustomPlotSettings[activeLayout] = customPlotSettings;






    //// Проверка, установлен ли активному листу тип области печати "Лист"
    //if (activeLayout.PlotType != OdaX.AcPlotType.acLayout)
    // activeLayout.PlotType = OdaX.AcPlotType.acLayout;

    // Вывод в консоль настроек после изменения
    ed.WriteMessage("after: {0}:{1},{2},{3}", activeLayout.Name, activeLayout.ConfigName, activeLayout.CanonicalMediaName, activeLayout.PlotType);
    ed.WriteMessage("------------------------------------------------------------");

    // Сообщение пользователю
    ed.WriteMessage("Настройки печати применены к активному Листу");
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.Message);
    // Сообщение пользователю
    ed.WriteMessage("Ошибка");
    }

    }

    }

    }

    Но не получается то , что если изначально в Листе в настройках печати для области печати было, например, x=100, y=150, то не применяется 0,0?

    Как сбросить:

  • doctorRAZ
    отредактировано November 2024

    смотри

    у наны можно область печати настроить в двух местах

    Autodesk.AutoCAD.DatabaseServices Namespace > PlotSettings Class > PlotSettings Properties > PlotOrigin Property

    Доступ через PlotSettings

    https://habr.com/ru/companies/nanosoft/articles/565514/

  • Спасибо, получилось:

    double[] newValue = { 0, 0 };
    activeLayout.PlotOrigin = newValue;

  • Olga94
    отредактировано November 2024

    Можно Вас еще попросить подсказать - какой параметр (вероятно в Plotsettings) отвечает за "Ориентацию бумаги в окне печать - книжная / альбомная"?

  • doctorRAZ
    отредактировано November 2024

    имя бумаги с суффиксом L и без

    Landscape

    Но если делать на net то Нана сам умеет подбирать бумагу под размер печатаемой области

  • Olga94
    отредактировано November 2024
  • doctorRAZ
    отредактировано November 2024

    к каноническому имени CanonicalName бумаги надо добавить L будет альбом без L , будет портрет

    или наоборот

    размер бумаги идет парный , например

    Letter

    Letter_L

    но в настройках печати LocaleName у них одно и то же

    тут можешь посмотреть как устроено

    HKEY_CURRENT_USER\SOFTWARE\Nanosoft\nanoCAD x64\23.1\Profiles\SPDS\Commands\Plot\Printer Paper Setups

  • Спасибо!

    Делала по-другому:

    activeLayout.PlotRotation = (AcPlotRotation)PlotRotation.Degrees000; (*верт)

    activeLayout.PlotRotation = (AcPlotRotation)PlotRotation.Degrees090; (*гориз)

  • doctorRAZ
    отредактировано November 2024

    в pdf это как будет выглядеть?

    Degrees090 в листе можно поставить только программно. Если пользователь захочет в настройках печати сделать поворот в ноль, то что?

    имха с такой "обработкой" Реверса вполне достаточно)))

    дело твое делать по нормальному или лепить вот это вот все

    ========

    PS разбирайся с методом SetClosestMediaName, .NET

    в автокад там затычка, а в нано вполне работает

  • Olga94
    отредактировано November 2024

    Спасибо, посмотрю!

    Верно, надо по-другому делать поворот

  • Ты еще одну печать делаешь?

    Из готовых ни одна не подошла?

  • Olga94
    отредактировано November 2024

    Сделала вроде.

    *Переделала при печати ориентацию (книж / альб).

    Спасибо большое за совет!