ç§ãããªãã®æ³šæãåèµ·ãããã®ã¯ãã¹ã¯ãªããåããã3Dã¢ããªã³ã°ã·ã¹ãã ãããäžåºŠæžãè©Šã¿ã§ãã ç§ã圌女ã«äŒãããããã«æžããŠãã ããã
ZenCadã·ã¹ãã ã®ã¬ã·ãã¯éåžžã«ç°¡åã§ãã OpenScadã®3Dã¢ããªã³ã°ãOpenCascadeã®ãžãªã¡ããªãã¯ã³ã¢ãæ¥çå€ãšããŠã®python3ãã¢ã°ã¬ãã·ããªèšç®ãã£ãã·ã¥ã®ããã®é 延èšç®ã©ã€ãã©ãªevalcacheã®ã¹ã¯ãªããäœæã®ã³ã³ã»ããã ä»ã®ããã€ãã®æ¥œåšããã¹ãã€ã¹ãè¿œå ããPyQtãœãŒã¹ã§guiãå³ä»ãããæªæããŸãããæ¯çªããŸããã
CADã·ã¹ãã ã®ã¹ã¯ãªããäœæ
CADããŸãã¯åœç€Ÿã®CADã«ãããšãã³ã³ãã¥ãŒã¿ãŒæ¯æŽèšèšã·ã¹ãã ã§ãã ã€ã³ã¿ã©ã¯ãã£ããª3Dãšãã£ã¿ãŒãšã¯ç°ãªããã¹ã¯ãªããåãããCADã·ã¹ãã ã¯ãäœæè ãéåžžç解ããŠãããšããæå³ã§ãèªååããšããèšèã解éããŸãã ã€ãŸããã³ã³ãã¥ãŒãã£ã³ã°ããŒã«ã®ã»ãããšããŠã§ã¯ãªããäœææã«ã®ã¿äººéã®ä»å ¥ãå¿ èŠãšããéåžžã«æ確ãªã¢ã«ãŽãªãºã ãšããŠã§ãã
ã¹ã¯ãªããåãããCADã§ã®äœæ¥ã§ã¯ãã¢ãã«ãç»é¢ã«çŽæ¥æç»ããŸããããã¢ãã«ã®çæã«å¿ããŠããã°ã©ã ãæ§ç¯ããŸãã ã€ã³ã¿ã©ã¯ãã£ãCADã®ã¿ã«ç²ŸéããŠãã人ã«ãšã£ãŠããã®ã¢ãããŒãã¯çµ¶å¯Ÿçãªãã©ã¡ããªãã¯ã¢ããªã³ã°ãšããŠèª¬æã§ããŸãã å³å¯ã«èšãã°ãã¹ã¯ãªããã¯å€ãã®å Žåã察話åç°å¢ãè£å®ããè¿œå ã®ããŒã«ãäœæããããã«äœ¿çšãããŸããããã©ãã€ã çã«ã¯ãªãŒã³ãªã¹ã¯ãªããåãããCADã§äœæ¥ããã«ã¯ãã¯ãŒã¯ãããŒã®ç°ãªãç·šæãèãæ¹ãå¿ èŠã§ããããããã«ç°ãªãç¯å²ã®ã¿ã¹ã¯åãã«èšèšãããŠããŸãã
çŸæç¹ã§æãæåã§çŽç²ãªã¹ã¯ãªããCADã¯OpenScadã§ãã
æåã¯OpenScadã§ãã
䟿å©ãªã³ã³ãã¹ãSolidWorksãFreeCadããããµããæ°åããªãOpenScadã奜ã人ãã¡ãããŸãã 圌ã®æåã®ç§whatã¯äœãªã®ããšãã質åã«çããã®ã¯ããªãé£ããã§ãããããã¯è»œéã§ã䜿çšããã®ã«ååãªæè»æ§ããããèšå®ãæå°éã§ãããšæèšã§ããŸãã ããã«æžãããã¢ãã«ã®äžéšã¯ç°¡åã«åå©çšã§ããŸãã
ãã ããopenscadã«ã¯ããã€ãã®è¿·æãªæ¬ é¥ããããŸãã
- openscadã¯ã¡ãã·ã¥ãããã¯ãŒã¯ã§ã®ã¿æ©èœããŸãã
- openscadã®ã¹ã±ãŒã©ããªãã£ã®å¶éã¯ããªãäœãã倧ããªã¢ãã«ã§ã¯å€§å¹ ã«é ãå§ããŸãã
- openscadãä»ã®ã·ã¹ãã ãšçµ±åããããšã¯éåžžã«é£ããããã®çç±ã¯ç¬èªã®èšèªã䜿çšããŠããããã§ãã
æ®å¿µãªãããã¹ã¯ãªããã£ã³ã°ã¢ãããŒãã®ãã¹ãŠã®èœåã«ãããå®çšçãªãã©ãã·ã¥ã®ç¯å²ãè¶ ããŠOpenScadã§ç°¡åãªã¢ãã«ãæžãããšã¯éåžžã«åé¡ããããŸãã
èšèªãšãã¹ãŠãã¹ãŠ
ããã§æåã«ä¿®æ£ãããã®ã¯ãæ±çšããŒã«ãæŠéããŒã«ãšããŠäœ¿çšããããšã§ãã æ±çšèšèªã䜿çšãããšãæ§ææ©èœã®å®å šæ§ãšä»¥åã«äœæãããã©ã€ãã©ãªã®çµã¿åããã䜿çšããŠã3Dã¢ããªã³ã°ã®åé¡ã解決ã§ããŸãã
ZenCadã€ã³ã¿ãŒãã§ãŒã¹ïŒ
OpenScadã€ã³ã¿ãŒãã§ãŒã¹ïŒ
Pythonã䜿çšãããšãOpenScadãšæ¯èŒããŠã¢ãã«ã³ãŒããããéæã«ãªããopenscadã³ãŒããç°¡çŽ åãããŸãã
#!/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()
ããšãã°ããžã§ãã¬ãŒã¿ã®æ§æã䜿çšããŠç¹çŸ€ããã£ã«ã¿ãªã³ã°ããããšã¯éåžžã«äŸ¿å©ã§ãã
#!/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()
pythonã®ãããã§ãçŸä»£ã®ãœãããŠã§ã¢ãšã³ã·ã¹ãã ã§éå ¬åŒã«æ¥çå€ã®çã®ç§°å·ãå ããŠããzencadã¯ãä»ã®ã©ã€ãã©ãªããœãããŠã§ã¢ã·ã¹ãã ãšç°¡åã«çµ±åã§ããŸãã 1ã€ã®ã¹ã¯ãªããã§sympyã䜿çšããŠåæãµãŒãã§ã¹ãçæããnumpyã䜿çšããŠãã®ãµãŒãã§ã¹ã§çæãããç¹çŸ€ãåŠçãããã¡ããzencadãæ§ç¯ãèŠèŠåãããã³åŸåŠçããããšãã§ããŸãã
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()
OpenCascadeã®åŒ·åºãªåºç€
ããªãŽã³ã¡ãã·ã¥ã®æ°åŠã¯ãå¢çè¡šçŸã®æ°åŠãããã¯ããã«åçŽã§ãããå¢çè¡šçŸã®æ¹ãã¯ããã«å®çšçã§ãã ç¹ã«ãããªãŽã³ã¡ãã·ã¥ã«ã¯çµã¿åããççºã®åé¡ããããããã¯ç¹ã«ã¢ãã«ãã¬ã³ããªã³ã°ãããšããæ¥ããšãã«çŸããŸãã OpenScadã§ã¯ãå€ãã®å Žåãå®éã®ã¢ãã«ã®è§£å床ããã¯ããã«äœã解å床ã§è£œåãéçºããå¿ èŠããããããã¯ãã©ãã€ã ã®çŽåºŠã«éåããŸãã
ãããã£ãŠãå®è£ ã®2çªç®ã®ãã€ã³ãã¯ãã¡ãã·ã¥ã¢ãã«ã®ä»£ããã«å¢çè¡šçŸã䜿çšããæ¬æ Œçãªãžãªã¡ããªãã¯ã³ã¢ã®äœ¿çšã§ãã ãã¡ãããOpenCascadeã®ããã«ãŒã®å¹ŸäœåŠçã³ã¢ãäžå¿ã«æ§ç¯ãããZenCadã¯ãPythonç°å¢ã§ãã®æ©èœãå®å šã«æäŸããããšãç®çãšããŠããŸããã OpenCascadeãå®å šã«äŒããããšãããšã2çªç®ã®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()
äŒçµ±ã®ç¶ç¶ã ãã¹ãŠã®æºæ³ãšããŠã®èµ·æº
å ãšOpenScadã®æåž«ã®äŸã«ç¶ãzencadæ§æãœãªã¥ãŒã·ã§ã³ã¯ãã©ã€ãã©ãªå ã®ãšã³ãã£ãã£ã®æ°ãæå°éã«æããŸãã OpenScadãšåæ§ã«ãZenCadã¯åºæ¬çã«ãã€ã³ãïŒxãyãzïŒã§ããªããã£ããäœæã§ããŸããããOpenCascadeã§ã¯ãããèš±å¯ããŠããŸãã ZenCadã¯ãæåã«åç¹ã«ããªããã£ããäœæããŠãããå€æã䜿çšããŠç®çã®äœçœ®ãèšå®ããŸãã 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)
äžé£ã®å€æãæšæºã§ãããå€æãå転ãåå°ããºãŒã ãå«ãŸããŸãã
æ azine
èšç®æéãæå°éã«æããããã«ãZenCadã®æ°åŠã¯å³å¯åããããã¹ãŠã®èšç®ã¯ç©æ¥µçã«ãã£ãã·ã¥ãããŸãã å ã»ã©Habrahabrã®ããŒãžã§èª¬æãã[del]ãããã¯ãã§ãŒã³[/ del] evalcacheã©ã€ãã©ãªãŒã¯ãæ€èšŒã¢ã«ãŽãªãºã ã®ç®¡çãæ åœããŸãã Zencadã¯èšç®çµæãå ±éã®ãã£ãã·ã¥ã«ä¿åããŸãããã®ãã£ãã·ã¥ã®ç¶æ ã¯ãããžã¥ã¢ã©ã€ã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠç£èŠã§ããŸãã ããŒã¯ãããåé·æ§ã§äœ¿çšãããsha512ããã·ã¥ã¢ã«ãŽãªãºã ã¯ãé 延ãªããžã§ã¯ãã®ããã·ã¥ããŒã®è¡çªã®å¯èœæ§ãæé€ããŸãïŒããã·ã¥ç©ºéã¯ãå®å®ã®ååã®æ°ã®10 ^ 74åã§ãïŒã
ãã®ã¢ãã«ãäœæãããšã4ã¡ã¬ãã€ãã®ãžãªã¡ããªãçæãããæåã®ãã¹ã§ããªãé·ãæéèšç®ã§ããŸãã
ããå±±ã®ããè¡šé¢ã§ã®äœæ¥ã¯èšç®ã³ã¹ããããããŸãã
åå°ããããžãŒã®åé¡ã è¿ç¹æ³
OpenScadã«ã¯é¢åããäžžã¿ä»ãã®æäœã¯ãããŸããã OpenCascadeã¯ããããæäŸããŸãã ãããã¯éåžžã«éèŠãªæäœã§ãããZenCadã«ãµãŒãã¹ãæäŸããªãã®ã¯æ®å¿µã§ãã ããããžãªããžã§ã¯ããæå®ããå¿ èŠãããä»ã®æäœããããŸããããšãã°ãOpenCascadeããã«ã®äŸã§èå£ã¢ãã«ãååŸããæäœã§ãã ã°ã©ãã£ã«ã«ãªCADã·ã¹ãã ã§ã¯ãããããžãªããžã§ã¯ãïŒãšããžãé¢ãé ç¹ïŒãããŠã¹ã§ç€ºããŸãã ã¹ã¯ãªãããæžããšãããã®ãããªæ©äŒã¯ãããŸããã ãã€ãã£ãOpenCascadeã¯ããªãã¬ã¯ã·ã§ã³ã®åé¡ã解決ããããã䜿çšããŠã°ã©ãã£ãã¯CADãæäœããŸãã ZenCadã¯ã¢ãã«ã®ãªãã¬ã¯ã·ã§ã³ããµããŒãããŠããŸããããããäž»èŠãªããŒã«ãšããŠäœ¿çšãããšãå€ãã®é倧ãªæ¬ ç¹ããããŸãã ãŸããå°ãªããšãå éšããããžã®æŠå¿µãç解ããå¿ èŠãããããããããã®ããŒã«ã䜿çšããããã«å¿ èŠãªç¥èã®ã¬ãã«ãæ¥æ¿ã«å¢å ããŸãã 次ã«ãã¹ã¯ãªããã«ifã衚瀺ããããšããã«ãé 延ã¢ã«ãŽãªãºã ã®èª¿åãããã«åŽ©ããã¢ãã«ã³ãŒããéåžžã«è€éã«ãªããŸãã éåžžã«é·ãåå°ãšå®éšã®éçšã§ãç§ã¯è¿ç¹æ³ã«èœã¡çããŸããã ã€ãŸããããããžã«äŸåããæäœãå®è¡ããå Žåãããã°ã©ã ã¯ãªããžã§ã¯ãããã€ãã¹ãã身äœã«å ¥ããªããžã§ã¯ãã®äžãããæå®ããããã€ã³ãã«æãè¿ãããããžãªããžã§ã¯ããèŠã€ããŸãã ãã®ã¢ã€ãã ã¯éžææžã¿ãšèŠãªãããŸãã ãã®ãããªãœãªã¥ãŒã·ã§ã³ã¯èšç®ã³ã¹ããé«ããªããŸããããã£ãã·ã³ã°ã®ããã«ããã©ãŒãã³ã¹ãåäžããŸãã ãã®ã¢ãããŒãã¯ãããããžèŠçŽ ã«äŸåãããã¹ãŠã®æäœã«äœ¿çšãããŸãã
åè¿°ã®ããã«ãäžèšã®äŸïŒäŸïŒç¹ã®é åã®ãã£ã«ã¿ãŒåŠçïŒã§æ¢ã«ç€ºããããã«ãåžžèã«ããã¢ãã«ãåæ ããå¯èœæ§ãä¿æãããŸãã
ããŒã«ãŒQããã³ããŒã«ãŒW
ã¢ãã«ã®å¯žæ³ã¯ãç®ç«ããªãããã«ç»é¢ããèªã¿åãããšãå°é£ãªå ŽåããããŸãã äžéšã§ã¯ãããŒã«ãŒã¯ãã®åé¡ã解決ã§ããŸãã çŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ïŒã©ããããçŽæçã§ã¯ãªãïŒãåããããŒã«ãŒã¯ã座æšã«ä¿¡å·ãéããè·é¢ã衚瀺ããŸããããã«ãããé¢åããäžžã¿ä»ããªã©ã®æäœã®ãžãªã¡ããªã®åæãšãã€ã³ãã®éžæãç°¡åã«ãªããŸãã
ãœãŒã¹æŽæ°ã®è¿œè·¡
å 貎ïŒOpenScadïŒãšåæ§ã«ãZenCadã¯ãœãŒã¹ãã¡ã€ã«ãå€æŽãããšãã«çæãããã¢ãã«ãæŽæ°ã§ããŸãã ãã£ãã·ã³ã°ã·ã¹ãã ãšçµã¿åãããããšã§ãã¹ã¯ãªãããéåžžã«äŸ¿å©ã«å€æŽã§ããç®ã®åã«ã»ãŒãªã¢ã«ã¿ã€ã ã§è£œåã®ç¶æ ãå€åããŸãã
ã¢ãã¡ãŒã·ã§ã³
zencadã®ã¡ãªããã¯ããã ãã§ã¯ãããŸããã
ZenCadïŒé«éã³ã¢ã®ãªãŒãã³ã«ã¹ã±ãŒãã®ãããïŒã¯ãã·ãŒã³ããªã¢ã«ã¿ã€ã ã§åæç»ã§ããããã3Dã¢ãã«ãã¢ãã¡ãŒã·ã§ã³åã§ããŸãã ã¢ãã¡ãŒã·ã§ã³ã¯ãéåžžã®pythoné¢æ°ã«ãã£ãŠå®è£ ãããéåžžã«èªç±ã«èªåèªèº«ãæ±ãããšãã§ããŸãã Pythonç°å¢ã«ããããšãèãããšãzencadã¯å€éšãœãŒã¹ããã®ããŒã¿ãã¢ãã«ã®åãã®åœ¢ã§èŠèŠåã§ããŸãïŒããšãã°ããã«ãã¹ã¬ãã+ tcpsocketã䜿çšïŒã ãããã£ãŠãzencadã¯ãããšãã°ãããã補åã®åèªç¶ãªãã¹ãã«äœ¿çšã§ããŸãã ããã«ã¡ã¯ãã¬ãŒãïŒ ããã«ã¡ã¯ROS !!! èŽè¡ã®äžã§äŒããŠããããã§ãã ãšããã§ããããããããã¥ã¬ãŒã¿ãŒã®éåé£éã®æ§ç¯ãå€§å¹ ã«ç°¡çŽ åããéååŠã®ã©ã€ãã©ãªãéçºäžã§ãã
çŸæç¹ã§ã®ã¢ãã¡ãŒã·ã§ã³ã¯ãŸã ïŒç¹ã«ã«ã¡ã©å¶åŸ¡ã®èŠ³ç¹ããïŒåå®éšããŒãžã§ã³ã§ããããã詳现ã«ã€ããŠã¯èª¬æããŸããã
ãšã¯ã¹ããŒã-ã€ã³ããŒã
çŸåšãbrep圢åŒã§ã®ãšã¯ã¹ããŒããšã€ã³ããŒãããµããŒããããŠããŸããããã«ãããfreecadãšã®çµ±åãå¯èœã«ãªããstl圢åŒã§ã®ãšã¯ã¹ããŒããå¯èœã«ãªãã3Då°å·çšã®ã¢ãã«ãçæã§ããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã®çæããµããŒããããŠããŸãã èªåãå«ãã ç¹ã«ããªã³ã©ã€ã³ããã¥ã¢ã«ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ZenCadã«ãã£ãŠèªåçã«çæãããŸãã
çŸç¶
çŸæç¹ã§ã¯ãZenCadã¯ãŸã å®æã«ã¯ã»ã©é ãã§ãããæºåãæŽã£ãŠããéšåã§ã¯å®å šã«æ©èœããŠããŸãã
ãã®ã©ã€ãã©ãªã¯ãpython3.5ãpython3.6ãpython3.7ã®ããŒãžã§ã³ã®Debianäºæ軞çšã«pipyã§å©çšå¯èœã§ã
ïŒPyQt5ã®ãã©ã°ã€ã³ã«åé¡ããããããqt5-defaultã®ã€ã³ã¹ããŒã«ãå¿ èŠã«ãªãå ŽåããããŸãïŒ
python3 -m pip install zencad apt install qt5-default
ã³ãã³ãã©ã€ã³ããGUIãå®è¡ããïŒ
python3 -m zencad
Pythonã¹ã¯ãªããããGUIãå®è¡ããïŒ
#!/usr/bin/env python3 import zencad m = zencad.cube(20) zencad.disp(m) zencad.show()
æ®å¿µãªãããã·ã¹ãã ã®é²æ©ã¯ç§ãã¡ãæãã»ã©éãé²ãã§ããŸããã 2次å ãžãªã¡ããªã®APIãšãµãŒãã§ã¹ãæäœããAPIã®ã»ãšãã©ã¯ãŸã å®è£ ãããŠããŸãããæšæºåœ¢åŒã®ãšã¯ã¹ããŒããšã€ã³ããŒãã®ãµããŒãããšã©ãŒåŠçã¯åžžã«ééçã§ã¯ãããŸãããèªåãã¹ãã¯æ©èœããŠããŸãããããç¶æãšã®ã¢è£œåãæ§ç¯ããããã®ã©ã€ãã©ãªã¯èæ¡ããããŸã å®è£ ãããŠããŸããã å®å šã«ç°åžžãªå€éšãšãã£ã¿ãŒãšããŠãçªç¶ããŒãã³ã¢!!! åŽé«ãªããã¹ã...ã·ã¹ãã ãWindowsã§å®è¡ã§ããããã«æŽç·Žãããã®ã§ãïŒããã«ã¯éåžžã«å€ãã®é«åºŠãªã€ã³ããªãžã§ã³ã¹äœæ¥ãå¿ èŠã§ãïŒã
ãã ããçŸåšãzencadã䜿çšãããšãéåžžã«è€éãª3Dã¢ãã«ãèšèšãã3Då°å·çšã®ã¢ãã«ãäœæããã¡ã«ããºã ã®éååŠãèŠèŠåããããšãã§ããŸãã
ãããžã§ã¯ããªã³ã¯
githubïŒ https : //github.com/mirmik/zencadãhttps : //github.com/mirmik/servoce
pypiïŒ https ://pypi.org/project/zencad/ãhttpsïŒ//pypi.org/project/pyservoce/
ãæž èŽããããšãããããŸããã