//************************************************************************** //Skeleton of trsave.dll(ワークデータ保存) //************************************************************************** // #include #include #include #include #include //外部参照(DLL)関数の定義 #ifdef __cplusplus //この分岐宣言はC言語(*.C)としてコンパイルする時は省略可 extern "C" { #endif __declspec(dllexport) void TRSAVESUFFIX(char*); // __declspec(dllexport) void TRSAVEINIT(int*); __declspec(dllexport) void TRSAVEKIND(int*,char*); // __declspec(dllexport) void TRSAVEPARAMETER(int*); __declspec(dllexport) void TRSAVEGETSAVELEVEL(int*); __declspec(dllexport) void TRSAVESAVEWORK(char*,double*,double*,double*, int*,int*,float*,unsigned char*,int*); // __declspec(dllexport) void TRSAVEFREE(); #ifdef __cplusplus //この分岐宣言はC言語(*.C)としてコンパイルする時は省略可 } #endif //もしTRSAVEPARAMETER などでダイアログを表示する場合は、以下のDllMain関数で //インスタンスをグローバル変数(hInst)に保存しておいて下さい。それ以外はDllMain関数は、 //不要です。 HINSTANCE hInst; BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD fdwReason,LPVOID lpvReserved) { hInst=hinstDll; return TRUE; } //本DLL内でのグローバル変数を定義 // #define ASCII_SUFFIX ".asc" // Ascii File Suffix int g_lang; //DLL内でローカルに使用する関数を記述 //(これらの関数を後ろのほうで記述する場合や、別ファイルで記述する場合は、 //それらの関数のプロトタイプ宣言を記述) void ShowMessage(LPCTSTR szMess); //************************************************************************** //外部参照(DLL)関数の引数説明 //[I -] 入力のみ(関数内では参照するだけにして下さい) //[- O] 出力のみ(参照時は未定義になっています。必ず値を返して下さい。) //[I O] 入出力 // // //====================================================================== void TRSAVESUFFIX(char *suffix) //[- O] 拡張子文字 // 機能:対象ファイルの拡張子の定義 // 説明:TRYCUT2000起動直後の、引数解析処理前に参照されます。 // 本関数は必ず用意して下さい。 { strcpy(suffix, ASCII_SUFFIX); } //====================================================================== /* void TRSAVEINIT(int *irc) //[- O] Return Code(=0:FALSE =1:TRUE) // 機能:処理の初期化 // 説明:TRYCUT2000起動時のWM_CREATE時に一度だけ参照されます。 // 作業エリアの確保などに利用しますが、特に必要ない場合は、 // 本関数自体の省略も可です。 // 初期化が正常な場合は、*irc は必ずTRUEを設定して下さい。 // 本関数省略時は、*irc=TRUE とみなします。 // *irc=FALSEで返した場合DLLは動作しませんので、各種プロテクト処理は、 // ここで行なって下さい。 { *irc=TRUE; } */ //====================================================================== void TRSAVEKIND(int *lang, //[I -] =0 標準時 =1 他言語時 char *item) //[- O] 項目名 // 機能:ファイルダイアログ内の種類の項目名定義 // 説明:TRYCUT2000起動時のWM_CREATE時に一度だけ参照されます。 // 本関数は省略不可です。 { g_lang = *lang; strcpy(item,"Ascii File (*"); //他言語モード(TRYCUT.MESインストール) strcat(item, ASCII_SUFFIX); //標準(日本語)モード 共通 strcat(item, ")"); } //====================================================================== /* void TRSAVEPARAMETER(int *irc) //[- O] Return Code // 機能:ファイルダイアログ内の種類の項目名定義 // 説明:ファイルダイアログで対象ファイルを選択後「OK」を指示 // したタイミングで参照されます。 // 処理に関連するパラメータを設定するI/Fで、ダイアログ // などを表示する処理などに利用して下さい。 // 正常な場合は、*irc は必ずTRUEを設定して下さい。 // 本関数自体は省略可で、その場合*irc=TRUE とみなします。 { *irc=TRUE; } */ //====================================================================== void TRSAVEGETSAVELEVEL(int *savelevel) //[I -] 保存レベル =1:形状のみ // =2:ペン、ペンキ、 // 切削方向含む // =3:切削行番号含む // 機能:保存レベルを取得します // 説明:TRYCUT2000のポップアップメニューより指定する「保存レベル」を // 取得します。*savelevelの値をTRSAVESAVEWORK関数内で利用することを // 想定したものです。この値を本DLL内のグローバル変数に保存して // お使い下さい。 // 本関数は、ファイルダイアログで対象ファイルを選択後「OK」を指示した // タイミングで参照されます。本関数は参照にのみ利用するものです。 // もちろん省略可です。 { } //====================================================================== void TRSAVESAVEWORK(char *filename,//[I -] ファイル名 double *bmax, //[I -] ワークの最大値XY double *bmin, //[I -] ワークの最小値XYZ double *wpitch, //[I -] ワークのピッチ(精度) int *xmax, //[I -] X方向格子数 int *ymax, //[I -] Y方向格子数 float *top, //[I -] Z値列(X*Y個)の先頭アドレス unsigned char *topc, //[I -] 属性(PENKI,PENなど)の先頭アドレス int *topn) //[I -] 切削ブロック番号の先頭アドレス // 機能:ワークの保存 // 説明:格子毎のZ値や属性を、外部ファイルに保存します。 // 保存を目的にしたものではありますが、ワークの各種解析データを計算して // 書き出しておくことにも利用できます。 // top,topc,topnのそれぞれの連続領域は必要十分に確保されています。 // ただし、TRYCUT2000側のメモリ省略の設定により、あらかじめ topn は、NULL // が設定されている場合があります。このような場合は、保存時に参照はでき // ません。top と topcは、TRYCUT2000が正常に動作している場合は、 // 必ずNULL以外の値が設定(領域が確保)されています。本関数は省略不可です。 { char buff[256]; FILE *fn = fopen(filename, "w"); if(!fn) { if(g_lang) { strcpy(buff,"It failed in writing of the file."); //他言語モード(TRYCUT.MESインストール) } else { strcpy(buff,"ファイルの書き出しに失敗しました"); //標準(日本語)モード } ShowMessage(buff); return; } int i, j, ind; float xval, yval, zval; for(j = 0; j < *ymax; j++) { ind = *xmax * j; yval = (float)(bmin[1] + *wpitch * j); for(i = 0; i < *xmax; i++) { xval = (float)(bmin[0] + *wpitch * i); zval = top[ind + i]; fprintf(fn, "%.3f, %.3f, %.3f\n", xval, yval, zval); } } fclose(fn); } //====================================================================== /* void TRSAVEFREE() // 引数なし // 機能:作業エリアの開放など // 説明:TRYCUT2000終了時のWM_DESTROYイベント発生時に参照されます。 // TRSAVEINITなどで作業エリアを確保している場合などに、 // その作業エリアの開放(FREE)のために利用します。本関数は省略可です。 { } */ //====================================================================== void ShowMessage(LPCTSTR szMess) { MessageBox(NULL, szMess, "DmfToAscii", MB_ICONSTOP | MB_TASKMODAL); }