精密機械工学基礎演習II(図形処理) 2001年閉講
はじめに
- 形状モデリング:計算機内での形状や空間の表現と処理
- 応用: コンピュータグラフィックス、計算機援用設計・生産 CAD(Computer Aided Design/Manufacture)、ロボティックス
- 立体モデリングシステムACISによる形状作成演習
立体モデリング
基本立体を集合演算によって組み合わせることによって形状を生成.
- 集合演算による立体モデル (A+B)-C
- 基本事項
- 立体: 3次元空間の部分集合
- 基本立体(プリミティブ立体)
直方体,円柱,円錐,角柱,楕円体,トーラスなど.
- 集合演算(和,積,差)
- 座標変換(並行移動(translation)と回転(rotation))
基本立体生成コマンド
- block 直方体の生成
 |
block name width double depth double height double
ここで、
name 立体の名前
width キーワード(そのまま書く)
double 適当な実数値
ex) block b1 width 100 depth 50 height 75
draw 表示コマンド(後述)
|
- sphere 球の生成
 |
sphere name radius double
ex) sphere s radius 30
draw
|
- torus トーラスの生成
 |
torus name major double minor double
ここで、
major 主軸の一つ
minor 主軸の一つ
ex) torus t1 major 60 minor 20
draw
|
- cylinder 円柱の生成
 |
cylinder name height double
{radius double | major double minor double}
[top double]
ここで
{ A | B } は、A または B の内のいずれかを必ず指定
[ C ] は省略可能
ex) cylinder c1 height 75 major 25 minor 10
draw
|
- pyramid n角錐の生成
 |
pyramid name height double sides integer
{radius double | major double minor double [top double]}
ex) pyramid p height 100 sides 4 radius 50
(半径50の円に内接する正方形)
draw
|
- frustum 円錐台の生成
 |
frustum name height double
{radius double | major double minor double}
[top double]
ex) frustum f height 50 radius 20 top 10
(top を省略すると円錐台ではなく、円錐になる。)
draw
|
- prism n角柱の生成
 |
prism name [height double] sides integer
{radius double | major double minor double [top double]}
ex) prism p1 height 20 sides 6 major 30 minor 20
draw
|
断面のスイープ
- kwire 2次元の輪郭形状を表す線分と円弧を接続した図形 (ワイヤーフレーム)を定義
- cover ワイヤーフレームで囲まれた領域に(位相的に)面を生成
- sweep XY平面上の2次元の輪郭形状をZ方向に持ち上げて立体を生成(掃引操作)
# profile for bracket XY平面上のワイヤーフレームの作成
kwire bracket 0 0 0 0 \ 継続行
78 0 0 0 \
78 -36 0 0 \
88 -36 0 0 \
88 4 0 90 \ 次の点まで中心角90度の円弧
82 10 0 0 \
0 10 0 0 \
0 0 0
|
 |
cover bracket ワイヤーフレームに面をはる(上面)
cover bracket 同上(下面)
sweep top bracket by 90 上面(top)を90だけ持ち上げる.
|
 |
 |
座標変換コマンド
- move 並行移動
move name vector [distance value]
ex) prism p height 25 sides 5 radius 25
draw (下図左側の表示)
move p 20 20 20
draw (下図右側の表示)
|
 |
- rotate 回転移動
rotate name by degree about vector | x | y | z
ex) prism p height 50 sides 5 radius 50
draw (下図左側の表示)
rotate p by 45 about x
draw (下図右側の表示)
|
 |
集合演算コマンド
- unite 和演算
unite name1 with name2 [as output_name]
ex) block b width 100 depth 100 height 10
cylinder c height 100 radius 10 top 10
draw (左側の表示)
unite b with c
draw (右側の表示)(b はなくなり、cが残る.)
|
 |
- subtract 差演算
subtract name1 from name2 [as output_name]
ex) block b width 100 depth 100 height 10
cylinder c height 100 radius 10 top 10
draw (左側の表示)
subtract c from b (c はなくなり、b が残る.)
draw (右側の表示)
|
 |
