ZenCad 3D рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдореБрд▓реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо

рдЬреЛ рдХрд╛рдо рдореИрдВ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб 3 рдбреА рдореЙрдбрд▓рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИред рдЬреИрд╕рд╛ рдореИрдВ рдЙрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рд╡реИрд╕рд╛ рд▓рд┐рдЦреЛред


ZenCad рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдиреБрд╕реНрдЦрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред OpenScad рдХреЗ 3D рдореЙрдбрд▓рд┐рдВрдЧ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛, OpenCascade рдХреА рдЬреНрдпрд╛рдорд┐рддреАрдп рдХреЛрд░, рдЧреЛрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ python3, рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рдХреЗ рдЖрдХреНрд░рд╛рдордХ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рдЕрднрд┐рдХрд▓рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА evalcacheред рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рдорд╕рд╛рд▓реЗ рдЬреЛрдбрд╝реЗрдВ, рдкрд╛рдЗрдХ рд╕реЙрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдЬрд╝рди рдЧреБрдИ, рдФрд░ рд╕рд░рдЧрд░реНрдореА рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╣рд┐рд▓рд╛ рдирд╣реАрдВред


mashinka.png


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реАрдПрдбреА рд╕рд┐рд╕реНрдЯрдо


рд╕реАрдПрдбреА, рдпрд╛ рд╣рдорд╛рд░реЗ рд╕реАрдПрдбреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдПрдбреЗрдб рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ 3 рдбреА рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реАрдПрдбреА рд╕рд┐рд╕реНрдЯрдо "рд╕реНрд╡рдЪрд╛рд▓рд┐рдд" рд╢рдмреНрдж рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред рд╡рд╣, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреНрд▓рд┐рдпрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдХреЗрд╡рд▓ рдорд╛рдирд╡реАрдп рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реАрдПрдбреА рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реАрдзреЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдореЙрдбрд▓ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реАрдПрдбреА рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдПрдХ рдкреВрд░реНрдг рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рдкреИрд░рд╛рдбрд╛рдЗрдорд▓реА рдХреНрд▓реАрди рд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реАрдПрдбреА рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЧрдарди, рд╕реЛрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдереЛрдбрд╝реА рдЕрд▓рдЧ рд░реЗрдВрдЬ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд╢реБрджреНрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ CAD OpenScad рд╣реИред


рд╢реБрд░реБрдЖрдд рдореЗрдВ OpenScad рдерд╛


рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдордВрдбрд▓реА рд╣реИ, рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрдореНрдкрд╛рд╕, рд╕реЙрд▓рд┐рдбрд╡рд░реНрдХреНрд╕, рдлреНрд░реАрдХреИрдб, рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ рдФрд░ рд╕рд░рд▓ рдУрдкрдирд╕реИрдб рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреА рд╕рдлрд▓рддрд╛ рдХрд╛ рд░рд╣рд╕реНрдп рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рд▓реНрдХрд╛, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЗрд╕ рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рдореЙрдбрд▓реЛрдВ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдУрдкрдирд╕реНрдХреИрдб рдореЗрдВ рдХреБрдЫ рдХрд╖реНрдЯрдкреНрд░рдж рджреЛрд╖ рд╣реИрдВ:


  • рдЦреБрд▓рдиреЗ рдХрд╛ рд╕рдордп рдХреЗрд╡рд▓ рдЬрд╛рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдУрдкреЗрдХреИрдб рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдмрдбрд╝реЗ рдореЙрдбрд▓реЛрдВ рдкрд░ рдЬреЛрд░ рд╕реЗ рдкрд┐рдЫрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
  • рдУрдкреЗрдирдХрд╛рдб рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдЕрдкрдиреА рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╕рднреА рд╢рдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, OpenScad рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдореЙрдбрд▓ рд▓рд┐рдЦрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рдЪрдордХ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рдирд╛ рдХрд╛рдлреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред


рднрд╛рд╖рд╛ рдФрд░ рд╕рд░реНрд╡-рд╕рд░реНрд╡


рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореИрдВ рдпрд╣рд╛рдВ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИ рдХрд┐ рдпреБрджреНрдз рдХреЗ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЛ рд▓реЗрдирд╛ред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреВрд░реНрдгрддрд╛ рдФрд░ 3 рдбреА рдореЙрдбрд▓рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд▓рд┐рдЦреА рдЧрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╕рдордЧреНрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред


ZenCad рдФрд░ OpenScad GUI рдХреА рддреБрд▓рдирд╛

ZenCad рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
zencad.png


OpenScad рдЗрдВрдЯрд░рдлрд╝реЗрд╕:
openscad.png


рдЕрдЬрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдУрдкрдирд╕реНрдХреИрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдореЙрдбрд▓ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдХрд░ рдУрдкреЗрдирдХрд╛рдб рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг: CSG
#!/usr/bin/env python #coding: utf-8 from zencad import * lazy.diag = True c1 = 100 c2 = 130 c3 = c2/2 + 20 base = box(c1,c1,c1,center=True) f1 = ngon(r = 35, n = 3) f2 = ngon(r = 35, n = 5) f3 = circle(35) s1 = linear_extrude(f1, c2, center=True) s2 = linear_extrude(f2, c2, center=True).rotateY(deg(90)) s3 = linear_extrude(f3, c2, center=True).rotateX(deg(90)) #          3 . m1 = base - s1 - s2 - s3 m2 = base ^ s1 ^ s2 ^ s3 m3 = s1 + s2 + s3 ystep = 240 xstep = 240 fontpath = os.path.join(zencad.moduledir, "examples/fonts/testfont.ttf") #    .      . t1 = textshape("difference", fontpath, 40) t1c = t1.center() t1=t1.translate(-t1c.x, -t1c.y, 0).rotateZ(deg(45)) t2 = textshape("intersect", fontpath, 40) t2c = t2.center() t2=t2.translate(-t2c.x, -t2c.y, 0).rotateZ(deg(45)) t3 = textshape("union", fontpath, 40) t3c = t3.center() t3=t3.translate(-t3c.x, -t3c.y, 0).rotateZ(deg(45)) #  ,  . disp(base.forw(ystep)) disp(s1) disp(s2.left(xstep)) disp(s3.right(xstep)) disp(m1.back(ystep)) disp(m2.left(xstep).back(ystep)) disp(m3.right(xstep).back(ystep)) disp(t1.back(ystep).up(c3), Color(1,1,0)) disp(t2.left(xstep).back(ystep).up(c3), Color(1,1,0)) disp(t3.right(xstep).back(ystep).up(c3), Color(1,1,0)) disp(s1.left(xstep).back(ystep), Color(0.5,0,0,0.95)) disp(s2.left(xstep).back(ystep), Color(0.5,0,0,0.95)) disp(s3.left(xstep).back(ystep), Color(0.5,0,0,0.95)) disp(s1.back(ystep), Color(0.5,0,0,0.95)) disp(s2.back(ystep), Color(0.5,0,0,0.95)) disp(s3.back(ystep), Color(0.5,0,0,0.95)) show() 

boolean.png


рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдХреНрд▓рд╛рдЙрдб рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ред


рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдЫрд╛рдирдирд╛ред
 #!/usr/bin/env python3 from zencad import * #  . ng = ngon(r = 10, n = 6) #      . vertices = ng.vertices() filtered_vertices = [v for v in vertices if vx < 0] #      . m = ng.fillet(4, filtered_vertices) disp(m) show() 

ngon


рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдзреБрдирд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЧреЛрдВрдж рдХреЗ рд░рд╛рдЬрд╛ рдХреЗ рд╢реАрд░реНрд╖рдХ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд╝реЗрдВрдХрд╛рдб рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рд┐рдореНрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рд╕рддрд╣ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рд╕рддрд╣ рдкрд░ рдЙрддреНрдкрдиреНрди рдПрдХ рдмрд┐рдВрджреБ рдмрд╛рджрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрди рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рднрд╡рди, рджреГрд╢реНрдп рдФрд░ рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╝реЗрдВрдХрд╛рдбред


рдЙрджрд╛рд╣рд░рдг: рд╕рд░рд▓ рдмрд┐рдВрджреБ-рджрд░-рдмрд┐рдВрджреБ рд╕рддрд╣ рдирд┐рд░реНрдорд╛рдг
 from zencad import * import numpy xcoords = numpy.linspace(-10,10,50) ycoords = numpy.linspace(-10,15,50) lines = [ interpolate([point(x, y, 0.01*(x**2 + y**3)) for x in xcoords]) for y in ycoords ] wires = [] for l in lines: trans = translate(0,0,-30) sf = l.endpoints() w=sew([l, segment(sf[0], trans(sf[0])), trans(l), segment(sf[1], trans(sf[1]))]) wires.append(w) for l in lines: disp(l.left(30)) disp(loft(wires) - halfspace().down(10)) show() 

chair.png


OpenCascade рдХреА рдареЛрд╕ рдиреАрдВрд╡


рдкреЙрд▓реАрдЧреЛрдирд▓ рдореЗрд╢ рдХрд╛ рдЧрдгрд┐рдд рд╕реАрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдЧрдгрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмрд╣реБрднреБрдЬ рдореЗрд╖реЛрдВ рдореЗрдВ рдПрдХ рджрд╣рдирд╢реАрд▓ рд╡рд┐рд╕реНрдлреЛрдЯ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖрддрд╛ рд╣реИред рдУрдкрдирд╕реНрдХреИрдб рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рд╡рд╛рд▓рд╛ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐рдорд╛рди рдХреА рд╢реБрджреНрдзрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдПрдХ рдкреВрд░реНрдг-рдЬреНрдпрд╛рдорд┐рддреАрдп рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдЬреЛ рдореЗрд╖ рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рд╕реАрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдУрдкрди рдХрд╛рд╕реНрдХреЗрдб рдХреЗ рд╣реИрдХрд░ рдЬреНрдпрд╛рдорд┐рддреАрдп рдХреЛрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд, рдЬрд╝реЗрдирдХреИрдб, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬрдЧрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдкреВрд░реНрдгрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред OpenCascade рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рджреВрд╕рд░рд╛ pythonOCC рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред ZenCad рд╢реАрд░реНрд╖ рд▓реЗрддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред


рдЙрджрд╛рд╣рд░рдг: рдЬрд╝реЗрдирдХреИрдб рдореЗрдВ рдУрдкреЗрди рдХреИрд╕реНрдХреЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреА рдмреЛрддрд▓
 #!/usr/bin/env python3 #coding: utf-8 from zencad import * import zencad.surface as surface import zencad.curve2 as curve2 lazy.diag=True height = 70 width = 50 thickness = 30 # BASE pnt1 = point(-width/2,0,0); pnt2 = point(-width/2,-thickness/4,0); pnt3 = point(0,-thickness/2,0); pnt4 = point(width/2,-thickness/4,0); pnt5 = point(width/2,0,0); edge1 = segment(pnt1, pnt2) edge2 = circle_arc(pnt2, pnt3, pnt4) edge3 = segment(pnt4, pnt5) wire = sew([edge1, edge2, edge3]) profile = sew([wire, wire.mirrorX()]) body = profile.fill().extrude(height) body = fillet(body, thickness/12) hl(body.forw(140)) # NECK neck_radius = thickness/4.; neck_height = height/10; neck = cylinder(r=neck_radius, h=neck_height).up(height) body = body + neck hl(body.forw(100)) # THICK body = thicksolid(body, -thickness / 50, [point(0,0,height+height/10)]) hl(body.forw(60)) # THREAD ( 2       .) cylsurf1 = surface.cylinder(neck_radius * 0.99) cylsurf2 = surface.cylinder(neck_radius * 1.05) major = 2 * math.pi; minor = neck_height / 10; angle = math.atan2(neck_height / 4, 2 * math.pi) ellipse1 = curve2.ellipse(major, minor).rotate(angle) arc1 = cylsurf1.map(curve2.trimmed_curve2(ellipse1, 0, math.pi)) segment1 = cylsurf1.map(curve2.segment(ellipse1.value(0), ellipse1.value(math.pi))) ellipse2 = curve2.ellipse(major, minor/4).rotate(angle) arc2 = cylsurf2.map(curve2.trimmed_curve2(ellipse2, 0, math.pi)) segment2 = cylsurf2.map(curve2.segment(ellipse2.value(0), ellipse2.value(math.pi))) m1 = sew([arc1, segment1]) m2 = sew([arc2, segment2]) thread = loft([m1, m2]).up(height + neck_height / 2) hl(m1.up(height + neck_height / 2).right(80)) hl(m2.up(height + neck_height / 2).right(60)) hl(thread.right(40)) # FINAL m = thread + body display(m) show() 

