Wire
From DocR21
A wire is a connected collection of edges that do not bound faces. Wires may represent abstract items like profiles, construction lines or center lines, or idealizations of beam-like objects. They are also frequently used to form wire frames to be surfaced to form solid-bounding shells. Image (a) in the figure below depicts an open wire. An open wire does not contain a closed circuit of edges. Image (b) depicts a closed wire, which does contain a closed circuit of edges. Image (c) depicts a branched wire. In a branched wire at least one vertex is connected to three or more ends of edges. A branched wire can contain multiple closed circuits of edges.
A single shell may contain a connected set of faces, a connected set of faces with wires attached at vertices, or a stand-alone wire. Because a shell is a connected set of points, a shell cannot contain multiple wires unless the wires are connected by faces. A shell with a single wire is called a wire shell. A lump containing only a wire shell is a wire lump. A body with only wire lumps is a wire body.
Each wire is classified as being exterior representing an infinitesimally thin piece of material, or interior representing an infinitesimally thin passageway within bulk material. The figure below depicts a solid and three wires. The wire passing through the solid represents an infinitesimally thin passageway through the solid. This infinitely thin passageway could be filled with a different material than the solid; for instance, the wires could represent a piece of steel rebar passing through a block of concrete.
Contents |
Implementation
The concept of a wire is implemented in the ACIS WIRE class. The WIRE class is derived from the ENTITY class; therefore, WIREs are part of the persistent model and inherit all of the Model Management capabilities of the ENTITY class. In addition, the WIRE class has methods (member functions) to obtain its containment (whether it is inside or outside a solid region) and to obtain the topological ENTITIES above and below it in the topological hierarchy. A WIRE is typically owned by a SHELL; however, if SUBSHELLs are present, a WIRE may be owned by a SUBSHELL. In rare situations (namely, if a WIRE was created in a version of ACIS prior to version 1.7 or if the WIRE was created as an intersection graph), the WIRE may be owned directly by a BODY.
WIRE::cont() Returns an indicator of a wire's containment, either ALL_OUTSIDE or ALL_INSIDE. WIRE::owner() Returns a pointer to the topological entity immediately above the wire. WIRE::shell() If the owner of the wire is a shell, returns a pointer to the shell. Otherwise, it returns NULL. WIRE::subshell() If the owner of the wire is a subshell, it returns a pointer to the subshell. Otherwise, it returns NULL. WIRE::body() If the owner of the wire is a body, it returns a pointer to the body. Otherwise, it returns NULL. WIRE::coedge() Returns a pointer to a coedge in the wire. The returned coedge may be any coedge in the wire. WIRE::next() Returns a pointer to the next wire in the shell.
One of the most common ways to construct a wire is using api_make_ewire or api_make_ewires to construct a wire body from a set of edges. A number of surfacing techniques construct faces from wires. For instance, a wire body that forms a closed loop can be covered. A series of wires can be used to construct a skinned or lofted surface. A grid of wires can be used to construct a net surface. A wire body can be swept along a path to generate a solid or sheet body. Wire bodies can be combined with solid or sheet bodies using Boolean operations (such as a non-regularized unite) by calling api_boolean.
ACIS has multiple API functions to obtain the bounding box of a wire. Each has the name api_get_entity_box. The Direct Interface function to obtain the bounding box of a wire is get_wire_box(WIRE*, ...). These functions are preferred over WIRE::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.
The figure below depicts the edges (black) and coedges (blue) of a wire. Typically each edge of a wire will have one coedge. (The exception to this is an intersection graph.) Observe that the direction of the edges do not need to be consistent. Moreover, the directions of the coedges may differ from the edges. The directions of the edges and coedges in a wire depend on the algorithms that created them and any algorithms that may have modified them since they were created. The coedges of a wire can be traversed by traversing the next and previous pointers of the coedges. If a wire is branched at a vertex, the next and previous pointers will form a circular list about the vertex.
If a wire and a face touch, they must be connected at the intersection point(s). A wire is connected to a face using a vertex that is common to both entities. If the vertex lies in the middle of a face, it represents a NULL edge in the face. If a wire and a face are connected, they are part of the same shell. A vertex that connects a wire to a face is non-manifold.
Intersection Graphs
An intersection graph is a special type of wire that is created by the Boolean algorithm and is intended for internal use by the Boolean algorithm. Occasionally you may encounter an intersection graph, so you should be aware that an intersection graph differs from a typical wire in two important ways:
- Each edge in an intersection graph may have more than one coedge.
- Each wire in an intersection graph is directly owned by a body.
In addition, an intersection graph contains many Boolean-algorithm-specific attributes.
The figure below depicts two intersecting faces and a possible intersection graph representing the intersection of these two faces. Observe that the edge (black) of the intersection graph has multiple coedges (blue and green).
The wire returned by a slice operation (created by api_slice) is not a complete intersection graph. Some of the information about the intersection has been omitted. (In particular, some of the coedges and attributes have been omitted. All of the intersection edges should exist in a slice wire.) A slice wire can be converted into a "normal" wire suitable for subsequent operations by cleaning it with api_clean_wire. The Scheme extension solid:slice calls api_slice and api_clean_wire; therefore, it produces a "cleaned" wire suitable for subsequent operation.
FAQs
For related information on WIRE, refer to FAQs on WIRE.
