- •Гоувпо «Воронежский государственный технический университет» м.И. Чижов а.Н. Юров
- •Введение
- •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
2. Работа с двумерными графическими документами
Работа с документами в 2D в КОМПАС осуществляется посредством вызова последовательности команд, представляющих собой API набора экспортных функций. Ряд функций будет рассмотрен непосредственно в практических примерах проектируемых прикладных библиотек, приведенных в данных методических указаниях, описания и примеры использования остальных команд можно взять из комплекта SDK, входящего в состав дистрибутива системы КОМПАС.
Практически любая библиотека работает с новым или открытым типом документа, статус которого объявлен как активный (исключение составляют библиотеки расчетного уровня, использующие свои диалоговое окна ввода-вывода). Типы документов в КОМПАСе общеизвестны:
чертеж;
фрагмент;
текстовый документ;
спецификация;
сборка;
деталь.
Обычно быстрее и проще создать нужный тип документа непосредственно в CAD/CAM системе, а потом пользоваться разработанной библиотекой. Такой подход будет использоваться в последующих примерах при изучении специализированных команд, а пока будет предложен процесс создания нового документа, имеющего статус чертежа, в котором выполнены простейшие геометрические построения. Листинг прикладной библиотеки приведен ниже.
Пример создания графического документа:
#include
"stdafx.h" #include
<afxdllx.h>
#include
"resource.h" #include
<libtool.h> #include
<ldefin2d.h> #ifdef
_DEBUG #define
new DEBUG_NEW #undef
THIS_FILE static
char THIS_FILE[] = __FILE__; #endif
//
Специальная структура используемая
при инициализации DLL static
AFX_EXTENSION_MODULE StepDLL = { NULL, NULL }; //
Стандартная точка входа //
Инициализация и завершение DLL extern
"C" int APIENTRY DllMain(
HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved ) { UNREFERENCED_PARAMETER(
lpReserved );
if
( dwReason == DLL_PROCESS_ATTACH ) { TRACE0(
"DLL Initializing!" );
if
( !AfxInitExtensionModule( StepDLL, hInstance ) ) return
0;
new
CDynLinkLibrary( StepDLL ); } else
if ( dwReason == DLL_PROCESS_DETACH ) { TRACE0(
"DLL Terminating!" ); AfxTermExtensionModule(
StepDLL ); } return
1; } //
Задать идентификатор ресурсов unsigned
int WINAPI LIBRARYID() { return
IDR_LIBID; } //
Описания используемых функций void
WorkDocument(); //
Головная функция библиотеки void
WINAPI LIBRARYENTRY( unsigned int comm ) { //Прототип
вызываемой функции //по
работе с документом WorkDocument();
}
//
Работа с документом void
WorkDocument() { //Заполнение
структуры создаваемого документа DocumentParamT
DocsStruct;
TCHAR
str[]=_T("Иванов
А.Н."); //Определение
имени проекта lstrcpy(
DocsStruct.fileName,
_T("c:\\FirstDoc.cdw")
);
//Комментарий
к документу lstrcpy(
DocsStruct.comment,_T("Документ
создан Ивановым А.Н."));
//Информация
о создателе lstrcpy(
DocsStruct.author,
str);
//Режим
отображения документа: 0 - видимый, 1 -
скрытый DocsStruct.regim
= 0;
//Тип
документа - чертеж стандартный DocsStruct.type
= lt_DocSheetStandart;
//Формат
листа 0( А0 ) ... 4( А4 ) DocsStruct.sheet.stPar.format
= 4; //Кратность
формата DocsStruct.sheet.stPar.multiply
= 1;
//Расположение
штампа
DocsStruct.sheet.stPar.direct
= 0;
//Тип
штампа из указанной библиотеки для
спецификации DocsStruct.sheet.shtType
= 1;
//Имя
библиотеки оформления (Graphic.lyt)
DocsStruct.sheet.layoutName[0]
= _T('\0');
//Создаем
документ формата А4 reference
rDocument = CreateDocumentT( &DocsStruct );
//Определим
константы для расположения //для
позиционирования треугольника на
плоскости const
double x_pos=50; const
double y_pos=150;
//Отрисовка
контрольных точек Point
(0+x_pos,
0+y_pos,
1);
Point
(50+x_pos, 67+y_pos, 1); Point
(100+x_pos, 10+y_pos, 1);
//Отрисовка
сторон треугольника LineSeg(
0+x_pos, 0+y_pos, 50+x_pos, 67+y_pos, 1 ); LineSeg(
50+x_pos, 67+y_pos, 100+x_pos, 10+y_pos, 1 ); LineSeg(
100+x_pos, 10+y_pos, 0+x_pos, 0+y_pos, 1 );
//Сохраним
документ SaveDocument(
0, "c:\\FirstDoc.cdw"
);
//
Закрыть документ CloseDocument(
rDocument ); }
В основной части управления проектом «void WINAPI LIBRARYENTRY(unsigned int comm)» имеется единственная функция WorkDocument(), в которой изложены основы создания и управления параметрами документа. Для того, чтобы вывести на экран рабочее поле чертежа (фрагмента), необходимо заполнить значениями ряд разделов структуры DocumentParamT с последующим отображением документа на экране ЭВМ посредством следующей команды CreateDocumentT. В языке С++ структурой называется составной тип данных, который состоит из элементов разных типов. В API КОМПАС понятие структуры носит аналогичный характер, поэтому работа с типами данных осуществляется по тем же принципам.
Формат структуры параметров документа DocumentParamT:
regim –режим (0-видимый, 1-невидимый);
fileName- имя файла документа;
comment- комментарий к документу;
author- автор документа;
type- тип документа. Типы в системе КОМПАС могут принимать следующие значения:
lt_DocSheetStandart- чертеж стандартного формата (1) ;
lt_DocSheetUser- чертеж нестандартного формата (2) ;
lt_DocFragment- фрагмент (3) ;
lt_DocSpc- спецификация (4) ;
lt_DocPart3D- деталь(5) ;
lt_DocAssemble3D- сборка(6) ;
lt_DocTxtStandart- текстовый документ стандартный (7) ;
lt_DocTxtUser- текстовый документ нестандартный (8);
lt_DocSpcUser- спецификация - нестандартный формат (9).
sheet- Структура параметров оформления. Компоненты данной структуры отвечают за формат листа, кратность формата, расположение штампа, тип штампа и прочие.
После создания документа можно приступить к проектированию. В примере приведен вариант построения треугольника с помощью графических примитивов: LineSeg -создание отрезка прямой линии и Point -создание точки.
Формат команды LineSeg следующий:
reference LineSeg (double x1, double y1,double x2,double y2, unsigned int style) где,
x1, y1- координаты первой точки отрезка;
x2, y2- координаты второй точки отрезка;
style. Параметр style может иметь следующие значения для выбора системного стиля линии:
1 - основная линия;
2 - тонкая линия;
3 - осевая линия;
4 - штриховая линия;
5 - для линии обрыва;
6 - вспомогательная линия;
7 - утолщенная;
8 - штрихпунктирная линия с двумя точками;
9 - штриховая толстая линия;
10 - осевая толстая линия;
11 - тонкая линия, включаемая в штриховку;
12 - ISO штриховая линия;
13 - ISO штриховая линия (дл. пробел);
14 - ISO штрихпунктирная линия (дл. штрих);
15 - ISO штрихпунктирная линия (дл. штрих 2 пунктира);
16 - ISO штрихпунктирная линия (дл. штрих 3 пунктира);
17 - ISO пунктирная линия;
18 - ISO штрихпунктирная линия (дл. и кор. штрихи);
19 - ISO штрихпунктирная линия (дл. и 2 кор. штриха) ;
20 - ISO штрихпунктирная линия;
21 - ISO штрихпунктирная линия (2 штриха);
22 - ISO штрихпунктирная линия (2 пунктира);
23 - ISO штрихпунктирная линия (3пунктира);
24 - ISO штрихпунктирная линия (2 штриха 2 пунктира);
25 - ISO штрихпунктирная линия (2 штриха 3 пунктира).
Формат команды Point следующий:
reference Point (double x, double y, unsigned int style), где,
x,y-координаты построения точки;
style. Параметр style может иметь следующие значения:
0 – точка;
1 – крестик;
2 – х-точка;
3 – квадрат;
4 – треугольник;
5 – окружность;
6 – звезда;
7 – перечеркнутый квадрат;
8 – утолщенный плюс.
Запись документа на логический раздел физического накопителя осуществляется командой SaveDocument путем указания рабочего пути для сохранения данных, а завершение работы с документом реализуется вызовом инструкции «CloseDocument».
Результат работы созданной прикладной библиотеки показан на рис. 6.
Рис. 6. Создание документов 2D программным способом средствами API системы КОМПАС |