åæçš¿ã«ãªããŸããã¯ãããŸããŠã iwtn ã§ãã
ä»å¹Žã®10æãããªãã»ã³ã¹ã«JOINããŸããã
ã¡ã³ã¿ãŒãšããŠãäžè©±ã«ãªããŸããããããŠçŸæç¹ã§ãäžç·ã«ä»äºãããŠãã @yut_h1979 ããããããããŒãã«ãäžããããæ°ãããŸãããä»åã¯çŸæç¹ã§Qiitaã«ã¿ã°ã®ãªããããªãã€ããªããã°ã©ãã³ã°èšèªã«ã€ããŠç°¡åã«ç޹ä»ããããšæããŸãã
æçž®ã§ãããä»äºãšã¯ãŸã£ããé¢ä¿ã®ãªã話é¡ã§ãã
OpenSCADãšã¯
ç°¡åã«èšã£ãŠããŸãã°ã3Dã¢ããªã³ã°ãã¢ãã®åœ¢ãäœãããã®ããã°ã©ãã³ã°èšèªã§ãã
3Dã¢ããªã³ã°ãè¡ãä»ã®ãœãããŠã§ã¢ãšããã°ãOSSã§ã¯Blenderãæåã§ãã
倧æµã¯GUIã§ããŠã¹ãšããŒããŒãã®ã·ã§ãŒãã«ããã䜿ã£ãŠã3Dã¢ãã«ãã°ãªã°ãªæäœããªãã圢ãäœã£ãŠãããŸãã
ããã«å¯ŸããŠOpenSCADã¯ãããã°ã©ãã³ã°ã®åºæ¬ãšãªãåããé æ¬¡ã»åå²ã»å埩ãšãåºæ¬çãªå³åœ¢ãçã»å€é¢äœã»éäœãªã©ãçµã¿åãããŠã¢ããªã³ã°ãè¡ã£ãŠãããŸãã
çµæçã«ä»¥äžã®ãããªåœ¢ã**ã³ãŒãã ãã§ïŒ**äœããŸãã

