STL機能開発 - 東京電機大学:新津研究室

教育用3次元 CAD システムの STL 出力機能
新津 靖 東京電機大学情報環境学部
270-1382 千葉県印西市武西学園台
Tel:0476-46-8325,Fax:46-8449
e-mail: [email protected]
1. はじめに
大学の初等教育において,機械系学科や土木・建築系
学科では図学教育が行われている.著者は,東京電機大
学において図学教育のための教育用 3 次元ソリッドモデラ
ーを開発し,過去 10 年間にわたり 1 年次生に対して図形科
学教育に使用してきた.
本研究では,従来の教育用の3次元ソリッドモデラーに
プログラミング要素を取り入れた独自のソリッドモデル記述
言語とその翻訳ソフトウエアを開発した.すなわち,集合演
算と陰線処理の充実,表面積計算や体積計算などの CAD
的機能の充実,変数,数式処理,制御構造による立体モデ
ルの生成と動作の記述,数式による面状立体・曲線状立体
の生成などができるようにした.現在,Version4 として東京
電機大学内の教育で使用しており,今後マニュアル等を整
備し公開する計画である.
2. ソリッドモデラーの形状表現とプログラミング
2.1 内部形状モデルとデータ構造
開 発 し た 教 育 用 3 次 元 ソ リ ッ ド モ デ ラ ー 「 Solid
Interpreter」は,テキスト形式の独自のスクリプト言語を解釈
してモデルの構築,演算,表示を行うソフトウエアである.
このソフトは,基本立体と呼ばれる 13 種類(内部的には 37
種類以上)の立体に移動や回転,アフィン変換,集合演算
などを施して希望とする3次元立体を構築することができる.
図1に主な基本立体を示す. 図1の矢印は,上の基本立
体と同じ生成プロセスで下の基本立体を生成していること
を示している.これらの基本立体を生成するコマンドは専用
の GUI ツールにより簡単に生成することができる.これら以
外にも正多面体なども基本立体として生成できる.立体の
データ形式は,境界表現法(B-Rep)で表されている.すなわ
ち,頂点・稜線・面のデータで立体の境界を表現している.
頂点・稜線・面の位相データは Winged Edge データ構造を
採用している. 高速処理を実現するため,位相データの検
索はポインタ操作により行っている.
ソリッドモデラーで扱うデータには,名前を付けて管理する
ものと名前を付けずポインタで操作する内部データがある.
名前を付けて管理するデータとして,表1に示す4種類のも
のがある.「視線情報」は,立体を表示するときの条件を設定
するためのものである.視点・注視点などカメラとしての情報
とともに,表示方法を指示する情報を有している.表示モー
ドには,面表示と稜線表示モードがあり,稜線表示モードで
は陰線の表示・非表示を指定することができる.また,3面図
表示により通常の2次元設計図面に対応した表示を行うこと
ができるように設計した.「グループ」は立体や子グループ,
軸をまとめて扱うためのものである.例えば,「自動車というグ
ループの中にエンジンという子グループがあり,そのエンジ
ンの中にピストンという立体があり,ピストンはクランク軸に接
続している」という構造を構築することができる.「軸」は,立
体やグループに動作を定義するためのものであり,平行移
動軸と回転軸を定義することができる.軸オブジェクトは,生
成後立体やグループに関連付けるが,軸同士を関連付ける
こともでき,例えば歯車のように,1つの軸(歯車)を回転させ
ると別の軸(隣接する歯車)を連動させて回転するような構造
を作ることができる.「立体」は内部にその立体を構成する面
構造体のリストを情報としてもっており,面を順次表示するこ
とで,立体を表示させることができる.面,稜線,頂点は立体
を表現する基本要素であるが,これらは名前で管理せず,ポ
インタのリスト構造により管理されている.
図 1 基本立体モデル
表 1 名前付要素のデータ構造
要素
要素が有する主な情報
視線情報
視線名,視点座標,注視点座標,表
示モード
グループ
グループ名,子グループリスト,子
立体リスト
軸
軸名,関連立体/グループ名,軸方向
ベクトル,移動量
立体
立体名,面色,稜線色,親グループ,
境界面へのポインタ,面数,稜線数
2.2 3次元立体モデルの生成方法
Solid Interpreter は,立体の生成や変形等をすべてテキ
スト形式のコマンドで行う方法を取っている.コマンドは,基
本立体生成コマンド,立体操作コマンドおよびその他のコ
マンドとして分類される.基本立体生成コマンドの機能と書
式を表2に示す.立体の生成や変形などの操作はすべて
テキスト形式で記述されるため,その過程を調べたり変更
することが容易となり,テキストファイルの修正と実行を繰り
表 2 プリミティブ立体生成コマンド
生成立体
コマンド
主なパラメータ
円錐
Cone
<op>立体名,半径,高さ
直方体
Cube
<op>立体名,X,Y,Z 長さ
円柱
Cylinder
<op>立体名,半径,高さ
回転楕円
Ellipse
立体名,XY 半径,XZ 半径
直線
Line
立体名,始点座標,終点座標
多角柱
Prism
<op>立体名,高さ,座標点
体
列
多角錐
Pyramid
<op>立体名,高さ,座標点
列
回転体
Revolve
<op>立体名,座標点列
球・正多角
Sphere
<op>立体名,半径
円環体
Torus
立体名,大半径,小半径
螺旋体
Spiral
立体名,大半径,小半径, ピ
形他
算,式の計算の記述はこのタイプとなる.コマンドには繰返
しや条件分岐などのプログラム要素もあり,アニメーション
や3D ゲームを作ることも可能である.
2.3 図形科学教育への応用
Solid Interpreter は,現在,10 程度の大学で図形科学の授
業や図学の授業の補助教材として使われている.著者の
勤務する東京電機大学では 1 年生の後期に 5 週間,週一
回2コマの演習授業を実施している.昨年までは数式処理
機能のない Solid Interpreter を使用していたが,来年度は
本報告にあるバージョンを使用する予定である.授業の最
後の週は自由課題に取り組ませ,最終日に発表会を行っ
ている.図 3 に学生たちが自由な発想で作った立体モデル
を示す.実際のモデルデータはほとんどがアニメーションと
なっており,モデルが動作するように組まれている.
ッチ
任意断面
Helix
立体名, ピッチ,座標点列
Plate
<op>立 体 名 ,厚 さ ,式数 ,,x=
の螺旋体
曲面・曲線
数式; y=…; z=…;
返しながら目的の立体を生成することができる.
立体モデルの作成は,生成した基本立体に,移動,回転,
集合演算,変形などを施して行う.2つの立体の加算(和集
合),減算(差集合),積(積集合)を作る集合演算の例を図
2 に示す.図 2 は2つの円柱の集合演算によって生成され
る立体を示している.その生成記述のスクリプトは次のよう
になる.
new
図 2 円柱の集合演算結果
# 初期化
Eye eye0 100,100,82, 0,0,0, 3, 1,4,0,0 # 視線生成
Cylinder y0 32, 10, 30
# 円柱 y0 の生成
Move
# 円柱の移動
y0 0, 0, -15
y1 = y0
Rotate
# 円柱のコピー
y1 0,0,0, 1,0,0, 90
# 円柱 y1 の回転
Xcolor y0
255, 255, 255
# 着色(白)
Xcolor y1
255, 128, 0
# 着色(青)
XObj1 = y0 + y1
# 集合演算(和)
XObj2 = y0 - y1
# 集合演算(差)
XObj3 = y0 * y1
# 集合演算(積)
Move XObj2 -25,-25,0
# 立体の移動
Move XObj3 -25, 30,0
# 立体の移動
Display
eye0
XObj1,XObj2,XObj3
図 3 授業における学生たちの作品
# 表示
・・・・・・
(1)
スクリプトは,基本的に「コマンド」,「オプション」,「操作対
象オブジェクト」,「パラメータ」を1行または複数行に記述す
る.先頭のトークンがコマンドでない場合は,立体やグルー
プ,変数などの左辺値として処理される.コピーや集合演
3. 数式処理機能の導入
3.1 コマンドパラメータの数式表現
ほとんどのコマンドパラメータに数式表現の記述ができる
ように,コマンド解析コードを改良した.パラメータ間は「,」
により区切るようにし,次のような記述が可能となった.
V = V + 0.1 ; T = T + 0.8
Cone body 12, R*(1+cos(T*3.141592/180.0)), 0.1*T
Move body R*sin(V), R*cos(V), T
・・・・・・ (2)
数式には三角関数や指数関数などの基本的な初等関数
が使える.これにより複雑なモデルの生成や変形・移動・回
転などを実現できる.さらに繰返しコマンドと合わせて利用
することで,規則的でかつ複雑な操作が可能になる.式(2)
の記述では,名前が body の円錐をらせん状に配置うること
ができる.body%を繰り返しコマンド中で名前として記述する
と,body1, body2, body3,…の繰り返し回数分の複数の立
体を生成することもできる.次の式(3)のスクリプト記述は半
径と高さを三角関数で変化させた 38 個の円柱の生成プロ
グラムである.図 4 に生成された立体の画像を示す.
コマンドである.-f, -l オプションで面状立体と線状立体の
生成を選択できる.オプションの後には,立体名,厚さ/半
径,式数とパラメータが続く.式数は,面状立体(-f)の生成
では 3~5 で,最後の2式が範囲指定となる.線状立体(-l)
の生成では 3~4 式となり,最後の 1 式が範囲指定となる.
x,y,z の3式は必ずなければならない.以下は,Plate コマン
ドのパラメータ書式を示している.
-f/-l 立体名,厚さ/太さ,式数,x=数式; y=数式; z=数式;
図 5 および図 6 は Plate コマンドにより生成した立体モデルの例を
示している.図 5 の(a)は 5 式による表現で,(b)は3式による単純な
パラメータ設定である.最後の2式は,範囲指定を表しており,3つ
の数値(初期値,最終値,増分)をコンマで区切って表現する.図
5 の2つのモデルのスクリプト記述を以下に示す.(a)では,変数 r,
t を媒介変数として使用している.
New
# 初期化
Eye eye0 300, 160, 81, 0, 0, 0, 3, 1, 4, 0, 0
H = 20
# 変数 H の初期化
T=1
# 変数 T の初期化
repeat 19 {
Cylinder y0% 32, 1+4*sin(T*3.1415926/20.0),
H*sin(T*3.1415926/20.0)
move y0% T*12-120, 0, 0
# モデルを X 方向に移動
Xcolor y0% 224, 255, 200
# 色設定(青色)
T = T + 1;
}
T=1
repeat 19 {
Cylinder y1% 32, 1+4*sin(T*3.1415926/20.0),
H*sin(T*3.1415926/20.0)
move y1% 0,T*12-120, 0
# モデルを Y 方向に移動
Xcolor y1% 200, 255, 255
# 色設定(黄色)
T = T + 1;
}
Display eye0 **
# すべてのモデルを表示
Dispcord -a eye0 30, 0xff
# 座標軸を表示
・・・・・・
(3)
3.2 数式によるモデル生成
数式により面を生成するコマンドを導入した.オプション
指定により,面状の立体と線状の立体を作ることができる.
モデル生成用に 3 つの変数(1 文字の英字が変数) x, y, z
を使用している.それ以外の変数は媒介変数として使用す
ることができる.コマンド名は表 2 の一番下に示した「Plate」
(a)
Plate -f Body 5, 0.02; z = 2.4*( exp(-r*r/0.6) );
x = r*cos(t*2); y = r*sin(t*2);
r= 0.01, 2.5, 0.12; t= 0, 2.5, 0.08
(b)
Plate -f Body 3, 0.001; z = 0.6*( sin(x*2) * cos(y*3));
x = -1.6, 1.6, 0.08; y = -1.6, 1.6, 0.08
(a)
(b)
図 5 面状立体モデルの生成例
(a)
図 4 数式により生成された立体モデル群
(b)
図 6 線状立体モデルの生成例
図 6 の線状立体モデルのスクリプト記述は以下の式で与え
られる.媒介変数は(a),(b)についてそれぞれ r と t である.
(a) Plate -l XBody 4, 0.04;
z = 10*( exp(-r*r/60)*cos(a*r) );
x = r; y = 0; r= -20, 20, 0.2
(b) Plate -l XBody 4, 0.01; z = t;
x = (3-t)*cos(t*6); y = (3-t)*sin(t*6);
t= -2, 2, 0.02
Plate コマンドで生成される立体は WingedEdge 構造を持つ
ソリッドモデルである.そのため面は裏表と側面にもあり,集
合演算も可能である.ただし,集合演算に不都合な立体が
生成される場合がある.
4. STL ファイル出力機能
STL ファイルは3D プリンタの入力形式として一般に使わ
れているファイル形式である.本ソリッドモデラーには DXF,
WRL などのファイル出力コードがすでに開発済みで実装し
ている.CAD データ出力機能の一部として STL ファイル出
力機能も実装する予定であり,現在開発を進めている.サ
ンプルとして図 7 に示すような立方体と準正多面体に集合
演算で穴を空けた立体の STL ファイルを生成した.STL フ
ァイルビューワである MiniMagic で開くことができた.
図 7 サンプルとして STL ファイルを生成した立体
5. まとめ
従来開発してきた教育用ソリッドモデラーに数式処理機
能を導入した.その結果,スクリプト記述のパラメータに数
式が使えることを確認した.さらに,数式で頂点を設定する
モデル生成コマンドを開発し,3次元の関数形状をソリッド
モデルで表現できることができた.
参考文献
[1] 山口富士夫,”コンピュータディスプレイのよる
図形処理工学”,日刊工業新聞社,1981
[2] 鳥谷浩志・千代倉弘明, “3次元 CAD の基礎と応
用”,共立出版,1991
[3] 新津 靖,"図学およびコンピュータグラフィックス教育の
ための3次元立体生成ソフトウエアの開発",情報教育
方法研究,Vol.2, No.1 (1999), pp.7-12
[4] Yasushi Niitsu, "Solid Modeling with Polygon Data of
Mathematica", Proc. of 4th Int. Mathematica Symp.
(Symbolic Computation) , (2001),pp.369-374