bottle.png


рдкрд░рдВрдкрд░рд╛ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ред рд╕рдм рдХреБрдЫ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓


рдЬрд╝реЗрдВрдХрд╛рдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд╛рдзрд╛рди, рдЕрдкрдиреЗ рдмрдбрд╝реЗ рднрд╛рдИ рдФрд░ рдУрдкрдирд╕реНрдХреИрдб рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред OpenScad рдХреА рддрд░рд╣, ZenCad рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдВрджреБ (x, y, z) рдкрд░ рдПрдХ рдЖрджрд┐рдо рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ OpenCascade рдЗрд╕реЗ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬреЗрдирдХрд╛рдб рдкрд╣рд▓реЗ рдореВрд▓ рдореЗрдВ рдПрдХ рдЖрджрд┐рдо рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред ZenCad рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рджреЛрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдирд┐рдХрд╛рдпреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред


 #  . cube(40, center=True).rotateX(deg(45)).rotateZ(deg(45)).right(20) #  . (right(20) * rotateZ(deg(45)) * rotateX(deg(45)))(cube(40, center=True)) #  . trans = right(20) * rotateZ(deg(45)) * rotateX(deg(45)) cube(40, center=True).transform(trans) 

рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдорд╛рдирдХ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЕрдиреБрд╡рд╛рдж, рд░реЛрдЯреЗрд╢рди, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдЬрд╝реВрдорд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред


рдЖрд▓рд╕


рдЧрдгрдирд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ZenCad рдореЗрдВ рдЧрдгрд┐рдд рдХреЛ рд╣рд▓реНрдХрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдЧрдгрдирд╛ рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИрдВред [рдбреЗрд▓] рдмреНрд▓реЙрдХрдЪреИрди [/ рдбреЗрд▓] evalcache рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рд╣рдмрд░рд╛рдмреНрд░ рдХреЗ рдкрдиреНрдиреЛрдВ рдкрд░ рдмрд╛рдд рдХреА рдереА, рд▓рд┐рдиреЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддреА рд╣реИ: рдЖрд▓рд╕реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреЗрдбрд╝реЛрдВ рдХреА рдбрд┐рд╕реНрдХ рдХреИрд╢рд┐рдВрдЧ ред рдЬрд╝реЗрдВрдХрдб рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреИрд╢ рдореЗрдВ рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЪрд┐рд╣реНрдирд┐рдд рдЕрддрд┐рд░реЗрдХ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ sha512 рд╣реИрд╢ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЖрд▓рд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдХреАрдЬрд╝ рдХреЗ рдЯрдХрд░рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рд╣реИрд╢ рд╕реНрдкреЗрд╕ 10 ^ 74 рдмреНрд░рд╣реНрдорд╛рдВрдб рдореЗрдВ рдкрд░рдорд╛рдгреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ)ред


рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рдЪрд╛рд░ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рдкрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА рдЧрдгрдирд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:


bolt.png


рдереНрд░реЗрдбреЗрдб рд╕рддрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реИ:


logo.png


рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреА рд╕рдорд╕реНрдпрд╛ред рдмрд┐рдВрджреБ рд╡рд┐рдзрд┐ рдХреЗ рдкрд╛рд╕