OpenSCADã¯ãèžè¡çãªã¢ãã§ã¯ãªããã©ã¡ãããšèšãã°å·¥æ¥çãªè£œåãæ®æ®µäœ¿ãéå
·ã®ã¢ããªã³ã°ã«åããŠããŸãã
ãã®ããã«æç« ã§æžãããŠãäœãèšã£ãŠããã®ããããã«ãããšæããŸãã
ã§ã¯ãã³ãŒããšäžç·ã«ã©ããã£ãŠ3Dã¢ããªã³ã°ãããŠããã®ãèŠãŠãããŸãããã
ã€ã³ã¹ããŒã«
OpenSCADã¯ãWindows, MacOSX, Linuxãšå¹
åºãç°å¢ã§äœ¿ããŸãã
å
¬åŒããŒãžã®ããŠã³ããŒãç»é¢ã«ã¢ã¯ã»ã¹ããŠãããããã®ç°å¢ã«ãã£ããã¡ã€ã«ãããŠã³ããŒãããŸãããã
MacOSXã§ããã°ãããŠã³ããŒãããdmgãã¡ã€ã«ãéããã¢ããªã±ãŒã·ã§ã³ãã©ã«ãã«ãã©ãã°ã¢ã³ãããããããã ãã§ãã
ç»é¢ãšåºæ¬çãªå³åœ¢ãçã»å€é¢äœã»éäœ
ç»é¢ã¯å€§ããã³ãŒããæžãå·ŠåŽãš3Dã¢ãã«ã衚瀺ãããå³åŽã«åãããŸãã
ç»é¢ã®å·ŠåŽã«åºãŠããã³ãŒãã以äžã®ã³ãŒãã«ãªããŸãã
ãã®ã³ãŒãã§äœããã3Dãªããžã§ã¯ãã¯ãé ã«ïŒç»åã§ã¯å·ŠããïŒäžè§æ±ãåéãçãç«æ¹äœãçŽæ¹äœãšãªããŸãã
translate([-40, 0, 0])
cylinder(h=20, r1=8, r2=8, $fn=3);
translate([-20, 0, 0])
cylinder(h=20, r1=10, r2=0);
translate([0, 0, 10])
sphere(10);
translate([20, 0, 0])
cube(10);
translate([40, 0, 0])
cube([8, 15, 20]);
translateã¯ã3Dãªããšãžã§ã¯ããçæãããå Žæãç§»åãããŠããåœä»€ã§ãã
OpenSCADã¯3Dã¢ããªã³ã°ã®ããã®èšèªãªã®ã§ãåœç¶ã®ããã«ç©ºéçãªãã¯ãã«ãæ±ããŸãããã®ã³ãŒãã§ã¯æåŸã®è¡ã«ãã[8, 15, 20]ãXYZ軞ã§ã®é·ãã瀺ããã¯ãã«ã衚çŸããå€ã«ãªããŸãã
3Dã¢ãã«ã®è¡šç€ºã¯ãç»é¢å³åŽã®è¡šç€ºéšåããã©ãã°ã¢ã³ããããããã¹ã¯ããŒã«ããããšã§æäœã§ããŸãããŸããäžéšã«ããã¡ãã¥ãŒã§ããåæ§ã®æäœãè¡ããŸããããããå転ãããããŠãã©ãããç¶æ ãããããªããªã£ãããã¡ãã¥ãŒã®å·ŠããïŒçªç®ã«ãããReset Viewãã§åæç¶æ ã«è¡šç€ºèšå®ãæ»ããŸãã
é æ¬¡ã»åå²ã»å埩
OpenSCADã¯ããã°ã©ãã³ã°èšèªãªã®ã§ã倿°ã«å€ãæ ŒçŽããããç¹°ãè¿ããåå²ã®åŠçãã§ããŸãã
// x軞ã®éé
x_margin = 20;
for (i = [-10:10]) {
translate([x_margin * i, 0, 0]) {
if (i % 2 == 0) {
cube([10, 50, 10], center=true);
} else {
cube([10, 10, 50], center=true);
}
}
}
ç¹°ãè¿ãã®éã®[-10:10]ãã¡ãã£ãšç¹åŸŽçãããããŸãããããã¯ç¯å²ã瀺ãå€ã§ããå
·äœçã«ã¯ -10,-9,-8,...8,9,10 ã衚ããŠããŸãã
[-10:3:10]ã®ããã«ïŒã€ã®å€ãæå®ããå Žåã¯ãçãäžã®æ°åã¯ã¹ãããã衚ããå
·äœçã«ã¯ -10,-7,-4,...4,7,10 ã衚ããŸãã

å³åœ¢ã®çµã¿åãã
åçŽãªå³åœ¢ã ãã§ã¯ãçŸå®ã«å¿
èŠãªè€éãªã¢ãã®ã¢ããªã³ã°ã¯ã§ããŸããã
ããã§OpenSCADã§ã¯ãåçŽãªå³åœ¢å士ã空éçã«è¶³ãããåŒãããããããšã§è€éãªåœ¢ãäœã£ãŠãããŸãã

