Pull to refresh
112.52
АСКОН
Russia's largest engineering software developer

Читаем данные из открытой части файлов КОМПАС-3D для интеграции с Pilot-ICE

Reading time 4 min
Views 9.8K
Файлы КОМПАС-3D содержат информацию о документе: наименование и обозначение чертежа, фамилию разработчика, проверяющего и утверждающего, вид документа, формат, количество листов. Когда на предприятии используется система для автоматизации документооборота, проектировщику очень часто приходится вводить эту информацию вручную.

image
Добавление документа в систему документооборота (Карточка документа)

Данные, которые нужно ввести в карточку, уже могут быть в исходном файле, и поэтому процесс ввода можно автоматизировать.


Библиотека для получения данных из КОМПАС-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
У чертежа должна быть заполнена основная надпись

image
Выполняем печать на виртуальный принтер

image
Прекрасно! Карточка документа заполняется автоматически!

Настройка плагина


Для адаптации плагина под конфигурацию вашего предприятия предусмотрим возможность настройки соответствия между атрибутами КОМПАС-3D и атрибутами системы документооборота.
Для этого можно использовать формат JSON и хранить эти данные в общих настройках системы.

Пример настроек:
[{
		"NameAttrPilot": "name",
		"NamePropKompas": "Наименование"
	}, {
		"NameAttrPilot": "mark",
		"NamePropKompas": "Обозначение"
	}
]


где NameAttrPilot — название атрибута в системе Pilot-ICE, можно посмотреть в Pilot-myAdmin,
NamePropKompas — название атрибута в системе КОМПАС-3D, можно узнать, открыв файл КОМПАС-3D как zip-архив и изучив файл MetaInfo.

Ссылки:



  1. Плагин для интеграции системы Pilot-ICE с КОМПАС-3D – github.com/kozintsev/Pilot.CADReader.
  2. Pilot-ICE — система для управления проектной организацией – pilotems.com.
  3. Центр загрузок системы Pilot – pilot.ascon.ru.


Олег Козинцев
Tags:
Hubs:
+8
Comments 3
Comments Comments 3

Articles

Information

Website
ascon.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия