Adding and deleting geometric restrictions

You can use the following call to add the majority of geometric or dimension constraints:

GCM_constraint GCM_AddConstraint(GCM_system gSys, const GCM_g_record & cRec)    

It requires completion of the cRec data structure that stores the data on the cRec.type type and the argument array of the cRec.args constraint. The function returns a descriptor of a new constraint registered in the gSys system.

As an example, let us add a constraint right now – coincidence of point and plane:

GCM_system gSys = GCM_CreateSystem();
GCM_c_record cRec; // The record of point and plane coincidence.
cRec.type = GCM_COINCIDENT;
/*
Some point and plane as arguments of the coincidence.
*/
cRec.args[0] = GCM_AddPoint(gSys, MbCartPoint3D::origin);
cRec.args[1] = GCM_AddGeom(gSys, GCM_Plane(MbCartPoint3D(0,0,1), MbVector3D::zAxis));
cRec.args[2] = GCM_NO_ALIGNMENT; // The alignment option does't matter in point-plane case.
/*
Add coincidence to the system.
*/
GCM_constraint cItem = GCM_AddConstraint(gSys, cRec);
/*
Finalize the constraint system.
*/
GCM_RemoveConstraint(gSys, cItem);
GCM_RemoveSystem(gSys);

There is a certain sequence of completing args arguments in the GCM_c_record structure for each constraint type. In the above example, we have demonstrated that the first two elements cRec.args[0] and cRec.args[1] of the GCM_COINCIDENT constraint are descriptors of the Coincidence constraint, while the third element cRec.args[2] defines the alignment option.

GCM_c_record. The table below contains the template for completing the GCM_c_record structure which is sent to the GCM_AddConstraint method for various constraint types.

Table 1 - Data argument types for various constraints (GCM_c_record completion)

Constraint type

type

type

args[0]

args[1]

args[2]

args[3]

args[4]

GCM_COINCIDENT

GCM_geom

GCM_geom

GCM_alignment

GCM_CONCENTRIC

GCM_geom

GCM_geom

GCM_alignment

GCM_PARALLEL

GCM_geom

GCM_geom

GCM_alignment

GCM_PERPENDICULAR

GCM_geom

GCM_geom

GCM_alignment

GCM_TANGENT

GCM_geom

GCM_geom

GCM_alignment

GCM_tan_choice

GCM_SYMMETRIC

GCM_geom

GCM_geom

CM_geom

GCM_alignment

GCM_DISTANCE

GCM_geom

GCM_geom

double

GCM_alignment

GCM_ANGLE (планарный угол)

GCM_geom

GCM_geom

GCM_geom (ось вращения)

double

GCM_alignment

GCM_ANGLE (3D угол)

GCM_geom

GCM_geom

GCM_NULL (без оси)

double

GCM_alignment

GCM_RADIUS

GCM_geom

GCM_geom

GCM_alignment is an option value considered in GCM_alignment option. GCM_tan_choice values will be described in sections dedicated to the tangency constraint (GCM_TANGENT). Table 32.10.1. lists only interpretation rules for data types accepted by the GCM_c_arg element type in GCM_c_record::args array for a certain constraint type.

Therefore, the GCM_c_record data structure is a unified method for setting a range of constraints using only one method – GCM_AddConstraint. However, there are alternative ways to add constraints for convenient development in GCM API that do not require completing the GCM_c_record.

You can use the following function to add any binary constraints that bind a pair of geometric objects:

GCM_constraint GCM_AddBinConstraint(GCM_system gSys, GCM_c_type cType
                                     , GCM_geom g1
                                   , GCM_geom g2
                                   , GCM_alignment aVal
                                   , GCM_tan_choice tVar)

Input parameters of the function:

  • gSys – descriptor of the constraint system;

  • cType – type value from the following list: GCM_COINCIDENT, GCM_PARALLEL, GCM_PERPENDICULAR, GCM_TANGENT, GCM_CONCENTRIC;

  • g1, g2 – a pair of geometric object descriptors, binary constraint arguments;

  • aVal – alignment option making it possible to select mutual orientation for objects (see GCM_alignment option);

  • tVar – tangency selection option for selecting a method for executing constraints of the GCM_TANGENT type.

The result of the call is the binary constraint descriptor binding g1 and g2 objects with the selected alignment/tangency parameters aVal, tVar.

The dimension constraint of the GCM_DISTANCE type that defines the distance between objects is created using the following call:

GCM_constraint GCM_AddDistance(GCM_system gSys, GCM_geom g1, GCM_geom g2, double dVal, GCM_alignment aVal)  

The call uses input data g1, g2, aVal – the same as for the GCM_AddBinConstraint function; numeric value dVal – sets the dimension value.

The same algorithm is used for calls that define the angular dimension, mirror symmetry, and radial dimension: GCM_AddAngle, GCM_AddSymmeric,GCM_FixRadius. They also do not require completing the GCM_c_record transit structure.