OpenJSCAD.org ユーザー ガイド
ようこそ、OpenJSCAD.org ユーザー ガイドへ。
Original Japanese Translation by Kariya
文脈を理解してもらうための説明ですが、 OpenJSCAD.orgはOpenJsCad (Github)上に構築され、これ自身はOpenSCAD.orgに触発されたもので、本質的には3Dモデルを開発するJavaScriptを使ったプログラマー的取り組み方を提供し、特にこの強化は3D印刷のためのモデル作成用に調整されています。
OpenJSCADは非常にオブジェクト指向的で、 OpenSCADから来たプログラマーは以下のことに歓迎の意を表すかもしれません。
この文章を続けて読んで下さい。
There is also a クイックリファレンス.
OpenJSCAD.org ユーザー ガイド

OpenJSCAD.orgには利用者のためのエディターが含まれます:
OpenJSCAD.org ユーザー ガイド

エディター内で
OpenJSCAD.org ユーザー ガイド

ファイルをブラウザーで示された領域にドラッグアンドドロップするだけです
OpenJSCAD.org ユーザー ガイド

好みのエディターを使って、Auto Reload [x] がチェックされていることを確認して下さい。
OpenJSCAD.org ユーザー ガイド

注:現段階ではブラウザーをサポートしています。Try another browser if your not satisfied with the performance of your current browser.
OpenJSCAD.org ユーザー ガイド

前提条件:
OpenJSCAD.org ユーザー ガイド

注:NodeJS >= 0.8.1であることを確かめて下さい。(Ubuntu 12.04 installs NodeJS 0.6.1).
OpenJSCAD.org ユーザー ガイド

注:実際のNodeJS実行ファイル名が/usr/local/bin/node (デフォルト) か /usr/bin/nodejsであることと、openjscadの1行目がその名前であることをチェックして下さい。
OpenJSCAD.org ユーザー ガイド

以下では、次のようにレポジトリをクローンしたことを仮定します。
OpenJSCAD.org ユーザー ガイド

index.htmlのローカルコピーに利用中のブラウザでアクセスして下さい。 The initial example should display. You can now open other OpenJSCAD files by dragging and dropping the file to the viewer. Other supported file formats can be converted and displayed as well.
OpenJSCAD.org ユーザー ガイド

以下のコマンドで logo.stl または test.stl が作成されます。
OpenJSCAD.org ユーザー ガイド

さらに OpenSCAD (.scad)、 STL ASCII または Binary (.stl)、そして AMF (.amf) ファイルが取込可能です。 .jscad、 .stl (ASCII または Binary)か .amfが作成可能です。
OpenJSCAD.org ユーザー ガイド

コマンドラインからmain()へ変数を渡す方法Command Line Interface Parametersも参照して下さい
OpenJSCAD.org ユーザー ガイド

現在、次の言語とファイル形式をサポートしています。
OpenJSCAD.org ユーザー ガイド

ファイルをドラッグアンドドロップすると、言語かファイルフォーマットがファイル拡張子(.jscad,...)に従って設定されます。ブラウザで直接編集を始める場合、デフォルトの言語はJSCADです。
OpenJSCAD.org ユーザー ガイド

特定の例へのリンクを他の人に渡すことが出来ます。
OpenJSCAD.org ユーザー ガイド

ローカル
OpenJSCAD.org ユーザー ガイド

JSCADを参照する場合、include()がサポートされます。
OpenJSCAD.org ユーザー ガイド

リモート
OpenJSCAD.org ユーザー ガイド

JSCADを参照する場合、include()は サポートされません (おそらくサポートは後ほどになります)。
OpenJSCAD プログラミング ガイド

In general, designs are written using the JavaScript language. Training and help about JavaScript can be found online.
OpenJSCAD プログラミング ガイド

Creating a new design starts by writing simple scripts which call CSG functions, and other special functions, as provided by OpenJSCAD. OpenJSCAD executes the script, and renders the 3D design for viewing.
OpenJSCAD プログラミング ガイド

OpenJSCAD adheres to specific standards for passing parameters to functions. But most parameters are optional as default values are provided.
OpenJSCAD プログラミング ガイド

