def test_plane_loft(self): w1 = cm.ngon(1.0, 5) w2 = cm.ngon(2.0, 5) w2.translate((0.0, 0.0, 4.0)) s1 = cm.plane_loft([w1, w2]) # empirical self.assert_(close(22.191, s1.volume(), 0.001))
def test_to_iges(self): s1 = cm.plane(cm.ngon(1.0, 3)) r1 = s1.area() s1.to_iges('tmp.igs', brep_mode=1) s2 = cm.from_iges('tmp.igs') r2 = s2.area() self.assert_(close(r1, r2))
def test_to_step(self): s1 = cm.plane(cm.ngon(1.0, 3)) r1 = s1.area() s1.to_step('tmp.stp') s2 = cm.from_step('tmp.stp') r2 = s2.area() self.assert_(close(r1, r2))
def test_subcenters(self): s1 = cm.plane(cm.ngon(1.0, 3)) cs = s1.subcenters('vertex') rt3d2 = math.sqrt(3.0) / 2 self.assert_(close(cs[0], (-0.5, rt3d2, 0.0)) and close(cs[1], (-0.5, -rt3d2, 0.0)) and close(cs[2], (1.0, 0.0, 0.0)))
def test_to_brep(self): s1 = cm.ngon(1.0, 3) r1 = s1.length() s1.to_brep('tmp.brp') s2 = cm.from_brep('tmp.brp') r2 = s2.length() self.assert_(close(r1, 5.196, eps=1e-3) and close(r2, 5.196, eps=1e-3))
def test_to_iges(self): s1 = cm.ngon(1.0, 3) r1 = s1.length() s1.to_iges('tmp.igs', brep_mode=1) s2 = cm.from_iges('tmp.igs') r2 = s2.length() self.assert_(close(r1, 5.196, eps=1e-3) and close(r2, 5.196, eps=1e-3))
def poly(self): s1 = cm.ngon(1.0, 3) p1 = s1.poly() cs = s1.subcenters('vertex') self.assert_( len(p1) == 4 and close(p1[0], cs[0]) and close(p1[1], cs[1]) and close(p1[2], cs[2]) and close(p1[3], cs[3]))
def test_subcenters(self): s1 = cm.plane(cm.ngon(1.0, 3)) cs = s1.subcenters('Vertex') rt3d2 = math.sqrt(3.0) / 2 self.assert_(close(cs[0], (-0.5, rt3d2, 0.0)) and close(cs[1], (-0.5, -rt3d2, 0.0)) and close(cs[2], (1.0, 0.0, 0.0)))
def test_copy(self): s1 = cm.plane(cm.ngon(1.0, 3)) s2 = s1.copy() s1.translate((1.0, 1.0, 1.0)) self.assert_( close(s2.center(), (0.0, 0.0, 0.0)) and close(s1.center(), (1.0, 1.0, 1.0)))
def poly(self): s1 = cm.ngon(1.0, 3) p1 = s1.poly() cs = s1.subcenters('vertex') self.assert_(len(p1) == 4 and close(p1[0], cs[0]) and close(p1[1], cs[1]) and close(p1[2], cs[2]) and close(p1[3], cs[3]))
def derived_offset_face(): w1 = cm.ngon(8.0, 6) f1 = cm.offset(cm.plane(w1), 1.0)[0] v.viewstandard(viewtype='top') v.display(w1, (0.0, 0.0, 0.0)) v.display(f1) v.fit() v.save('derived_offset_face.png') v.clear()
def derived_pipe(): profile = cm.ngon(2.0, 6) e1 = cm.arc(8.0, 0.0, math.pi / 2) e2 = cm.segment((0.0, 8.0, 0.0), (-8.0, 8.0, 0.0)) spine = cm.wire([e1, e2]) spine.translate((-8.0, 0.0, 0.0)) spine.rotatex(math.pi / 2) s1 = cm.pipe(profile, spine) save_iso(s1, 'derived_pipe.png')
def test_pipe(self): profile = cm.ngon(2.0, 6) e1 = cm.arc(8.0, 0.0, math.pi / 2) e2 = cm.segment((0.0, 8.0, 0.0), (-8.0, 8.0, 0.0)) spine = cm.wire([e1, e2]) spine.translate((-8.0, 0.0, 0.0)) spine.rotatex(math.pi / 2) s1 = cm.pipe(profile, spine) # empirical self.assert_(close(213.732, s1.volume(), 0.001))
def test_pipe(self): profile = cm.ngon(2.0, 6) e1 = cm.arc(8.0, 0.0, math.pi / 2) e2 = cm.segment((0.0, 8.0, 0.0), (-8.0, 8.0, 0.0)) spine = cm.Wire([e1, e2]) spine.translate((-8.0, 0.0, 0.0)) spine.rotatex(math.pi / 2) s1 = cm.pipe(profile, spine) # empirical self.assert_(close(213.732, s1.volume(), 0.001))
def test_offset(self): w1 = cm.ngon(8.0, 6) f1 = cm.offset(cm.plane(w1), 1.0)[0] b1 = cm.box(10.0, 10.0, 10.0) b1.translate((-5.0, -5.0, 0.0)) c1 = cm.cylinder(2.5, 20.0) c1.translate((0.0, 0.0, -5.0)) s1 = b1 - c1 s2 = cm.offset(s1, 1.0)[0] # empirical self.assert_(close(217.418, f1.area(), 0.001) and close(1608.966, s2.volume(), 0.001))
def test_offset(self): w1 = cm.ngon(8.0, 6) f1 = cm.offset(cm.plane(w1), 1.0)[0] b1 = cm.box(10.0, 10.0, 10.0) b1.translate((-5.0, -5.0, 0.0)) c1 = cm.cylinder(2.5, 20.0) c1.translate((0.0, 0.0, -5.0)) s1 = b1 - c1 s2 = cm.offset(s1, 1.0)[0] # empirical self.assert_( close(217.418, f1.area(), 0.001) and close(1608.966, s2.volume(), 0.001))
def test_offset(self): w1 = cm.ngon(8.0, 6) f1 = cm.offset(cm.plane(w1), 1.0)[0] b1 = cm.box(10.0, 10.0, 10.0) b1.translate((-5.0, -5.0, 0.0)) c1 = cm.cylinder(2.5, 20.0) c1.translate((0.0, 0.0, -5.0)) s1 = b1 - c1 # print("s1 is : %s" % s1) assert isinstance(s1, cm.Solid) s2 = cm.offset(s1, 1.0) # print("s2 is : %s" % s2) s2 = s2[0] # empirical self.assert_(close(217.418, f1.area(), 0.001) and close(1608.966, s2.volume(), 0.001))
def test_fillet(self): s = cm.plane(cm.ngon(1.0, 3)) s1 = s.copy() s1.fillet(0.2) r1 = s1.area() s1 = s.copy() s1.fillet(0.2, [0]) r2 = s1.area() s1 = s.copy() s1.fillet(0.2, [(1.0, 0.0, 0.0)]) r3 = s1.area() s1 = s.copy() s1.fillet([(0.1, [0]), (0.2, [1]), (0.3, [2])]) r4 = s1.area() # empirical self.assert_( close(r1, 1.217, eps=0.001) and close(r2, 1.272, eps=0.001) and close(r3, 1.272, eps=0.001) and close(r4, 1.203, eps=0.001))
def test_fillet(self): s = cm.plane(cm.ngon(1.0, 3)) s1 = s.copy() s1.fillet(0.2) r1 = s1.area() s1 = s.copy() s1.fillet(0.2, [0]) r2 = s1.area() s1 = s.copy() s1.fillet(0.2, [(1.0, 0.0, 0.0)]) r3 = s1.area() s1 = s.copy() s1.fillet([(0.1, [0]), (0.2, [1]), (0.3, [2])]) r4 = s1.area() # empirical self.assert_(close(r1, 1.217, eps=0.001) and close(r2, 1.272, eps=0.001) and close(r3, 1.272, eps=0.001) and close(r4, 1.203, eps=0.001))
def test_ngon(self): w1 = cm.ngon(2.0, 6) self.assert_(close(12.0, w1.length()))
def test_plane(self): w1 = cm.ngon(2.0, 5) f1 = cm.plane(w1) self.assert_(close(9.511, f1.area(), 0.001))
def test_bounds(self): s1 = cm.plane(cm.ngon(1.0, 3)) rt3d2 = math.sqrt(3.0) / 2 print('bounds', s1.bounds()) self.assert_(close(s1.bounds(), (-0.5, -rt3d2, 0.0, 1.0, rt3d2, 0.0), eps=0.1))
def test_nearest(self): s1 = cm.plane(cm.ngon(1.0, 3)) i1 = s1.nearest('vertex', [(1.0, 0.0, 0.0)])[0] self.assert_(i1 == 2)
def test_subtolerance(self): s1 = cm.plane(cm.ngon(1.0, 3)) subtols = s1.subtolerance() self.assert_(close(subtols, (1e-7, 1e-7, 1e-7), eps=1e-9))
def test_dump(self): s1 = cm.plane(cm.ngon(1.0, 3)) s1.dump() self.assert_(True)
def test_check(self): s1 = cm.plane(cm.ngon(1.0, 3)) self.assert_(s1.check())
def test_helical_solid(self): profile = cm.ngon(0.2, 3) s1 = cm.helical_solid(profile, 2.0, 1.0 / math.pi, 2) # empirical self.assert_(close(1.346, s1.volume(), 0.001))
def type(self): s1 = cm.plane(cm.ngon(1.0, 3)) self.assert_(s1.type() == 'plane')
def test_subshapes(self): s1 = cm.plane(cm.ngon(1.0, 3)) ws = s1.subshapes('wire') es = s1.subshapes('edge') vs = s1.subshapes('vertex') self.assert_(len(vs) == 3 and len(es) == 3 and len(ws) == 1)
#!/usr/bin/env python # coding: utf-8 r"""Generation script for ISO 4032 nut""" from ccad.model import prism, filling, ngon, cylinder m_max = 2.0 s_max = 5.0 d_a_min = 2.5 body = prism(filling(ngon(2 / 3**.5 * s_max / 2., 6)), (0, 0, m_max)) hole = cylinder(d_a_min / 2., m_max) __shape__ = (body - hole).shape __anchors__ = { "nut_bottom": { "p": (0., 0., 0.), "u": (0., 0., -1.), "v": (1., 0., 0.), "dimension": d_a_min }, "nut_top": { "p": (0., 0., m_max), "u": (0., 0., 1.), "v": (1., 0., 0.), "dimension": d_a_min } }
def test_fix(self): s1 = cm.plane(cm.ngon(1.0, 3)) s1.translate((1.0, 2.0, 3.0)) s1.fix() self.assert_(close(s1.center(), (1.0, 2.0, 3.0)))
def test_bounds(self): s1 = cm.plane(cm.ngon(1.0, 3)) rt3d2 = math.sqrt(3.0) / 2 print('bounds', s1.bounds()) self.assert_( close(s1.bounds(), (-0.5, -rt3d2, 0.0, 1.0, rt3d2, 0.0), eps=0.1))
def wire(self): w1 = cm.ngon(1.0, 3) s1 = cm.plane(w1) w2 = s1.wire() self.assert_(close(w1.length(), w2.length()))
def test_nearest(self): s1 = cm.plane(cm.ngon(1.0, 3)) i1 = s1.nearest('Vertex', [(1.0, 0.0, 0.0)])[0] self.assert_(i1 == 2)
def face_plane(): w1 = cm.ngon(2.0, 5) f1 = cm.plane(w1) save_top(f1, 'face_plane.png')
def derived_prism(): f1 = cm.plane(cm.ngon(2.0, 6)) s1 = cm.prism(f1, (0.0, 0.0, 1.0)) save_iso(s1, 'derived_prism.png')
def tolerance(self): s1 = cm.plane(cm.ngon(1.0, 3)) self.assert_(close(s1.tolerance(), 1e-7, eps=1e-9))
def derived_helical_solid(): profile = cm.ngon(0.2, 3) s1 = cm.helical_solid(profile, 2.0, 1.0 / math.pi, 2) save_iso(s1, 'derived_helical_solid.png')
def wire_ngon(): w1 = cm.ngon(2.0, 6) save_top(w1, 'wire_ngon.png', (0.0, 0.0, 0.0))
def test_subshapes(self): s1 = cm.ngon(1.0, 3) es = s1.subshapes('edge') vs = s1.subshapes('vertex') self.assert_(len(vs) == 3 and len(es) == 3)
def face_face_from(): w1 = cm.ngon(2.0, 8) w2 = cm.ngon(10.0, 4) f2 = cm.plane(w1) f1 = cm.face_from(f2, w2) save_top(f1, 'face_face_from.png')
def test_copy(self): s1 = cm.plane(cm.ngon(1.0, 3)) s2 = s1.copy() s1.translate((1.0, 1.0, 1.0)) self.assert_(close(s2.center(), (0.0, 0.0, 0.0)) and close(s1.center(), (1.0, 1.0, 1.0)))
def test_prism(self): f1 = cm.plane(cm.ngon(2.0, 6)) s1 = cm.prism(f1, (0.0, 0.0, 1.0)) # empirical self.assert_(close(10.392, s1.volume(), 0.001))
def test_surface(self): w1 = cm.ngon(2.0, 8) w2 = cm.ngon(10.0, 4) f2 = cm.plane(w1) f1 = cm.face_from(f2, w2) self.assert_(close(200.0, f1.area()))
def test_center(self): s1 = cm.ngon(1.0, 3) s1.translate((1.0, 2.0, 3.0)) self.assert_(close(s1.center(), (1.0, 2.0, 3.0)))
head_height = 5.0 key_size = 4.0 socket_depth = 2.5 if length - threaded_length > 0.: body = cm.cylinder(threaded_diameter / 2, length) + \ cm.cylinder(unthreaded_diameter / 2, length - threaded_length) else: body = cm.cylinder(threaded_diameter / 2, length) socket = cm.translated( cm.prism( cm.filling # ngon is written in a circle of a given radius, # the socket definition is the diameter of the # circle written in the hexagon # -> multiply by 2 / sqrt(3) (cm.ngon(2 / 3**.5 * key_size / 2., 6)), (0, 0, socket_depth)), (0, 0, -head_height)) head = cm.translated(cm.cylinder(head_diameter / 2., head_height), (0, 0, -head_height)) - socket part = head + body if __name__ == "__main__": import ccad.display as cd v = cd.view() v.display(part) cd.start()