![]() |
|
Prev
Index
Next |
(Ex. 2) Bodyのアフィン変換
あるBodyに対して平行・回転・拡大・縮小などのアフィン変換を行う方法について解説します.
"SampleFunc1.cpp"のSmpTransBody()を実行します.<実行手順>
- Kodatunoアプリケーションを起動し, 適当なIGESデータを1つ読み込みます.
- 表示されたBodyをピックします.
- "User Status"からMode2を選択し,"Sample Func 1"ボタンを押します.
- 選択したBodyの位置と大きさが変わったことを確認してください.
<ソース解説>
(Ex. 1)で解説したように,"Sample Func 1"をクリックしたので,"UserFunc.cpp"の77行目ExecSampleFunc1()が実行され, さらにMode2を選択したことから,UserStat.Modeには1が代入されているので,SmpTransBody()が実行されます.
では,SmpRegistBody()を見てみましょう.まず最初の行(37行目)には,ピックされたオブジェクトの数がゼロ,つまり何も選択されていない状態でこの関数が実行された場合のエラー処理が 記述されています.ポカよけの意味でこの処理を冒頭に記述しておくことをおすすめします.
つづいて39行目では,一番最初にピックしたオブジェクトの情報を取り出しています. この記述は2.5 サンプルアプリケーションの実行とソース解説 1 でも出てきました.本例では一番最初にピックしたものに限定していますが,実際のコーディングでは目的に応じて取り出すオブジェクトを変える工夫が必要です.
ピックしたオブジェクトの情報を取り出した後,その情報を元にBodyの実体を引っ張ってきます.それが40行目です. OBJECT構造体のメンバー変数Bodyにはピックしたオブジェクトが属するBodyのインデックス番号が入っています. このインデックス番号のBodyをBODYListから取り出しています. この39,40行目の2行はセットで使うことがほとんどです.C言語に自身のない人はとりあえずこの2行はおまじないとしてしまってください.
Bodyの実体を取り出したら,あとはそのBodyのメンバー関数を用いてアフィン変換を適宜行うだけです.
ここで,Kodatunoでは3次元座標を扱うクラスとして"StdAfx.h"に定義されたCoordクラスを用います. たとえば,44行目ではshiftという名のCoord変数を宣言すると同時に(0,0,10)という3次元座標値を代入しています. Coordを使った種々の計算は"StdAfx.h"にかなり多く用意していますので,一通り見ておくとよいと思います.
- BODY::RotBody()は指定した軸周りに指定角度Bodyを回転させます.
- BODY::ShiftBody()は指定したシフト量だけBodyを平行移動させます.
- BODY::ExpandBody()は指定した拡大量だけBodyを拡大/縮小させます.
以上で(Ex. 2)の解説を終了します.次からはNURBS曲線/曲面に対して種々の情報を取り出す操作を行っていきます. まずは,NURBS曲線に対して指定した分割数で分割したときの分割点を生成する方法を示します.
Copyright(C) Kodatuno Development Team, 2011 | Last modified: Nov. 11, 2011 |