When 3D vectors are required, parameters can be passed as an array. If a scalar (single value) is passed for a parameter which expects a 3D vector, the scalar is used for the x, y and z values. In other words: radius: 1 will give radius: [1,1,1].
OpenJSCAD プログラミング ガイド

NEED EXAMPLE
OpenJSCAD プログラミング ガイド

OpenJSCADの.jscadファイルは、ライブラリやヘルパー(複数ファイル)でない限り、少なくとも1つの関数main()を定義する必要があります。その関数はCSGオブジェクトか交わらないCSGオブジェクトの配列を返す必要があります。
OpenJSCAD プログラミング ガイド

また次のようにします:
OpenJSCAD プログラミング ガイド

しかし以下の例は動作しません:
OpenJSCAD プログラミング ガイド

なぜなら、3Dプリミティブのような全てのCSG作成物はmain()を結果的に通って呼ばれる関数内に現れなければならないからです。
OpenJSCAD プログラミング ガイド

All rounded solids have a resolution parameter which controls tesselation. If resolution is set to 8, then 8 polygons per 360 degree of revolution are used. Beware that rendering time will increase dramatically when increasing the resolution. For a sphere, the number of polygons increases quadratically with the resolution used. If the resolution parameter is omitted, the following two global defaults are used
OpenJSCAD プログラミング ガイド

The former is used for 2D curves (circle, cylinder), the latter for 3D curves (sphere, 3D expand).
OpenJSCAD プログラミング ガイド

OpenSCAD like functions support the fn parameter, which is the number of segments to approximate a sphere (default 32, total polygons per sphere fn*fn).
OpenJSCAD プログラミング ガイド

立方体やどちらかと言えば箱は以下の様に作成できます:
OpenJSCAD プログラミング ガイド

球は次のようにして作成できます:
OpenJSCAD プログラミング ガイド

type: 'geodesic'の場合、fnは非測地線のfnに適合させようとしますが、実際は6のステップ(例えば fn=6..11は同じ)で、fn = 1 ではベースとなる形の20面体が明らかになります。
OpenJSCAD プログラミング ガイド

注: 球を作成し(例えばunion()やintersection()で)操作すると、使われる大量のポリゴンのため、レンダリングや構築処理が遅くなります。
OpenJSCAD プログラミング ガイド

円柱と円錐は以下のようにして作成できます:
OpenJSCAD プログラミング ガイド

ここでfは円柱の丸い形を近似するための断片の量です(デフォルト32)。
OpenJSCAD プログラミング ガイド

トーラスは以下の様に定義されます:
OpenJSCAD プログラミング ガイド

多面体は点のリストと三角形やポリゴンのリストで作ります。点のリストは形の頂点全てで、三角形のリストは点が多面体の表面にどのように関連するかを定めます。
OpenJSCAD プログラミング ガイド

さらにtriangles:だけではなくpolygons: [ [0,1,4,5], [..] ] とも定義できます。
OpenJSCAD プログラミング ガイド

多面体はより低水準でオブジェクト指向的に作成できます:
OpenJSCAD プログラミング ガイド

vector_text(x,y,string) や vector_char(x,y,char) はベクトルでレンダリングされたテキストや文字の線分を与えます:
OpenJSCAD プログラミング ガイド

また"\n"を使った複数行もサポートされます。今の所左詰めのみサポートされています。もっと詳細を知りたいなら、単一の文字を要求することもできます:
OpenJSCAD プログラミング ガイド

オブジェクトを全ての軸で、または軸単位でセンタリングするには:
OpenJSCAD プログラミング ガイド

false = 何もしない、 true = 軸にセンタリング
OpenJSCAD プログラミング ガイド

center() や .center() は左右対称で構築時には完全にはサイズがわからない物体を構成するのに役に立ちます。例えばパラメータ化されたデザインでのように。
OpenJSCAD プログラミング ガイド

複数のオブジェクトの和を取ることができます。配列も可能です。
OpenJSCAD プログラミング ガイド

複数のオブジェクトの積を取ることができます。配列も可能です。
OpenJSCAD プログラミング ガイド

