Добавление и удаление геометрических объектов

Основным предметом вычислений геометрического решателя являются геометрические объекты, поэтому формирование системы ограничений начинается с того, что приложение объявляет в системе ограничений геометрические объекты, которым предстоит стать аргументами ограничений.

Каждый геометрический объект, объявленный в системе ограничений, получает свой уникальный идентификатор – дескриптор типа geom_item, а его геометрический тип (geom_type) остается неизменным в течении жизни объекта. Ниже приведены вызовы API C3D Solver, добавляющие геометрические объекты в систему.

Точка добавляется с помощью метода

geom_item GCE_AddPoint(GCE_system gSys, GCE_point pVal).

Результатом функции является дескриптор геометрической точки, принадлежащей системе ограничений gSys. Параметр pVal задает начальные значения координат точки <X,Y>.

Прямая добавляется с помощью метода

geom_item GCE_AddLine(GCE_system gSys, GCE_line lVal).

Результатом функции является дескриптор прямой на плоскости, принадлежащей системе ограничений gSys. Параметр lVal задает начальные значения позиции lVal.p и нормали lVal.norm прямой.

Окружность добавляется с помощью метода

geom_item GCE_AddCircle(GCE_system gSys, GCE_circle cVal).

Результатом функции является дескриптор окружности, принадлежащей системе ограничений gSys. Параметр cVal задает начальные значения центра cVal.centre и радиуса cVal.radius.

Эллипс добавляется с помощью метода

geom_item GCE_AddEllipse(GCE_system gSys, GCE_ellipse eVal).

Результатом функции является дескриптор эллипса, принадлежащего системе ограниченийgSys. Параметр eVal определяет начальные значения эллипса:

<eVal.centre, eVal.direct, eVal.majorR, eVal.minorR>, означающие соответственно центр, направляющий вектор и радиусы по главной и минорной осям.

Сплайн добавляется с помощью метода

geom_item GCE_AddSpline(GCE_system gSys, GCE_spline spl).   

Результатом функции является дескриптор сплайна, принадлежащего системе ограничений gSys. Структура данных spl определяет сплайн в начальном состоянии. Подробности, связанные со сплайновой кривой и способами его определения, рассмотрены в параграфе Сплайновые кривые.

Параметрическая кривая общего вида добавляется с помощью метода

geom_item GCE_AddParametricCurve(GCE_system gSys, const MbCurve & crv).

Результатом функции является дескриптор параметрической кривой, добавленной в систему ограничений gSys. Объект crv полностью определяет абстрактное математическое описание кривой в параметрической форме. Подробнее класс двумерной кривой общего вида обсуждается в параграфе Двумерная кривая MbCurve. Надо заметить, что тип данных MbCurve входит в иерархию классов геометрического ядра C3D, а значит его время жизни регулируется счетчиком ссылок. Другими словами система ограничений гарантирует действительность экземпляра MbCurve, пока параметрическая кривая не будет удалена из системы. Подробнее о работе с параметрической кривой рассказывается в параграфе Параметрические кривые общего вида.

Ограниченная кривая добавляется с помощью метода

geom_item GCE_AddBoundedCurve(GCE_system gSys, geom_item curve, geom_item p[2]).    

Результатом функции является дескриптор ограниченной кривой, принадлежащей системе ограничений gSys. Созданная кривая основывается на кривой curve и будет представлять её участок, ограниченный концевыми точками p[0] и p[1]. Данный метод фактически связывает три объекта – базовую кривую и две точки в единый объект и автоматически обеспечивает два ограничения «точка на кривой» для концевых точек. Фрагмент кода ниже показывает пример создания дуги окружности:

GCE_system gSys = GCE_CreateSystem();
GCE_circle circPars; // Circle values
GCE_point endP1, endP2; // Coordinates of the end points.
// ...  
// It is required to insert the code that assigns start values of the circle and its endpoints. 
// ...
geom_item p[2] = { GCE_AddPoint(gSys, endP1), GCE_AddPoint(gSys, endP2) };  
geom_item circItem = GCE_AddCircle( gSys, circPars ); // Create a circle. It's a base curve of the arc.
geom_item arc = GCE_AddBoundedCurve( gSys, circItem, p ); // Create the circular arc.
// ...
GCE_RemoveSystem( gSys );

Аналогично с помощью вызова GCE_AddBoundedCurve() можно создавать дуги эллипса, участки на параметрической кривой, отрезки прямой и т.д. Ограниченная кривая, созданная на основе прямой, называется отрезком, а все ограничения действующие для прямой также применимы для отрезка.

Любой геометрический объект, добавленный одним из вышеперечисленных методов, свободный от ограничений или размеров, может быть удален вызовом метода

bool GCE_RemoveGeom(GCE_system gSys, geom_item g).  

Данный метод удаляет геометрический объект из системы и делает его дескриптор g не действительным. Функция вернет true в случае успешного выполнения. Функция вернет значение false, а удаление не будет исполнено, если геометрический объект на момент вызова является аргументом одного из ограничений. Чтобы узнать доступен ли геометрический объект для удаления методом GCE_RemoveGeom, можно воспользоватьсяь функцией GCE_IsConstrainedGeom. Допускается удаление геометрического объекта, на котором основаны другие объекты, раньше других. Например, точки концов или базовая кривая могут быть удалены раньше граничной кривой, которая на них основана, однако их неизбежное удаление откладывается до тех пор, пока не будет удален последний из объектов, в которых они участвуют.