PK_ERROR_code_t PK_BODY_thicken ( --- received arguments --- PK_BODY_t body, --- sheet body to be thickened double front, --- thickness on front of face double back, --- thickness on back of face double tolerance, --- tolerance for SP-curve conversion PK_LOGICAL_t face_face_check, --- do face face checks --- returned arguments --- int *const n_topols, --- number of topols PK_TOPOL_t **const old_topols, --- original topology (optional) PK_TOPOL_t **const new_topols --- new topology (optional) ) Thickens a sheet body into a solid NOTE: This function is obsolete and has been superseded by PK_BODY_thicken_2 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_cant_get_point failed to find vertex geometry PK_ERROR_cant_get_curve failed to find edge geometry PK_ERROR_cant_offset surf failed to offset or face could not be deleted PK_ERROR_cant_get_side_surf failed to find side surface PK_ERROR_cant_get_side_curve failed to find side curve PK_ERROR_point_contact point contact found in sheet body Introduction The sheet body is thickened by front outwards (i.e. in the direction of the face normal) and back inwards. Either front or back may be negative, but the total thickness must be non-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 face_face_check argument. If face_face_check is true then face-face checks are done on the body in addition to default checks. For most applications setting face_face_check false 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 checks are not done, 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). old_topols and new_topols return args Each new face in the resulting body will have been generated by either a face, an exterior edge or a vertex in the original sheet. The pairs of original faces, edges or vertices and corresponding new faces are returned in the old_topols and new_topols arguments. Both lists may contain null tags where faces have vanished. If the total thickness is positive the tag of a face in the original body will remain on the front of the resulting body with the same sense otherwise it will be on the back with the opposite sense. Error handling When an error occurs, the function will, where possible, make extra information regarding the error available to the application by means of a GROUP. This GROUP is accessible from the standard form of the error. Note that, while the members of the GROUP will be objects which existed before the call (and so will survive rollback), the GROUP itself will be destroyed by rollback. The members of the GROUP will be as follows: PK_ERROR_cant_offset 1 FACE Failed to offset or face could not be deleted PK_ERROR_cant_get_point 1 VERTEX Failed to find new geometry for existing vertex n FACEs Failed to find geometry for new vertex. PK_ERROR_cant_get_curve 1 EDGE Failed to find new geometry for existing edge n FACEs Failed to find geometry for new edge PK_ERROR_cant_get_side_curve 1 VERTEX Failed to find side curve PK_ERROR_cant_get_side_surf 1 EDGE Failed to find side surface PK_ERROR_face_check_fails 1 FACE Face which failed check PK_ERROR_face_face_check_fails 2 FACEs Pair of faces where inconsistency found. PK_ERROR_point_contact 1 VERTEX Vertex where point contact found. This function is not supported for general bodies.