## Equal Curve Properties C3D Solver supports equality of four curve properties: lengths GCE_AddEqualLength, radii GCE_AddEqualRadius, offsets of equidistant curves GCE_AddEqualOffset, and curvatures at specified points GCE_AddEqualCurvature. Let's explore each of these types. The lengths of two curves can be equalized using the GCE_AddEqualLength function. ```cpp constraint_item GCE_AddEqualLength(GCE_system gSys, geom_item curve1, geom_item curve2); ``` It takes a constraint system **gSys** and two curves, **curve1** and **curve2**, and returns a descriptor of a new constraint. The Equal Length constraint can be applied to curves that either have endpoints (i.e., queries for their GCE_FIRST_END and GCE_SECOND_END coordinates return a result other than GCE_NULL_G) or are closed. This constraint is supported for any combination of curves for which the [GCE_AddLength](./Length_Fixing.md) constraint is available. The radii of two curves can be equalized using the GCE_AddEqualRadius function. ```cpp constraint_item GCE_AddEqualRadius(GCE_system gSys, geom_item c1, geom_item c2); ``` It takes a constraint system **gSys** and two curves, **curve1** and **curve2**, and returns a descriptor of a new constraint. The Equal Radius constraint can be applied to curves for which querying the GCE_RADIUS value is valid. The offsets of two equidistant curves can be equalized using the GCE_AddEqualOffset function. ```cpp geom_item GCE_AddEqualOffset(GCE_system gSys, geom_item curve1, geom_item curve2); ``` It takes a constraint system **gSys** and two equidistant curves, **curve1** and **curve2**, and returns a descriptor of a new constraint. The Equal Offset constraint can be applied to curves for which querying GCE_OFFSET value is valid. The curvatures at given points on two curves can be equalized using the GCE_AddEqualCurvature function. ```cpp constraint_item GCE_AddEqualCurvature(GCE_system gSys, geom_item curves[2], var_item tPars[2]); ``` It takes a constraint system **gSys**, two curves **curves**, and parameters (if required), in which curvatures should be equal, and returns a descriptor of a new constraint If given a GCE_CIRCLE or a GCE_BOUNDED_CURVE, based on a circle, the corresponding tPars\[i\] is expected to be set to GCE_NULL_V, since the curvature of a circle is same at every point. For a GCE_LINE or a GCE_LINE_SEGMENT the method is applied only in conjunction with GCE_SPLINE.