ç§ãããªãã®æ³šæãåèµ·ãããã®ã¯ãã¹ã¯ãªããåããã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 GUIã®æ¯èŒZenCadã€ã³ã¿ãŒãã§ãŒã¹ïŒ

OpenScadã€ã³ã¿ãŒãã§ãŒã¹ïŒ

Pythonã䜿çšãããšãOpenScadãšæ¯èŒããŠã¢ãã«ã³ãŒããããéæã«ãªããopenscadã³ãŒããç°¡çŽ åãããŸãã
ããšãã°ããžã§ãã¬ãŒã¿ã®æ§æã䜿çšããŠç¹çŸ€ããã£ã«ã¿ãªã³ã°ããããšã¯éåžžã«äŸ¿å©ã§ãã
äŸïŒãã€ã³ãã®é
åã®ãã£ã«ã¿ãªã³ã°ã 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ãããããå ããæ©èœãšäººéå·¥åŠã®ãã©ã³ã¹ãç¶æããããšããŠããŸãã
äŸïŒZenCadã§è€è£œãããOpenCascadeãœãããŠã§ã¢ããã« äŒçµ±ã®ç¶ç¶ã ãã¹ãŠã®æºæ³ãšããŠã®èµ·æº
å
ãšOpenScadã®æåž«ã®äŸã«ç¶ãzencadæ§æãœãªã¥ãŒã·ã§ã³ã¯ãã©ã€ãã©ãªå
ã®ãšã³ãã£ãã£ã®æ°ãæå°éã«æããŸãã OpenScadãšåæ§ã«ãZenCadã¯åºæ¬çã«ãã€ã³ãïŒxãyãzïŒã§ããªããã£ããäœæã§ããŸããããOpenCascadeã§ã¯ãããèš±å¯ããŠããŸãã ZenCadã¯ãæåã«åç¹ã«ããªããã£ããäœæããŠãããå€æã䜿çšããŠç®çã®äœçœ®ãèšå®ããŸãã ZenCadã®å€æã¯ãåå¥ã®ãªããžã§ã¯ããšããŠããããã£ã®ã¡ãœãããšããŠãååšããŸãã
äžé£ã®å€æãæšæºã§ãããå€æãå転ãåå°ããºãŒã ãå«ãŸããŸãã
æ 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ãå®è¡ããïŒ
æ®å¿µãªãããã·ã¹ãã ã®é²æ©ã¯ç§ãã¡ãæãã»ã©éãé²ãã§ããŸããã 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/
ããã¥ã¢ã«
ãæž
èŽããããšãããããŸããã
