- •Введение
- •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. Твердотельное моделирование объектов в компас 3d
- •6.1. Построение твердотельных деталей посредством операций вращения и выдавливания
- •Элементы системы координат
- •Элементы детали
- •Конструктивные элементы
- •Операции
- •6.2. Построение фасок и скруглений в твердотельных моделях прикладных библиотек
- •6.3. Построение объектов в цвете
- •6.4. Работа со сборками
- •6.5. Включение в сборочные узлы твердотельных моделей без истории построения
- •6.6. Построение сборочных узлов и компонентов с параметрами посредством диалога
- •7. Пример Разработки твердотельных моделей компонентов и Сборочного узла направляющего патрубка
- •Заключение
- •Библиографический список
- •Оглавление
- •3 94026 Воронеж, Московский просп., 14
3.2. Функции вычисления пересечений
Команды данного раздела отвечают за вычисление пересечений геометрических объектов друг с другом.
Функция Perpendicular производит вычисление координат точки пересечения отрезка и перпендикуляра к нему, проходящего через заданную точку. Формат команды следующий:
void Perpendicular (double x, double y, double x1, double y1, double x2, double y2, double *xp, double *yp) где,
x,y- координаты точки;
x1, y1- координаты начальной точки отрезка;
x2, y2- координаты конечной точки отрезка;
xp, yp- координаты точки пересечения отрезка и перпендикуляра к нему, проходящего через заданную точку.
Пример использования:
double
x1,y1,x2,y2,xp,yp; x1=50;y1=0; x2=0;y2=50; Perpendicular
(0,0,x1,y1,x2,y2, &xp, &yp);
Point
(xp,yp,0);
Функция IntersectCirLin позволяет получить координаты точек пересечения окружности и прямой. Формат команды следующий:
void IntersectCirLin (double xc, double yc, double rad, double x, double y, double ang, int *kp, double *xp, double *yp) где,
xc, yc- координаты центра окружности;
rad- радиус окружности;
x, y- координаты точки на прямой;
ang- угол наклона прямой;
kp- число пересечений (от 0 до 2);
xp, yp- координаты точки пересечения.
Пример использования:
double
x, y;
int
k; double
x1=25,y1=25,r=15;
double
x2=0,y2=0,ang=45; Circle
( x1, y1, r, 0);
Line
( x2, y2, ang);
IntersectCirLin
(x1, y1, r, x2, y2, ang, &k, &x, &y); char
buf[128]; sprintf(buf,
"Количество пересечений = %i",
k);
::Message(buf);
Аналогично работают функции по определению координат пересечений прямой с отрезком, двух прямых, отрезков и окружностей.
3.3. Функции вычисления длин, расстояний, углов
Для ряда операций, позволяющих вести построение и определять положение объектов на плоскости, необходимо иметь информацию о расположении этих объектов-координат базовых точек, расстояния между ними и т.д. В систему Компас 3D интегрированы функции, позволяющие вычислять расстояния от точки до объекта, длины объектов, углы между объектами или между объектом и осью X.
Функция Angle производит вычисление угла (в градусах) между осью OX и вектором, заданным двумя точками. Формат команды следующий:
double Angle (double x1, double y1, double x2, double y2) где,
x1, y1- координаты начальной точки вектора;
x2, y2- координаты конечной точки вектора.
Функция вернет значение угла в градусах или 0, если команда некорректно определена.
Пример использования:
double
ang;
LineSeg
( 0, 0, 60, 20, 1);
LineSeg
( 0, 0, 60, 0, 1); ang
= Angle (0, 0, 60, 40); TCHAR
buf[50];
_stprintf(
buf, _T("Угол=
%3.2f"),ang); MessageT(
buf );
Функция DistancePntPnt позволяет получить расстояние между двумя точками. Формат команды следующий:
double DistancePntPnt (double x1, double y1, double x2, double y2) где,
x1,y1- координаты первой точки;
x2,y2-координаты второй точки.
П
double
length; Point(10,20,1); Point(201,-20,1); length
= DistancePntPnt (10,20, 201,-20); TCHAR
buf[50];
_stprintf(
buf, _T("Расстояние
между
двумя
точками=
%lf"), length); MessageT(
buf );
Функция ksViewGetDensity вызывает диалоговое меню, в котором определены значения плотности некоторых материалов. Формат команды следующий:
double ksViewGetDensity (void * HWindow) где,
HWindow- handle "родительского" окна или NULL.
В случае успешного выполнения функция вернет значение плотности выбранного материала. Плотность выбирается из системного файла плотностей graphic.dns.
Пример использования:
double
density = ksViewGetDensity(0); TCHAR
buf[50];
_stprintf(
buf, _T(" density = %2.3f г/мм3"),
density ); MessageT(
buf );
Выполнение программного кода в прикладной библиотеке приведет к вызову диалога, представленного на рисунке 24.
-
Рис. 24. Выбор значения плотности материалов из базы данных системного файла «graphic.dns»
Функция ksDistancePntLineForPoint позволяет произвести вычисление расстояния между заданной точкой и прямой, проходящей через две точки, отличные от базовой. Формат команды следующий:
double ksDistancePntLineForPoint (double x, double y, double x1, double y1, double x2, double y2) где,
x, y- координаты базовой точки;
x1, y1- координаты первой точки на прямой;
x2, y2- координаты второй точки на прямой.
Функция вернет значение расстояния в случае успешного выполнения.
Пример использования:
double
xb=100,yb=130; double
x1=-20,x2=70; double
y1=40,y2=-25; Point(xb,yb,0); LineSeg(x1,y1,x2,y2,0); double
length = ksDistancePntLineForPoint(xb,yb,x1,y1,x2,y2); TCHAR
buf[50];
_stprintf(
buf, _T("Расстояние от точки до
прямой=%.2f"), length); MessageT(
buf );