システム
【Kodatuno.h】
BODYの管理、OpenGLによる描画処理、各種プロシージャの実行処理を定義します。
■シンボル
#define CONSOLE_CHAR_NUMMAX 2048 コンソールに出力可能な文字数
#define MAXSELECT 2000 セレクション時の最大バッファサイズ
#define BODYLISTMAX 8 読み込めるBODYの最大数
#define TOLERANCE 20 NURBS曲面の粗さのデフォルト値
#define HISTORYNUMMAX 10 コマンド履歴の最大数
<NURBS曲面の生成方法を表すシンボル>
#define ROTSURF0 回転サーフェス
#define SWEEPSURF 1 スイープサーフェス
■インクルードライブラリ
"IGES_Parser.h" "StdAfx.h" "Quaternion.h" "Describe_BODY" "UserFunc.h" "Command.h"
■型定義
なし
■クラス
KODatUNO
<継承>
public Describe_BODY
public BODY_Handler
■関数(Class USER)
public
InitializeWin();
<説明>
コンストラクタ
ユーザが独自に作成した関数とUserボタンとの関連付け及び、Userステータスの初期化を行う。
<引数>
なし
<戻り値>
なし
public
void DeleteWin();
<説明>
Kodatunoの終了処理
<引数>
なし
<戻り値>
なし
<呼び出し元>
Kodatuno_Win_Proc();
public
int OpenFile();
int OpenFile(char *Fname);
<説明>
拡張子IGSまたはigsのファイルを読み込むダイアログボックスを表示し、IGSファイルを読み込む。読み込まれた立体上方はBODYに登録され、BODY描画フラグを立てる。
また、読み込んだNURBSデータに縮退がある場合は、その補間もここで行われる。
<引数>
*Fname:IGESファイル名
<戻り値>
正常に読み込み終了:KOD_TRUE
IGES読み込みエラー:KOD_FALSE
<呼び出し元>
CmdFileOpen(); Menu_Proc();
public
int OpenInpFile();
<説明>
拡張子INPまたはinpを持つインプットファイルのフルパス名を取得する。
<引数>
なし
<戻り値>
正常取得:KOD_TRUE
<呼び出し元>
OpenInpFile_Proc();
public
int BodyListSelect();
<説明>
BODYリストボックスにあるBODY名が選択された場合に、そのBODYの番号を得る
<引数>
なし
<戻り値>
なし
<呼び出し元>
BodyListSel_Proc();
public
void ReDraw(int x,int y);
<説明>
OpenGLによるBODY描画を行う。再描画イベントが発生した時に呼ばれる。
(注意)OpenGLが用意するAPIはこの関数にぶら下がっていなければならない。
<引数>
x,y:マウスの位置
<戻り値>
なし
<呼び出し元>
Describe_Proc();
public
void ReDrawUserFunc();
<説明>
User関数によって実行されたOpenGLによる描画はこの関数で行う。
(注意)OpenGLが用意するAPIはこの関数にぶら下がっていなければならない。
<引数>
なし
<戻り値>
なし
<呼び出し元>
Describe_Proc();
public
void ReDrawUserCommand()
<説明>
UserCommand実行時の再描画呼び出し
<引数>
なし
<戻り値>
なし
<呼び出し元>
Describe_Proc();
public
int GetConsoleCharNum();
<説明>
コンソールの現在の文字数を得る。
<引数>
なし
<戻り値>
コンソール文字数
<呼び出し元>
console_KeyHook();
public
void SetConsoleCharNum(int len);
<説明>
コンソール文字数を保存する。
<引数>
len:保存したいコンソール文字数
<戻り値>
なし
<呼び出し元>
Console_Expose(); Console_KeyHook(); InitializeWin();
public
void ExecCommand(char *allcmdline);
<説明>
コンソールから入力されたコマンドを解析し実行する。
<引数>
*allcmdline:コマンド引数も含めたコマンド文字列
<戻り値>
なし
<呼び出し元>
console_KeyHook();
public
int GetUpperConsoleHistory(WSCstring *cmd);
int GetLowerConsoleHistory(WSCstring *cmd);
<説明>
コンソール内で上下矢印キーが押された場合、コマンド履歴を矢印に沿って取得していく。
<引数>
*cmd:取得したコマンド文字列を格納
<戻り値>
正常取得:KOD_TRUE
コマンド履歴なし:KOD_FALSE
<呼び出し元>
console_KeyHook();
public
void SetConsoleHistory(WSCstring His);
<説明>
コマンド履歴を格納している配列に新たなコマンドを履歴として登録する。
<引数>
His:履歴登録するコマンド文字列
<戻り値>
なし
<呼び出し元>
console_KeyHook();
public
void GetResizeWindow();
<説明>
ウィンドウがリサイズされたときに、そのウインドウサイズを読み込む。
<引数>
なし
<戻り値>
なし
<呼び出し元>
Kodatuno_Win_Proc();
public
void MouseEvent(long Trig, long Btn, short x, short y);
<説明>
マウスイベントが発生した場合に、押されたボタンに応じて処理を行う。
<引数>
Trig:マウスを押したか離したか
Btn:押されたボタンの種類
x,y:マウス位置
<戻り値>
なし
<呼び出し元>
Describe_Proc();
public
void MouseEvent(long Trig, long Btn, short x, short y);
<説明>
マウスイベントが発生した場合に、押されたボタンに応じて処理を行う。
<引数>
Trig:マウスを押したか離したか
Btn:押されたボタンの種類
x,y:マウス位置
<戻り値>
なし
<呼び出し元>
Describe_Proc();
public
void ChangeViewX();
void ChangeViewY();
void ChangeViewZ();
void ChangeViewXYZ();
<説明>
X/Y/Z軸上または鳥瞰での視点に切り替える。
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
WSCbool ChangeViewUP();
WSCbool ChangeViewDown();
WSCbool ChangeViewLeft();
WSCbool ChangeViewRight();
<説明>
Ctrl + 上下左右矢印キーで15degづつBODYを回転させる。
<引数>
なし
<戻り値>
True : Ctrlキーが押されていない場合
False : Ctrlキーが押されている場合
<呼び出し元>
Kodatuno_Win_Proc();
public
void FitView();
<説明>
倍率をデフォルトに戻す。
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void SolidView();
void NoEdgeView();
void WireFlameView();
void VoidView();
<説明>
BODYのソリッド表示/ワイヤーフレーム表示/非表示を切り替える。
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void SelectAll()
<説明>
全てセレクト状態にする
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void SelectionCancel();
<説明>
エンティティがセレクション状態にある場合は、セレクションを全て解除する。
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void ViewBlending();
<説明>
BODYを半透明にする.
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void DeleteBody();
<説明>
選択されているBODYを消去。
<引数>
なし
<戻り値>
なし
<呼び出し元>
Menu_Proc();
public
void OpenDelBtn();
<説明>
Open,Deleteボタンの表示属性の変更
<引数>
なし
<戻り値>
なし
<呼び出し元>
Menu_Proc();
public
void ExecuteUserFuncMain(int val);
<説明>
User関数を実行する。
<引数>
val:Userに割り当てられたボタンのどのボタンが押されたかを表すシンボル
<戻り値>
なし
<呼び出し元>
Menu_Proc();
public
void AcceptUserStat(int Mode,double Prop[15]);
<説明>
Userステータスダイアログの設定値を認識する。
<引数>
Mode:mode1〜mode15までの番号
Prop[15]:15個のプロパティ値
<戻り値>
なし
<呼び出し元>
UserStatDlg_Proc();
public
void UserViewCanncel();
<説明>
User関数実行によって描画された画像を消去する
<引数>
なし
<戻り値>
なし
<呼び出し元>
ChangeView_Proc();
public
void SetModelScale();
<説明>
最適モデルスケールを取得する。
<引数>
なし
<戻り値>
なし
public
void GetModelScale()
<説明>
モデルスケールを取得する。
<引数>
なし
<戻り値>
なし
public
void SetTolerance()
<説明>
トレランス値をセットする。
<引数>
なし
<戻り値>
なし
public
void GetTolerance()
<説明>
トレランス値を取得する。
<引数>
なし
<戻り値>
なし
public
void GenSurface(Coord Axis, double Ang, int Flag);
<説明>
・セレクションされているNURBS曲線に対して、任意軸回りに任角度だけ回転させたNURBS曲面を生成する。
・セレクションされているNURBS曲線に対して、任意軸方向に任意長さだけスイープさせたNURBS曲面を生成する。
<引数>
Axis:回転中心となる軸を指定
Ang:回転角度[deg]
Flag:回転サーフェス(Flag = ROTSURF) or スィープサーフェス(Flag = SWEEPSURF)を指定する
<戻り値>
なし
<呼び出し元>
RotSurfDlg_Proc();
public
int GenNurbsCurve(int Val, char *Fname, int M);
<説明>
Inputファイル(点列)を読み込み、指定した生成方法を用いてNURBS曲線を生成する。
<引数>
Val:NURBS曲線の生成方法を示すシンボル
*Fname:Inputファイル名
M:生成するNURBS曲線の階数
<戻り値>
NURBS曲線の生成に成功:KOD_TRUE
Inputファイルの読み込みに失敗した:KOD_ERR
Inputファイルに記述されている点の数がCTLPNUMMAXを超えている:KOD_ERR
<呼び出し元>
NurbsCDlg_Proc();
public
int GenNurbsSurface(int Val, char *Fname, int M);
<説明>
Inputファイル(点列)を読み込み、指定した生成方法を用いてNURBS曲面を生成する。
<引数>
Val:NURBS曲面の生成方法を示すシンボル
*Fname:Inputファイル名
M:生成するNURBS曲面の階数
<戻り値>
NURBS曲面の生成に成功:KOD_TRUE
Inputファイルの読み込みに失敗した:KOD_ERR
Inputファイルに記述されている点の数がCTLPNUMMAXを超えている:KOD_ERR
<呼び出し元>
NurbsCDlg_Proc();
public
BODY *SearchBodyList(BODYList *BodyList, int Key);
<説明>
セレクションされているBODYの実体を得る
<引数>
*BodyList:サーチしたいBODYのリストを指定
Key:サーチしたいBODY番号を指定
<戻り値>
BODYへのポインタ
public
void GetSurfInfo(void);
<説明>
選択されている曲面の情報をコンソール出力する
<引数>
なし
<戻り値>
なし
public
void ChangeRank(int Newrank[2]);
<説明>
選択されている曲面のRankを変更する
<引数>
Newrank[2]:変更後のu方向,v方向ランク
<戻り値>
なし
public
void ChangeBackColor(double rgb[3]);
<説明>
背景の色を変更する
<引数>
rgb[3]:変更後の色をrgbで指定
<戻り値>
なし
private
void Describe_Main();
<説明>
BODY描画メイン。
<引数>
なし
<戻り値>
なし
private
void DrawBODY();
<説明>
BODYの描画をする。
<引数>
なし
<戻り値>
なし
private
void DrawAxis(double Ascale,double Mscale);
<説明>
軸を描画する。
<引数>
Ascale:軸のスケール
Mscale:モデルスケール
<戻り値>
なし
private
void DrawRubberband(double sx,double sy,double ex,double ey);
<説明>
ラバーバンドを描画する。
<引数>
sx,sy:矩形の開始位置座標(sx,sy)
sx,sy:矩形の終了位置座標(ex,ey)
<戻り値>
なし
private
void Draw_NurbsCurve(BODY *Curr_body);
<説明>
NURBS曲線を描画する。
<引数>
*Curr_body:BODY構造体へのポインタ
<戻り値>
なし
private
void Draw_NurbsSurface(BODY *Curr_body);
<説明>
NURBS曲面を描画する。
<引数>
*Curr_body:BODY構造体へのポインタ
<戻り値>
なし
private
void Draw_TrimSurfe(BODY *Curr_body);
<説明>
トリム面を描画する。
<引数>
*Curr_body:BODY構造体へのポインタ
<戻り値>
なし
private
void UVWireView();
<説明>
UVパラメータで分割されたワイヤーフレームを表示する。
<引数>
なし
<戻り値>
なし
private
void SetOpenGLStat();
<説明>
OpenGLを初期化する。
<引数>
なし
<戻り値>
なし
private
void SetModelScale();
<説明>
最適モデルスケールを取得する。
<引数>
なし
<戻り値>
なし
private
void DoSelect(int x,int y);
<説明>
セレクション(マウスピッキング)を設定する。
<引数>
x,y:セレクション時に取得する座標値(x,y)
<戻り値>
なし
private
void ClearSeldEntList();
<説明>
セレクションリスト及びOBJECTを初期化する。
<引数>
なし
<戻り値>
なし
private
void DeleteBodySub(BODY *body,int n);
<説明>
選択されているBODYを消去する(Sub)。
<引数>
*body:BODY構造体へのポインタ
n:bodyの番号
<戻り値>
なし
private
void ClickPicking(Gluint SelectBuf[],int hits);
<説明>
クリックによるマウスピッキングをする。
<引数>
SelectBuf[]:セレクションバッファ
hits:ヒットした数
<戻り値>
なし
private
void DragPicking(Gluint SelectBuf[],int hits);
<説明>
ドラッグによるマウスピッキングをする。
<引数>
SelectBuf[]:セレクションバッファ
hits:ヒットした数
<戻り値>
なし
private
int ObjSelect(GLuint SelectBuf[],int hits);
<説明>
オブジェクトの選択判別する(デプス値が一番小さいオブジェクトを取得する)。
<引数>
SelectBuf[]:セレクションバッファ
hits:ヒット数
<戻り値>
デプス値が一番小さいオブジェクト
private
int AddEntSymbolToObj();
<説明>
OBJECT構造体に何番目の曲線or曲面かの情報を付加する。
<引数>
なし
<戻り値>
成功:KOD_TRUE
失敗:KOD_FALSE
private
void InitCmdFlags();
<説明>
Cmd用フラグを全てKOD_FALSEに初期化する。
<引数>
なし
<戻り値>
なし
private
void SetNewObject(int BodyNum,int TypeNum,int NumNum);
<説明>
ピックされたオブジェクトをOBJECTリストに登録する。
<引数>
BodyNum:BODYオブジェクトの番号
TypeNum:エンティティタイプのシンボル
NumNum:Typeにおける要素番号
<戻り値>
なし
■変数(Class KODatUNO)
public
int UVWireFlameViewFlag; UVワイヤーフレーム表示フラグ
private
USER User; ユーザークラス
BODYListBodyList; BODYリストの操作用インスタンス
OBJECTList SeldEntList; セレクションされたエンティティを逐次格納していくリスト
CommandMap CmdMap[COMMANDNUMMAX]; コマンドマップ
intConsoleCharNum; コンソールに入力されている全ての文字数を保持
int Focus_Body; 選択中のBodyを表す値
QUATERNION QFunc; クォータニオンのインスタンス
double RotMx[TMATELEMNUM]; クォータニオン→同時変換マトリックス
Quat StartQ; 右クリックした瞬間の回転角を格納するクォータニオン
Quat TargetQ; ぐりぐりやっている途中のクォータニオン
double ModelScale; 現在のモデルスケール
double ModelScale1st; モデルスケールの初期値
double Tolerance; NURBSを表現する時の面の粗さ
double Trl[3]; 平行移動量
int Vp[4]; ビューポイント
double AxisScale; 軸描画のスケール
int OpenGLInitFlag; OpenGL初期設定済みフラグ
int ExecUserFuncFlag[USERFUNCNUMMAX]; UserFunc描画フラグ
int ExecUserCommandFlag[USERCOMMANDNUM]; UserCommand描画フラグ
int DoSelectFlag; セレクション実行フラグ
int SweepSelectFlag; スイープセレクションを開始したことを示すフラグ
int ScreenHeight; デフォルトスクリーンの高さ
int ScreenWidth; デフォルトスクリーンの幅
int StartX; ドラッグ開始位置X
int StartY; ドラッグ開始位置Y
int OldPosX; ウィンドウ再描画直前のX座標
int OldPosY; ウィンドウ再描画直前のY座標
int CurrentX; ドラッグ中の位置X
int CurrentY; ドラッグ中の位置Y
int LBtnFlag; 左クリックしたことを示すフラグ
int RBtnFlag; 右クリックしたことを示すフラグ
int MBtnFlag; 中クリックしたことを示すフラグ
int ShiftKeyFlag; Shiftキーを押したことを示すフラグ
int CtrlKeyFlag; Ctrlキーを押したことを示すフラグ
int AltKeyFlag; Altキーを押したことを示すフラグ
int SolidViewFlag; ソリッド表示フラグ
int EdgeViewFlag; エッジ表示フラグ
int WireFlameViewFlag; ワイヤーフレーム表示フラグ
int BlendViewFlag; 半透明表示フラグ
int DrawBODYFlag; BODY描画フラグ
int DrawSurfFlag; Surface描画フラグ
int ReDrawBODYFlag; BODY描画1発目を示すフラグ
GLuint SelectBuf[MAXSELECT]; セレクトバッファ
int argc; コマンド引数
char *argv[MAXCOMMANDOPNUM]; コマンド引数
char CmdStack[HISTORYNUMMAX][256]; コマンド履歴
int CmdStackNum; コマンド履歴数
int CmdStackNow;
■グローバル変数
extern KODatUNO Kodatuno; KODatUNOクラス唯一のオブジェクト
■グローバル関数
Kodatunoシステムコマンドを登録
void CmdVerInf(int,char *[]); コマンド(バージョン情報出力)
void CmdFileOpen(int,char *[]); コマンド(ファイルオープン)
void CmdUVWire(int,char *[]); コマンド(UVワイヤーフレーム表示)
void CmdChScale(int,char *[]); コマンド(スケール変更)
void CmdGenRotSurf(int,char *[]); コマンド(回転サーフェス生成)
void CmdGenSweepSurf(int,char *[]); コマンド(スイープサーフェス生成)
void CmdGenNurbsCurve(int,char *[]); コマンド(Nurbs曲線生成)
void CmdGenNurbsSurface(int,char *[]); コマンド(Nurbs曲面生成)
void CmdChTolerance(int,char *[]); コマンド(トレランス変更)
void CmdMoveBody(int,char *[]); コマンド(BODYの平行移動)
void CmdRotateBody(int ,char *[]); コマンド(BODYの回転)
void CmdCPView(int ,char *[]); コマンド(コントロールポイント描画)
void CmdSurfInfo(int,char *[]); コマンド(曲面情報を出力)
void CmdExpand(int,char *[]); コマンド(BODYの拡大)
<説明>
各種コマンド処理
<引数>
argc : コマンド引数の数
*argv[] : コマンド引数文字列
<戻り値>
なし
【Command.h】
コマンドの登録、コマンド解析に関するライブラリを提供します。
■シンボル
#define MAXCOMMANDLEN 16 コマンド文字数の最大値
#define MAXCOMMANDOPNUM 5 登録できるコマンドオプション数
#define COMMANDNUMMAX 200 登録できるコマンド数
#define SYSCOMMANDNUM 100 Kodatunoがあらかじめ用意するコマンドの最大値(0-99)
#define USERCOMMANDNUM 100 ユーザーが独自に登録できるコマンドの最大値(100-199)
■インクルードライブラリ
<WSClistData.h>
"StdAfx.h"
■型定義
<コマンド用構造体>
typedef struct{
char Name[MAXCOMMANDLEN]; コマンド名
char Op[MAXCOMMANDOPNUM]; オプション名
int CmdNo; キー
void (*Command)(int,char *[]); コマンド実行関数へのポインタ
}CommandMap;
■クラス
なし
■関数(Global)
void SetCmdList(CommandMap *CmdMap,char *name,char *op,int key,void (*Cmd)(int,char *[]));
<説明>
コマンドを追加する。
<引数>
*CmdMap:コマンド情報を格納する構造体へのポインタ
*name:コマンド名
*op:コマンドオプション名
key:コマンドを代表する値(0〜99:Kodatunoが使用、100〜199:Userに割り当て)
(*Cmd)(int,char *[]):実行されるコマンドの関数へのポインタ
<戻り値>
なし
int AnalCommandLine(char *str,char *argv[]);
<説明>
コマンドを解析する。
<引数>
*str:コマンドラインの文字数
*argv[]:分解した文字列を格納
<戻り値>
コマンドライン引数の数
int SearchRegdCmdNum(CommandMap *CmdMap,char *cmd);
<説明>
引数で指定したコマンドの登録Noを調べる。
<引数>
*CmdMap:コマンドマップ
*cmd:コマンド名
<戻り値>
コマンドの登録No(失敗:KOD_ERR)