Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель:
ООО «АСКОН-Системы проектирования»

ИНН 7801619483 ОГРН 1137847501043

Рекламодатель:
АО «Цифровая мануфактура»

ИНН 5010058760 ОГРН 1086658008975

Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557

Рекламодатель:
ООО «С3Д Лабс»

ИНН 7715938849 ОГРН 1127747049209

11 - 2021

Работа с набором параметров листа через API nanoCAD


Светлана Мирончик,
Клуб разработчиков nanoCAD, ООО «Нанософт разработка»

При подготовке чертежа к печати необходимо настраивать большое количество параметров: принтер, формат бумаги, масштаб, область печати и т.д.
В nanoCAD все необходимые для этого параметры объединены в наборы парамет­ров листов. Однажды созданный набор можно применять в разных документах и разных листах, что позволит значительно сократить время подготовки документа к печати. В этой статье мы рассмотрим, как работать с наборами параметров листов через API nanoCAD.

Через пользовательский интерфейс nanoCAD наборами параметров листов можно управлять в окне Диспетчер параметров листов (рис. 1).

Рис. 1. Окно Диспетчер параметров листов

Рис. 1. Окно Диспетчер параметров листов

В API за наборы параметров листов отвечает свойство PlotConfigurations документа nanoCAD.

nanoCAD.Document comDoc = doc.AcadDocument as nanoCAD.Document;

comDoc.PlotConfigurations.Add(“Набор1“, true);