注: intersection() (openscad と同様) と intersect() との対比(メソッド、オブジェクト指向)
OpenJSCAD プログラミング ガイド

複数のオブジェクトの差分(減算)を取ることができます。配列も可能です。
OpenJSCAD プログラミング ガイド

注: difference() (openscad と同様) と substract() との対比(メソッド、オブジェクト指向)
OpenJSCAD プログラミング ガイド

パスとは単なる点の列で、直線で結合されているものです。パスは開放することも、閉じる(追加の直線が最初と最後の点の間に描かれます)こともできます。2DパスはCSG.Path2Dクラスを通してサポートされます。2Dパスと2D CAGとの違いは、パスが「細い」直線なのに対し、CAGは囲まれた領域であることです。
OpenJSCAD プログラミング ガイド

パスは2D座標の列を与えたり、CSG.Path2D.arc()関数を通じたりして構築できます。後者は環状のカーブしたパスを構築します。パスは結合でき、結果は新しいパスになります。
OpenJSCAD プログラミング ガイド

パスをCAGに変換するには2つの方法があります:
OpenJSCAD プログラミング ガイド

3Dソリッドの作成は現状、rectangularExtrude()関数でサポートされます。この関数は2D長方形で(直立しパスの方向に垂直に)パスをなぞって3Dのシェイプを作成します。
OpenJSCAD プログラミング ガイド

複数の2Dポリゴン(例えば circle()やsquare()、polygon())を合わせて凸包にすることができます。
OpenJSCAD プログラミング ガイド

連鎖した凸包とは、複数の2Dの形の上の凸包の変種です。本質的に順次凸包にして、それらの和集合を取ります。Whosa whatsisのアイデアにもとづきます。
OpenJSCAD プログラミング ガイド

高さ、ねじり(twist)(角度)、スライス(ねじるなら)を与え、2Dの形状を3Dに押し出します:
OpenJSCAD プログラミング ガイド

2D形状の線形押し出しにはオプションでねじりを指定できます。2D形状はz=0平面上に配置され、CSG.Vector3Dの<offset> 方向に押し出されます。最終の表面は<twistangle>度だけ回転します。回転は2D形状の原点(つまりx=0, y=0)周りになされ、twiststepはねじり(1以上でなければならない)の分解度を決定します。CSGオブジェクトを返します。
OpenJSCAD プログラミング ガイド

パスを(直立で、パスの方向に垂直に)長方形でたどり押し出し、CSGソリッドを返します。
OpenJSCAD プログラミング ガイド

