- •Гоувпо «Воронежский государственный технический университет» м.И. Чижов а.Н. Юров
- •Введение
- •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
5.2. Построение фигур
Для построения на плоскости фигур предлагается пример прикладной библиотеки Компас, код которой приведен ниже.
#include
"stdafx.h" #include
<afxdllx.h>
#include
"resource.h" #include
"math.h" #include
<libtool.h> #include
<ldefin2d.h> #ifdef
_DEBUG #define
new DEBUG_NEW #undef
THIS_FILE static
char THIS_FILE[] = __FILE__; #endif
#define
PIE 3.1415926535 class
two_d_project { public: //Построение
параболоида void
paraboloid(); //Построение
графических объектов void
graphline(); }
*two_d;
//
Специальная структура используемая в
течении инициализации 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; }
//
Получить идентификаторы инструментальных
и компактных панелей int
WINAPI LibToolBarId( int barType,
//
Тип запрашиваемой панелей ( 0 - компактная
панель, 1 –
//
простая инструментальная панель )
int
index
) // Индекс панели { if
( !barType ) return !index ? COMPACT_BAR1 : -1; else
return
-1;
} //
Головная
функция
библиотеки void
WINAPI LIBRARYENTRY( unsigned int comm ) { if
( ksGetCurrentDocument( 1 ) ) // Получить активный
2D документ { switch
( comm ) { case
1 : two_d->paraboloid(); break;
case
2 : two_d->graphline(); break;
} } else Message("Документ
не активизирован или\nне является
листом/фрагментом" ); } //
Построение
параболоида void
two_d_project::paraboloid() { double
z,s,zc,x,y; for
(z=-5;z<4;z+=0.15) {
s=0.707*z;
zc=pow(z,2);
Bezier( 0, 0 ); for
(x=-5;x<5;x+=0.15)
{y=0.6*(zc+x*x); double
xt=0+6*(x+s);
double yt=6*(y+s);
Point (xt,yt,0);
} //
Функция EndObj возвращает указатель на
созданный
//
объект
кривой Безье reference
rBezier1 = EndObj();} char
*string="Параболоид
вида:
y=0,6*(x*x+z*z)"; Text(-60,-20,0,7,0,0,string);
}//
Фигуры void
two_d_project::graphline() { int
i=72,j=0; double
px=100,py=100,angle=0; while
(i>0) {
j++;
//
Структура параметров прямоугольника
RectangleParam
parRectangle;
memset(
&parRectangle, 0, sizeof( parRectangle ) );
//Координаты
базовой точки прямоугольника - одной
из его вершин parRectangle.x
= 0;
parRectangle.y
= 0; parRectangle.ang
= angle; //
Высота
прямоугольника
parRectangle.height
= px;
//
Ширина прямоугольника
parRectangle.width
= py;
//
Стиль линии
parRectangle.style
= 1;
//
Динамический массив структур параметров
скругленных (или
//
усеченных) углов
parRectangle.pCorner
= CreateArray( CORNER_ARR, 0 ); //
Создать
прямоугольник ksRectangle(
&parRectangle, 0 );
i--; angle+=5; }//спираль
Архимеда //r-Радиус
для расчета int
r,b; double x,y,a=0; ReadIntT(
_T("Введите значение радиуса (ввод
1-20)"),
3,
1,
20,
&r); ReadIntT(
_T("Введите число итераций (ввод
1-1000)"),
1,
10,
1000,
&b); float
x0=0; float
y0=100; Bezier(
0, 0 ); Point
(x0, y0,0); for
(int i=1;i<b;i++)
{ x=x0-(r*a*cos(a)); y=y0+(r*a*sin(a)); Point
(x, y,0); a+=0.1;
} EndObj();
//Логарифмическая
спираль
int
n; ReadIntT(
_T("Введите количество витков(ввод
1-10)"),
4,
1,
10,
&n); double
r,a=0,arad;
while
(a<360*n) { arad
= a * PIE / 180; r=2*exp(0.1
* arad);
Point((r*sin(arad)),(r*cos(arad)),0); a+=0.1; } }
Результаты работы прикладной библиотеки представлены на рис. 24 и 25.
Рис. 24. Построение параболоида программным способом |
Рис. 25. Построение логарифмической спирали |