前々回、OpenSCADの導入を。
前回、簡単な形のモデリングと、
出力したファイルをUnityで利用するところまでやりました。
実際にUnityで利用できる有用なツールであることはわかったので、
今回はOpenSCADについての理解を深める目的でやります。
内容的には、自分への噛砕き翻訳覚書です。
頼みの公式マニュアルと公式チートシート
公式マニュアルがしっかりしているのでマニュアルで詳細を見つつ、
公式チートシートで大部分の理解をしていきましょう。
構文→噛砕き翻訳→自分なりの理解といった感じで書きなぐっていきます。
基本文法
オブジェクト
object();
オブジェクトは上記のような構文で生成される。文末にセミコロンを置きます。
C#のnewセンテンスが必要のないインスタンスの生成ですね。
アクション
action();
アクション構文は引数を利用する上記オブジェクトの生成を含む。文末にセミコロンを置きます。
引数の違いかと思ったのだけれど、オブジェクトの例文でも引数を利用していて、いまいち違いがわからない。例文では次に紹介するオペレーターを利用しているものはアクションとしているので、オペレーターがつくとアクション?ただ、違いを理解する必要はなさそう。
オペレーター
operator() action();
operator() { action(); }
operator() { action(); action(); }
operator() operator() action();
operator() { operator() action(); }
operator() { operator() { action(); }}
オペレーターはオブジェクトのプロパティ。対象は次に現れるオブジェクトで、複数のオブジェクト対する場合、中括弧({})でそのスコープを広げることができる。オペレーターはあらゆる形で複数使用できる。オペレーターの処理はアクションに近い方から(右から左へと)処理される。オペレーターは文末にセミコロンを置かない。
英語の形容詞的にオブジェクトのパラメーターを変化させる様子。主に移動・色付け・回転ができるみたい。
コメント
//こめんと
/*
こめんと
*/
C++のスタイルでコメントアウトできる。
なれた形でコメントできるのはありがたい。
値と型
OpenSCADでは
- 数値
- ブーリアン値
- 文字列
- 範囲
- ベクトル
- 未定義値
が利用できる。それぞれを少し細かく説明していく。
数値
数値には次のようなものがある
- -1
- 300
- 0.5
- 5e2
- 2.99792458e+8
小数点も含み、10進数表記のみ。
複素数はない。
バイナリ浮動小数点なので2の累乗で表現されないと精確ではない。
値域は以下の通り
-1e308 < value < 1e308
表現できないほど細かくゼロに近い値は-0となり、0と等値と評価できる。
値域よりも大きすぎる場合infとなり、小さすぎる場合-infとなる。
定数は用意されていないが
inf = 1e200 * 1e200;
nan = 0/0;
とした変数で定義できる。
nanはnan自身を含むすべての値と違うと評価される値で、変数xがnanであるかどうかは、
x != x
で評価できる。(nan以外は必ずfalseになる)
ブーリアン値
trueとfalseの二つを持つ値でif()文の引数として渡される。
?:演算子、!演算子、&&演算子、||演算子が利用できる。
すべての型をブーリアンにすることができ、下記の値以外は全てtrueとなる。
- false
- 0
- -0
- “”
- []
- undef
全ての型の空のような値であることが条件であり、
例えば”false”や[0]や[[]]や[false]や0/0はtrueである。
文字列
文字列は0個以上のunicodeを持つシークエンス。
主にインポートするファイルネームや、デバッグでecho()を利用して表示させる時などに使う。
ダブルクォート(”)で囲むことで文字列リテラルとなる。
文字列リテラルのエスケープシーケンスは下記
- ¥”→”
- ¥¥→¥
- ¥t→タブ文字
- ¥n→改行
- ¥r→キャリッジリターン
- ¥u03a9→Ω
範囲
範囲は主にfor()文やchildren()文で利用される。
範囲は以下の2つの構文がある。
[<start>:<end>]
[<start>:<increment>:<end>]
角括弧([])で囲うが、
ベクトルではないのでカンマ(,)ではなくコロン(:)で区切る。
<increment>はバイナリ浮動小数点で正確に表現出来ない値は避ける。
上の構文で省略されている<increment>は1として扱われる。
上の構文で<start> > <end>の場合[<end>:<start>]とされる。
未定義値
未定義値は特別な値で、undefと記述される。
値が割り当てられていない時の変数の初期値。
主に、正常でないfunctionの戻り値や操作で得られる。
所謂null値として利用できる。
長くなりましたが、以上がOpenSCADで用意されている値、つまりリテラルということです。プログラミングをやっている人間には扱いやすそうなリテラルが用意されているようです。
変数
variable = value;
説明がなかったけれど、左辺が変数名で右辺が値。宣言はない模様。
これを利用したプログラムをプレビューかレンダリングすると、Customizerウィンドウにその値を簡単に変更できるようになる。
例えばこんな感じ
Editorを読むとViewにはcube([2,3,4])のオブジェクトができるはずだが、画像右側のCustomizerウィンドウでxとyの値を4にしてからもう一度レンダリングしているので、実際にViewに表示されているのはcube([4,4,4])のオブジェクトであることがわかる。
という感じで一旦終わりです。
次回も基礎知識・翻訳覚書の続きをやっていきます。
ご覧いただきありがとうございました。