![]() |
PK_SURF_make_sheet_trimmed |
PK_ERROR_code_t PK_SURF_make_sheet_trimmed ( --- received arguments --- PK_SURF_t surf, --- surface PK_SURF_trim_data_t trim_data, --- trim data double precision, --- precision for each edge const PK_SURF_make_sheet_trimmed_o_t *options, --- options structure --- returned arguments --- PK_BODY_t *const body, --- sheet body PK_check_state_t *const state --- state of body ) Creates a sheet body given surface and trimmed curve data. This function does not support facet geometry [NF] Specific Errors: PK_ERROR_bad_tolerance given edge precision too small PK_ERROR_has_parent surface or sp-curves are not orphans PK_ERROR_unsuitable_entity surface must be G1 and it must be periodic if closed PK_ERROR_not_on_surface curve does not lie on surface PK_ERROR_bad_sharing curve is from another surface PK_ERROR_bad_shared_dep dependent of entity would be illegally shared PK_ERROR_failed_to_create_sp SP-curve generator failed for unknown reason This function creates a sheet body with a single face, given surface geometry for the face and curve geometry for the edges. The topology of the resulting sheet will be inferred from the geometry. PK_SURF_make_sheet_trimmed is designed primarily for importing geometric data of lower precision than Parasolid default. The geometry supplied to the routine need not, therefore, conform to Parasolid's standard precision. The user is responsible for specifying the precision, the minimum distance two points have to be apart to be regarded as distinct, which will be stored with the edges of the resulting sheet body. Received arguments: 'surf' will be the geometry attached to the single face of the body. It can be of any type recognised by Parasolid, and must be orphan. If 'surf' is a B-surface, it must be capable of passing the continuity checks imposed by PK_GEOM_check. 'trim_data' provides the trimming information. The 'spcurves' in 'trim_data' are described here. For other information on 'trim_data' see documentation for PK_SURF_trim_data_t. 'spcurves' consists of an array of curves which describe the boundary loops of the trimmed surface. 'spcurves' is not allowed to be null, except in the case of a wholly closed sheet with no loops e.g. whole sphere or torus. Each curve in 'spcurves' may either itself be an SP-curve or it may be any 3-space curve which will be used to generate an SP-curve. Note that PK_SURF_make_sheet_trimmed will not incorporate curves representing surface degeneracies into the model, as these have zero 3-space length. Similarly bounded curves shorter than the requisite tolerance (in terms of chord length) will not appear in the model (closed SP-curve are excepted). Note that two coincident opposing curves must be supplied if a wire edge (corresponding, for example, to a seam on a periodic surface) is required. In addition, PK_SURF_make_sheet_trimmed will always create closed loop topology, regardless of the actual geometric closure of the supplied loops of curves. If the supplied bounded curves are SP-curves, they must satisfy the continuity requirements described under PK_SPCURVE_create before introduction into a model by means of PK_SURF_make_sheet_trimmed. If SP-curves are not available, application can supply 3-space curves in the 'spcurves' array, which constitute the boundary loops of the trimmed surface. These 3-space curves must either be coincident with the surface or supplied interval of the curve must lie within the supplied precision of the surface. If curve is not coincident with the surface and lies within the supplied precision of the surface, an SP-curve is computed internally and the supplied 3-space curve will be attached as nominal geometry to the edge if nominal geometry is enabled. If an SP-curve is computed internally then Parasolid may extend the supplied 'surf' so that the surface of the resulting sheet body includes the entire length of the SP-curve. The points stored on the vertices of the sheet body will be computed by Parasolid, so the application has no need to supply them. The position of the vertex is deemed to be the centroid point of all the trimmed curve ends meeting at the vertex. A suitable precision for the vertex is also computed. It should be noted that because the vertex point and precision are flexible to some extent, it is not necessary that consecutive spcurves meet to within twice 'precision' at the vertex. As a safeguard against potentially incorrectly ordered data, however, there will be a state code indicator returned when any computed vertex tolerance exceeds 10 times 'precision'. The 'trim_set' field in 'trim_data' is ignored. The function may only be passed a single trim_set. If the resulting sheet body has its face normal in the wrong direction, then this can be swapped with PK_BODY_reverse_orientation 'precision' is a 3-space distance parameter, and will be stored with all of the edges of the resultant sheet. Refer to PK_EDGE_set_precision for the meaning of this tolerance within a model. From an application point of view, the value of 'precision' will reflect the accuracy of the sending system's curve data, and must be greater than or equal to Parasolid's linear tolerance. PK_EDGE_set_precision can be used subsequently to modify the tolerance of any edge of the resultant sheet. checking option structure: There are three optional levels of checking available on the resulting sheet body. These can be employed by the application according to how much is known about the input data in terms of, for example, the consistency of the loops directions. Whichever option(s) used, PK_SURF_make_sheet_trimmed will attempt to correct any inconsistencies found within the limits imposed by the checks. Note that each option is independent of the others. 'check_wires' : This option allows the identification of wire topologies (e.g. seamlines) and will ensure that the correct topology is made in such cases. 'check_self_int' : This option enables the application to detect topological self-intersections. Checks made are: . All edges are tested pairwise with each other to detect points at which their fin curves intersect which are NOT model vertices. There is no possible corrective action that can be taken here. Such sheets will fail PK_BODY_check. 'check_loops' : This will check that the loops of the face are consistent. With this option set to PK_LOGICAL_true checks are made to check whether: . The loops are correctly contained (i.e. all inner hole loops lie within the boundary or peripheral loop, where such can be determined). . The combination of loops is a valid one for the surface type (for example, a set of loops on a plane contains just one peripheral positive loop and the rest negative hole ones). . If the above conditions are not met minimal corrective action is attempted. In an attempt to create valid loops PK_SURF_make_sheet_trimmed may reverse loops, and investigate singularities of 'surf' introducing them into the face as isolated vertices if necessary. This corrective action is only attempted if 'check_loops' is set to PK_LOGICAL_true, and there no guarantee of valid result being found. 'nominal_geom' : This option enables the supplied 3-space curve to be attached as nominal geometry on the edge Returned arguments: The resulting sheet is returned in 'body'. 'state' is an indicator of the validity of the sheet after the chosen checking options have been performed on it. It is not intended to give detailed information (use PK_BODY_check for this). The returns are: PK_BODY_state_ok_c: Indicates that either all selected checks passed, and any attempted corrections were successful, or no checks were requested. PK_FACE_state_redundant_c : Face is redundant with respect to the supplied tolerances. This is because all the supplied curves were too short with respect to 'precision' for the production of a valid face. PK_CURVE_state_inconsistent_c : Indicates that no sense could be made of the input loops of curves. This means that they did not follow round in the loop direction as indicated earlier, and there may be vertex tolerances computed as a result which exceed 10 times 'precision'. PK_FACE_state_self_int_c : Indicates that the resultant sheet is self-intersecting because edges meet at a place other than a model vertex. PK_LOOP_state_invalid_c : Indicates that the loop structure of the resulting sheet is in some way invalid (e.g. there is no peripheral loop on a planar surface), and attempts to correct the problem failed. Such sheets should NOT be subsequently incorporated into solid bodies. PK_EDGE_state_bad_order_c : Indicates that the edges of the resulting sheet are incorrectly ordered at at least one of its vertices. This can be caused by the input data failing to comply with the convention on wire edges, for example.Generated on: Fri, 04 Oct 2024 12:22:35 GMT