Допуски

Много методов принимают значение допуска как один из их параметров. Это значение имеет AcGeTol класс и всегда имеет значение по умолчанию, как определено в AcGeContext:: gTol. Функции типа isClosed () и isPlanar () вычисляют, являются ли точки начала и оконечные точки в пределах определенного допуска перед возвращением Булева значения. Вы можете изменять допуск для одного специфического функционального запроса, или Вы можете изменять глобальное значение допуска.

AcGeTol класс обеспечивает две функции для установки допуска для точек и векторов:

void

setEqualPoint(double);

void

setEqualVector(double);

AcGeTol класс также обеспечивает две функции для получения допуска для точек и векторов:

double equalPoint() const;

double equalVector() const;

EqualPoint и equalVector значения допуска используются следующим образом:

§  Две точки, p1 и p2, являются равным если

( p1 - p2) .length () < = equalPoint

§  Два вектора, v1 и v2, являются равным если

( v1 - v2) .length () < = equalVector

§  Два вектора, v1 и v2, являются параллельным если

( v1/v1.length () - v2/v2.length ()) .length () < equalVector

ИЛИ (v1/v1.length () + v2/v2.length ()) .length () < equalVector

§  Два вектора, v1 и v2, являются перпендикулярным если

abs((v1.dotProduct(v2))/(v1.length()*v2.length())) < = equalVector

§  Две линии или лучи - параллельный (перпендикуляр), если их направленные векторы - параллельный (перпендикуляр)

§  Две линии равен, если точки в параметре 0 равны, и их направления равны

НЕ нашли? Не то? Что вы ищете?

ОБРАТИТЕ ВНИМАНИЕ, что эти правила подразумевают, что две линии - близко к друг другу как точечные множества в части пространства моделирования диаметра diam только, если допуск equalVector установлен более плотным чем equalPoint/diam.

Использование базовых геометрических типов

Следующие примеры показывают некоторых из обычно используемых функций и операторов в точке, векторе, и матричных классах. Эти примеры используют трехмерные классы, но большинство их также обращается к 2-ым классам также.

Заданный по умолчанию конструктор для точек и векторов инициализирует все координаты к 0.

Точки и векторы могут также быть созданы, определяя их координаты следующим образом:

AcGePoint3d p1 (2.0,5.0, -7.5), p2, p3 (1.0,2.0,3.0);

AcGeVector3d v1 (3.0,4.0,5.0), v2 (0.0,1.0, -1.0), v3;

Точка и векторные классы обеспечивают +, + =, -, и - = операторы. Эти операторы позволяют точки и векторы использоваться аналогичным способом, поскольку встроенные типы, типа удваиваются и целые числа. Следующее - примеры добавления и вычитания точек и векторов:

p2 = p1 + v1; // Set p2 to sum of p1 and v1.

p1 += v1; // Add v1 to p1.

p3 -= v1; // Subtract v1 from p3.

v3 = v1 + v2; // Set v3 to sum of v1 and v2.

v1 + = v2; // Прибавляют v2 к v1.

v3 = v1 - v2; // Набор v3 к различию v1 и v2.

Не имеется никакого + оператор для добавления двух точек; однако, точка может быть преобразована к вектору, который может тогда быть добавлен к другой точке:

p1 + = p2.asVector ();

Следующее - примеры того, как получить негатив вектора:

v2 = - v1; // Набор v2 к негативу v1.

v1.negate (); // Это эквивалентен v1 = - v1.

Следующее - примеры различных способов масштабировать вектор:

v1 * = 2.0; // Удваивает длину v1.

v3 = v1 / 2.0; // Набор v3 к половине длины v1.

v1.normalize (); // Делают v1 единичным вектором.

Точка и векторные классы содержат множество функций запроса для вычислительных расстояний и длин:

double len = v2.length(); // Длина v2.

len = p1.distanceTo (p2); // Расстояние от p1 до p2.

Следующая функция очень полезна для вычисления угла между двумя трехмерными векторами. Следующие возвращения угол между v1 и v2, где угол принят, чтобы быть против часовой стрелки относительно v3 (v3, приняты, чтобы быть перпендикулярными к v1 и v2):

angle = v1.angleTo (v2, v3);

Следующие функции возвращают Булево значение (TRUE или FALSE) и могут использоваться внутренние условные операторы:

if (v1.isZeroLength ())

if (v1.isParallelTo (v2))

if (v1.isPerpendicularTo (v2))

Векторный класс содержит функции для обычных векторных операций:

len = v1.dotProduct (v2);

v3 = v1.crossProduct (v2);

Заданный по умолчанию конструктор для матрицы инициализирует матрицу к единичной матрице:

AcGeMatrix3d mat1, mat2, mat3;

Следующее вращает p3 90 градусов относительно линии, определенной p1 и v1:

mat1.setToRotation (kPi/2.0, v1, p1);

p3 = mat1 * p2;

Матрица может быть инвертирована, если это не сингулярно:

if (!mat2.isSingular())

mat2.invert();

* оператор определен для связывания матриц:

mat3 = mat1 * mat2;

Следующие испытания, содержит ли матрица равное масштабирование во всех трех координатах (то есть это не изменяет форму любого примитива, к которому это применяется):

if (mat. isUniScaledOrtho ())

Использование классов линии и плоскостей

Следующие примеры показывают некоторых из обычно используемых функций в классах плана и линии. Эти примеры показывают, как использовать линию и классы плана для основных линейных операций алгебры. Хотя примеры используют классы 3D, большинство функций, которые не вовлекают класс плана - также могут использоваться в классах 2D. Эти примеры также используют бесконечную линию и классы плана, но они одинаково имеют силу для долей линии, лучей, и ограниченных планов.

