Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000392.doc
Скачиваний:
18
Добавлен:
30.04.2022
Размер:
2.94 Mб
Скачать

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 системы КОМПАС