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には利用者のためのエディターが含まれます:
エディター内で
ファイルをブラウザーで示された領域にドラッグアンドドロップするだけです
好みのエディターを使って、Auto Reload [x] がチェックされていることを確認して下さい。
注:現段階ではブラウザーをサポートしています。Try another browser if your not satisfied with the performance of your current browser.
前提条件:
注:NodeJS >= 0.8.1であることを確かめて下さい。(Ubuntu 12.04 installs NodeJS 0.6.1).
注:実際のNodeJS実行ファイル名が/usr/local/bin/node (デフォルト) か /usr/bin/nodejsであることと、openjscadの1行目がその名前であることをチェックして下さい。
以下では、次のようにレポジトリをクローンしたことを仮定します。
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.
以下のコマンドで logo.stl または test.stl が作成されます。
さらに OpenSCAD (.scad)、 STL ASCII または Binary (.stl)、そして AMF (.amf) ファイルが取込可能です。 .jscad、 .stl (ASCII または Binary)か .amfが作成可能です。
コマンドラインからmain()へ変数を渡す方法Command Line Interface Parametersも参照して下さい
現在、次の言語とファイル形式をサポートしています。
ファイルをドラッグアンドドロップすると、言語かファイルフォーマットがファイル拡張子(.jscad,...)に従って設定されます。ブラウザで直接編集を始める場合、デフォルトの言語はJSCADです。
特定の例へのリンクを他の人に渡すことが出来ます。
ローカル
JSCADを参照する場合、include()がサポートされます。
リモート
JSCADを参照する場合、include()は サポートされません (おそらくサポートは後ほどになります)。
In general, designs are written using the JavaScript language. Training and help about JavaScript can be found online.
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 adheres to specific standards for passing parameters to functions. But most parameters are optional as default values are provided.
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].
NEED EXAMPLE
OpenJSCADの.jscadファイルは、ライブラリやヘルパー(複数ファイル)でない限り、少なくとも1つの関数main()を定義する必要があります。その関数はCSGオブジェクトか交わらないCSGオブジェクトの配列を返す必要があります。
また次のようにします:
しかし以下の例は動作しません:
なぜなら、3Dプリミティブのような全てのCSG作成物はmain()を結果的に通って呼ばれる関数内に現れなければならないからです。
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
The former is used for 2D curves (circle, cylinder), the latter for 3D curves (sphere, 3D expand).
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).
立方体やどちらかと言えば箱は以下の様に作成できます:
球は次のようにして作成できます:
type: 'geodesic'の場合、fnは非測地線のfnに適合させようとしますが、実際は6のステップ(例えば fn=6..11は同じ)で、fn = 1 ではベースとなる形の20面体が明らかになります。
注: 球を作成し(例えばunion()やintersection()で)操作すると、使われる大量のポリゴンのため、レンダリングや構築処理が遅くなります。
円柱と円錐は以下のようにして作成できます:
ここでfは円柱の丸い形を近似するための断片の量です(デフォルト32)。
トーラスは以下の様に定義されます:
多面体は点のリストと三角形やポリゴンのリストで作ります。点のリストは形の頂点全てで、三角形のリストは点が多面体の表面にどのように関連するかを定めます。
さらにtriangles:だけではなくpolygons: [ [0,1,4,5], [..] ] とも定義できます。
多面体はより低水準でオブジェクト指向的に作成できます:
vector_text(x,y,string) や vector_char(x,y,char) はベクトルでレンダリングされたテキストや文字の線分を与えます:
また"\n"を使った複数行もサポートされます。今の所左詰めのみサポートされています。もっと詳細を知りたいなら、単一の文字を要求することもできます:
オブジェクトを全ての軸で、または軸単位でセンタリングするには:
false = 何もしない、 true = 軸にセンタリング
center() や .center() は左右対称で構築時には完全にはサイズがわからない物体を構成するのに役に立ちます。例えばパラメータ化されたデザインでのように。
複数のオブジェクトの和を取ることができます。配列も可能です。
複数のオブジェクトの積を取ることができます。配列も可能です。
注: intersection() (openscad と同様) と intersect() との対比(メソッド、オブジェクト指向)
複数のオブジェクトの差分(減算)を取ることができます。配列も可能です。
注: difference() (openscad と同様) と substract() との対比(メソッド、オブジェクト指向)
パスとは単なる点の列で、直線で結合されているものです。パスは開放することも、閉じる(追加の直線が最初と最後の点の間に描かれます)こともできます。2DパスはCSG.Path2Dクラスを通してサポートされます。2Dパスと2D CAGとの違いは、パスが「細い」直線なのに対し、CAGは囲まれた領域であることです。
パスは2D座標の列を与えたり、CSG.Path2D.arc()関数を通じたりして構築できます。後者は環状のカーブしたパスを構築します。パスは結合でき、結果は新しいパスになります。
パスをCAGに変換するには2つの方法があります:
3Dソリッドの作成は現状、rectangularExtrude()関数でサポートされます。この関数は2D長方形で(直立しパスの方向に垂直に)パスをなぞって3Dのシェイプを作成します。
複数の2Dポリゴン(例えば circle()やsquare()、polygon())を合わせて凸包にすることができます。
連鎖した凸包とは、複数の2Dの形の上の凸包の変種です。本質的に順次凸包にして、それらの和集合を取ります。Whosa whatsisのアイデアにもとづきます。
高さ、ねじり(twist)(角度)、スライス(ねじるなら)を与え、2Dの形状を3Dに押し出します:
2D形状の線形押し出しにはオプションでねじりを指定できます。2D形状はz=0平面上に配置され、CSG.Vector3Dの<offset> 方向に押し出されます。最終の表面は<twistangle>度だけ回転します。回転は2D形状の原点(つまりx=0, y=0)周りになされ、twiststepはねじり(1以上でなければならない)の分解度を決定します。CSGオブジェクトを返します。
パスを(直立で、パスの方向に垂直に)長方形でたどり押し出し、CSGソリッドを返します。
rectangular_extrude()を使うと単純化されます(OpenSCADはこれを提供していないがopenscadと同様)。ここで Simplified (openscad like, even though OpenSCAD doesn't provide this) via rectangular_extrude(), where as
あるいはより低水準でオブジェクト指向的なrectangularExtrude()も使えます。次の無名の変数を与えます。
さらに rotate_extrude() も利用可能です:
本質的に2Dポリゴン(円、正方形、ポリゴン)を押し出します。
ソリッドの'property'プロパティーはそのオブジェクトのメタ情報を格納するのに使うことができます。例えばソリッドの特定の興味のある点の座標などです。オブジェクトが変換(回転、スケール変換、移動など)された場合必ずプロパティーも変換されます。 そのためソリッドを何度変換してもプロパティーは興味のある同じ点を指し続けます。
プロパティーは任意の型を持つことができますが、'transform'メソッドをサポートするクラスのプロパティーしか実際に変換されません。これにはCSG.Vector3DやCSG.Plane、CSG.Connectorが含まれます。特にCSG.Connectorのプロパティー(下記参照)は非常に有用です:これはソリッドを別のソリッドに事前に決められた位置で現在の向きに関係なく取り付けるのに使用可能です。
他のソリッドのプロパティーとしてCSGソリッドを含ませることも可能です。これは例えばあるオブジェクトに適合するネジ穴を作成するために切り抜き円柱を定義するのに使えるでしょう。これらの'solid properties'はソリッドのオーナーと同じ変換を受けますが、union()のようなCSG操作の結果としては目に見えません。
他の種類のプロパティー(例えば文字列)は変換されたソリッドのプロパティーに含まれはしますが、オーナーソリッドが変換されてもその値はなんら変換されません。
全てのプリミティブソリッドはいくつかの事前定義されたプロパティーを持ちます。例えば球の中心点などです。(TODO: 文書化)
union()やsubtract()、intersect()といったCSG操作の結果作られるソリッドは元となるソリッド両者の併合されたプロパティーを持ちます。同名のプロパティーがあればそのうち1つのみしか保持されません。
CSG.Connectorクラスの目的は、2つのソリッドと互いに前もって決められた位置と方向で結合するのを容易にすることです。例えばサーボモーターを描いたCSGソリッドとサーボアームのソリッドがあるとしましょう:それぞれのコネクタープロパティーを定義することで、容易にサーボアームをサーボモーターに正しい位置(つまりモーター軸)と向き(つまり軸に垂直)で取り付けることができます。たとえ3D空間上の現在の位置と向きを知らなくても。
言い換えればコネクターは自在にオブジェクトを回転・移動することを、その位置と境界を追跡することなしに可能にします。そしてサードパーティーのライブラリーがそのソリッドにコネクターを公開すれば、ライブラリーの利用者は実際の寸法や形状を知る必要がなく、ただコネクターのプロパティーの名前さえ知っていればいいのです。
CSG.Connector には3つのプロパティーがあります:
2つのコネクターを結合するとき、pointプロパティーが同じになり、axisプロパティーが同じ向き(または mirrot == true なら反対向き)になり、normalができるだけ適合するように、ソリッドは変換されます。
コネクターを結合するには2つの方法があります: CSGソリッドのconnectTo()関数が、2つのコネクターが結合された状態になるようにソリッドを変換します。 別の方法として、コネクターのgetTransformationTo()メソッドを使って、コネクターを結合する変換行列を取得します。この方法は、同じ変換を複数のソリッドに適用する必要がある場合に使うことができます。
getBound()関数を使ってオブジェクトのバウンディングボックスを取得できます。getBounds()は2つのCSG.Vector3Dからなる配列を返します。それぞれが最小のx,y,z座標と最大のx,y,z座標を示します。
lieFlat()はオブジェクトをz=0平面上に配置します。その際、z-高さが最小になり、z軸周りにセンタリングされるように処理されます。これはCNCミルで有用です:オブジェクトの一部を切削中の原材料の空間に変換するからです。または3Dプリンタでも同様です:最小の層数で印刷できるからです。lieFLat()の代わりにgetTransformationToFlatLying()関数も使えます。これは変換としてCSG.Matrix4x4を返します。
OpenSCADと同様に:
ここで名前付きの色は大文字小文字を区別しません。 ('RED'=='red')
オブジェクト指向的には:
例:
色調で並べられた全ての利用可能な色名についてはWeb_colorsを参照して下さい。
コード抜粋:
コード:
注意: OpenGLの透過色の制限があります。例えば順番次第で、部分的に透明なオブジェクトが透過して見えないかもしれません。
次の関数で色空間を変換できます:
ここで
例えば、虹を作成するには、t=0..1で.setColor(hsl2rgb(t,1,0.5)) とします。
Tor (multi-color)の例を直接参照して下さい。.
prints out on the JavaScript console: a=1, b=2
Javascript provides several functions through the Math library. In addition, the following OpenSCAD compatible functions are available:
An OpenSCAD to OpenJSCAD translator is included, however the following features aren't working yet:
You can edit OpenSCAD source in the built-in editor, just make sure the first line says:
then the source-code is shown with OpenSCAD syntax.
Further CAD languages support might arrive at a later time.
In order to translate your OpenSCAD into native OpenJSCAD code, consider this comparison.
OpenSCAD
OpenJSCAD
Essentially whenever named arguments in OpenSCAD appear func(a=1), translate it into func({a:1}), for example:
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 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.
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.
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.
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.
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.
A complete example:
There are plenty of examples of "Interactive" parameters available at OpenJSCAD.org.
The command line interface, ``openjscad``, can pass parameters for the interactive designs. Either by
or
For example:
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.
and
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.
The include() function is supported
Example of a setup with drag & dropped files:
Assuming you want to create a larger OpenJSCAD project, you might use include() to split up the functionality:
Note: The file named main.jscad must be present, and must contain the "function main()" declaration.
Depending on your browser and your local setup, following applies: