跳转到内容

OpenJSCAD 快速参考

来自维基教科书,开放世界的开放书籍

这是一个 V1 过时的文档,已弃用,请参见 https://github.com/jscad/OpenJSCAD.org/issues/783.

该页面提供了 OpenJSCAD 和 CSG 库函数的快速参考。

OpenJSCAD 用户指南

CSG 和 CAG 用户指南

注意: **默认值** 和 **说明** 以 **粗体字** 突出显示。

一般用法

[编辑 | 编辑源代码]
OpenJSCAD 函数 JavaScript 语句
function main(parameters) { ...; return var; } /* 必须的 */ var name = my_box( {attribute: 1, ...} ); /* 调用函数 */
function getParameterDefinitions() {return [ definition... ]; } /* 可选的 */ function my_box( param ) { ...; return shape; } /* 创建函数 */
OpenJsCad.log("message"); /* 显示消息和时间戳 */ console.log("message"); /* 显示消息 */
include... for (index = 0; index < array.length; index--;) { ... };

注意: 消息显示在浏览器中的 Javascript 控制台中。

注意: 如果未提供,则创建圆角形状时使用默认分辨率。

 * CSG.defaultResolution2D: 32
 * CSG.defaultResolution3D: 12

基本形状

[编辑 | 编辑源代码]
2D 基本形状 3D 基本形状
var rectangle = CAG.rectangle(); /* 中心: [0,0], 半径: [1,1] */ var cube = CSG.cube(); /* 中心: [0,0,0], 半径: [1,1,1] */
var rectangle = CAG.rectangle({center: [1,2], radius: [1, 2]}); var cube = CSG.cube({center: [1, 2, 3], radius: [1, 2, 3]});
var rectangle = CAG.roundedRectangle(); /* 中心: [0,0], 半径: [1,1], 圆角半径: 0.2, 分辨率: 32 */ var cube = CSG.roundedCube(); /* 中心: [0,0,0], 半径: [1,1,1] 圆角半径: 0.2, 分辨率: 12 */
var rectangle = CAG.roundedRectangle({center: [1,2], radius: [1, 2], roundradius: 1, resolution:32}); var cube = CSG.roundedCube({center: [0, 0, 0], radius: [3,3,3], roundradius: 0.5, resolution: 32});
var circle = CAG.circle(); /* 中心: [0,0], 半径: [1,1], 分辨率: 32 */ var sphere = CSG.sphere(); /* 中心: [0,0,0], 半径: 1, 分辨率: 12 */
var circle = CAG.circle({center: [1,2], radius: 3, resolution: 72}); var sphere = CSG.sphere({center: [1, 2, 3], radius: 4, resolution: 36});
var cylinder = CSG.cylinder(); /* 起始: [0, -1, 0], 结束: [0, 1, 0], 半径: 1, 分辨率: 32 */
var cylinder = CSG.cylinder({start: [1, 2, 3], end: [4, 5, 6], radiusStart: 7, radiusEnd: 8, resolution: 72});
var cylinder = CSG.roundedCylinder(); /* 起始: [0,-1,0], 结束: [0,1,0], 半径: 1, 分辨率: 12 */
var cylinder = CSG.roundedCylinder({start: [10,11,12], end: [13,14,15], radius: 16, resolution: 6});
var ellipse = CAG.ellipse({center: [5,5], radius: [10,20],resolution: 72}); var cylinder = CSG.cylinderElliptic({start: [0,-10,0],end: [0,10,0],radiusStart: [10,5],radiusEnd: [5,2.5],resolution: 16});
var cag = CAG.fromPoints([ [0,0],[5,0],[3,5],[0,5] ]); /* 多边形,至少 3 个点 */ var csg = CSG.fromPolygons([polygon, ...]);
var cag = CAG.fromSides([side,...]); /* 多边形,至少 1 个边 */

形状变换

[编辑 | 编辑源代码]

