Manifold and Non-manifold Objects
A manifold is a mathematical term for an object that locally resembles a line, a plane, or a space. The term n-manifold refers to a manifold that locally resembles a n-dimensional space, not one which lies in an n-dimensional space.
In a geometric modeling context one often refers to 2-manifold boundaries of solid objects. Having a 2-manifold boundary means that each point on the boundary is like a point on the interior of a plane. Each point on the 2-dimensional boundary is completely surrounded by other points on the 2-dimensional boundary.
The surface of a sphere, a torus, or a block are examples of 2-dimensional manifolds. (In this context, the "surface" of an object refers to its exterior boundary, not a specific geometric element.) Each point on the boundary of a manifold solid divides the modeling space into two regions, the region inside the solid and the region outside the solid. If at any point on the boundary the modeling space is not divided into two regions, then the object is non-manifold at that point.
A non-manifold point is depicted in Figure. Non-manifold Vertex. At the non-manifold vertex there are two "inside" regions. One can go in one of two directions from this vertex and go "into" the object. Looking at this from a different perspective, there are two manifold boundary surfaces that meet at the non-manifold point. These are sometimes called "separation surfaces." Each separation surface has a separate group of edges, sometimes called an "edge group."
A non-2-manifold region can be larger than a single point. For example, the region can extend along a curve. An example of this would be two blocks that share an edge. This is depicted in Figure. Non-manifold Edge. Along the edge the boundary of the object is non-2-manifold. Space is not divided into an "inside" and "outside" region at any given point along the edge. At any point along the edge there are two directions one can travel to go "into" the object. Similarly, a non-2-manifold region can extend along a surface. For example, in Figure. Non-manifold Face space is not divided into an "inside" and "outside" region at any given point along the internal face. At any point along the internal face there are two directions one can travel to go "into" the object. Also, notice that each of the edges that bound the internal face are connected to three faces.
|A face can have a non-2-manifold region in its interior. Figure. Non-manifold Vertex in a Face depicts a planar face with two circular holes aligned such that they touch each other at a single point. The face is non-manifold at the point where the two circular holes touch. At this point, there are two directions "into" the interior of the face.|
Manifold and Non-manifold Objects in ACIS
|ACIS can represent objects with non-manifold regions, as is demonstrated by the figures on this page, all of which were generated using the Scheme Aide. Solid bodies and sheet bodies with non-2-manifold EDGES are easily recognized in the ACIS data structure because they point to COEDGES without partners or with more than one partner. The BODY in the figure to the right contains a non-manifold EDGE with four COEDGES. Each 2-manifold EDGE has two COEDGES.
Non-manifold VERTICES are more difficult to recognize in the ACIS data structure, because there are several special cases. If a VERTEX points to more than one EDGE, it is non-manifold, because each EDGE pointed to by a VERTEX is in a separate edge group and there is more than one edge group at the VERTEX. There are other cases, however. For instance, the BODY shown in Figure. Non-manifold Vertex in a Solid is non-manifold at its VERTEX, but there is only one EDGE in the BODY, the "seam edge." Because there is only one EDGE in the BODY, the VERTEX cannot point to multiple edges. The simplest means to determine if a VERTEX is non-manifold is to call api_manifold_class and check if the VERTEX is listed as a non-manifold vertex.
The discussion up to this point has dealt with solid or sheet bodies, but what about wire bodies? The interior of an unbranched WIRE is a 1-manifold. If there is a branch in the WIRE, the WIRE is non-manifold at that point. This is analogous to the situation where more than two sheet faces meet along an edge. ACIS can also represent BODYs of mixed dimension; this is, a BODY can contain solid, sheet and wire regions. Such BODYs will be non-manifold where the regions of mixed dimensionality connect, for instance where a solid region connects to a sheet region, a solid region connects to a wire region, or a sheet region connects to a wire region. Illustrations of these cases are presented below.
Because ACIS has a non-manifold representation, ACIS can represent a wide range of topological situations; for instance:
- A vertex can connect 0, 1, 2, ... n wire regions.
- A vertex can connect 0, 1, 2, ... n sheet regions.
- A vertex can connect 0, 1, 2, ... n solid regions.
- An edge can connect 0, 1, 2, ... n sheet regions.
- An edge can connect 0, 1, 2, ... n solid regions.
In fact, a vertex can connect 0, 1, 2, ... n wire regions, 0, 1, 2, ... m sheet regions, and 0, 1, 2, ... o solid regions; and an edge can connect 0, 1, 2, ... n sheet regions and 0, 1, 2, ... m solid regions. This allows ACIS to represent multi-dimensional objects; for instance, an edge can connect a solid region with an internal sheet region, which allows ACIS to represent cellular solids.
The various algorithms in ACIS handle non-manifold regions in different ways. For instance, the Boolean algorithms were designed to construct, manipulate, and destruct non-manifold regions; whereas the algorithms in Local Operations were specifically designed such that their output would not contain non-manifold regions. Thus, they do not allow you to manipulate non-manifold regions. The following table provides a very general overview of the behavior of ACIS algorithms with respect to non-manifold regions. For more specific information on the behavior of specific functionality, refer to the documentation on the functionality of interest.
|Component||Handling of Non-manifold Regions|
|Kernel||Supports NM regions.|
|Booleans||Supports NM regions.|
|Cellular Topology||Supports NM regions.|
|Covering||Supports NM regions.|
|Space Warping||Supports NM regions.|
|Faceting||Supports NM regions.|
|Stitching||Different API functions support different NM configurations.|
|Healing||Stitching and api_simplify_entity support NM regions.|
|Blending/Advanced Blending||Blends should succeed on bodies with NM regions, provided the blend sheet does not interact with a NM region.|
|Skinning/Lofting/Sweeping||Operation should succeed on bodies with NM regions, provided the operation does not interact with a NM region.|
|Local Operations||Operation should succeed on bodies with NM regions, provided the operation does not interact with a NM region.|
Note: ACIS has two different signatures for api_stitch: api_stitch is a Boolean component function that supports non-manifold stitching, and api_stitch is a stitching component function that does not support non-manifold stitching. These functions have very different functionality. The first function is exercised by solid:stitch; whereas the second function is exercised by entity:stitch.