Чтобы научиться работать с наборами параметров листов через API nanoCAD, создадим приложение .NET (C#), которое:

  • программно добавляет в документ новые наборы параметров листов;
  • изменяет в них значения некоторых параметров;
  • копирует набор параметров листов из другого документа nanoCAD;
  • делает добавленные наборы параметров текущими для листов документа nanoCAD.

Разберем все этапы создания такого приложения.

Шаг 1. Создаем в Visual Studio проект типа «Библиотека классов (.NET Stadard)», подключаем к нему библиотеки hostmgd. dll, hostdbmgd. dll и ncauto.dll.

Шаг 2. Создаем класс, в котором будет находиться метод, создающий новый набор параметров листа. Далее пойдет речь о реализации этого метода.

public partial class Commands

{

    [Teigha.Runtime.CommandMethod(“AddPlotConfiguration”)]

    public void AddPlotConfiguration()

    {

    }

}

Шаг 3. Получаем доступ к документу nanoCAD и его настройкам:

// Получение ссылки на активный документ

HostMgd.ApplicationServices.Document doc =

  HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

nanoCAD.Document comDoc = doc.AcadDocument as nanoCAD.Document;

Шаг 4. Создаем новый набор параметров и добавляем его в документ:

// Добавление нового набора параметров листа

// к пространству модели документа

OdaX.IAcadPlotConfiguration plotConfig =

  comDoc.PlotConfigurations.Add(“NewModelSpaceConfig”,true);

// Добавление нового набора параметров

// к листам документа

OdaX.IAcadPlotConfiguration plotConfig1 =

  comDoc.PlotConfigurations.Add(“NewLayout Config”,false);

Здесь мы обращаемся к коллекции PlotConfigurations, о которой говорилось выше, и используем один из ее методов.

Метод Add() принимает два параметра:

1 Name — имя нового набора параметров в виде строки. Необходимо помнить, что nanoCAD не позволит создать наборы параметров листов для пространства модели и для листа с одинаковыми именами. Набор параметров листов, созданный для пространства модели, не будет доступен для листов и наоборот;

2 ModelType — тип набора параметров листа в виде значения bool: true — набор параметров для пространства модели; false — набор параметров для листов.

В чем разница между набором параметров для пространства модели и листа? Фактически только в значении свойства ModelType. Но на практике есть и более глубокие различия (например, когда устанавливается область печати: для пространства модели свой набор возможных областей печати, для листа — свой).

Также стоит обратить внимание, что в коллекции PlotConfigurations наборы параметров расположены в алфавитном порядке по имени набора.

Кроме метода Add(), в коллекции PlotConfigurations доступны другие методы, позволяющие:

обращаться к конкретному набору параметров через метод Item(), который в качестве параметра принимает порядковый номер набора в коллекции: comDoc.PlotConfigurations.Item(0);

  • удалить набор параметров из коллекции. Для этого нужно сначала получить к нему доступ методом Item() и после этого воспользоваться методом Delete(): comDoc.PlotConfigurations.Item(0).Delete();
  • очистить коллекцию PlotConfigurations методом Delete(): comDoc.PlotConfigurations.Delete().

Шаг 5. Изменяем значения некоторых параметров в первом созданном наборе параметров:

// Добавление принтера в созданный набор

// параметров печати

plotConfig.ConfigName =
plotConfig.GetPlotDeviceNames()[1];

// Получение списка форматов бумаги, доступных

// для выбранного принтера, и добавление формата

// бумаги в созданный набор параметров печати

plotConfig.CanonicalMediaName =
plotConfig.GetCanonicalMediaNames()[1];

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

Рис. 2. Окно Параметры листа

Рис. 2. Окно Параметры листа

У читателя наверняка возникнет вопрос, какие еще параметры можно настроить и как это сделать. Для справки пробежимся по основным параметрам набора, которые мы можем менять через API в параллели с настройкой тех же параметров через интерфейс (рис. 2):

  1. Имя набора параметров листа: задается при создании набора в методе Add(). Впоследствии изменить это имя через интерфейс не получится, а поменять его через API можно: plotConfig.Name = “NewName”;
  2. Принтер: задается свойством plotConfig.ConfigName. Название принтера для этого свойства получаем методом plotConfig.GetPlotDeviceNames(), который возвращает массив строк.
  3. Формат бумаги: задается свойством plotConfig.CanonicalMediaName. Наименование формата бумаги для этого свойства получаем методом plotConfig.GetCanonicalMediaNames(), который возвращает массив строк.
  4. Область печати: задается свойством plotConfig.PlotType. Область печати для этого свойства берем из перечисления OdaX.AcPlotType.
  5. Ориентация чертежа на листе: задается свойством plotConfig.PlotRotation. Угол поворота для этого свойства берем из перечисления OdaX.AcPlotRotation.
  6. Положение левого нижнего угла чертежа относительно левого нижнего угла границы листа: задается свойством plotConfig.PlotOrigin. В свойство нужно передать массив double с координатами X и Y.
  7. Масштаб печати чертежа: задается свойством plotConfig.StandardScale. Значение масштаба для свойства берем из перечисления OdaX.AcPlotScale. Также можно установить пользовательский масштаб методом plotConfig.SetCustomScale(double Numerator, double Denominator).
  8. Стиль печати: задается свойством plotConfig.StyleSheet. Стиль печати для свойства берем из массива строк, возвращаемого методом plotConfig.GetPlotStyleTableNames().
  9.  «Учитывать веса линий»: задается свойством plotConfig.PlotWithLineweights. Переменная логического типа данных: при значении true веса линий будут учитываться, при значении false — нет.
  10. «Учитывать стили печати»: задается свойством plotConfig.PlotWithPlotStyles. Переменная логического типа данных: при значении true назначенный стиль печати будет учтен, при значении false — нет.
  11. «Объекты листа последними»: задается свойством plotConfig.PlotViewportsFirst. Переменная логического типа данных: при значении true объекты листа будут отображены на заднем фоне, при значении false — нет.
  12. «Скрывать объекты листа»: задается свойством plotConfig.PlotHidden. Переменная логического типа данных: при значении true объекты листа будут скрыты, при значении false — нет.
  13. «Масштабировать веса линий»: задается свойством plotConfig.ScaleLineweights. Переменная логического типа данных: при значении true веса линий будут отмасштабированы, при значении false — нет.

Последние три пункта списка предназначены только для листов — в пространстве модели изменение этих свойств через API не будет влиять на конечный результат, а через интерфейс в настройках параметров печати пространства модели их изменить невозможно.

Шаг 6. Копируем набор параметров листов из другого документа nanoCAD во второй созданный набор «NewLayoutConfig».

В приведенном примере копируется набор параметров листов с названием «LayoutPlotConfig» из документа nanoCAD nanoCAD_configs.dwg, расположенного в директории C:\Work.

В копируемом наборе задано два параметра:

  • Принтер: Microsoft XPS Document Writer;
  • Формат бумаги: Конверт № 14, ориентация Книжная.

// Получение ссылки на документ, в котором
// сохранены нужные нам наборы параметров листов

HostMgd.ApplicationServices.Document docToCopy =

   HostMgd.ApplicationServices.Application.DocumentManager.

         Open(“C:\\Work\\nanoCAD_configs.dwg”, true);

nanoCAD.Document comDocToCopy =
docToCopy.AcadDocument as nanoCAD.Document;

// Получение ссылки на набор параметров листа,

// который нужно скопировать

OdaX.IAcadPlotConfiguration configToCopy =

         comDocToCopy.PlotConfigurations.Item(0);

// Копируем набор параметров листа из одного
//документа в другой

plotConfig1.CopyFrom
((OdaX.AcadPlotConfiguration)configToCopy);

// Закрываем документ, из которого копировали
// набор параметров листа

docToCopy.CloseAndDiscard();

Здесь основное действие выполняет метод CopyFrom(), который принимает один параметр типа OdaX.AcadPlotConfiguration — набор параметров листов.

Шаг 7. Изменяем текущий набор параметров для листов документа nanoCAD на добавленные нами наборы параметров.

// Делаем добавленные нами наборы параметров
// листов текущими для всех листов

foreach(OdaX.IAcadLayout layout in comDoc.Layouts)

{

    if (layout.ModelType) layout.

      CopyFrom((OdaX.AcadPlotConfiguration)plotConfig);

    if (!layout.ModelType) layout.

      CopyFrom((OdaX.AcadPlotConfiguration)plotConfig1);

}

И это был последний пункт из перечня функций, которые должно выполнять наше приложение.

Также добавим в программу вывод сообщений в консоль nanoCAD, которые помогут отслеживать ход выполнения программы. Сообщения будут выводиться два раза:

После добавления новых наборов параметров листов:

// Получение ссылки на редактор активного документа

HostMgd.EditorInput.Editor ed = doc.Editor;

// Вывод в консоль nanoCAD наименований

// наборов параметров печати документа

ed.WriteMessage(“Наборы параметров листов документа ‘{0}’ до изменения их параметров:”, doc.Name);

foreach (var pc in comDoc.PlotConfigurations)

{

        OdaX.IAcadPlotConfiguration config =
pc as OdaX.IAcadPlotConfiguration;

       ed.WriteMessage(“{0}:{1},{2},{3}”, config.Name, config.ConfigName, config.CanonicalMediaName,config.PlotType);

}

ed.WriteMessage(“”);

После того как команда изменила значения их параметров:

// Вывод в консоль nanoCAD наборов параметров

// листа документа

ed.WriteMessage(“«Наборы параметров листов документа ‘{0}’ ” +

   “после изменения их параметров:”, doc.Name);

foreach (var pc in comDoc.PlotConfigurations)

{

    OdaX.IAcadPlotConfiguration config =

         pc as OdaX.IAcadPlotConfiguration;

    ed.WriteMessage(“{0}:{1},{2}”,

          config.Name, config.ConfigName, config.CanonicalMediaName);

}

Шаг 8. Компилируем наше приложение и загружаем в nanoCAD.

После запуска команды AddPlotConfiguration мы увидим в консоли сообщения, показанные на рис. 3.

Рис. 3. Сообщения команды AddPlotConfiguration

Рис. 3. Сообщения команды AddPlotConfiguration

В первый раз содержимое коллекции PlotConfigurations было выведено в консоль сразу после добавления в нее новых элементов.

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

Ради интереса можно проверить через пользовательский интерфейс nanoCAD изменения в окне Диспетчер параметров листов. Должна быть такая картина, как на рис. 4 и 5.

Рис. 4. Окно Диспетчер параметров листов для пространства модели

Рис. 4. Окно Диспетчер параметров листов для пространства модели

Рис. 5. Окно Диспетчер параметров листов 
для листа А4

Рис. 5. Окно Диспетчер параметров листов для листа А4

Итак, в этой статье мы подробно разобрали процесс создания .NET­приложения, которое добавляет наборы параметров листов в документ nanoCAD, меняет в них параметры и копирует значения параметров из другого документа nanoCAD. Попутно был рассмотрен пример получения переченя доступных принтеров и форматов бумаги и приведен перечень остальных параметров набора, доступных для настройки печати. В следующей статье научимся изменять настройки печати активного листа документа nanoCAD.

Регистрация | Войти

Мы в телеграм:

Рекламодатель:
ООО «Нанософт разработка»

ИНН 7751031421 ОГРН 5167746333838

Рекламодатель: ООО «ПЛМ Разработка»

ИНН 6658560933 ОГРН 1236600010690

Рекламодатель: ООО «А-Кор»

ИНН 9731125160 ОГРН 1237700820059

Рекламодатель: ООО «КЭЛС-центр»

ИНН 7707548179 ОГРН 1057746796436

Рекламодатель: ЗАО «Топ Системы»

ИНН 7726601967 ОГРН 1087746953557