OpenSCAD用户手册/第一步

目录


  1. 创建一个简单的模型
  2. 打开一个已有的示例模型
  3. 放置一个对象
  4. 改变一个对象的颜色
  5. 模型视图

1.创建一个简单的模型

对于我们的第一个模型,我们将会创建一个简单的2*3*4大小的立方体。在OpenSCAD编辑器中,输入下面的命令

220px-OpenSCAD_Simple_Cuboid

编译并渲染我们的第一个模型

当焦点在OpenSCAD的编辑器上面的时候,按下F5或F6就可以编译并渲染这个立方体模型了。


2.打开一个已有的示例模型

打开OpenSCAD自带的许多例子中的一个,或者复制下面的例子代码到OpenSCAD的编辑窗口中:

然后,按下F5预览(或者F6渲染)。Openscad_first_steps

有三种方式对预览框进行操作:

  1. 鼠标左键的拖拽来旋转视图,底部状态栏显示的rotate会随着旋转而改变。
  2. 鼠标右键(OSX使用Ctrl+鼠标左键)的拖拽会移动视图,底部状态栏显示的translate会随着拖拽而改变。
  3. 鼠标滚轮用来缩放。也可以使用Shift+鼠标右键(OSX使用Shift+Crtl+鼠标左键),底部状态栏显示的distance会随之而改变。

3.放置一个对象

我们已经学会如何创建一个简单的立方体。我们的下一个任务是学习使用位置偏移命令来放置一个立方体到一个已经存在的立方体边上。

OpenSCAD_Positioning_an_Object

在位置偏移命令最后没有分号:

注意在位置偏移命令后面没有分号。因为位置偏移命令需要包含后面的对象,如果在小括号后面使用了分号,对于位置偏移的影响将会终止,第二个立方体将会放到第一个立方体相同的位置。


4.改变一个对象的颜色

通过指定一个RGB数字,可以改变对象的颜色。不同于传统的用0-255来表示的RGB颜色,OpenSCAD使用0.0到1.0之间的浮点数来表示。注意!颜色的改变只在预览模式下面有效(F5)。渲染模式(F6)暂时不支持设置颜色。

OpenSCAD_Changing_Color

2011.12 版本(以及后续版本)可以使用颜色名字指定颜色。颜色名字与Web colors使用相同的定义。比如:color("red") cube();

如果把整条命令当作一个语句来分析的话,color()是整个句子中描述"对象"(名词)的形容词,而cube()就是要创建的那个对象。一般句子中,形容词放在名词的前面,比如color() cube();。同理,translate()可以理解为操作对象的动词,因此排列方式应该是这样的translate() color() cube();。如下的代码来展示这种情况:


5.模型视图

视图("View")菜单在OpenSCAD应用窗口顶部的菜单栏上,提供了一系列的视图选项。


预览(Preview)


当模型代码首次渲染的视图就是预览视图。选择"View->Preview"可以返回预览视图。image024

外表面(Surfaces)


选择"View->Surfaces"将会使用开源构造立体几何库(OpenCSG)利用OpenGL进行渲染。如果OpenCSG不存在,或者显卡驱动不支持OpenGL会导致渲染失败。image020

线框(Wireframe)


当处理非常复杂的3D模型的时候,设计师一般会选择"View->Wireframe"。
轮廓视图只呈现支撑框架。可参考埃菲尔铁塔。
线框是一种三维或者物理对象的视觉表现形式。使用线框模型允许一个3D模型的基本结构设计可视化。由于线框渲染相当的简单并且计算快速,因此常被用于需要高帧率渲染的场景(比如,当需要渲染复杂3D模型,或者实时模型外观渲染系统)。当需要更多的图像细节的时候,可以自动在复杂的框架渲染之后再追加表面纹理。这就允许设计师可以在不经过长时间的重新渲染的情况下,快速的预览改变或者旋转到一个其他的设计视图。线框格式也被数控机械设备良好支持,并被广泛用于程序化路径控制。线框模型常被用于计算机辅助制造(CAM)。线框是三种主要CAD视图中,最抽象,最逼真的。这种建模方法只包括直线、点和曲线的定义。image022

混合(Thrown Together)


选择"View->Thrown Together"可以把上述所有视图一起显示出来。

OpenSCAD中文手册

简介


OpenSCAD是一款用于构建三维立体模型的软件。它是一款自由软件,可用于多种操作系统,包括GNU/Linux,微软Windows和苹果OSX。