形状变换始终返回一个新形状,而不会更改原始形状。可以通过重新分配原始形状来更改原始形状,例如这样。

var a = cube();
a = a.rotateX(45);
2D 变换 3D 变换
2Dshape = 2Dshape.translate([-2, -2]); 3Dshape = 3Dshape.translate([1,2,3]);
2Dshape = 2Dshape.rotateZ(20); 3Dshape = 3Dshape.rotateX(90);
3Dshape = 3Dshape.rotateY(-180);
3Dshape = 3Dshape.rotateZ(45);
2Dshape = 2Dshape.rotate(center, axis, degrees); 2Dshape = 2Dshape.rotate(center, axis, degrees);
2Dshape = 2Dshape.rotateEulerAngles(alpha, beta, gamma, position); 2Dshape = 2Dshape.rotateEulerAngles(alpha, beta, gamma, position);
2Dshape = 2Dshape.scale([0.7, 0.9]); 3Dshape = 3Dshape.scale([1,2,3]);
2Dshape = 2Dshape.center(); /* 居中 X & Y 轴 */ 3Dshape = 3Dshape.center(); /* 居中 X & Y & Z 轴 */
2Dshape = 2Dshape.center('x'); 3Dshape = 3Dshape.center('x','z');
2Dshape = 2Dshape.mirroredX(); 3Dshape = 3Dshape.mirroredX();
2Dshape = 2Dshape.mirroredY(); 3Dshape = 3Dshape.mirroredY();
::: 3Dshape = 3Dshape.mirroredZ();
2Dshape = 2Dshape.mirrored(plane); 3Dshape = 3Dshape.mirrored(plane);
2Dshape = 2Dshape.transform(matrix); 3Dshape = 3Dshape.transform(matrix);
/* 尚未支持 */ 3Dshape = 3Dshape.setColor(r,g,b); /* a = 1.0 */
::: 3Dshape = 3Dshape.setColor(r,g,b,a);
::: 3Dshape = 3Dshape.setColor([r,g,b]); /* a = 1.0 */
::: 3Dshape = 3Dshape.setColor([r,g,b,a]);
2Dshape = 2Dshape.expand(0.2, 8); /* 半径, 分辨率 */ 3Dshape = 3Dshape.expand(0.2, 8); /* 半径, 分辨率 */
2Dshape = 2Dshape.contract(0.2, 8); /* 半径, 分辨率 */ 3Dshape = 3Dshape.contract(0.2, 8); /* 半径, 分辨率 */

形状变换可以串联在一起。例如:

var 3Dshape = CSG.cube().rotate(45).translate([20,0,10]).setColor(1,0.5,0.3);

形状操作

[编辑 | 编辑源代码]

形状操作始终返回一个新形状,而不会更改原始形状。可以通过重新分配原始形状来更改原始形状,例如这样。

var a = cube();
a = a.intersect(sphere());
2D 操作 3D 操作
2Dshape = 2DshapeA.union(2DshapeB); 3Dshape = 3DshapeA.union(3DshapeB);
2Dshape = 2DshapeA.subtract(2DshapeB) 3Dshape = 3DshapeA.subtract(3DshapeB);
2Dshape = 2DshapeA.intersect(2DshapeB); 3Dshape = 3DshapeA.intersect(3DshapeB);
3Dshape = 3DshapeA.inverse(3DshapeB); /* 反转实体和空的空间 */

尺寸转换

[编辑 | 编辑源代码]
2D 到路径转换
var Path2DArray = 2Dshape.getOutlinePaths();
2D 到 3D 转换
3DShape = 2Dshape.extrude(); /* 偏移: [0,0,1], 扭曲角: 0, 扭曲步数: 12 */
3DShape = 2Dshape.extrude({offset: [0,0,50], twistangle: 360, twiststeps: 100});
3DShape = 2Dshape.rotateExtrude({offset: [0,0,50], twistangle: 360, twiststeps: 100}); /* 角: 360, 分辨率: 12 */
3Dshape = 2Dpath.rectangularExtrude(3, 4, 16, true); /* w, h, 分辨率, 圆角端点 */
3D 到 2D 转换
待定

