to Japnese HOMEto English Pages
HOME 研究室 研究活動 鈴木宏正 講議 学外活動 業績 ENGLISH


講議
設計情報システム I
設計情報システム II
情報システム第1
計算機援用設計
形状モデリング特論
精密機械工学基礎演習II(図形処理)
知能設計入門
3次元モデリング特論

精密機械工学基礎演習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)