An edge is a one-dimensional topological element that can be used to bound a face or form a portion of a wire. An edge represents a single, connected, bounded subset of a curve. Multiple edges can exist on the same curve; however, two edges in the same body cannot be overlapping. If two edges in the same body touch at a point, the edges must be connected to a vertex at the intersection point.
Concepts and Terminology
An edge is bounded by zero, one, or two vertices. If the vertex reference at either or both ends of the edge is NULL, the edge is unbounded in that direction. If the underlying curve is infinite, so is the unbounded edge. Although an edge may theoretically be unbounded or infinite, in practice all edges must be bounded and finite.
The figure below depicts an open edge lying on an open curve. An open edge is bounded by two distinct vertices. Because each edge has a direction and a parameterization, one vertex lies at the start of the edge and one vertex lies at the end of the edge. (The start vertex lies at the low parameter end of the edge; whereas, the end vertex lies at the high parameter end of the edge.) An open edge can also represent a subset of a closed curve.
A closed edge is bounded on both ends by the same vertex and must lie on a closed curve. The figure below depicts a closed edge. Like an open edge, a closed edge has a direction and a parameterization, as is depicted by the arrows in the figure. A closed edge spans the entire range of its underlying curve.
It is also possible for an edge to be of zero length, with no underlying curve, and be bounded by a single vertex. Such an edge is called a NULL edge because the pointer to its underlying curve is NULL. An example of a NULL edge is depicted in the figure below.
The direction of an edge can be the same direction as its underlying curve or it can be the opposite direction. If it is the same as the curve direction, the edge's sense relative to the underlying curve is forward; otherwise, its sense is reversed. Each edge contains a record of its sense relative to its underlying curve.
The parameterization of an edge always increases in the direction of the edge. If the sense of the edge is forward (that is, the edge is the same direction as its underlying curve), then the parameterization of the edge is identical to that of its underlying curve. If the sense of the edge is reversed (that is, the edge is the opposite direction as its underlying curve), then the parameterization of the edge is the negation of its curve's parameterization. For example, if a point on the curve has a parameter value t, then the corresponding parameter value on a reversed edge would be − t. If a curve is defined over a range (a,b) and has a reversed edge defined over this portion of the curve, then the range of the edge would be ( − b, − a).
A coedge records the use of an edge by a face or a wire. An edge in a wire has only one coedge; however, one edge can be used by many faces. When an edge is used by two or more faces, its coedges are ordered around the edge. If only two faces meet at an edge, the two coedges from those faces point to each other through the coedge partner pointers. (If there is only one coedge, its partner pointer is NULL.) If more than two faces meet at an edge, the coedges partner pointers form a circular linked list. The order of the list is important, because it represents the radial ordering of the faces about the edge in a counterclockwise direction. The following figure shows a sheet body that contains a non-manifold (more than two faces incident) edge. The edge is directed such that it is coming toward the reader and the coedges are ordered counterclockwise about it in the partner list as indicated by the arrow.
The purpose of radial coedge ordering becomes clear during traversal of an ACIS model that contains faces embedded with a solid region, such as in a 3D finite element model. Moving from a face across an edge to the radially closest adjacent face is a simple list operation, rather than a geometric operation if coedges were not ordered. For example, moving to the face that is closest to the front (outward normal) side of a face is done by moving to the next partner pointer, if the original face coedge is FORWARD. If the original face coedge is REVERSED, moving to the closest face is done by moving to the previous partner pointer (obtained by walking all the way around the list).
In a non-manifold body, an edge may be adjacent to more than two faces. A non-manifold body is shown in the following figure. This figure depicts a body in which a cylinder has been subtracted from a block. The body is non-manifold at each point where the cylinder is tangent to a planar face. Each of the four intersection edges where the cylindrical face tangentially intersects a planar face is a non-manifold edge. In the example, edge ab is common to two faces on the inside wall of the cylinder (abcd and abfe) and two faces on the outside of the block (abgh and abjk). Edge ab is common to all four faces. When there are more than two coedges associated with an edge, they are ordered counterclockwise about the edge.
Examples of Non-manifold Edges
Examples of non-manifold edges include:
- Two solid regions meeting along an edge
- A single solid region that contains a non-manifold edge (locally, there are two solid regions that meet along the edge)
- An external sheet face that is connected to a solid region along a non-manifold edge
- An internal sheet face that subdivides a solid region into two solid regions is connected to single-sided faces along non-manifold edges
- Four external sheet faces that are connected along a non-manifold edge
- Four internal faces that are connected along a non-manifold edge.
In each of these cases, the non-manifold edges are used more than two times by faces; that is, the non-manifold edge has more than two coedges.
The convexity of an edge is defined only for an edge lying on two faces or having one face on both sides of it. (In other words, edge convexity is not defined for non-manifold edges.) The convexity of an edge is defined with respect to the normals of the faces upon which it lies. Edges are typically classified as tangent, concave, or convex. If two faces meet tangentially, their common edge is termed a tangent edge. Tangent, concave, and convex edges are depicted in Figure. Tangent, Concave, and Convex Edges. If the convexity of an edge changes over its length, the edge is said to have mixed-convexity. An edge with mixed convexity is depicted in Figure. A Mixed-Convexity Edge. This edge is concave on its upper half and is convex on its lower half. If the two faces (or the face on both sides) of an edge meet tangentially and the directions into the face from the edge are parallel, then the edge may be called a knife edge. Such an edge is depicted in Figure. A Knife Edge.
Convexity is very important to operations such as blending. A blend on a convex edge removes material from the model; whereas a blend on a concave edge adds material to the model. Blending requires that edges have constant convexity over their entire length. (That is, an edge to be blended cannot have mixed-convexity.) If the convexity of an edge changes at some point in the edge, the edge must be split at that point. Boolean and Stitching Operations will split edges at points where the convexity changes.
A free edge is an edge that is associated with only one face and has only one coedge. In the figure to the right, a solid region is missing two circular faces (or one cylindrical face) and has two free edges. This solid is incompletely bounded; therefore, it would be considered to be an invalid solid. Such solids may, however, exist during the construction process (for instance, if the solid were being constructed by stitching together faces.) Free edges may exist on single or double-sided faces. On single-sided faces, they always indicate an incompletely bounded solid region.
A degenerate edge, sometimes called a NULL edge, is a special case that occurs when an edge's geometry pointer is NULL and both vertex pointers point to the same vertex: for example, at the apex of a cone. A NULL edge is a valid edge if it represents an isolated vertex. In general, a NULL edge cannot be connected to other edges, unless it is at a non-manifold vertex.
Few ACIS operations work correctly with edges that have one or both end vertex pointers NULL.
In a closed, solid body a non-manifold edge has more than two coedges.
A spur edge is one type of edge that is used twice by a face; that is, the face is on both sides of the edge. A spur edge is not closed and it does not connect to another edge on one or both ends. In other words, on one or both ends it has a free vertex or a spur vertex. Spur edges can also exist in wires.
A prop edge is another edge that is used twice by a face. A prop edge is not closed and is not a spur edge. It has adjacent edges at both ends. The exception to this if one or both of the vertices lie at singularities. A spur edge may have a vertex at which there are no adjacent edges if the vertex lies at a surface singularity. Prop edges and spur edges are mutually exclusive.
A seam edge is a special case of a prop edge. If a prop edge runs along the parametric boundary of a periodic surface (that is, it splits the face along parametric boundary of a periodic surface), then it may be called a seam edge.
In general, spur edges and prop edges are not necessary for the topology of a face and may be removed by merging. The exception to this is a seam edge on a spline surface. Prior to ACIS R16, periodic faces on periodic spline surfaces required seam edges. Since ACIS R16, seam edges on periodic spline surface are optional, controlled by the periodic_no_seam option. If this option is TRUE, seams are not required; if it is FALSE, seams are required. Although seam edges may not be required, several algorithms still produce seam edges on periodic spline surface.
The concept of an edge is implemented in the ACIS EDGE class. The EDGE class is derived from the ENTITY class; therefore, EDGEs are part of the persistent model and inherit all of the Model Management capabilities of the ENTITY class. In addition, the EDGE class has methods (member functions) to obtain the topological ENTITYs above and below it in the topological hierarchy as well as to obtain its geometry.
EDGE::coedge() Returns a pointer to a COEDGE on the EDGE. The returned COEDGE may be any COEDGE in the EDGE. EDGE::coedge(FACE*) Returns a pointer to a COEDGE on the EDGE. The returned COEDGE is the COEDGE associated with the given FACE. EDGE::owner() Returns a pointer to a COEDGE on the EDGE. The returned COEDGE may be any COEDGE in the EDGE. EDGE::start() Returns a pointer to the VERTEX bounding the low parameter end of the EDGE. EDGE::end() Returns a pointer to the VERTEX bounding the high parameter end of the EDGE. EDGE::geometry() Returns a pointer to the CURVE underlying the EDGE. EDGE::sense() Returns the sense of the EDGE with respect to the CURVE underlying the EDGE. If the EDGE has the same direction as the CURVE, then it returns FORWARD; otherwise, it returns REVERSED.
Several member functions exist that perform geometric evaluations of the edge. Some of the most frequently used member functions include:
EDGE::start_param() Returns the parameter value of the EDGE at the location of the start VERTEX. EDGE::start_pos() Returns the location of the EDGE at the start VERTEX. EDGE::start_deriv() Returns the derivative (tangent vector) of the EDGE at the start VERTEX. EDGE::end_param() Returns the parameter value of the EDGE at the location of the end VERTEX. EDGE::end_pos() Returns the location of the EDGE at the end VERTEX. EDGE::end_deriv() Returns the derivative (tangent vector) of the EDGE at the end VERTEX. EDGE::get_convexity() Returns the convexity of the EDGE. (Refer to Edge Convexity.)
ACIS also has several global functions for evaluating edges. Many of these are declared in geometry.hxx, for instance:
edge_min_radius_curv(...) Returns the minimum radius of curvature of the EDGE. edge_param_pos(...) Returns the position on the EDGE corresponding to the given parameter value. edge_param_curv(...) Returns the curvature of the EDGE at the given parameter value. edge_param_norm(...) Returns the normal to a FACE at a position corresponding to a parameter value on an EDGE. edge_param_cross(...) Returns the cross-curvature at a position corresponding to a parameter value on an EDGE.
In addition, ACIS has many other global functions that are quite useful, for instance:
- ACIS has multiple API functions to obtain the bounding box of an edge. Each has the name api_get_entity_box. The Direct Interface function to obtain the bounding box of an edge is get_edge_box(EDGE*, ...). These functions are preferred over EDGE::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.
- ACIS has many API functions to create and/or modify EDGEs and their underlying CURVEs. Some of these are described in Edge Construction.
- A wire body can be constructed from a set of edges using api_make_ewire or api_make_ewires. A number of Surfacing and Modeling operations can then be used to generate solid and sheet bodies from the wire body.
- The CURVE class and its underlying curve class provide many methods that may be very useful when evaluating or manipulating EDGEs.
- The containment of a point with respect to an EDGE can be determined using api_ptent_rel.
- The containment of an EDGE with respect to another ENTITY can be determined using api_edent_rel.