- •Гоувпо «Воронежский государственный технический университет» м.И. Чижов а.Н. Юров
- •Введение
- •1. Создание проектов прикладных библиотек
- •2. Работа с двумерными графическими документами
- •2.1. Функции для работы с графическими документами
- •2.2. Функции построения составных объектов
- •2.3. Функции ввода параметров
- •3. Элементы и функции для проведения вспомогательных построений
- •3.1. Математические функции
- •3.2. Функции вычисления пересечений
- •3.3. Функции вычисления длин, расстояний, углов
- •4. Работа с базами данных
- •5. Примеры проектирования библиотек в 2d
- •5.1. Построение графиков функций
- •5.2. Построение фигур
- •5.3. Построение эскизов
- •6. Работа с твердотельными моделями и объектами
- •6.1. Построение твердотельных деталей посредством операций вращения и выдавливания
- •6.2. Построение фасок и скруглений в твердотельных моделях прикладных библиотек
- •6.3. Построение объектов в цвете
- •6.4. Работа со сборками
- •6.5. Включение в сборочные узлы твердотельных моделей без истории построения
- •6.6. Построение сборочных узлов и компонентов с параметрами посредством диалога
- •Заключение
- •Библиографический список
- •3 94026 Воронеж, Московский просп., 14
1. Создание проектов прикладных библиотек
КОМПАС В СРЕДЕ VISUAL C++
Создать прикладную библиотеку и подготовить ее к работе в системах КОМПАС v10-11 можно двумя способами: воспользоваться мастером создания библиотек Visual C++ 6.0 или изменить имеющиеся в директории «..\SDK\C++\ Visualc», рабочие проекты прикладных библиотек.
Создание шаблона библиотеки при помощи мастера создания библиотек (Wizard), разработанного специалистами системы КОМПАС, производится легко - достаточно следовать инструкциям разработчика. Для подключения мастера создания библиотек необходимо скопировать файл LibraryWizard.awx в директорию «C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Template» или в папку Template аналогичной директории куда установлен MS Visual C++ 6.0.
После подключения мастера создания библиотек в окне нового проекта появиться новый пункт LibraryWizard. Пути к заголовкам библиотек (Include директориям) в опциях нового проекта по умолчанию настроены для папки «..\SDK\C++\Visualc», поэтому при создании проекта необходимо указать этот путь в location (рис. 1).
Рис. 1. Мастер создания прикладных библиотек системы КОМПАС в Visual C++ 6.0 |
Используя опции генератора данных, мастер подготовит проект подключаемой для системы КОМПАС динамической библиотеки в среде Visual С++.
Пример кода динамически подключаемой прикладной библиотеки с именем FirstWizardLibraryProject представлен на листинге:
#include
"stdafx.h" #include
<afxdllx.h> #include
"FirstWizardLibraryProject.h" #ifdef
_DEBUG #undef
THIS_FILE static
char THIS_FILE[] = __FILE__; #endif //Специальная
структура используемая в течении
инициализации DLL static
AFX_EXTENSION_MODULE FirstWizardLibraryProjectDLL = { NULL, NULL }; HINSTANCE
g_hInstance = NULL; //Стандартная
точка входа //Инициализация
и завершение DLL extern
"C" int APIENTRY DllMain(HINSTANCE
hInstance, DWORD dwReason, LPVOID lpReserved) {
g_hInstance
= hInstance; if
(dwReason == DLL_PROCESS_ATTACH) { TRACE0("FIRSTWIZARDLIBRARYPROJECT.AWX
Initializing!\n"); AfxInitExtensionModule(FirstWizardLibraryProjectDLL,
hInstance); new
CDynLinkLibrary(FirstWizardLibraryProjectDLL); } else
if (dwReason == DLL_PROCESS_DETACH) { TRACE0("FIRSTWIZARDLIBRARYPROJECT.AWX
Terminating!\n"); AfxTermExtensionModule(FirstWizardLibraryProjectDLL); }
return
1; } //
Задать
идентификатор
ресурсов unsigned
int WINAPI LIBRARYID() {
return IDR_LIBID; } //
Головная
функция
библиотеки void
WINAPI LIBRARYENTRY( unsigned int comm ) {
switch ( comm )
{
case 1:
{
//
Выдача сообщения пользователю
MessageT(
_T("Тестовая команда 1") );
break;
}
}
}
//
Загрузить строку из ресурса CString
LoadStr(
int
strID
)
{TCHAR
temp[_MAX_PATH]; LoadString(
FirstWizardLibraryProjectDLL.hModule, strID, temp, _MAX_PATH );
return
temp; }
Для успешной компиляции и создания рабочего модуля библиотеки необходимо в файле «StdAfx.h» удалить или внести в статус комментариев следующие строки, как показано в тексте программы и подключить заголовки (headers) c системными библиотеками (lib) SDK в среде Visual C++ «Tools->Options->Directories» и в разделе «Show directories for: Include files (Library files)» указать путь к соответствующим файлам (рис. 2).
#if
!defined(AFX_STDAFX_H__B043E8EF_8214_4064_99A2_47EED4F276FA__INCLUDED_)
#define
AFX_STDAFX_H__B043E8EF_8214_4064_99A2_47EED4F276FA__INCLUDED_
#define
VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include
<afxwin.h> // MFC core and standard components #include
<afxext.h> // MFC extensions #include
<afxcmn.h> // MFC support for Windows 95 Common Controls
#include
<COMUTIL.H> #include
<comdef.h> #pragma
warning(
disable
: 4192 )
//
Закомментировать или удалить!!! //#import
"..\..\..\lib\ksConstants.tlb" no_namespace named_guids //#import"..\..\..\lib\ksConstants3D.tlb"no_namespace
named_guids //#import
"..\..\..\lib\kAPI2D5COM.tlb" no_namespace named_guids //#import
"..\..\..\lib\kAPI3D5COM.tlb" no_namespace named_guids
#include
<libtool.h> #include
<LHead3d.h>
#pragma
warning( once : 4192 )
#endif
//!defined(AFX_STDAFX_H__B043E8EF_8214_4064_99A2_47EED4F276FA__IN//CLUDED_)
Рис. 2. Подключение заголовков и прикладных библиотек системы КОМПАС в Visual C++ |
При «ручном» способе разработки прикладных библиотек может потребоваться внесение некоторых модулей из папки «..SDK\Lib» непосредственно в дерево построения проекта (WorkSpace) (рис. 3). При сборке библиотеки имеется возможность воспользоваться опциями управления проекта (Project->Settings->C++&Links& Resources) для изменения производительности программного кода, обеспечения его компактности, включения в раздел ресурсов национальной таблицы символов, отличных от латинских, изменение имени конечного файла (рис. 4). При окончательной сборке библиотеки необходимо поменять в опции «Активная конфигурация» режим «Debug» на «Release»-это действие приведет к уменьшению объема выходного файла динамически подключаемого приложения за счет удаления отладочной информации о проекте (Build->Set Active Configuration).
Рис. 3. Включение в проект файлов kAPI2D5.lib и kAPI3D5.lib для работы с чертежами и моделями |
Рис. 4. Настройки проекта: изменение имени файла прикладной библиотеки |
Из приведенного выше примера большая часть кода представлена системным механизмом проектирования приложений, в котором реализованы общие принципы построения динамически подключаемых библиотек посредством технологии СОМ - наиболее широко используемой объектной модели для разработки рассредоточенных и действующих одновременно систем. Особый интерес представляет основная функция прикладной библиотеки, представленная на листинге ниже, выводящее сообщение на экран.
void
WINAPI LIBRARYENTRY( unsigned int comm ) {
switch ( comm )
{
case
1:
{
//Выдача
сообщения пользователю
MessageT(
_T("Тестовая команда 1") );break;
}
} }
В функцию WINAPI LIBRARYENTRY включен множественный оператор выбора switch(), по которому можно организовать вызов отдельного набора команд, составленных на языке С++ и API системы КОМПАС, функций, членов классов, структур, шаблонов, включения ассемблерных вставок и т.д.
Пример ассемблерного кода по расчету факториала:
void
WINAPI LIBRARYENTRY( unsigned int comm ) {
TCHAR buf [255]; WORD
iii; __asm {
mov ax,1 xor
bx,bx mov
cx,8 label1: inc
bx mul
bx loop
label1 mov
iii,ax
}; _stprintf(
buf, _T("Factorial = %d"), iii ); MessageT(
buf ); }
Сообщение выводиться на экран по команде «MessageT(_T("Тестовая команда 1"));», где каждый символ представлен двухбайтовым значением и соответствует национальной таблице символов в Unicode. Использование Unicode требует коррекции функций и типов переменных как минимум в функциях, использующих MFC.
Строковые константы в коде необходимо окружить дефайном
_T, например: «char str[100]=“”;» заменяется на «TCHAR str[100]=_T(“”);». Таким образом, проект можно будет компилировать под Компас 10 в Unicode. В случае разработки библиотек под систему Компас 9 надо переключиться на неюникодную конфигурацию.
Потребуется замена вызова неюникодных функций, работающих со строками на объявления, которые в зависимости от типа компиляции заменяются на юникодный или неюникодный аналог функции. Например: strcmp strcpy atof. Данные функции в местах, где будет использоваться TCHAR*, заменить на объявления из файла TCHAR.h. Примеры замен необходимо уточнить в документации.
Вывод текстовых сообщений может быть выполнен не только с помощью специфического API КОМПАС, но и средствами разработки WinAPI, MFC, которые реализованы в интегрированной среде Visual C++:
Пример:
MessageBox(NULL,_T("Сообщение"),_T("Пример
вывода"),MB_OK); AfxMessageBox(_T("Сообщение"),MB_ICONINFORMATION
,0);
Для того чтобы перевести текст программы в машинный код, необходимо выполнить компиляцию проекта, выбрав опцию «Build» в меню интегрированной среды, или нажать функциональную клавишу F7. Полученный файл с расширением .rtw можно подключить в окне менеджера библиотек Компас путем добавления описания прикладной библиотеки, как показано на рис. 5.
Рис. 5. Подключение разработанной прикладной библиотеки в окне менеджера библиотек Компас |