zoukankan      html  css  js  c++  java
  • 如何使用openscad绘制一个简单的键帽.

    1 新建空项目

    2测数据

    测量得出数据.这个长方体的长宽高分别是1.6、4.6、8 注意,这三个数据并不是测量得到的数据,而且加了一点公差值(为3D打印做准备)

    3画图

    写代码

    导入模型

     为了方便以后其他零件定位,统一在他们的后面使用对齐中心命令 center=true
    得到第一个长方体之后,第二个就简单了.直接复制第一个,并且以Z轴为中心,对其进行旋转操作,如下图

     这样,我们就得到了这个十字键槽,但是,键帽上并不是这样的啊. 别急.下面,我们将见到OPENSCAD中最常用的一个布尔运算是如何做的.
    首先我们画一个圆柱体

    然后我们把之前做好的那个十字立方体放到这个圆柱体的下面

    cylinder(7.9,r=4,center=true,$fn=36);//画圆
    //下面
    cube([1.6,4.6,8],center=true);//画长方体
    rotate([0,0,90])//旋转得到长方体
    cube([1.6,4.6,8],center=true);
    

      这个时候,使用三个布尔运算函数中的 差集 命令 difference()
    把它们都包起来,

    是的,差集命令的含义,是用第一个立方体,减去之后的所有立方体.

     

    difference(){
    
    cylinder(7.9,r=4,center=true,$fn=36);//画圆
        
    cube([1.6,4.6,8],center=true);//画长方体
    
    rotate([0,0,90])//旋转得到长方体
    cube([1.6,4.6,8],center=true);
    
    
    }
    

      请注意顺序差别,如果不一样就会相反操作,如下图,十字减去圆柱,

     这时,我们就有了键帽中最关键的零件了.
    接下来,我们就要开始画键帽了.
    在openscad中,有一个叫hull()的命令. 我把他理解为蒙皮.就是将两个物体,最表面的部分,连接起来的一个命令. 我们就能利用这个命令,生成我们需要的键帽主体.

    首先我们要先用一个长宽18毫米,高0.1毫米的长方体来做键帽的底

    然后再做一个长12.5、宽15、高1的长方体作为顶。并且把它往Z轴方向上移10毫米。
    也就是键帽的高度。

    利用hull命令给他们蒙皮。

    hull(){
    cube([18,18,0.1],center=true);
    translate([0,0,10])cube([12.5,15,1],center=true);
        }
    

      但是这是一个实心的东西啊,要怎么才能实现其他建模软件中的 抽壳 命令呢?
    其实很简单,我们键帽的外壳是2mm,那么我们就再做一个尺寸缩小2mm的梯形立方体,再做一下减法不是就成了?

    difference(){
    hull(){
    cube([18,18,0.1],center=true);
    translate([0,0,10])cube([12.5,15,1],center=true);
        }
        
    hull(){
    cube([16,16,0.2],center=true);
    translate([0,0,6.5])cube([10.5,13,1],center=true);
        }
    }
    

      接下来,就是把两个东西组合在一起了。
    这一步,需要慢慢的调整具体的位置。 好在,我们一开始就在画所有立方体的时候都在中心位置。我们只需要单纯的移动一个轴就能调整了。
    最后我们得到了这样的结果。

    // 模型1 十字星柱体
    module caozhu(){
    difference(){
    
    cylinder(7.9,r=4,center=true,$fn=36);//画圆
        
    cube([1.6,4.6,8],center=true);//画长方体
    
    rotate([0,0,90])//旋转得到长方体
    cube([1.6,4.6,8],center=true);
    
    
    }
    }
    //模型二  外壳
    module zhuti(){
    
    difference(){
    hull(){
    cube([18,18,0.1],center=true);
    translate([0,0,10])cube([12.5,15,1],center=true);
        }
        
    hull(){
    cube([16,16,0.2],center=true);
    translate([0,0,6.5])cube([10.5,13,1],center=true);
        }
    }
    }
    
    // 模型三 1+2 组合
    module chengshuti(){
       zhuti(); 
       translate([0,0,3.5])caozhu();   
        }
        、
    //程序执行
    chengshuti();
    

      

    这里大家会看到,为了方便对每个部件进行操作,我使用了 模块 的方式,把它们分别的包装起来,然后就能方便的进行各种操作了。

    然后,键帽不可能是这么四平八稳的,上面是有弧度,而下面也是有斜面的。要怎么样做出这样的效果呢?
    还是很简单,我们一样来做减法。
    首先上面画一个非常大的圆柱体,并且旋转它,移动它,让他刚刚接触到键帽主体的顶部表面。

    //Z方向移动28.4  绕X轴旋转90   
    translate([0,0,28.4])rotate([90,0,0])cylinder(20,r=19,center=true,$fn=100); 
    

      然后再画一个比底部大一点的方块,旋转它。

       rotate([-8,0,0])cube([20,20,4],center=true);
    

      这样,我们就得到了这样的东西。

    是不是感觉很难看?
    马上就好。让我们开始做减法吧。用键帽减去上面和下面多余的东西

    // 模型1 十字星柱体
    module caozhu(){
    difference(){
    
    cylinder(7.9,r=4,center=true,$fn=36);//画圆   高度7.9 半径4
        
    cube([1.6,4.6,8],center=true);//画长方体
    
    rotate([0,0,90])//旋转得到长方体
    cube([1.6,4.6,8],center=true);
    
    
    }
    }
    //模型二  外壳
    module zhuti(){
    
    difference(){
    hull(){
    cube([18,18,0.1],center=true);
    translate([0,0,10])cube([12.5,15,1],center=true);
        }
        
    hull(){
    cube([16,16,0.2],center=true);
    translate([0,0,6.5])cube([10.5,13,1],center=true);
        }
    }
    }
    
    // 模型三 1+2 组合
    module chengshuti(){
       zhuti(); 
       translate([0,0,3.5])caozhu();   
        }
        
    //模型四  
      module wancheng(){  
    difference(){
    chengshuti();
     //Z方向移动28.4  绕X轴旋转90   
    translate([0,0,28.4])rotate([90,0,0])cylinder(20,r=19,center=true,$fn=100); 
    //
    rotate([-8,0,0])cube([20,20,4],center=true);
      }
      }
      
     //程序执行 
      wancheng();
    

      好了,这样,一个机械键盘的键帽就绘制完成了。
    接下来要做的事情,就是直接在openscad里面,按一下F6开始实体运算。
    在运算结束后,保存该模型为STL文件。
    打开你的切片软件,切片并打印吧。

  • 相关阅读:
    Compression algorithm (deflate)
    tcpip数据包编码解析(chunk and gzip)_space of Jialy_百度空间
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    gzip压缩算法: gzip 所使用压缩算法的基本原理
    Decompressing a GZip Stream with Zlib
    Frequently Asked Questions about zlib
    how to decompress gzip stream with zlib
    自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    C语言抓http gzip包并解压 失败 C/C++ ChinaUnix.net
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/9056975.html
Copyright © 2011-2022 走看看