类似 OpenSCAD 的函数

[编辑 | 编辑源代码]

这些函数简化了从 OpenSCAD(类似 Lisp)到 **OpenJSCAD**(JavaScript 和对象)的设计转换。

2D 基本形状 3D 基本形状
var shape = circle(); /* r: 1, 中心: false, fn: 32 */ var shape = sphere(radius);
var shape = circle({r: 2,center: false, fn: 16}); var shape = sphere(d); /* 直径 */
var shape = square(); /* [1,1], 中心: false */ var shape = cube(size,center);
var shape = square(5); /* 等效于 square([5,5]) */ var shape = cube(size,center);
var shape = square( [4,5],{center: true} ); var shape = cube([width,height],center);
var shape = cylinder(h,r,center);
var shape = cylinder(h,r1,r2,center);
var shape = polygon( [[0,3],[3,3],[3,0]] ); polyhedron(points,triangles,convexity)
var shape = polygon([points],[paths]); polyhedron(points,triangles,convexity)
2D 形状
var path = vector_char(10,-10, 'A'); /* X 轴, Y 轴, 字符 */
var array_of_paths = vector_text(10,-10, 'Letters'); /* X 轴, Y 轴, 字符串 */

注意: OpenSCAD 中的 text() 函数不受支持。

交互式参数

[编辑 | 编辑源代码]

通过声明一个特殊的函数 getParameterDefinitions(),设计可以具有交互式参数。

此函数必须返回一个参数定义数组,如下所示。

function getParameterDefinitions() {
    return [
        { name: 'length', type: 'int', initial: 150, caption: 'Length?' }, 
        { name: 'width', type: 'int', initial: 100, caption: 'Width?' },
    ];
}

参数被评估,值被传递到 main 函数。请确保正确声明 main 函数。

function main(params) {
  var l = params.length;
  var w = params.width;
...

参数类型

[编辑 | 编辑源代码]

参数被定义为单个 HTML5 表单上的输入字段,即参数列表。有关 HTML5 输入字段的更多信息,请参见 W3 Schools 中的一些示例。

注意: 浏览器并不相同,会将不支持的参数类型视为 TEXT。

类型 示例 返回值
checkbox {name: 'bigorsmall', type: 'checkbox', checked: true, caption: 'Big?'} 如果选中,则为 true,否则为 false
checkbox {name: 'bigorsmall', type: 'checkbox', checked: true, initial: 20, caption: 'Big?'} 如果选中,则为 20,否则为 false
color { name: 'color', type: 'color', initial: '#FFB431', caption: 'Color?' } "#rrggbb",使用 html2rgb() 转换
date {name: 'birthday', type: 'date', caption: 'Birthday?'} "YYYY-MM-DD"
email {name: 'address', type: 'email', caption: 'Email Address?'} 字符串值
float {name: 'angle', type: 'number', initial: 2.5, step: 0.5, caption: '角度?'} 浮点数
整数 {name: 'age', type: 'int', initial: 20, caption: '年龄?'} 整数值
数字 {name: 'angle', type: 'number', initial: 2.5, step: 0.5, caption: '角度?'} 浮点数
密码 {name: 'password', type: 'password', caption: '密码?'} 字符串值
滑块 {name: 'count', type: 'slider', min: 2, max: 10, caption: '多少个?'} 浮点数
文本 {name: 'name', type: 'text', caption: '姓名?'} 字符串值
网址 {name: 'webpage', type: 'url', caption: '网页地址?'} 字符串值
分组 { name: 'balloon', type: 'group', caption: '气球' } 无,仅显示

注意:参数可以接受额外的限制和辅助。这些包括“initial”,“max”,“maxLength”,“min”,“pattern”,“placeholder”,“size”和“step”。

华夏公益教科书