from cadquery import * w = 10 d = 10 h = 10 part1 = Workplane().box(2*w,2*d,h) part2 = Workplane().box(w,d,2*h) part3 = Workplane().box(w,d,3*h) assy = ( Assembly(part1, name='part1',loc=Location(Vector(-w,0,h/2))) .add(part2, name='part2',color=Color(0,0,1,0.5)) .add(part3, name='part3',color=Color("red")) .constrain('part1@faces@>Z','part3@faces@Z','part2@faces@Y','part3@faces@Y','part2@faces@(-1,-1,1)','part3@vertices@>(-1,-1,-1)','Point') .constrain('part1@vertices@>(1,-1,-1)','part2@vertices@>(-1,-1,-1)','Point') .solve() ) show_object(assy)