рдУрдкрдирд╕реНрдХреИрдб рдХрд╛ рдХреЛрдИ рдЪреЙрдореНрдлрд░рд┐рдВрдЧ рдпрд╛ рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред OpenCascade рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпреЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдСрдкрд░реЗрд╢рди рд╣реИрдВ, рдФрд░ рдЬрд╝реЗрдирдХреИрдб рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╕реЗрд╡рд╛ рдореЗрдВ рдирд╣реАрдВ рд▓реЗрдирд╛ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреАред рдРрд╕реЗ рдЕрдиреНрдп рдСрдкрд░реЗрд╢рди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рдЯреЛрдкреЛрд▓реЙрдЬрд┐рдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрдкрдирдХреИрд╕реНрдХреЗрдб рдмреЛрддрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдкрддрд▓реА рджреАрд╡рд╛рд░ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рдиред рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╕реАрдПрдбреА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, рд╣рдо рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЛрдкреЛрд▓реЙрдЬрд┐рдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ (рдХрд┐рдирд╛рд░рд╛, рдЪреЗрд╣рд░рд╛, рд╡рд░реНрдЯреЗрдХреНрд╕) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореВрд▓ OpenCascade рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ CAD рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ ZenCad рдореЙрдбрд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬреНрдЮрд╛рди рдХрд╛ рд╕реНрддрд░ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордпрд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реЗ, рдЬреИрд╕реЗ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЖрд▓рд╕реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рджреНрднрд╛рд╡ рддреБрд░рдВрдд рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЙрдбрд▓ рдХреЛрдб рднреА рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИред рдХрд╛рдлреА рд▓рдВрдмрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рдкреНрд░рдпреЛрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВ рдирд┐рдХрдЯ-рдмрд┐рдВрджреБ рд╡рд┐рдзрд┐ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЬрдм рд╕реНрдереИрддрд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╢реНрд░рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╕реНрддреБ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╢рд░реАрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕реЗ рджрд┐рдП рдЧрдП рдмрд┐рдВрджреБ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рдХреА рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдЗрдЯрдо рдЪрдпрдирд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЯреЛрдкреЛрд▓реЙрдЬреА рддрддреНрд╡реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рджреНрд╡рд╛рд░рд╛ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛)ред


рдорд╛рд░реНрдХрд░ рдХреНрдпреВ рдФрд░ рдорд╛рд░реНрдХрд░ рдбрдмреНрд▓реНрдпреВ


рдкреИрдорд╛рдиреЗ рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рдореЙрдбрд▓ рдХреЗ рдЖрдпрд╛рдо рд╕реНрдХреНрд░реАрди рд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рднрд╛рдЧ рдореЗрдВ, рдорд╛рд░реНрдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд) рд╣реЛрдиреЗ рдкрд░, рдорд╛рд░реНрдХрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдФрд░ рджреВрд░реА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЪрд╛рдорд░ / рдЧреЛрд▓рд╛рдИред


рдорд╛рд░реНрдХрд░


рд╕реНрд░реЛрдд рдЕрдкрдбреЗрдЯ рдЯреНрд░реИрдХ рдХрд░реЗрдВ


рдмрдбрд╝реЗ рднрд╛рдИ (OpenScad) рдХреА рддрд░рд╣, ZenCad рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдпрд╣ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдХреА рдмрджрд▓рддреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рд╣реЛрдиреЗ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдПрдиреАрдореЗрд╢рди


рдЬрд╝реЗрдВрдХрдб рдХреА рдЦреВрдмрд┐рдпрд╛рдБ рд╡рд╣рд╛рдБ рдЦрд╝рддреНрдо рдирд╣реАрдВ рд╣реЛрддреАрдВред