translate([-40, 0, 0])
union() {
cube(20, center=true);
sphere(14, center=true);
}
translate([0, 0, 0])
difference() {
cube(20, center=true);
sphere(14, center=true);
}
translate([40, 0, 0])
intersection() {
cube(20, center=true);
sphere(14, center=true);
}
æåã®å³åœ¢ã¯ãç«æ¹äœãšçäœãåçŽã«åããã£ãŠããŸããå³åœ¢å士ã空éçã«è«çæŒç®ã®ORããçµæããšã§ããããŸããããã
次ã®çãäžã®å³åœ¢ã¯ããŸãç«æ¹äœãããããããçäœã®åœ¢ãæãåã£ãŠããŸãããããè«çæŒç®ã§ç€ºãã®ã§ããã°ïŒç«æ¹äœ AND NOT çäœïŒã§ããã
æåŸã®å³åœ¢ã¯ãç«äœå士ã®å
±éããéšåã®ã¿ã«ããŠããŸããè«çæŒç®ã§ã¯ïŒç«æ¹äœ AND çäœïŒãšã§ããããã§ããããè§ããšããŠæããã圢ã«ãªããŸããã
ãã¡ãããäžè¬çãª3Dã¢ãã«ã®ããŒã¿ã®ããã«ãé ç¹ãšããããçµãã é¢ãåãããŠè¡šçŸããããšãOpenSCADã§ã¯å¯èœã§ãããåºæ¬çã«ã¯ãåçŽãªå³åœ¢å士ãç¹°ãè¿ããåå²ããŠçæããçµã¿åãããããšã§è€éãªåœ¢ç¶ãæã€ãã®ãäœã£ãŠãããŸãã
身ã®åãã®è£œåã®åœ¢ç¶ããããã£ãæ¹æ³ã§è¡šçŸããããšãèããŠã¿ããšè¯ãé ã®äœæã«ãªããšæããŸãã
ãã°ã«ãããäœã£ãŠã¿ã
äŸãã°ã³ããã¯ãåæ±ããååŸã®å°ãå°ããåæ±ãå
ãã«é«ããäžããŠåŒãæãã°äœããããšãã§ããã
ããã«åã£æãã€ããã°ãã°ã«ããã«ãªããŸãã

module ring(r1, r2, h) {
difference() {
cylinder(r = r1, h = h);
translate([ 0, 0, -1 ]) cylinder(r = r2, h = h+2);
}
}
module magcup(height, outer, tickness) {
inner = outer - tickness;
handle = height / 4;
difference(){
union() {
cylinder(h=height, r1=outer, r2=outer, center=true);
rotate([90,0,0]) {
translate([outer, 0, -(tickness / 2)]) {
ring(handle, handle - tickness, tickness);
}
}
};
translate([0, 0, tickness]) {
cylinder(h=height, r1=inner, r2=inner, center=true);
}
}
}
translate([100, 0, 0])
magcup(100, 40, 5);
translate([-100, 0, 0])
magcup(150, 60, 5);
ããã§ã¯ã¢ãžã¥ãŒã«ãšããæ©èœã䜿ã£ãŠãåããããªå³åœ¢ãçæããéã«åŠçããŸãšããŠããŸããããã§æ§ã
ãªãµã€ãºã®ãã°ã«ãããæè»œã«çæã§ããŸãã
åã£æéšåãäœã£ãŠããringã¢ãžã¥ãŒã«ã¯ããŠãŒã¶ãŒããã¥ã¢ã«ã®äžéšãããåãããŸããã
å
ã«åã£æãã€ããŠãããŠããå
åŽãåãé€ããªããšããã°ã«ããã®å
åŽã«åã£æãæ®ã£ãŠããŸããšãããã°ïŒãçºçããŸãã
ãã®ããã«å³åœ¢å士ãçµã¿åãããé çªã¯å€§äºã§ãã