rectangular_extrude()を使うと単純化されます(OpenSCADはこれを提供していないがopenscadと同様)。ここで Simplified (openscad like, even though OpenSCAD doesn't provide this) via rectangular_extrude(), where as
OpenJSCAD プログラミング ガイド

あるいはより低水準でオブジェクト指向的なrectangularExtrude()も使えます。次の無名の変数を与えます。
OpenJSCAD プログラミング ガイド

さらに rotate_extrude() も利用可能です:
OpenJSCAD プログラミング ガイド

本質的に2Dポリゴン(円、正方形、ポリゴン)を押し出します。
OpenJSCAD プログラミング ガイド

ソリッドの'property'プロパティーはそのオブジェクトのメタ情報を格納するのに使うことができます。例えばソリッドの特定の興味のある点の座標などです。オブジェクトが変換(回転、スケール変換、移動など)された場合必ずプロパティーも変換されます。 そのためソリッドを何度変換してもプロパティーは興味のある同じ点を指し続けます。
OpenJSCAD プログラミング ガイド

プロパティーは任意の型を持つことができますが、'transform'メソッドをサポートするクラスのプロパティーしか実際に変換されません。これにはCSG.Vector3DやCSG.Plane、CSG.Connectorが含まれます。特にCSG.Connectorのプロパティー(下記参照)は非常に有用です:これはソリッドを別のソリッドに事前に決められた位置で現在の向きに関係なく取り付けるのに使用可能です。
OpenJSCAD プログラミング ガイド

他のソリッドのプロパティーとしてCSGソリッドを含ませることも可能です。これは例えばあるオブジェクトに適合するネジ穴を作成するために切り抜き円柱を定義するのに使えるでしょう。これらの'solid properties'はソリッドのオーナーと同じ変換を受けますが、union()のようなCSG操作の結果としては目に見えません。
OpenJSCAD プログラミング ガイド

他の種類のプロパティー(例えば文字列)は変換されたソリッドのプロパティーに含まれはしますが、オーナーソリッドが変換されてもその値はなんら変換されません。
OpenJSCAD プログラミング ガイド

全てのプリミティブソリッドはいくつかの事前定義されたプロパティーを持ちます。例えば球の中心点などです。(TODO: 文書化)
OpenJSCAD プログラミング ガイド

union()やsubtract()、intersect()といったCSG操作の結果作られるソリッドは元となるソリッド両者の併合されたプロパティーを持ちます。同名のプロパティーがあればそのうち1つのみしか保持されません。
OpenJSCAD プログラミング ガイド

CSG.Connectorクラスの目的は、2つのソリッドと互いに前もって決められた位置と方向で結合するのを容易にすることです。例えばサーボモーターを描いたCSGソリッドとサーボアームのソリッドがあるとしましょう:それぞれのコネクタープロパティーを定義することで、容易にサーボアームをサーボモーターに正しい位置(つまりモーター軸)と向き(つまり軸に垂直)で取り付けることができます。たとえ3D空間上の現在の位置と向きを知らなくても。
OpenJSCAD プログラミング ガイド

言い換えればコネクターは自在にオブジェクトを回転・移動することを、その位置と境界を追跡することなしに可能にします。そしてサードパーティーのライブラリーがそのソリッドにコネクターを公開すれば、ライブラリーの利用者は実際の寸法や形状を知る必要がなく、ただコネクターのプロパティーの名前さえ知っていればいいのです。
OpenJSCAD プログラミング ガイド

CSG.Connector には3つのプロパティーがあります:
OpenJSCAD プログラミング ガイド

2つのコネクターを結合するとき、pointプロパティーが同じになり、axisプロパティーが同じ向き(または mirrot == true なら反対向き)になり、normalができるだけ適合するように、ソリッドは変換されます。
OpenJSCAD プログラミング ガイド

コネクターを結合するには2つの方法があります: CSGソリッドのconnectTo()関数が、2つのコネクターが結合された状態になるようにソリッドを変換します。 別の方法として、コネクターのgetTransformationTo()メソッドを使って、コネクターを結合する変換行列を取得します。この方法は、同じ変換を複数のソリッドに適用する必要がある場合に使うことができます。
OpenJSCAD プログラミング ガイド

getBound()関数を使ってオブジェクトのバウンディングボックスを取得できます。getBounds()は2つのCSG.Vector3Dからなる配列を返します。それぞれが最小のx,y,z座標と最大のx,y,z座標を示します。
OpenJSCAD プログラミング ガイド

lieFlat()はオブジェクトをz=0平面上に配置します。その際、z-高さが最小になり、z軸周りにセンタリングされるように処理されます。これはCNCミルで有用です:オブジェクトの一部を切削中の原材料の空間に変換するからです。または3Dプリンタでも同様です:最小の層数で印刷できるからです。lieFLat()の代わりにgetTransformationToFlatLying()関数も使えます。これは変換としてCSG.Matrix4x4を返します。
OpenJSCAD プログラミング ガイド

OpenSCADと同様に:
OpenJSCAD プログラミング ガイド

ここで名前付きの色は大文字小文字を区別しません。 ('RED'=='red')
OpenJSCAD プログラミング ガイド

オブジェクト指向的には:
OpenJSCAD プログラミング ガイド

例:
OpenJSCAD プログラミング ガイド

色調で並べられた全ての利用可能な色名についてはWeb_colorsを参照して下さい。
OpenJSCAD プログラミング ガイド

コード抜粋:
OpenJSCAD プログラミング ガイド

コード:
OpenJSCAD プログラミング ガイド

注意: OpenGLの透過色の制限があります。例えば順番次第で、部分的に透明なオブジェクトが透過して見えないかもしれません。
OpenJSCAD プログラミング ガイド

次の関数で色空間を変換できます:
OpenJSCAD プログラミング ガイド

ここで
OpenJSCAD プログラミング ガイド

例えば、虹を作成するには、t=0..1で.setColor(hsl2rgb(t,1,0.5)) とします。
OpenJSCAD プログラミング ガイド

Tor (multi-color)の例を直接参照して下さい。.
OpenJSCAD プログラミング ガイド

prints out on the JavaScript console: a=1, b=2
OpenJSCAD プログラミング ガイド

Javascript provides several functions through the Math library. In addition, the following OpenSCAD compatible functions are available:
Direct OpenSCAD Source Import

An OpenSCAD to OpenJSCAD translator is included, however the following features aren't working yet:
Direct OpenSCAD Source Import

You can edit OpenSCAD source in the built-in editor, just make sure the first line says:
Direct OpenSCAD Source Import

then the source-code is shown with OpenSCAD syntax.
Direct OpenSCAD Source Import

Further CAD languages support might arrive at a later time.
Converting OpenSCAD to OpenJSCAD

In order to translate your OpenSCAD into native OpenJSCAD code, consider this comparison.
Converting OpenSCAD to OpenJSCAD

OpenSCAD
Converting OpenSCAD to OpenJSCAD

OpenJSCAD
Converting OpenSCAD to OpenJSCAD

Essentially whenever named arguments in OpenSCAD appear func(a=1), translate it into func({a:1}), for example:
Interactive Parametric Models

Models can have interactive parameters, allowing users to change values via familiar forms, i.e. typing in numbers, sliding bars, pulling down menus, etc. This allows the user to change values and create any number of possible combinations, allowing the model to become dynamic in nature. Any number of custom designs can be created, which can then be down loaded in any supported format.
Interactive Parametric Models

Interactive parameters are possible by adding a specific function called getParameterDefinitions(). This function can be added anywhere in to your JSCAD script, but must return an array of parameter definitions.
Interactive Parametric Models

The parameter definitions are used to create a set of fields which the user can change, i.e. options. The values of the fields are supplied to the main() function of your JSCAD script. For example, the value of the 'width' parameter is supplied as the 'params.width' attribute, and so on.
Interactive Parametric Models

All the common HTML5 field types are available as interactive parameters. This includes checkbox, color, date, email, float, int, number, password, slider, text and url. As well as two special parameter types for pull down choices, and grouping parameters.
Interactive Parametric Models

A minimum parameter specification contains only 'name' and 'type'. However, a complete parameter specification should have a 'caption' and 'initial' value. In addition, there are 'min', 'max', 'step', 'checked', 'size, 'maxlength', and 'placeholder' which are relevant to specific parameter types. Just keep try different combinations to get a nice parameter specification. Here's an good example.
Interactive Parametric Models

In addition, there is the 'choice' type which creates a drop down list of choices for the user. The choices are provided by specifying the 'values' and 'captions'. The chosen value is passed into the main() function of the model.
Interactive Parametric Models

A complete example:
Interactive Parametric Models

There are plenty of examples of "Interactive" parameters available at OpenJSCAD.org.
Interactive Parametric Models

The command line interface, ``openjscad``, can pass parameters for the interactive designs. Either by
Interactive Parametric Models

or
Interactive Parametric Models

For example:
Maintaining Larger Projects

After creating a few designs using OpenJSCAD, common functions and parts will become useful. The include() function allows one OpenJSCAD script to include another OpenJSCAD script.
Maintaining Larger Projects

and
Maintaining Larger Projects

See Example 50: Platonics with a recursive use of include(). Yet, it's a rather bad example of not localize the function names. A clear writing style-guide will follow how an OpenJSCAD library should look like.
Maintaining Larger Projects

The include() function is supported
Maintaining Larger Projects

Example of a setup with drag & dropped files:
Maintaining Larger Projects

Assuming you want to create a larger OpenJSCAD project, you might use include() to split up the functionality:
Maintaining Larger Projects

Note: The file named main.jscad must be present, and must contain the "function main()" declaration.
Maintaining Larger Projects

Depending on your browser and your local setup, following applies: