PK_ERROR_code_t PK_BODY_apply_knit_pattern ( --- received arguments --- const PK_BODY_t body, --- target body const PK_BODY_knit_pattern_t *knit_pattern, --- knitting pattern --- to be applied const PK_BODY_apply_knit_pattern_o_t *options, --- options --- returned arguments --- PK_BODY_knit_result_t *const knit_result --- status, edges not knit ) This function assembles a composite sheet or solid body by merging paired edge in the knit pattern Specific Errors: PK_ERROR_corrupt_body Corrupted target body PK_ERROR_bad_type bad type PK_ERROR_wire_body An edge in the pattern is from a wire body PK_ERROR_no_eds_from_target No edges in the pattern are from target body PK_ERROR_instanced_tools An edge is from an instanced (non-target) body PK_ERROR_duplicate_array_item The same edge appears in both lists or twice in one of the lists PK_ERROR_not_in_same_partition Edges are not all in the same partition PK_ERROR_general_body One of the edges is owned by a general body This function joins a number of faces or bodies together by fusing coincident edge topology. This process is henceforth referred to simply as "knitting"; it should be noted that it is a purely topological operation which will NOT perform any geometric checks whatsoever. body is the body the application wishes to hold the final result of the knitting operation. All the other body topology to be joined onto body is supplied indirectly in the two arrays of edges held in the knitting pattern supplied in knit_pattern. body must be a solid or sheet body, and all edges in the knitting pattern must be edges of solids and/or sheets. All bodies except body involved in the knit will be destroyed. The edges in the edges array within the knitting pattern will survive the knit while those in matches array of the same pattern will be destroyed. The outer shell of body will also be the outer shell of the result. The two edge arrays of the knitting pattern specify matching edge pairs to be fused together. These must not contain duplicate entries. In addition, at least one edge from the target body must appear in the pattern and any edge not in that target body must not come from an instanced body. Pairs of edges in corresponding positions in the edges and matches arrays of the knitting pattern will be knitted together, provided that these corresponding edges satisfy the following: (1) they match up 1:1, i.e. every edge in edges has ONE partner in matches (2) they have the same number of distinct vertices. (3) an edge in sheet body has only one adjacent face and a face in a solid body has one adjacent face with a surface attached and one without. The 1:1 matching is done automatically by other routines in the most common uses of PK_BODY_apply_knit_pattern. In Partial Booleans the pattern edge lists are made up by PK_BODY_imprint_body and then further filtered by PK_BODY_identify_facesets. PK_BODY_find_knit_pattern can also be used to infer the connectivity of an assemblage of sheets. The application can, of course, create a knitting pattern itself, though it then runs the risk of creating an inconsistent body if geometric tolerance requirements are not met. The option field body_type enables the application to force the type (PK_BODY_sewing_solid_c or PK_BODY_sewing_sheet_c) of the result body. If the token PK_BODY_sewing_any_c is supplied then a solid will be created if possible (i.e. if the knitting operation encloses a volume) and a sheet will be created otherwise. The option field sort_face_shells enables the application to control whether PK_BODY_apply_knit_pattern attempts to sort the resulting faces into their respective shells. This operation will not need to be done when PK_BODY_apply_knit_pattern is used within a partial Boolean. The returned structure knit_result holds information about the edges that were not knitted together, and the level of success in applying the knitting pattern. Within knit_result the array unknit_edges contains all those edges from the edges array within knit_pattern which did not knit together because of a failure to meet the conditions described above. In the cases where a solid body was required ('type' PK_BODY_sewing_solid_c) the unknit_edges array will additionally contain all edges in the result body which have only one adjacent face with a surface attached. The presence of such edges in a knitted solid is a consequence of the received knitting pattern being incomplete (i.e. edges were omitted from the knitting pattern which were necessary in order to successfully enclose a volume). The status field of knit_result will be set to PK_BODY_knit_not_completed_c in such cases, though all edges not in unknit_edges will still have been knitted successfully. The status field of knit_result will normally be set to PK_BODY_knit_completed_c on a successful knit. Note that the error PK_ERROR_corrupt_body should never be returned in normal operation, and indicates either an internal failure or a corrupt input body. This function is not supported for general bodies.