рдЬрд╝реЗрдирдХреИрдб (рддреЗрдЬрд╝ рдХреЛрд░ рдУрдкреЗрдХреИрд╕реНрдХреЗрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ 3 рдбреА рдореЙрдбрд▓ рдХреЛ рдПрдирд┐рдореЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдиреАрдореЗрд╢рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЕрдЬрдЧрд░ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрд╣реБрдд рд╣реА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдПрдХ рдЕрдЬрдЧрд░ рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рд╣реИрдВ, рдЬрд╝реЗрдВрдХрд╛рдб рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдореЙрдбрд▓ рдЖрдВрджреЛрд▓рдиреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ + рдЯреИрдХрд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд╝реЗрдВрдХрд╛рдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЛрдмреЛрдЯ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдЕрд░реНрдз-рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдПред рдЕрд░реЗ рдирдорд╕реНрддреЗ рдЧрдЬреЗрдмреЛ !!! рд╣рд╛рдп рд░реЛрд╢ !!! рджрд░реНрд╢рдХреЛрдВ рдореЗрдВ рднреА рдЖрдкрдХреЛ рджреЗрдЦрдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдХрд┐рдиреЗрдореЗрдЯреАрдХреНрд╕ рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬреЛ рд░реЛрдмреЛрдЯ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдХреАрдиреЗрдореЗрдЯрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░реЗрдЧрд╛, рд╡реИрд╕реЗ, рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╣реИред


рдЗрд╕ рд╕рдордп рдПрдиреАрдореЗрд╢рди рдЕрднреА рднреА рдПрдХ рдЕрд░реНрдз-рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдХреИрдорд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред


рдирд┐рд░реНрдпрд╛рдд - рдЖрдпрд╛рдд


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдЖрдпрд╛рдд brep рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЬреЛ рдлреНрд░реАрдХреИрдб рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдФрд░ stl рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ 3 рдбреА рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреАрдврд╝реА рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рд╣рд┐рддред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдСрдирд▓рд╛рдЗрди рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЗрдирдХреЗрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред


рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐


рдлрд┐рд▓рд╣рд╛рд▓, рдЬрд╝реЗрдирдХреИрдб рдЕрднреА рднреА рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд╛рд▓реВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддреИрдпрд╛рд░ рд╣реИред


рдкреБрд╕реНрддрдХрд╛рд▓рдп python3.5, python3.6, python3.7 рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдмрд┐рдпрди рд╕рдВрдЧрдд рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд┐рдкрд▓реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ


(рдЖрдкрдХреЛ Pytt5 рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг qt5-default рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ)


 python3 -m pip install zencad apt install qt5-default 

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЧреБрдИ рдЪрд▓рд╛рдирд╛:


 python3 -m zencad 

рдЕрдЬрдЧрд░ рд▓рд┐рдкрд┐ рд╕реЗ рдЧреБрдИ рдЪрд▓рд╛рдирд╛:


 #!/usr/bin/env python3 import zencad m = zencad.cube(20) zencad.disp(m) zencad.show() 

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреНрд░рдЧрддрд┐ рдЙрддрдиреА рддреЗрдЬреА рд╕реЗ рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ рдЬрд┐рддрдиреА рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред рдЕрдзрд┐рдХрд╛рдВрд╢ рджреЛ-рдЖрдпрд╛рдореА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдПрдкреАрдЖрдИ рдФрд░ рд╕рддрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдкреА рдХреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдереНрд░реЗрдбреЗрдб рдЬреЛрдбрд╝реЛрдВ рдФрд░ рдЧрд┐рдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рд╣реИ рдФрд░ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд╛рд╣рд░реА рд╕рдВрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЕрдЪрд╛рдирдХ рдХрдЯреНрдЯрд░ рд╣реИ !!! рдЙрджрд╛рддреНрдд рдкрд╛рда ... рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЦреБрдлрд┐рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рдЬрд╝реЗрдВрдХрд╛рдб рдЖрдкрдХреЛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ 3 рдбреА рдореЙрдбрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ, 3 рдбреА рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рддрдВрддреНрд░ рдХреА рдЧрддрд┐рдЬ рдХрд▓реНрдкрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рдВрдХ


github: https://github.com/mirmik/zencad , https://github.com/mirmik/servoce


pypi: https://pypi.org/project/zencad/ , https://pypi.org/project/pysoo//


рдЧрд╛рдЗрдб


рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред


Source: https://habr.com/ru/post/hi443140/


All Articles