FYI, new additional special methods are coming with PR 1514. After this is checked in, the new filter method might be used to select on 3D:
import cadquery as cq
w = 10
h = 1
r = 2
rc = 0.4
dz = 10
s = cq.Sketch().circle(r).parray(0, 0, 135, 4).rect(w, h).clean()
result = cq.Workplane().placeSketch(s).extrude(dz)
def get_outer_edges(pnt, d):
"""Select edges with center distance to point less than d"""
def callback(obj):
dist = obj.Center() - cq.Vector(pnt)
if dist.Length > d:
return True
return callback
result = result.edges("|Z").filter(get_outer_edges((0, 0, dz / 2), r + 1))
result = result.fillet(rc)