- intersect 積演算
intersect name1 with name2 [as output_name]
ex) block b width 100 depth 100 height 10
cylinder c height 100 radius 10 top 10
draw (左側の表示)
intersect c with b
draw (右側の表示)
|

★集合演算では、演算前の立体を使って計算が行われるので、 演算前の立体は失われるので注意。 |
- merge 同一面上の面要素を結合する。
merge name
ex) block a width 100 depth 100 height 100
copy a as b コピーコマンド(後述)
move b 50 50 0
draw a
merge a
draw b
mergeは、最後に一回やればよい。
|
 |
表示コマンド
3次元空間から2次元の画面上の座標系への変換して表示を行う。 これをビューイングという。
- view どこから見た絵を表示するかというビューイングパラメータの設定
view init デフォルトの初期パラメータにセット
view <change-view>
<change-view>::= [<view-type>][<view-dire>][scale double]
<view-type>::= [parallel | distance double] 平行投影か、透視投影か。
<view-dire>::= [from position][to position] 視点と注視点の指定
ex) block b1 width 50 depth 50 height 100
draw
view distance 100
draw
view init
|
 |
- draw 表示コマンド
draw {name}*
ここで、{name}* は、0個以上の立体の名前を指定することを意味する。
ex) block b width 50 depth 10 height 30
draw b
|
 |
- colour 線の色を指定
colour name <colour>
<colour>::= red|green|blue|yellow|cyan|magenta|white|black
ex) block b width 50 depth 10 height 40
colour b magenta
draw b
|
 |
- 隠線消去
見えない稜線を描かない表示.曲面を多面体に分割してから処理.
- facet 多面体化コマンド
- fhl 隠線消去コマンド
ex)
cylinder c height 50 radius 30
facet
draw
fhl attach 1 c
fhl show
fhl display 1
|
 |
例題
# initialize コメント
option props off おまじない
option merge off おまじない
view init デフォルト値の設定
view scale 0.63 スケールで小さめに表示
# profile for bracket ワイヤーフレームの作成
kwire bracket 0 0 0 0 \ 継続行
78 0 0 0 \
78 -36 0 0 \
88 -36 0 0 \
88 4 0 90 \ 次の点まで中心角90度の円弧
82 10 0 0 \
0 10 0 0 \
0 0 0
cover bracket ワイヤーフレームに面をはる(上面)
cover bracket 同上(下面)
draw bracket
|
 |
sweep top bracket by 90 上面(top)を90だけ持ち上げる.
draw bracket
|
 |
rot bracket by 90 about x
draw bracket
|
 |
# make blend tools and form blends
# 角を丸める
block blend h 200 w 8 d 8
cyl c r 8 h 250
move blend -4 4 0
sub c from blend
copy blend as blend2
copy blend as blend3
copy blend as blend4
move blend 8 -8 0
sub blend from bracket
rot blend2 by 90 about z
move blend2 8 -82 0
sub blend2 from bracket
rot blend3 by 90 about y
rot blend3 by -90 about x
move blend3 0 -8 -28
sub blend3 from bracket
rot blend4 by 90 about y
rot blend4 by 180 about x
move blend4 0 -82 -28
sub blend4 from bracket
draw bracket
|
 |
# Profile for gun
kwire gun -18 -20 0 0 \
18 -20 0 0 \
18 0 0 180 \
-18 0 0 0 \
-18 -20 0
cover gun
cover gun
sweep bottom gun by 60
cyl c1 r 12.5 h 70
cyl c2 r 7.5 h 200
move c1 0 0 25
unite c1 with gun
rot gun by 90 about z
rot gun by 60 about y
move gun 78 -45 22.928203
draw gun
|
 |
# cut bottom of gun at tangent point
block b1 h 40 w 300 d 300
move b1 0 0 -13
sub b1 from gun
|
 |
