Файлы КОМПАС-3D содержат информацию о документе: наименование и обозначение чертежа, фамилию разработчика, проверяющего и утверждающего, вид документа, формат, количество листов. Когда на предприятии используется система для автоматизации документооборота, проектировщику очень часто приходится вводить эту информацию вручную.
![image](https://habrastorage.org/r/w1560/webt/iu/z0/cf/iuz0cfr5lj-vizivlbpjzgr0zpg.png)
Добавление документа в систему документооборота (Карточка документа)
Данные, которые нужно ввести в карточку, уже могут быть в исходном файле, и поэтому процесс ввода можно автоматизировать.
Начиная с 16-ой версии в формате данных КОМПАС-3D произошли серьёзные изменения. Во-первых, он стал более открытым, во-вторых, уменьшился размер файлов. Формат файлов КОМПАС-3D версии 16 и выше — это zip-архив, который содержит метаданные в формате XML с информацией об атрибутах и объектах данного документа. Для чтения файлов КОМПАС-3D я разработал .NET библиотеку KompasFileReader, которая опубликована под лицензией MIT [1].
В качестве системы документооборота используем Pilot-ICE. Алгоритм работы пользователя в системе очень простой. Все исходные файлы при проектировании находятся на виртуальном диске Pilot-Storage, на наподобие Dropbox. Если требуется опубликовать электронный документ и выполнить его согласование, используется виртуальный принтер Pilot-XPS, в результате печати формируется электронный документ. Пользователь выбирает папку в электронном архиве и заполняет карточку документов, затем сохраняет документ в архив и выполняет его согласование (если это требуется). Но если мы работаем в системе КОМПАС-3D, грамотно и аккуратно оформляем документы и как следствие, заполняем основную надпись чертежа, то данные из основной надписи мы можем автоматически передать в карточку документа Pilot-ICE. О том, как создать подобный плагин, будет написано ниже.
Система Pilot-ICE поддерживает возможность разработки плагинов, SDK можно скачать по ссылке в центре загрузок [3].
Вы можете создать новый проект согласно инструкции из SDK (Documentation.html).
Для того, чтобы автоматически заполнить карточку документов, необходимо перехватить вызов печати виртуального принтера и загрузку карточки документа.
Плагин должен использовать интерфейсы IAutoImportHandler и IObjectCardHandler. Для анализа исходного файла нужно реализовать метод Handle интерфейса IAutoImportHandler, а также для заполнения карточки — метод с точно таким же названием интерфейса IObjectCardHandler.
Фрагмент плагина:
Перехватываем путь к исходному файлу, который мы печатаем, выполняем анализ файла и получаем его атрибуты.
Сразу же после печати открывается карточка документа, перехватываем её поля и заполняем на основании данных, полученных выше.
где _pairPilotKompasAttrs — пара значений названий атрибута в системе Pilot ICE и КОМПАС- 3D.
* Листинги приведены в упрощённом виде, более подробно можете посмотреть на странице проекта [1].
В качестве примера берём любой чертёж, который находится на Pilot-Storage.
![image](https://habrastorage.org/r/w1560/webt/y6/at/fx/y6atfxkc3hmytv-w-ucqjzbl8lk.png)
У чертежа должна быть заполнена основная надпись
![image](https://habrastorage.org/r/w1560/webt/z-/-u/by/z--ubyk6iekryd6y0voghmfbone.png)
Выполняем печать на виртуальный принтер
![image](https://habrastorage.org/r/w1560/webt/4i/_j/vi/4i_jvi252axyt3fizkwwigywk8u.png)
Прекрасно! Карточка документа заполняется автоматически!
Для адаптации плагина под конфигурацию вашего предприятия предусмотрим возможность настройки соответствия между атрибутами КОМПАС-3D и атрибутами системы документооборота.
Для этого можно использовать формат JSON и хранить эти данные в общих настройках системы.
Пример настроек:
где NameAttrPilot — название атрибута в системе Pilot-ICE, можно посмотреть в Pilot-myAdmin,
NamePropKompas — название атрибута в системе КОМПАС-3D, можно узнать, открыв файл КОМПАС-3D как zip-архив и изучив файл MetaInfo.
Олег Козинцев
![image](https://habrastorage.org/webt/iu/z0/cf/iuz0cfr5lj-vizivlbpjzgr0zpg.png)
Добавление документа в систему документооборота (Карточка документа)
Данные, которые нужно ввести в карточку, уже могут быть в исходном файле, и поэтому процесс ввода можно автоматизировать.
Библиотека для получения данных из КОМПАС-3D
Начиная с 16-ой версии в формате данных КОМПАС-3D произошли серьёзные изменения. Во-первых, он стал более открытым, во-вторых, уменьшился размер файлов. Формат файлов КОМПАС-3D версии 16 и выше — это zip-архив, который содержит метаданные в формате XML с информацией об атрибутах и объектах данного документа. Для чтения файлов КОМПАС-3D я разработал .NET библиотеку KompasFileReader, которая опубликована под лицензией MIT [1].
Интеграция с системой документооборота
В качестве системы документооборота используем Pilot-ICE. Алгоритм работы пользователя в системе очень простой. Все исходные файлы при проектировании находятся на виртуальном диске Pilot-Storage, на наподобие Dropbox. Если требуется опубликовать электронный документ и выполнить его согласование, используется виртуальный принтер Pilot-XPS, в результате печати формируется электронный документ. Пользователь выбирает папку в электронном архиве и заполняет карточку документов, затем сохраняет документ в архив и выполняет его согласование (если это требуется). Но если мы работаем в системе КОМПАС-3D, грамотно и аккуратно оформляем документы и как следствие, заполняем основную надпись чертежа, то данные из основной надписи мы можем автоматически передать в карточку документа Pilot-ICE. О том, как создать подобный плагин, будет написано ниже.
Система Pilot-ICE поддерживает возможность разработки плагинов, SDK можно скачать по ссылке в центре загрузок [3].
Вы можете создать новый проект согласно инструкции из SDK (Documentation.html).
Для того, чтобы автоматически заполнить карточку документов, необходимо перехватить вызов печати виртуального принтера и загрузку карточки документа.
Плагин должен использовать интерфейсы IAutoImportHandler и IObjectCardHandler. Для анализа исходного файла нужно реализовать метод Handle интерфейса IAutoImportHandler, а также для заполнения карточки — метод с точно таким же названием интерфейса IObjectCardHandler.
Фрагмент плагина:
namespace Ascon.Pilot.SDK.KompasAttrAutoImport
{
[Export(typeof(IAutoimportHandler))]
[Export(typeof(IObjectCardHandler))]
public class KompasAttrAutoImport : IAutoimportHandler, IObjectCardHandler, ...
{
...
public bool Handle(string filePath, string sourceFilePath, AutoimportSource autoimportSource)
{
...
}
public bool Handle(IAttributeModifier modifier, ObjectCardContext context)
{
...
}
}
}
Получение и анализ исходного файла
Перехватываем путь к исходному файлу, который мы печатаем, выполняем анализ файла и получаем его атрибуты.
public bool Handle(string filePath, string sourceFilePath, AutoimportSource autoimportSource)
{
// проверка на наличая пути к исходному файлу
if (string.IsNullOrWhiteSpace(sourceFilePath)) return false;
// если исходный файл компас. Проверяем расширения.
if (!IsFileExtension(sourceFilePath, CDW_EXT)
return false;
using (var inputStream = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read))
{
var ms = new MemoryStream();
inputStream.Seek(0, SeekOrigin.Begin);
inputStream.CopyTo(ms);
ms.Position = 0;
if (IsFileExtension(sourceFilePath, SPW_EXT))
{
var taskOpenSpwFile = new Task<SpwAnalyzer>(() => new SpwAnalyzer(ms));
taskOpenSpwFile.Start();
taskOpenSpwFile.Wait();
if (taskOpenSpwFile.Result.IsCompleted)
{
var spc = taskOpenSpwFile.Result.GetSpecification;
spc.FileName = sourceFilePath;
_doc = spc;
}
...
}
...
}
return false;
}
Заполнение карточки документа
Сразу же после печати открывается карточка документа, перехватываем её поля и заполняем на основании данных, полученных выше.
public bool Handle(IAttributeModifier modifier, ObjectCardContext context)
{
var isObjectModification = context.EditiedObject != null;
if (isObjectModification || context.IsReadOnly)
return false;
if (_doc == null)
return false;
var docProp = _doc.GetProps();
foreach (var pairPilotKompasAttr in _pairPilotKompasAttrs)
{
var val = docProp.FirstOrDefault(x => x.Name == pairPilotKompasAttr.NamePropKompas)?.Value;
if (val != null)
modifier.SetValue(pairPilotKompasAttr.NameAttrPilot, ValueTextClear(val));
}
return true;
}
где _pairPilotKompasAttrs — пара значений названий атрибута в системе Pilot ICE и КОМПАС- 3D.
* Листинги приведены в упрощённом виде, более подробно можете посмотреть на странице проекта [1].
Демонстрация работы
В качестве примера берём любой чертёж, который находится на Pilot-Storage.
![image](https://habrastorage.org/webt/y6/at/fx/y6atfxkc3hmytv-w-ucqjzbl8lk.png)
У чертежа должна быть заполнена основная надпись
![image](https://habrastorage.org/webt/z-/-u/by/z--ubyk6iekryd6y0voghmfbone.png)
Выполняем печать на виртуальный принтер
![image](https://habrastorage.org/webt/4i/_j/vi/4i_jvi252axyt3fizkwwigywk8u.png)
Прекрасно! Карточка документа заполняется автоматически!
Настройка плагина
Для адаптации плагина под конфигурацию вашего предприятия предусмотрим возможность настройки соответствия между атрибутами КОМПАС-3D и атрибутами системы документооборота.
Для этого можно использовать формат JSON и хранить эти данные в общих настройках системы.
Пример настроек:
[{
"NameAttrPilot": "name",
"NamePropKompas": "Наименование"
}, {
"NameAttrPilot": "mark",
"NamePropKompas": "Обозначение"
}
]
где NameAttrPilot — название атрибута в системе Pilot-ICE, можно посмотреть в Pilot-myAdmin,
NamePropKompas — название атрибута в системе КОМПАС-3D, можно узнать, открыв файл КОМПАС-3D как zip-архив и изучив файл MetaInfo.
Ссылки:
- Плагин для интеграции системы Pilot-ICE с КОМПАС-3D – github.com/kozintsev/Pilot.CADReader.
- Pilot-ICE — система для управления проектной организацией – pilotems.com.
- Центр загрузок системы Pilot – pilot.ascon.ru.
Олег Козинцев