不同于其他多数用于构建三维立体模型的自由软件(比如大家熟知的Blender),OpenSCAD的主要用途并不是用于外观艺术渲染,而是更多致力于CAD方面的功能。所以如果你在寻找一款用于构建机械零件模型的应用软件,他可能正好是你想要找的,而如果你更感兴趣的是制作电脑动画或模拟生命模型软件的话,他可能不够胜任。

OpenSCAD并不是交互建模工具,这一点跟多数的CAD工具也不同。它更像是一个2D/3D编译器,读取描述对象的程序文件,从中生成出模型。这样使得设计者能够全面控制模型处理过程,能够容易的改变其中的步骤,或者通过定义配置参数来进行设计。

OpenSCAD主要有两种操作模式,预览和渲染。预览通过利用三维图形技术和计算机图形处理单元进行处理,速度相对较快,但是只能输出一个模型的近似结果,预览使用的是OpenCSG跟OpenGL。渲染生成精确的几何模型并完全棋盘化,栅格化,而不是近似模拟,因而过程较为漫长,较大的设计通常需要以分钟甚至小时记的时间,渲染使用的是CGAL几何引擎。

OpenSCAD提供了两种类型的3D建模,构造立体几何Constructive Solid Geometry(CSG)或通过二维图元生成三维空间。

AutoCAD的DXF文件作为二维轮廓数据的交换格式。除了使用二维路径建立模型,还可以直接从DXF文件读取设计参数。除了可以读取DXF文件,OpenSCAD还可以读取和创建STL和OFF文件格式的三维模型。

OpenSCAD可以在http://openscad.org/下载。