unite bracket with gun as cami1
colour cami1 yellow
draw cami1
# make hole in gun
cyl hole r 7.5 h 300
rot hole by 60 about y
move hole 78.196152 -45 22.588457
sub hole from cami1
draw cami1
|
 |
その他のコマンド
- include コマンド列のファイルを読み込んで実行する.
- list 立体の名前の表示
- copy 立体のコピー
ex) block b1 w 50 d 50 h 50
copy b1 as b2
- delete 立体の消去
ex) del b2
- rename 立体の名前の変更
ex) block b1 w 50 d 50 h 50
rename b1 as a1
- save 立体のデータをファイルに格納
ex)
block b w 50 d 50 h 50
save b to block.sat
save * to all.sat
- retrieve データファイルの読み込み
ex) retrieve block.sat as bl
複数の立体がファイルに入っていた時は,bl1, bl2, bl3 ...となる.
- exit 終了
実行の仕方
- 手順の概略
- ACISをktermで起動
- Muleで,コマンドのファイル(例 part.acs)を作成.
- ACISから include part.acs によってコマンドを実行.
- Muleで修正し,上記を繰り返す.
[注意] 繰り返し実行していくと立体データが増加するので, 時々delete every entity とやってデータベースをクリアする.
- モデルが完成したら,隠線消去図を表示.
- 隠線消去図のハードコピーをとる(下記参照).
- ACISの起動
(ktermで)
> ~hsuzuki/acis/acis
**** Acis(TM) Test Harness ****
メッセージの出力
Journal file XXXXXXXX.jou
Monitor file XXXXXXXX.mon
acis>
- 終了の仕方
acis>exit
- ハードコピーの取り方
画面に出ている立体の絵をプリンターに出すには、 xwd を使う.まず、プリンターに出力するには、線の色が白で ないとうまくいかないようなので、次のようにして 白に指定して、隠線消去の図を表示させる。
colour body white
facet body
fhl attach 1 body
fhl show
fhl display 1
表示が行われたら、kterm で次のようにする.
% xwd | xwdtopnm | pnminvert | pnmtops | lpr -P???
すると、画面に十字(+)カーソルがでるので,マウスで図形の表示 されているウィンドウに移動してクリックする. また,LaTeX に取り込むためにポストスクリプトファイルにするには,
% xwd | xwdtopnm | pnminvert | pnmtops > block.ps
- 参考ファイル ディレクトリ ~hsuzuki/acis/ に acs ファイルがいくつか入っている. 実行するには,例えば
acis>include /home/hsuzuki/acis/cami1.acs
一般的なヒント
- まず最初に必要な基本立体をすべて作成し,配置する.その後で集合演算を行なう.
- 穴を開けたりする時は,少し大きめの立体で引き算する.
- 表示位置がうまくいかないときは,view scale 1.2 のようにして倍率を変える.
精密機械工学基礎演習II課題
必須課題
下記のスケッチに示される立体を作成せよ.作成した立体の隠線消去図と,作成 コマンドを提出.寸法の不明な部分は適当に決めて良い.また,小さい角の丸 め(フィレットという)は無視してよい.隠線消去図の ハードコピーと、 コマンドファイルを印刷したもの(例 % jtops kadai.acs | lpr -Pxx) を、 レポート提出すること。

オプション課題
身近にある機械製品などのモデルを作成し,次の二つを提出。
- 隠線消去図のハードコピー
- 作成した立体のコマンドファイルをe-mail で提出. コマンドファイルの先頭に、コメントとして、学生証番号と名前を付ける。
# t12345 粗板未央
そのコマンドファイルを hsuzuki@mail.ecc.u-tokyo.ac.jpに送付する。
提出期限等
- [締切] 2000年6月16日
- [必須課題提出場所] 事務室提出ポスト
その他
作品例
ACISを開発している 米国スペーシャルテクノロジー社より, Windows でSATファイルの シェーディング表示ができる3D Open Viewerが入手できる。
(Last Updated on 04-Oct-2004)
|