Заданный по умолчанию конструктор линии создает линию по X оси. Заданный по умолчанию конструктор плана создает план XY:

AcGePoint3d p1 (2.0,5.0, -7.5), p2;

AcGeLine3d line1 (p1, v1), line2;

AcGePlane plane1 (p1, v1), plane2;

Вышеупомянутый конструктор для line1 создает линию через p1 в направлении v1. Конструктор для plane1 создает план через p1 и нормаль к v1. Таким образом, line1 перпендикулярен к plane1.

Следующие функции возвращают определение плана или линию:

p1 = line1.pointOnLine (); // Произвольная точка на линии.

v1 = line1.direction (); // вектор Руководства{*направления*} линии.

p1 = plane1.pointOnPlane (); // Произвольная точка на плане.

v1 = plane1.normal (); // Нормальный вектор плана.

direction() и normal() функции всегда возвращает единичные векторы.

Следующие функции возвращают самую близкую точку на линии или плане к сути p1:

p2 = line1.closestPointTo (p1);

p2 = plane1.closestPointTo (p1);

Следующие функции возвращают расстояние между точкой и линией, или план (эти расстояния будет тот же самый как расстояния между p1 и p2 выше):

double len = line1.distanceTo (p1);

len = plane1.distanceTo (p1);

Следующие функции возвращают Булево значение (TRUE или FALSE) и могут использоваться внутри условного оператора. Первый два испытательный, если точка p1 находится на line1 или plane1, и третьих испытаниях если line1 находится на plane1:

if (line1.isOn (p1))

if (plane1.isOn (p1))

if (line1.isOn (plane1))

Следующие функции проверяют, если линии или планы параллельны, перпендикулярны, или совпадающие:

if (line1.isParallelTo (line2))

if (line1.isParallelTo (plane1))

if (line1.isPerpendicularTo (line2))

if (line1.isPerpendicularTo (plane1))

if (line1.isColinearTo (line2))

if (plane1.isParallelTo (plane2))

if (plane1.isPerpendicularTo (plane2))

if (plane1.isCoplanarTo (plane2))

Следующие функции возвращают пересечения линий и планов:

if (line1.intersectWith (line2, p1))

if (line1.intersectWith (plane1, p1))

if (plane1.intersectWith (plane2, line1))

Параметрическая Геометрия

Следующие разделы обсуждают работу параметрической геометрии.

Кривые

Кривые и поверхности в AcGe библиотеке параметрические. Кривая - результат отображения интервала реальной линии в 2D или 3D пространстве и моделируется использованием функции вычислителя с одним параметром, типа f (u). Точно так же поверхность - отображение 2D области в пространство моделирования 3D использование функции вычислителя, основанной на двух параметрах например, f (u, v). Каждый 2D и 3D класс кривой имеют getInterval () функция, которая возвращает параметрический интервал. Эта функция имеет две формы: первая возвращения интервал; вторая возвращает интервал также как точку начала и оконечную точку кривой.

ОБРАТИТЕ ВНИМАНИЕ, является ли интервал неограничен в любом направлении, точках начала, и оконечные точки не имеют значения.

Характеристики

Кривые имеют следующие характеристики:

§  Ориентация

§  Периодичность

§  Замкнутое выражение

§  Planarity

§  Длина

Ориентация кривой определена направлением, в котором его параметр увеличивается. Вы можете использовать AcGeCurve2d:: reverseParam () или AcGeCurve3d:: reverseParam () функция, чтобы полностью изменить ориентацию кривой.

Некоторые кривые периодические, что означает, что они повторяют себя после некоторого интервала. Например, период круга - 2p. Используйте эти функции, чтобы определить, является ли кривая периодической:

Adesk::Boolean

AcGeCurve2d::isPeriodic(double& period) const;

Adesk::Boolean

AcGeCurve3d::isPeriodic(double& period) const;

Замкнутая кривая имеет точки начала и оконечные точки, которые являются тем же самый. Кривые могут быть или закрыты или открытый. Используйте эти функции, чтобы определить, закрыта ли кривая:

Adesk::Boolean

AcGeCurve2d::isClosed(

const AcGeTol&=AcGeContext::gTol) const;

Adesk::Boolean

AcGeCurve3d::isClosed(

const AcGeTol&=

AcGeContext::gTol) const;

Кривая 3D может быть плоска (значение, что все его точки постоянно находятся в том же самом плане) или неплоский. Используйте эту функцию, чтобы определить, является ли кривая 3D плоской:

Adesk::Boolean

AcGeCurve3d::isPlanar(

AcGePlane&,

const AcGeTol&=AcGeContext::gTol) const;

Учитывая два значения параметра, Вы можете получить длину кривой между этими двумя значениями, использующими следующие функции:

double

AcGeCurve2d::length(

double fromParam, double toParam,

double=AcGeContext::gTol. equalPoint()) const;

double

AcGeCurve3d::length(

double fromParam, double toParam,

double=AcGeContext::gTol. equalPoint()) const;

Вы можете использовать AcGeCurve2d:: evalPoint () и AcGeCurve3d:: evalPoint () функции, чтобы получить точку пространства модели, которая соответствует данному параметрическому значению. Если ваше приложение исполняет оценку часто, вы вероятно найдете AcGePointOnCurve3d, и AcGePointOnCurve2d классифицирует более эффективный (см. “ Специальные Классы Оценки ” на странице 738). Функции кривой для оценки точек следующие:

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132