 |
PK_BODY_create_solid_topology |
|
PK_ERROR_code_t PK_BODY_create_solid_topology
(
--- received arguments ---
int n_topols, --- number of topols
const PK_CLASS_t classes[], --- class of each topol
int n_relations, --- number of relations
const int parents[], --- parents
const int children[], --- children
const PK_TOPOL_sense_t senses[], --- sense in which child used by parent
--- returned arguments ---
PK_BODY_t *const body, --- created body
PK_TOPOL_t *const topols, --- created topols
PK_BODY_fault_t *const fault, --- fault indicator
int *const fault_index --- index of fault topol
)
This function creates the topology of a solid body.
NOTE: This function is deprecated and has been superseded by
PK_BODY_create_topology_2.
Specific Errors:
PK_ERROR_bad_class bad class in 'classes' array
PK_ERROR_bad_value a value in 'parents' or 'children' array
is not a valid index to 'classes' array
The array 'classes' specifies the class of each topological entity.
Currently the only allowed values are:
PK_CLASS_body
PK_CLASS_shell
PK_CLASS_face
PK_CLASS_loop
PK_CLASS_edge
PK_CLASS_vertex
Each topological entity is referred to by its index in this array.
The arrays `parents, 'children' and 'senses' are all the same length which
is 'n_relations'.
`parents[i]', `children[i]' and `senses[i]' define one relation between
two topological entities. The values put into 'parents' and 'children'
are indices of the 'classes' array.
It is optional whether a topological entity of class PK_CLASS_body appears
in the 'classes' array. If it does appear then it must be the first entry
and its relations with its children must all be defined. If no
PK_CLASS_body appears in 'classes' then the body's children are all the
topological entities which have no defined parent. Such orphans may
currently only be shells, and if there is more than one, then the first
shell in 'classes' must be the outer shell.
The following rules apply to the order of the relations:
- the child relations to a common parent need not be contiguous.
- when a body has more than one (shell) child defined then the outer shell
must appear first.
- edge children of a loop must appear in order around the loop.
- vertex children of an edge must appear in the order of the direction of
the edge.
'senses' indicate the manner in which a child is used by its parent. This is
currently only meaningful for edge children where the sense should be set to:
PK_TOPOL_sense_positive_c the edge is in the same direction as its
parent loop
PK_TOPOL_sense_negative_c the edge is in the opposite direction to its
parent loop.
All other senses should be set to PK_TOPOL_sense_none_c.
The permitted classes and numbers of children and parents are 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 >=1 Face 1
or single vertex 1
Edge Vertices <=2 Loops 2
Vertex None 0 Edges >=1
or single loop 1
--------------------------------------------------------------------
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.
Success of the function is indicated by there being no PK error returned
and by 'fault' being set to PK_BODY_fault_no_fault_c.
If the creation is successful:
- the created body is returned in 'body'. As it has no geometry attached
it will not pass the checker.
- the entities corresponding to the entries in the 'classes' array are
returned in the 'topols' array. (Note that if a PK_CLASS_body appears
in the 'classes' array then the created body will appear in 'topols'
as well as in 'body'.
If the creation is unsuccessful but no PK error is returned:
- no body is created
- a fault indicator is returned in 'fault'
(see documentation for PK_BODY_fault_t)
- the index (in the 'classes' array) of the faulty item is returned if
possible