Kodatuno Logo
Kodatuno User's Guide
Prev Index Next


簡単なアプリケーションの作成

 このセクションでは,サンプルアプリケーションの応用として,ユーザーボタンの5番目をクリックすると,1つのNURBS曲面をz方向にr倍し,y軸周りにdeg度回転させ,z方向にhだけシフトさせて 新たなNURBS曲面を作成し,これら2つのNURBS曲面の交線を算出するアプリケーションを作成してみましょう.
このとき,"User Status"のプロパティー値には,r, deg, hと,交点間隔の4つを入力する仕様とします.

  1. まず、UserFunc.cpp内のUSERクラスのコンストラクタに,ユーザーボタンの5番目を押すと実行される関数を登録しましょう.USER::USER()を以下のように変更します。


  2. 次に、UserFunc.hにExecMyApp()をプロトタイプ宣言します。


  3. また,ユーザーボタン名も変更しましょう.変更するには,"UserFunc.cpp"のUSER::SetMenuLabelName()を変更します.

    こちらの例では,"Exec MyApp"という名前に変更しました.

  4. UserFunc.cppの適当な位置にExecMyAppの実体を記述します。ExeSampleFunc1()を参考にして,"User Status"がMode1のときに実行されるようにしましょう. 実行される関数名は何でもかまいませんが,ここではMyAppMain()としました.

    MyAppMain()に渡す引数は,BODYList, OBJECTList, PickCount, UserStat.Propの4つが必要になります.

    • BODYList *BodyList
    • OBJECTList *ObjList
    • int PickCount
    • double Prop[ ]

    とします。

  5. MyAppMain()のプロトタイプ宣言を"SampleFunc.h"に記述します.

  6. 次にいよいよ,MyAppMain()の実体を書いていきます.今回は"SampleFunc2.cpp"に書いていきましょう.

     上のソースには,説明しやすいように1から順番に行番号が振ってあります.
     この課題では,前例題にはない,NURBS曲面をコピーするということを行います.NURBS曲面をコピーするには,まず,コピーするための新たな箱を用意します(15行目). 次に,NURBS_Func::GenNurbsS()関数を用いてコピーを実行します(16行目).
     18〜21行目では,"User Status"のプロパティ値を取得しています.今回は,倍率,回転角度,シフト量,交点間隔の4つを入力する仕様でしたので,Prop[0]〜[3]まで を得るようにしました.
     23行目からは実際にコピーした曲面のアフィン変換を実施しています.ここは2.6.2 NURBS曲面のアフィン変換の例題を参考にしてください.
    ユーザー定義関数内で新たに作成したNURBS曲線や曲面をグラフィック描画領域に描画するためには,27, 28行目の操作が必要になります.27行目では,Describe_BODYと呼ばれる BODY描画を担当するクラスを呼び出しています.28行目では,このクラスに属するDescribe_BODY::DrawNurbsSurf()関数を呼び出し,描画命令を実行しています.

     とりあえずここまで書き終えたら,一度このプログラムを実行してみましょう.これまでのプログラムの変更を全て保存し、2.2 Kodatunoを動かしてみよう に沿って コンパイル、実行してください。次に、"FreeSurf.IGS"を読み込み、選択状態にします。"User Stat"を開き、Modeを1にセット、Prop1〜3までに適当な値を入れ、 "CalcIntersecLine"ボタンを押します。下図は、Prop1=2, Prop2=30, Prop3=10とした場合の結果です。

     新たに生成したNURBS曲面が表示されたと思います.しかし,試していただければ分かるようにピックすることはできません.これは,新たに生成したNURBS曲面をBODYListに新たな Bodyとして登録していないためです.言い換えれば,現時点ではただ表示しているだけということになります.
    そこで、新たに作成したNURBS曲面を新たなBodyとして登録してみましょう。新たに登録する場合は、 BODYクラスのRegistNurbsStoBody()関数を用います。このとき、この関数の引数として、登録するBODYListへのポインタ, 新たなBody, Body名の3つが必要になります.

    ここで,Describe_BDOY::DrawNurbsSurf()が消えていることに注意してください.生成したNURBS曲面をBodyとしてリストに登録すると,Kodatuno内部で描画対象として 認識してくれますので,わざわざ描画指令を送る必要がなくなります.さらに,リスト登録することによって,ピックが可能になります.
  7. 次に、NURBS曲面同士の交点群を算出するために、NFunc.CalcIntersecPtsNurbsSSearch()関数を用います。


  8. 交点群が正しく描画されたら,最後に得られた交点群からNURBS曲線を生成してみましょう.

    交線の表示が部分的におかしいのは, 交点配列がきれいにソートされていないからです.CalcIntersecPtsNurbsSSearch()関数などを用いて交点群を生成する場合は, かならずしも,順序正しく点が格納されていないため,何らかのソート用コードを記述しなければなりません.

以上で、簡単なアプリケーション作成手順の説明を終わります。

Document Release 2.0 for Kodatuno R2.0, Nov. 2011


Prev index Next

Copyright(C) Kodatuno Development Team, 2011 Last modified: Nov. 11, 2011