zoukankan      html  css  js  c++  java
  • 用OpenSCAD設計特製的遊戲骰子

    一開始先製作一個簡單的立方體。定義一個變量「cube_size」,然後使用下圖的立方體程式。center=true的設定可讓立方體位於起始模型的正中央。
     
    為你在OpenSCAD創造的物體加上不同顏色是很好用的作法,因為這可以讓你的作品在工作過程中現形。我們會把立方體變成灰色。

    磨圓立方體的邊線

    接下來我們要把立方體的邊線磨圓,方法是讓立方體和球體交疊。交集指令是布林運算(Boolean Operation),結合兩個形狀但只留下交集的部分。

    cube_size=60;
    intersection(){
    color("gray")cube(cube_size,center=true);
    color("red") sphere(cube_size/1.3,center=true);
    }
    

      备注: 三种运算

    translate([-24,0,0]) {
       intersection(){
            cube(15, center=true);
            sphere(10);
        }
    }
    
     union() {
        cube(15, center=true);
        sphere(10);
    }
    
    translate([24,0,0]) {
        difference() {
            cube(15, center=true);
            sphere(10);
        }
    }
    

      創造3D文字

     
    首先,我們要在OpenSCAD中定義一個模組,才能創造立體圖形。這個OpenSCAD的文字指令只能創造出2D的形狀。以下的文字模組來自OpenSCAD裡的text_on_cube 範例,使用linear_extrude程式把第三向量加入2D的文字指令中。
     
    我們也加入變量,用來控制立體文字的高度及深度。變量「o」稍後會被用在將文字定位在骰子平面上的功能。

    // 模型1 塞子
    cube_size=60;
    
    module saizi(){
    intersection(){
    color("gray")cube(cube_size,center=true);
    color("red") sphere(cube_size/1.3,center=true);
    }
    }
    
    // 模型2 图案1
    font="Wingdings";
    
    letter_size=40;
    letter_height=5;
    
    o=cube_size/2-letter_height/2;
    
    module letter(l){
        
        linear_extrude(height=letter_height){
            text(l,size=letter_size,font=font,halign="center",valign="center",$fn=16);
            
            }
        
        
        }
        
    difference(){
       saizi();
        translate([0,0,o])letter(font=("Wingdings"),"T");
        }    
    

      骰子底部的特殊考量

    至於骰子的底部,我們就只是再用一次編譯程式,但是用在z軸的負數方向。因為圖案會完全被定位在骰子裡面,所以我們必須從z軸位置削減掉文字的高度。

     translate([0,0,-o-letter_height])letter(font=("Wingdings"),"R");
    

      

    從一個實際的設計角度,考慮骰子底部的圖案形狀與大小將如何印出來是很重要的事。大的開放面積不被支援,還可能會在列印過程中下陷,而太小的開放面積則可能會被壓扁或堵塞。我使用了Windings的太陽圖案,進行得很順利。你的列印成果可能會因為不同的圖案選擇、印表機設定等而有所不同

    // 模型1 塞子
    cube_size=60;
    
    module saizi(){
    intersection(){
    color("gray")cube(cube_size,center=true);
    color("red") sphere(cube_size/1.3,center=true);
    }
    }
    
    // 模型2 图案1
    font="Wingdings";
    
    letter_size=40;
    letter_height=5;
    
    o=cube_size/2-letter_height/2;
    
    module letter(l){
        
        linear_extrude(height=letter_height){
            text(l,size=letter_size,font=font,halign="center",valign="center",$fn=16);
            
            }
        
        
        }
    // 程序运行
      
    difference(){
       saizi();
        translate([0,0,o])letter(font=("Wingdings"),"T");
        translate([0,0,-o-letter_height])letter(font=("Wingdings"),"R");
        
        translate([0,-o,0])rotate([90,0,0])letter(font=("Wingdings"),"S"); translate([o,0,0])rotate([90,0,90])letter(font=("Wingdings"),"Z");
        translate([0,o,0])rotate([90,0,180])letter(font=("Wingdings"),"+");
        translate([-o,0,0])rotate([90,0,-90])letter(font=("Wingdings"),"*");
        }    
    

      渲染模型並輸出列印的STL檔

    對模型滿意之後,接下來要進行渲染。按下渲染鍵,查看是否完整沒有錯誤。你可以在展示區看到渲染後的模型,操作結果在底下的操作臺區域。

    最後,輸出模型為STL檔,以便之後的列印。

    我用15.04版的Cura和Printbot Simple Metal印表機列印,結果令我相當滿意。我在列印軟體內將模型調整到16mm x 16mm x 16mm,也就是標準遊戲骰子的規格。

  • 相关阅读:
    豆瓣电台WP7客户端 MVVM重构记录之使用MVVM Light实现Event绑定
    使用DotNetOpenAuth来实现有道云笔记的授权
    豆瓣电台WP7客户端 MVVM重构记录之总结
    使用Npgsql连接Postgres
    WPF自定义一个MessageBox
    字符集其实很简单
    pytest封神之路第六步 断言技巧
    pytest封神之路第七步 用例查找原理
    一文搞懂Cookie,Session,Token,JWT
    典藏版Web功能测试用例库
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/9057374.html
Copyright © 2011-2022 走看看