Offsetting a Wire Body


A body is the highest level topological entity. Solid bodies contain lumps, shells, subshells, faces, loops, coedges, edges, and vertices. Wire bodies contain wires, coedges, edges, and vertices. A simple list of edges can be used to create topology, and ACIS creates the other associated topological entities. The result is a model whose elements know about each other and the topology can be traced.

Many operations, such as wire offsetting, utilize the features of a body topological element and the inherent ability to trace its topology through adjacent wires and edges. This is why a (wire) body is required as input to these operations.

When a wire body is offset, sometimes gaps are created at certain junctures. Consider a wire body made up of a square and a circle that is offset towards the inside, as shown in the following figure. The resulting gaps can be filled as one of three types:

Natural
Extends the two shapes along their natural curves; for example, along the circle and along the straight edge, until they intersect.
Round
Creates a rounded corner between the two segments.
Extend
Draws two straight lines from the ends of each segment until they intersect.

Figure. Gap Fill Types

In the following example, four linear edges are created. Even though the end points of each edge were picked such that the edges appeared to intersect in a simple rectangular frame, the edges are independent and know nothing about one another. In other words, the edges are separate topological entities but are not part of a topology.

Offsetting occurs to the outside of a rectangle. By default, the wire offsetting fills the external gap using the round option. The result is a second wire body that is mostly rectangular except for rounded corners. The radius of the rounded corner is the wire offset amount. Refer to the previous figure.

Scheme Example

; Define the positions to be used
(define my_point1 (position 0 0 0))
;; my_point1
(define my_point2 (position 20 0 0))
;; my_point2
(define my_point3 (position 20 10 0))
;; my_point3
(define my_point4 (position 0 10 0))
;; my_point4
; Create edge 1 as a sine edge.
(define my_linear1 (edge:linear my_point1 my_point2))
;; my_linear1
; Create edge 2 as a linear edge.
(define my_linear2 (edge:linear my_point2 my_point3))
;; my_linear2
; Create edge 3 as a spline curve.
(define my_linear3 (edge:linear my_point3 my_point4))
;; my_linear3
; Create edge 4 as a spline curve.
(define my_linear4 (edge:linear my_point4 my_point1))
;; my_linear4
; Create a wire-body from a list of edges.
(define my_wirebody (wire-body
(list my_linear1 my_linear2 my_linear3 my_linear4)))
;; my_wirebody
(define my_offset (wire-body:offset my_wirebody 5 "r"))
;; my_offset
; If desired, you could delete the original wire body;
; it is no longer needed.
;(entity:delete my_wirebody)
;; ()
; Save the results to an output file.
(part:save "tmpoffset1.sat")
;; #t

Figure. Wire Body Offset

Some of the Scheme extensions related to wire bodies are:

wire-body
Creates a wire body from a list of edges.
wire-body:kwire
Creates a planar wire specified by a sequence of points and bulge factors.
wire-body:offset
Creates a new wire by offsetting the given wire using offset and twist laws.
wire-body:points
Creates a wire body from a list of positions.

[Top]