A body consists of zero, one, or more lumps, each of which represents a set of points that are disjoint from those represented by all other lumps in the body. A lump contains a connected set of solid, sheet, and wire regions. In other words, a lump is an entire connected set of points, whether the set is 3D, 2D, 1D, or a combination of dimensions. If a solid, sheet, or wire region touches another solid, sheet, or wire region in the same body, the two regions are part of the same lump and they must be connected wherever they touch. Conversely, if two connected set of points in the same body do not touch each other, they will constitute two separate lumps. For example, a solid block with a dangling outside face is one lump, as is a solid block with an internal cavity. Two disconnected sheets in the same body would be represented as two lumps.
The following figure illustrates a body with two solid lumps. The large block represents one solid lump that completely encloses a void (dotted line). The second lump (small block with solid lines) is completely enclosed in the void. The first lump contains two shells: one shell contains the faces that form the periphery of the block; the other shell contains the faces that form the void in the block. A lump can have any number of interior voids.
The following figure shows a body with a solid lump and a sheet lump. It is also possible to have solid and sheet regions within a single lump.
The primary purpose of a lump is to allow a body to contain multiple disjoint pieces. This allows operations that result in multiple disjoint pieces to return a single body.
The concept of a lump is implemented in the ACIS LUMP class. The LUMP class is derived from the ENTITY class; therefore, LUMPs are part of the persistent model and inherit all of the Model Management capabilities of the ENTITY class. In addition, the LUMP class has methods (member functions) to obtain the topological ENTITYs above and below it in the topological hierarchy. A BODY contains (or owns) a singly-linked list of LUMPs; therefore, every LUMP contains a pointer to its owner, a BODY, and a pointer to the next LUMP in the singly-linked list of LUMPs owned by its BODY. A LUMP owns a singly-linked list of SHELLs. Some of the more commonly used LUMP methods are listed below.
LUMP::body() Returns a pointer to the BODY immediately above the LUMP. LUMP::owner() Returns a pointer to the BODY immediately above the LUMP. LUMP::shell() Returns a pointer to the first SHELL owned by this LUMP. LUMP::next() Returns a pointer to the next LUMP in the BODY.
ACIS has multiple API functions to obtain the bounding box of a LUMP. Each has the name api_get_entity_box. The Direct Interface function to obtain the bounding box of a LUMP is get_lump_box(LUMP*, ...). These functions are preferred over LUMP::bound because the bound member function will return a NULL box if it has not been calculated. The global functions will calculate the box if it has not been calculated.
A BODY containing multiple LUMPs can be converted into a number of BODYs each containing one LUMP by calling api_separate_body. The inverse operation is to convert multiple (non-overlapping) BODYs into a single BODY with multiple LUMPs using api_combine_body.