![]() |
CRTOBY |
Equivalent PK functions: |
PK_BODY_create_solid_topology PK_BODY_create_sheet_topology PK_BODY_create_wire_topology PK_BODY_create_minimum_topology |
CRTOBY ( b_type, types, ids, childs, topols, retcod, failid, ifail ) ==================================================================== Create the topology of a body. Receives: KI_cod_byty *b_type --- body type KI_tag_list_int *types --- topology types KI_tag_list_int *ids --- integer id's of entities KI_tag_list_<list> *childs --- children of entities Returns: <KI_tag_list_<topology>> *topols --- tags of created entities <KI_cod_rtto> *retcod --- fault found <KI_int_id> *failid --- id of faulty entity KI_cod_error *ifail --- failure code Specific errors: KI_bad_type bad token in 'types' KI_bad_value identifier is zero or negative KI_list_wrong_length lists are not of same length Description: CRTOBY creates the topology of a body using the received data. A purely topological (rubber) body is created, which can then have geometry attached to it. --------------------------------------------------------------------------- RECEIVED ARGUMENTS: --------------------------------------------------------------------------- The body type 'b_type' is given by one of the tokens BYTYSO, BYTYSH, BYTYWR, and BYTYMN. The three received lists are all of the same length, and have corresponding elements. The order of the lists does not matter, except that the first member of each list must refer to the body. 'types' is a list of tokens of topology types; the permitted values are TYTOBY, TYTOSH, TYTOFA, TYTOLO, TYTOED and TYTOVX. Token TYTOBY must occur just once, at the start of the list. 'ids' is a list of unique positive integer identifiers or "names" for all the topological entities in the body. The type of each identifier is given by the corresponding element in 'types'. Each id must be used just once. The id of the body will be the first element in the list. 'childs' is a list of lists of identifiers defining the connections between the topological entities in the body. Each list contains the integers (as defined in 'ids') denoting the entities directly belonging to the entity in the corresponding position in 'ids. Thus each list contained in 'childs' is a list of either the shells contained in the body, the faces in a shell, the loops in a face, the edges/vertex in a loop, or the vertices in an edge. A special arrangement is made to indicate the direction or sense of edges in a loop: if the curve of an edge in a particular loop has a direction opposite to that of the loop, the id of the edge in the child list is negated. The order of faces in a shell and of loops in a face does not matter, but the edges in a loop and the vertices in an edge must be correctly ordered, and the first shell in the list of children of the body must be the outer shell of the body. If an entity has no children (eg any vertex) its children should be given as NULTAG. The permitted types and numbers of children and parents for a solid body (type BYTYSO) are given as follows: -------------------------------------------------------------------- Entity Children No. of children Parents No. of parents -------------------------------------------------------------------- Body Shells >=1 - - Shell Faces >=1 Body 1 Face Loops >=0 Shell 1 Loop Edges+senses, >=1 Face 1 or single vertex Edge Vertices <=2 Loops 2 (counting senses) Vertex None 0 Edges/loop >=1 -------------------------------------------------------------------- This is the same for a sheet body (BYTYSH) except that the body must have just one shell. In a wire body (BYTYWR), the body must have just one shell, and the shell must have just one face. If the wire is closed then the face must have two loops, if open just one. A vertex must have either one or two edges as parents. Otherwise the permitted numbers are as for a solid. In a minimal body there are no edges; all other entities must have just one parent and one child, except for the vertex (with no children) and the body (with no parents). NB: - Each edge must be used twice as a child, once with each sense (this may be in the same loop). - A loop must have either a number of edges (with senses) as children, or a single vertex; it cannot have a mixture of edges and vertices, or more than one vertex. - A vertex must have a number of edges as parents, or a single loop; it cannot have both edges and loops, or more than one loop. ------------------------------------------------------------------------ RETURNED ARGUMENTS: ------------------------------------------------------------------------ If the received lists are valid a rubber body will be created; its tag, and those of the topological entities contained in it, will be given in 'topols'. 'topols' is of the same length as the input lists, and has corresponding elements: each tag in 'topols' refers to the same entity as the identifier at the same position in 'ids. So, in particular, the first tag in 'topols' will be that of the body. Note that, although a face is required in the input data to construct the topology of a wire or minimal body, a face on such a body is now an illegal configuration. Therefore the face and its associated loop(s) are not created and 'topols' will contain NULTAG instead of the tags of the face and loop(s). In order to make a valid sheet body, any faces which will not have surfaces attached to them should be deleted using PIERCE. If the input data is found to be invalid, an error code will be returned in 'retcod', and the id of the relevent input entity in 'failid'. The following tokens may be returned in 'retcod': Token Meaning Corresponding failid ---------------------------------------------------------------------------- RTTOOK: input is ok, valid topological body created none RTTOBB: bad body identifier - either it is not the none first id, is not the only body id, or is not present at all RTTODE: duplicate entry in 'ids': integer id duplicated id occurs more than once RTTOUC: undefined child: identifier in 'childs' id of undefined child is not in 'ids'; this includes negative ids not referring to edges RTTODC: duplicate child: entity has an id id of entity repeated in its child list RTTOWC: wrong type of children of entity. id of entity RTTOFC: too few children of entity id of entity RTTOMC: too many children of entity id of entity RTTOWP: wrong type of parents of entity (see note below) id of entity RTTOFP: too few parents of entity id of entity RTTOMP: too many parents of entity id of entity RTTODW: disconnected wire: in a wire with two id of wire body loops, the loops do not match RTTOIL: invalid loop: the start and end vertices id of loop of the edges in a loop, taking sense into account, do not all match up RTTOCS: connected shells: two faces sharing an id of edge edge are in different shells RTTODS: disjoint shell: the faces in a shell id of shell are not all connected (by edges) RTTONM: non-manifold vertex: this will be returned id of vertex where the edges at a vertex are not all loop-connected. ---------------------------------------------------------------------------- A body will only be created if the input lists are found to be ok, ie if RTTOOK is returned in 'retcod'; otherwise, no topology will be created, and 'topols' will be returned as an empty list. The lists will be checked for the above faults in the order given above, and the first one found will be returned. Thus, for instance, if RTTOMC is returned for an entity, none of the faults given by RTTONB, RTTODE, RTTOUC, RTTODC, RTTOWC, and RTTOFC will apply to the input lists. NB: - If an edge is used twice as a child with the same sense, RTTOMP is returned; if not used with both senses, RTTOFP is returned (if both occur RTTOFP takes priority). - A loop with a mixture of edges and vertices as children will be returned with RTTOWC; a loop with more than one vertex as children will result in RTTOMC. - A vertex with edges and loops as parents will result in RTTOWP; one with more than one loop parent will be returned with RTTOMP. - A loop containing a ring edge (one with zero or one vertices) which also contains another edge will produce the return RTTOIL.