БАЗА ЗНАНИЙ
Задать вопрос
 

API САПФИР

Развитие ПК САПФИР на основе COM технологий

Программа САПФИР поддерживает технологию COM и является сервером автоматизации (automation servers). Сервер автоматизации САПФИР предоставляет набор объектов автоматизации, посредством которых открывает доступ другим программам к своим внутренним функциям. Доступ к объектам автоматизации САПФИР возможен из скриптовых языков Visual Basic Script (VBScript) и Java Script (JScript), или из программ, написанных на языках, поддерживающих объектное программирование, таких как: VB, C++, Delphi (Object Pascal) и др. При разработке приложений на компилируемых языках, для доступа в объектам автоматизации САПФИР удобно использовать библиотеку типов САПФИР — файл SAPFIR.tlb. В таких средах разработки как Microsoft Visual Studio или Borland Builder С++ есть процедуры по импорту в проект библиотеки типов. Для .NET приложений, например, программа «Сметы Объемы и Нормативы», для доступа к объектам автоматизации САПФИР можно использовать сборку взаимодействия SapfirLib.dll. Сборку взаимодействия можно получить из файла SAPFIR.tlb при помощи программы импорта библиотеки типов TlbImp.exe.

Наиболее простой способ использования объектов автоматизации программы САПФИР — это текстовые файлы js, vbe, или html со встроенными сценариями на Jscript или VBScript. Основное преимущество таких файлов — это возможность создания их в любом текстовом редакторе, например, «Блокнот» из стандартной поставки Windows. Файлы html можно использовать в качестве пользовательских диалоговых панелей. В программе САПФИР такие файлы используются для создания параметрических лестниц, окон, дверей, сечений колонн, формирования основных надписей, спецификаций и в ряде других случаев.

Примерами использования объектов автоматизации САПФИР могут служить, также, функции импорта файлов форматов DWG, IFC, OBJ, MSH, MESH и VCK, реализованные в файлах DwgImport.dll, IfcImport.dll, MeshImport.dll и ElfImport.dll, расположенных в папке «C:\Program Files (x86)\SAPFIR\Sapfir 2017\x64\Plugin» и представляющих собой MFC DLL проекты созданные в среде Microsoft Visual Studio. Все они используют библиотеку SpPlugin, расположенную в папке «C:\Users\Public\Documents\SAPFIR\Sapfir 2017\SDK Plugin». В данной библиотеке, состоящей из файлов SpPlugin.dll, SpPlugin.lib, и *.h, содержатся классы облегчающие доступ к СОМ-объектам САПФИР и ряд дополнительных классов.

В качестве примера для разработки «плагинов» к программе САПФИР, в комплекте поставки, в папке «C:\Users\Public\Documents\SAPFIR\Sapfir 2017\SDK Plugin\TestPlugin» находится тестовый проект, в котором содержится огромное число примеров использования объектов автоматизации САПФИР. Данный проект можно использовать в качестве основы для написания собственных плагинов в среде Microsoft Visual Studio 2008 с использованием библиотеки SpPlugin.lib

SAPFIR_API_01

Таким же способом можно подключать к программе САПФИР любой исполняемый файл, например, программу NotePad.exe или Calc.exe, можно подключить любую web страничку. Для этого в строке «Команда» задать соответствующее название программы или ссылку на сайт: «NotePad.exe» , «Calc.exe» , www.liraland.ru. Строку «Аргументы» нужно оставить пустой. Если в «Команде» задан файл HTML или ссылка на сайт, то можно в поле аргументы задать начальный размер окна в котором будет отображаться диалог. Для этого необходимо в строке «Аргументы» нажать кнопку и выбрать команду «Размер окна», после чего в строке появится запись «$WinSize(X,Y)». Вместо X и Y необходимо задать необходимый размер окна в пикселях.

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

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тестовый диалог</title>
<SCRIPT LANGUAGE=javascript src="../const_model.jsh"></SCRIPT>
<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--
function OnOutMsg() { 
var SapfirApp = new ActiveXObject("Sapfir.Application.7.0"); // Получаем приложение САПФИР 
SapfirApp.AfxMessage("Привет САПФИР!!!", 0); // Выводим сообщение используя функцию приложения
}
//-->
</script>
</head>
<BODY> 
<br><input type=button value="Вывести сообщение" onClick="OnOutMsg()" >
</BODY>
</HTML>