module ring(r1, r2, h) {
difference() {
cylinder(r = r1, h = h);
translate([ 0, 0, -1 ]) cylinder(r = r2, h = h+2);
}
}
module magcup(height, outer, tickness) {
inner = outer - tickness;
handle = height / 4;
union() {
difference(){
cylinder(h=height, r1=outer, r2=outer, center=true);
translate([0, 0, tickness]) {
cylinder(h=height, r1=inner, r2=inner, center=true);
}
};
rotate([90,0,0]) {
translate([outer, 0, -(tickness / 2)]) {
ring(handle, handle - tickness, tickness);
}
}
}
}
magcup(100, 40, 5);
ãã®ä»ã«ãOpenSCADã«ã¯å€åœ©ãªæ©èœããããŸãããããã§ã¯ç޹ä»ããããŸããã
èå³ã®ããæ¹ã¯ãŠãŒã¶ãŒããã¥ã¢ã«ãåç
§ããã ããã°ãšæããŸãã
STLãã¡ã€ã«ãžã®æžãåºã
ç»é¢å·ŠåŽã®äžéšã«ã¡ãã¥ãŒãæããŸãã
ãã®ã¡ãã¥ãŒã®å³ã®æ¹ã«ãRenderããšãExport as STLããšãããã¿ã³ãæããŸãã
ããããé æ¬¡æŒããšã3Dããªã³ã¿ã®åºåãµãŒãã¹ã§äœ¿ããSTL圢åŒã§ãã¡ã€ã«ã«ä¿åã§ããŸãã
ãã°ãä¿®æ£ããæºè¶³ã®ãããã°ã«ãããã§ããããã©ããã®ãµãŒãã¹ã§åºåããŠã¿ãã®ãé¢çœãã§ãããã
ã³ãŒããªã®ã§ããŒãžã§ã³ç®¡çãã§ããŸãã
誰ããã¢ããªã³ã°ãããã°ã«ããããã©ãŒã¯ããŠãèªå奜ã¿ã«ã«ã¹ã¿ãã€ãºããŠããããããããŸããïŒ
ãªãOpenSCADãªã®ãïŒ
3Dããªã³ã¿ãäžææã®çãäžããããã ãã¶äžç«ã«ãªã£ãããã«èŠããŸãã
å人çãªèŠè§£ãšããŠã¯ã3Dããªã³ã¿ã¯æ¢ã«ã¢ããªã³ã°ãå®äºããŠããåã圢ã®ã¢ããããªã³ããããšããäœ¿ãæ¹ãããããåã
ã®ãªã¯ãšã¹ãã«æ²¿ã£ãã¢ããäœæããã®ã«åããŠããã®ã§ã¯ãªããããšèããŠããŸãã
äŸãã°æ€
åã§ãã座ãã£ã±ãªãã«ãªããããè·æ¥ïŒãŸãã«ããã°ã©ãã§ããïŒã§ã¯ãæ®æ®µäœ¿ãæ€
åã¯å€§å€éèŠã§ãããã®ããã«çµæ§è¯ãã倿®µã®æ€
åã䜿ã£ãŠããæ¹ãå€ããšæããŸããåŒç€Ÿã§ãã¢ãŒãã³ãã§ã¢ãæçšããŠããããã°ã©ãã¯å€æ°ããŸãã
ãã ã人éå·¥åŠã«åºã¥ããŠãããšã¯ãããæ¢æåã§ãµã€ãºãæ°çš®é¡ãããããŸããããŸããäœã®æ§ã
ãªç¶æ
ã«åãããŠäœãããŠãããã®ã§ã¯ãããŸããã
ãããã£ãæã«ã身é·ãè¶³ããèãŸã§ãèããè
°ãŸã§ã骚ç€ã®åºããæºã®é«ããèãªã©ãæ§ã
ãªãã©ã¡ãŒã¿ãèæ
®ããããªãŒããŒã¡ã€ããªãããã¯ããäœãäžã§ãããã°ã©ããã«ãªã¢ããªã³ã°ãã§ããOpenSCADãšããèšèªã«äŸ¡å€ãèŠåºãããŠããã®ã§ã¯ã»ã»ã»ïŒ
å ã»ã©ã®ãã°ã«ãããäººã®æã®å€§ããã«åãããŠäœãããšãå¯èœã§ãããåæ§çšã«åã£æãïŒã€å¿ èŠã§ããã°ãZ軞ãäžå¿ã«ããŠ180°å察åŽã«ããäžã€åã£æã远å ããã ãïŒã§ãã
ãŸãšã
ããã°ã©ããã«ãª3Dã¢ããªã³ã°ãã§ããOpenSCADã¯åŠäœã§ããã§ããããïŒ
æªæ¥ã¯ã©ããªããããããŸããããèªèº«ã®å®çŸãããäžçãšãããã®ãç©æ¥µçã«ç®æããŠãããã®ããšã³ãžãã¢ã®è¯ããšããã§ãã
ãããããã°ã©ããã«ãªäžçããšããã®ãèªåã«ãšã£ãŠã®ïŒã€ã®æéã§ãã
ä»å¹ŽãããšïŒé±éããããŸããããæ¥å¹Žãæªæ¥ãèŠæ®ããŠæè¡ã䌞ã°ããŠãããããšæã£ãŠããŸãã
åè
- http://www.openscad.org
- https://en.wikibooks.org/wiki/OpenSCAD_User_Manual
- https://ja.wikipedia.org/wiki/Standard_Triangulated_Language