如果不想(或者不能)在电脑上面安装新的OpenSCAD软件,在浏览器支持WebGL的情况下,也可以使用OpenJSCAD(http://OpenJSCAD.org/),一个运行在Web浏览器上的OpenSCAD工具。

CGAL开源项目,目标是以C++库的形式提供方便,高效,可靠的几何运算,CGAL应用到在诸多方面有几何运算需要的地方,如:计算机图形学,科学可视化,计算机辅助设计与建模,地理信息系统,分子生物学,医学成像,机器人技术和运动规划,网格生成,数值计算方法等等。

目录


  1. 第一步
  2. OpenSCAD用户界面
  3. OpenSCAD语言
    1. 综述-初步了解-注释,数值以及数据类型,变量
    2. 基本立体模型-立方体,球体,柱体&多面体
    3. 数学运算符
    4. 数学函数
      1. 三角函数(cos sin tan acos asin atan atan2)
      2. 其他(abs ceil concat cross exp floor ln len let log lookup max min norm pow rands round sign sqrt)
    5. 字符串函数-str,chr
    6. 列表
    7. 变换-尺寸&方位.scale,resize,rotate,translate,mirror,multmatrix,offset,color,minkowsik&hull
    8. 条件and迭代-for,if&assign
    9. CSG建模-基本模型的组合.union,difference,intersection&render
    10. 修饰字符-辅助调试,% # !*
    11. 模型-编写自定义基本模型与变换
    12. 用户自定义功能
    13. 包含声明
    14. 其他语言特性-特殊的'$'变量,echo,render,surface,search,version()&version_num()
  4. 使用二维子系统
  5. STL导入与导出
  6. 带注释的项目示例
  7. 在OpenSCAD上使用外部编辑器
  8. 在命令行环境下使用OpenSCAD
  9. 使用源文件编译OpenSCAD
  10. 常见问题

Skip to PDF content

openSCAD中文教程

解决Ubuntu和Windows双系统时间差异8小时的方法

Windows/Ubuntu双系统用户会发现在Ubuntu里面的时间正常的情况下Windows的系统时间被改到8小时前。

原来Linux操作系统是以CMOS时间做为格林威治标准时间,再根据系统设置的时区来确定目前系统时间。但是Windows会直接修改CMOS时间。而中国的时区是+8区,所以才会造成时间被调整了-8个小时。

所以您可以让Windows去使用时区或者让Ubuntu使用本地时间。

修改Windows使用时区的方法是在注册表:

下面增加一个名为RealTimeIsUniversalREG_DWORD键,并赋值为1

对于Ubuntu 16.04以下版本, 使用本地时间的方法是:

把里面的 UTC=yes 改为 UTC=no

对于Ubuntu 16.04以及之后的版本(如:Ubuntu 18.04),使用如下命令:

参考链接


解决ubuntu和windows双系统时间差异8小时的方法

小米Note(MIUI V7)查看程序访问网络流量排行

小米Note(MIUI V7) 连接上WIFI后,显示网络下载一直很高,不清楚是哪个应用在访问网络,网上搜索了一下,找到如何查看网络流量的方法。

  • 桌面上点击“安全中心”

desktop

  • 选择“流量剩...”这个水滴状的按钮

safe_center

  • 选择“流量排行”

flow_list

  • 点击右上角的切换图标来显示WIFI跟3G,4G上网排行

select_network

  • 详细的流量访问,排行信息

net_app_lists

Android下NDK开发的动态库(.so,shared library)增加版本号信息

在Android下面开发,免不了要涉及到C/C++层的开发,这就会涉及到崩溃异常的处理问题。

随着程序的不断升级,更新,会出现多个版本的动态库同时在线上共存的问题,一旦出现崩溃日志,往往不能方便的知道到底是哪个版本出现的崩溃。

传统的Linux,可以通过编译时候指定版本号来处理,最后生成如“libc.so.6”这种形式的文件名,我们可以根据文件名来获得相应的版本信息。遗憾的是,这种命名方式,在Android上面是不支持的

目前的需求主要有三点:

  1. 不依赖文件名,查询到版本号

    版本号写在文件名中,是一个比较方便的方式,但是带来的问题却是,靠不住!文件名可以随意更改,往往传来传去,文件名中的信息就改得面目全非了。

  2. logcat的崩溃日志中能得到版本号

    系统自带的logcat会在进程崩溃的时候,打印出崩溃栈,但是信息非常的精简,只有当前的线程回退栈帧信息(backtrace)以及几个关键寄存器信息,往往不能准确提供有足够的信息。而如果想在客户的设备上面,拿到完整的core-dump信息,只能是呵呵一下了!

  3. C/C++层的版本号变动,不要改动JAVA层的代码

    一方面,如果我们把版本号写在动态库的名字里面,这样会造成每次动态库的升级,JAVA的调用代码都需要变动,小团队还好,大团队,完全不可想象。另一方面,如果是系统框架层的开发,更加悲催,一个文件名的改动,影响到一片,当然,软链接也是个不错的选择,但是这样,常用的APK开发又要折腾一番,免不了一堆的抱怨。

针对上面的需求,我们逐个来提供解决方案:

  • 不依赖文件名,查询到版本号

在任意的C/C++文件中增加如下代码

在Android.mk文件中增加

编译生成的".so"文件使用如下命令即可查询版本号信息:

解释:
上面的代码的目的,是要求GCC在一个名为".SO_VERSION"的段内,记录我们的版本号信息。“unused”属性用于告诉GCC,不要在编译的时候警告这个变量没有被任何代码引用过。
注意事项:
在定义变量"Version"的时候,不要使用"volatile"来修饰。这个关键字影响到了最后生成的段的"PROGBITS"标记位置,这个标记表明了最后加载到内存中的数据是否可修改(我们当然希望这个位置不可修改,如果可写,可能由于越界导致版本号的不准确)。

没有使用"volatile"修饰

使用"volatile"修饰

注意两者的不同,一个属性是"A",一个属性是"WA"。

  • logcat的崩溃日志中能得到版本号,并且C/C++层的版本号变动,不要改动JAVA层的代码

目前对于这个问题的解决方法,是设置代理So。具体操作方式如下(假定我们生成的".so"项目LOCAL_MODULE:=So):

1.修改原来项目中的"JNI_OnLoad","JNI_OnUnLoad"函数,重新命名为 "So_JNI_OnLoad","So_JNI_OnUnLoad" 其他代码不变,并且在"So-jni.h"中对这两个函数进行声明。

2.所有的JNI方法都通过 "JavaVM->RegisterNatives" 方法进行动态注册。

3.建立SoStub-jni.cpp,代码如下:

4.原工程的"LOCAL_MODULE"修改为"LOCAL_MODULE:=So_1_0_3"(版本号根据实际情况调整即可

5.修改Android.mk,增加如下内容

6.修改JAVA层的调用代码

为:

解释:

由于logcat打印的崩溃栈,信息极少,因此我们只能采取这种折中的办法,这样设置之后,崩溃栈中会打印出"libSo_1_0_3.so"这样的字样,我们就可以知道版本号了。

Android Studio(JAVA) 编译警告:使用了未经检查或不安全的操作

在编译Android Studio(JAVA)程序时发生了如下的警告:

使用了未经检查或不安全的操作
要了解详细信息,请使用 "-Xlint:unchecked" 重新编译。

  • 如何设置Android Stuido开启 "-Xlint:unchecked"

修改build.gradle

增加

修改后的如下:

  • 警告信息的处理例子

包含-Xlint:unchecked警告的代码

消除警告后的代码如下:

同样的方法适用于"-Xlint:deprecation"。

svnrdump dump 实现 SVN 库的远程导出

svnrdump dump 命令必须 在 SVN 1.7版本以上提供的用于远程dump SVN库的命令.

以导出libyuv的svn库为例:

可以在这里下载已经DUMP完成之后的版本。目前的版本号是1444。

恢复DUMP文件到Subversion工程,请参考 Could not open the requested SVN filesystem

Debian和OpenMediaVault在命令行下设置更新源

很多时候我们比较纠结的问题是,“该把哪个Debian镜像发布站点加入source.list文件?”。

Ubuntu的图形界面中有一个测试工具,命令行下面的Debian也有一个现成的程序:netselect

安装netselect

不带参数运行它时会显示它的帮助信息。运行它时加上以空格分隔的镜像主机列表,它会返回一个分值和列表中的一个主机名。这个分值通过评估ping time和hopsnumber(一个网络请求报文到达目标主机所经过的转发主机的个数)得出,它与镜像站点预计下载速度成反比(数值越小越好)。返回的主机名是主机列表中得分最低的那个(查看列表中所以主机的得分情况可使用-vv选项)。看出下的例子:

它表示,在netselect后列出的所有主机中,http://mirrors.163.com/debian/是下载速度最快的主机,其得分为5。

注意,最近163的服务器不知道发生了何种故障,导致各种更新失败,尽管测试的结果是163更快,但是我们建议还是使用阿里云的服务器。

把netselect找到的连接速度最快的镜像站点手工加入/etc/apt/sources.list文件.

最新版本的netselect软件包包含了netselect-apt脚本,它使上述操作自动完成。只需将发布目录树做为参数(默认为stable)输入,sources.list文件就会生成速度最快的main和non-US镜像站点列表,并保存在当前目录下

对于OpenMediaVault用户还是手工修改配置文件好了,主要是上面的工具生成的比较简略

Ubuntu 12.04 + Apache2.2.22搭建SPDY服务器

SPDY是Google开发的基于传输控制协议(TCP)的应用层协议,该协议规定在一个SPDY连接内可以有无限个并行请求,服务器可以主动向客户端发起通信向客户端推送数据,通过请求优化、预加载、压缩HTTP 来达到加速的目的。

对用记而言,SPDY是基于SSL加密,它可以让网络访问更安全,用户隐私更加得到保护。对站长而言,SPDY在降低连接数目的同时,还使服务器上每个客户端占用的资源减少,从释放出更多内存和CPU ,让网站的浏览速度提升不少。

SPDY协议已经被Chrome、Firefox、Opera、IE 11以上支持,用户在访问使用SPDY协议加载的网站几乎感觉不到与普通的Https页面访问有何不同,而SPDY带来的页面加载速度提升和服务器性能优化确是有十分重要意义的。

具体的操作步骤如下:

  • 启用Apache2的HTTPS支持

参考 UBUNTU 12.04 下 APACHE 2.2.22 开启 HTTPS

  • 下载Apache2的mod_spdy模块

官网:https://developers.google.com/speed/spdy/mod_spdy/
由于众所周知的原因,本站提供下载(2015-11-6版本)
mod_spdy 64-bit .deb (Debian/Ubuntu)
mod_spdy 32-bit .deb (Debian/Ubuntu)

  • 安装mod_spdy模块(本站是64位系统)

  • 重启Apache2

  • 验证

目前验证貌似没有起作用啊!目前最新的chrome已经没办法进行验证了,主要是由于HTTP/2已经发布,Google放弃了spdy,转而支持HTTP/2,还是静待新版本的HTTP/2吧。

  • 卸载

  • 参考链接

Linux Mint + Apache2.2搭建SSL/HTTPS/SPDY服务器
https://developers.google.com/speed/spdy/mod_spdy/