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

2. Работа с графическими объектами на плоскости

Создание объектов на плоскости в КОМПАС осуществляется посредством вызова последовательности команд, представляющих собой API набора экспортных методов и классов. Ряд функций будет рассмотрен непосредственно в практических примерах проектируемых прикладных библиотек, приведенных далее по тексту, описания и примеры использования остальных команд можно взять из комплекта документации SDK, входящего в состав дистрибутива системы КОМПАС. Если документация в виде отдельной подпапки отсутствует в Вашей конфигурации, возможно, придется произвести повторную установку ПО КОМПАС и включить модуль с комплектом документации, информационной поддержкой, а также с примерами.

В общем случае, спроектированная библиотека работает с новым или открытым документом, статус которого объявлен как активный (исключение составляют библиотеки расчетного уровня, использующие свои диалоговое окна ввода-вывода). В системе КОМПАС 3D доступны к разработке программным способом следующие документы:

- чертеж;

- фрагмент;

- текстовый документ;

- спецификация;

- сборка;

- деталь.

В ряде случаев быстрее и проще создать нужный тип документа непосредственно в 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 );

}

Рис. 8. Сборка и компоновка прикладной библиотеки в интегрированной среде разработки Microsoft Visual Studio 2010

Разработка библиотеки была выполнена в среде Visual Studio 2010, включала ряд файлов, кроме исходного кода, которые требовались для подключения вспомогательных средств и хранения ресурсов приложения. Среда разработки представлена на рисунке 8. Листинг прикладной библиотеки подробно прокомментирован в исходном коде, однако ряд моментов следует рассмотреть подробнее. В основной части управления проектом «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».

Результат работы созданной прикладной библиотеки показан на рисунке 9.

Рис. 9. Создание чертежа программным способом средствами API системы КОМПАС