Для подключения этого диалога в меню «Сервисы» нужно воспользоваться последовательностью действий, который приведен в пункте «Подключение внешних подулей». Название пункта меню можно задать, например, «Тестовый диалог». При помощи кнопки «Исполняемый файл» выбрать расширение файла htm и указать файл «C:\ProgramData\Sapfir\Sapfir 2017\Service\Users\TextUserDlg.htm». В строке «Аргументы» ничего вводить не нужно, затем нажать кнопку «Сохранить» и закрыть диалог «Настройка». После этих действий в меню «Сервисы» появится команда «Тестовый диалог». После исполнения команды появится следующее окно с диалогом.

SAPFIR_API_03

При нажатии кнопки «Вывести сообщение» будет выполнена функция OutMsg() и на экране появится следующее окно

SAPFIR_API_04

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

function OnCreateWall()
{ 
var SapfirApp = new ActiveXObject("Sapfir.Application.7.0"); //Получаем приложение САПФИР 
var SapfirDoc = SapfirApp.GetActiveDoc(); // Получаем активный документ 
var ActiveStorey = SapfirDoc.GetActiveStorey(); // Получаем текущий этаж 
var Wall = ActiveStorey.NewModel(TM_WALL); // В текущем этаже создаем объект стена 
Wall.Parameter("M_THICKNESS") = 0.51; // Задаем толщину стены в [м] 
var PL = Wall.GetAxisLine(); // Получаем объект — осевая линия стены 
var ParamObj = new Array(); //Создаем массив в котором будем задавать координаты точек осевой 
//Задаем координаты первой точки p1(0,0,0) 
ParamObj[0] = 0; // p1.x 
ParamObj[1] = 0; // p1.y 
ParamObj[2] = 0; // p1.z 
//Задаем координаты первой точки p2(3.5,0,0) 
ParamObj[3] = 3.5; // p2.x 
ParamObj[4] = 0; // p2.y 
ParamObj[5] = 0; // p2.z 
//Задаем координаты первой точки p3(3.5,2.5,0) 
ParamObj[6] = 3.5; // p3.x 
ParamObj[7] = 2.5; // p3.y 
ParamObj[8] = 0; // p3.z 
PL.SetPoints(ParamObj); // Заносим точки в линию 
SapfirDoc.DrawModel(0); // Рисуем всю модель
}
//-->
</script>
<BODY> 
<input type=button value="Вывести сообщение" onClick="OnOutMsg()"> 
<input type=button value="Создать стену" onClick="OnCreateWall()">
</BODY>

Теперь, если выполнить команду «Тестовый диалог», то мы увидим в диалоге еще одну кнопку «Создать стену». После нажатия этой кнопки в текущем этаже появится стена.

SAPFIR_API_05

Примеры создания объектов САПФИР

В папке «C:\ProgramData\Sapfir\Sapfir 2017\Service\Users» есть несколько файлов с примерами создания других объектов доступных в программе САПФИР. Эти файлы можно подключить в меню «Сервисы» по выше приведенной методике. Файл «TestStorey.htm» содержит примеры создания стен, перекрытий, крыши, установки проемов и карниза.

SAPFIR_API_06

В файле «TestModels.htm» - несколько примеров по созданию архитектурных обломов, карнизов, колонн и лестниц.

SAPFIR_API_07

В файле «TestModels2.htm» - примеры создания моделей абстрактных геометрических форм.

SAPFIR_API_08

В файле «TestSpecMat.htm» показан пример формирования тестовой спецификации материалов.

SAPFIR_API_02

Документация

Описание функций автоматизации САПФИР Схема объектов автоматизации САПФИР