PK_ERROR_code_t PK_BODY_thicken_2 ( --- received arguments --- PK_BODY_t body, --- body to be thickened double front_default, --- default front offset double back_default, --- default back offset double tolerance, --- tolerance const PK_BODY_thicken_o_t *options, --- options --- returned arguments --- PK_TOPOL_track_r_t *const tracking, --- tracking information PK_BODY_thicken_r_t *const results --- status information ) Thickens a sheet body into a solid NOTE: This function supersedes PK_BODY_thicken, which is now obsolete. Specific Errors: PK_ERROR_cant_thicken thickening failure PK_ERROR_bad_tolerance proposed edge tolerance is too small PK_ERROR_not_sheet body is not a sheet body PK_ERROR_bad_thickness total thickness is zero PK_ERROR_inconsistent_offset the front (or the back ) offsets have inconsistent sign PK_ERROR_inconsistent_thicken the thicken sense is inconsistent PK_ERROR_not_a_unit_vector the thicken method is PK_thicken_method_punch_c and the punch direction is not an unit vector Introduction The sheet body is thickened by front_default outwards (i.e. in the direction of the face normal) and back_default inwards. Exceptional faces, which have offsets other that the default, are given in the option structure together with their front and back offset. The sense of the thicken for a given face, is the sign of the sum of the front and back offsets of that face. It is an error for this sense to vary with face. It is an error if the sign of the front offset varies with face. Similarly it is an error if the sign of the back offset varies with face It is an error if there is a face with front and back offsets such that the the thickness produced is within RES_linear of zero. Only manifold sheet bodies can be thickened. Some edge geometry on the sheet boundary may have to be approximated by SP-curves in order to generate a boundary curve on the offset faces. If this is necessary, such edges will have a tolerance less than or equal to the tolerance supplied through the tolerance argument. Two situations can give rise to changes in the topology : 1) Dealing with geometry which fails to offset. If it is known that the offset surface of a face would be self-intersecting an attempt is made to remove the face. For example, a blend may be removed from an edge. The investigation of self-intersection is not exhaustive, however, and it can occur that instances are not trapped. 2) Dealing with configurations which can be repaired. For instance an edge may offset to a point or a face become absorbed into the body. Checking options The extent to which checking is applied to the body is specified by the check_fa_fa field of the option structure. At present check_fa_fa field can only be used to turn on or off face-face checking, by setting it to PK_check_fa_fa_yes_c or PK_check_fa_fa_no_c respectively. If face-face checking is turned on, then face-face checks are done on the body in addition to default checks. For most applications face-face checking will be tuned off, which will give an adequate level of checking. Thickening which would lead to a self-intersecting or non-manifold solid is not allowed. Some of these cases will not be detected when face-face checking is switched off. In this case the resulting body will be invalid. Table of exact cases Boundary edges with the following curves on these surfaces will be treated exactly : Surface | Curve ----------------------------------------- Plane | Line, Circle, Ellipse or B-curve Cylinder | Line, Circle or B-curve equivalent Cone | Line, Circle or B-curve equivalent Sphere | Circle Torus | Circle Swept Surface or | Line, Profile curve or B-curve equivalent B-surface equiv | Spun Surface or | Circle, Profile curve or B-curve equivalent B-surface equiv | Cases handled Thickening only handles the cases where each vertex on the boundary of the sheet meets one of the following requirements. Either the vertex is smooth (surface normals constant on all adjoining faces) or both adjoining boundary edges must have curves of the types treated exactly (see table above) or the thickening is into the angle of the edge (i.e. convex edges inwards only and concave edges outwards only). Tracking Information The function returns tracking information relating to which topology was split, deleted and created. For more information regarding these structures, please refer to the PK documentation for the PK_TOPOL_track_r_t structure. Returned Status and Error Information If this function returns a value of PK_ERROR_no_errors, the result of the "thicken" operation will be indicated by the value of the status field within the results structure. There are two values for the status field which can indicate a successful operation : o PK_local_status_ok_c : Indicates that the operation was successful and the modified body is valid. o PK_local_status_nocheck_c : Indicates that the operation was successful, but the check_fa_fa field in the option structure was set to PK_check_fa_fa_no_c. The remaining `PK_local_status_...' codes indicate some failure. The failure code is normally accompanied by an array of entities which indicate where the failure or problem occurs. For more information regarding these failure codes and the returned error entities, please refer to the PK documentation for the PK_BODY_thicken_r_t structure.