Offset declaration can be used to create a planar offset curve or face from an edge that is offset by a given positive or negative
# Created in DeclaraCAD from declaracad.occ.api import * enamldef Assembly(Part): Rectangle: r1: color = 'red' # Center on origin position = (-width/2, -height/2) height = 10 width = 20 rx = 1 Offset: o1: color = 'blue' shape = r1 offset = 1 Offset: o2: color = 'lime' shape = r1 offset = -1 # For reference Line: xaxis: color = 'black' direction = (1, 0) Line: yaxis: color = 'black' direction = (0, 1)
Notice how the positive and negative offset distances produce different shapes. This also depends on the "path direction" of the wire.
Attempting to use
Offset on shapes that are not in the same plane will give an error. Also offsetting a face with holes in it can also give errors.
Note: The shape being offset must be able to be converted to a plane (it must have a normal). A single line segment for example has no normal. To offset a single line segment split it into two segments and make a wire from it.
An offset and shift along the plane normal can be completed in one
Offset operation by specifying the
normal_distance. For example a circle with a normal of the Z axis with
normal_distance = 1 will be shifted "up" by 1 in the Z direction.
In certain situations you might not want the offset curve to produce arcs when expanding corners. The
join_type defaults to
arc but can be set to either
intersection to change how the offset curves are joined together. In the screenshot below the blue square has a positive offset from the red square with the default
join_type = "arc" while the purple square has a positive offset with
join_type = "intersection". The green square has a negative offset and is unchanged.
as_face = True to convert the result into a face otherwise it will be a wire. This allows you to skip an extra
Face node. The following example shows the difference when extruding a face vs a wire.
enamldef SimplePart(Part): Box: stock: transparency = 0.8 position = (-dx/2, -dy/2, -dz) dx = 100 dy = 40 dz = 10 Extrude: vector = (0, 0, -stock.dz/2) Offset: offset = 1.5 as_face = True Polyline: points = [(-20, 10), (0, 10), (20, 10)] Extrude: vector = (0, 0, -stock.dz/2) Offset: offset = 1.5 Polyline: points = [(-20, -10), (0, -10), (20, -10)]
Offset can be used on to create slots to cut out from a part. Just draw the path the slot should follow and set the offset to the radius of the slot. If a shape is added as a child of the Offset that shape will be offset.
# Created in DeclaraCAD from declaracad.occ.api import * enamldef Assembly(Part): Offset: color = 'red' offset = 1 Arc: arc: radius = 5 points = [(2, 1), (-2, 1)] # A copy to show the original path Transform: color = 'blue' shape = arc