//************************************************************************** //Skeleton of trload.dll(ワークデータ読み込み) //************************************************************************** // #include #include //外部参照(DLL)関数の定義 #ifdef __cplusplus //この分岐宣言はC言語(*.C)としてコンパイルする時は省略可 extern "C" { #endif __declspec(dllexport) void TRLOADSUFFIX(char*); __declspec(dllexport) void TRLOADINIT(int*); __declspec(dllexport) void TRLOADKIND(int*,char*); __declspec(dllexport) void TRLOADSETPARAMETER(int*); __declspec(dllexport) void TRLOADGETWORKSIZE(char*,double*,double*,double*); __declspec(dllexport) void TRLOADLOADWORK(char*,double*,int*,int*, float*,unsigned char*,int*); __declspec(dllexport) void TRLOADFREE(); #ifdef __cplusplus //この分岐宣言はC言語(*.C)としてコンパイルする時は省略可 } #endif #ifdef _WIN64 //TRYCUT3000のペン番号最大値16 #define PENMAX 16 #else //TRYCUT2000のペン番号最大値8 #define PENMAX 8 #endif //もしTRLOADPARAMETER などでダイアログを表示する場合は、以下のDllMain関数で //インスタンスをグローバル変数(hInst)に保存しておいて下さい。それ以外はDllMain関数は、 //不要です。 HINSTANCE hInst; BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD fdwReason,LPVOID lpvReserved) { hInst=hinstDll; return TRUE; } //本DLL内でのグローバル変数を定義 FILE *fp; char buf[1024]; char num[13]={"1234567890-."}; float zmin,zmax; int npbox,nmbox; double pbox[100][6],mbox[100][6],pmin[2]; unsigned char penbyte[16]={0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e, 0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e}; // //DLL内でローカルに使用する関数を記述 //(これらの関数を後ろのほうで記述する場合や、別ファイルで記述する場合は、 //それらの関数のプロトタイプ宣言を記述) void clearpen(char *topc) { *topc &= 0xf1; } void setpen(unsigned char *topc,int penno) { *topc &= 0xf1; *topc |= penbyte[penno]; } void clearpenki(unsigned char *topc) { *topc &= 0xfe; } void setpenki(unsigned char *topc) { *topc |= 0x01; } void cleardirection(unsigned char *topc) { *topc &= 0x0f; } void setdirection(unsigned char *topc,int dirno) { static unsigned char dirbyte[4]={0x00,0x30,0x10,0x20}; *topc &= 0x0f; *topc |= dirbyte[dirno]; } // //************************************************************************** //外部参照(DLL)関数の引数説明 //[I -] 入力のみ(関数内では参照するだけにして下さい) //[- O] 出力のみ(参照時は未定義になっています。必ず値を返して下さい。) //[I O] 入出力 // // //====================================================================== void TRLOADSUFFIX(char *suffix) //[- O] 拡張子文字 // 機能:対象ファイルの拡張子の定義 // 説明:TRYCUT2000起動直後の、引数解析処理前に参照されます。 // 本関数は必ず用意して下さい。 { strcpy(suffix,".BOX"); } //====================================================================== void TRLOADINIT(int *irc) //[- O] Return Code(=0:FALSE =1:TRUE) // 機能:処理の初期化 // 説明:TRYCUT2000起動時のWM_CREATE時に一度だけ参照されます。 // 作業エリアの確保などに利用しますが、特に必要ない場合は、 // 本関数自体の省略も可です。 // 初期化が正常な場合は、*irc は必ずTRUEを設定して下さい。 // 本関数省略時は、*irc=TRUE とみなします。 { *irc=TRUE; } //====================================================================== void TRLOADKIND(int *lang, //[I -] =0 標準時 =1 他言語時 char *item) //[- O] 項目名 // 機能:ファイルダイアログ内の種類の項目名定義 // 説明:TRYCUT2000起動時のWM_CREATE時に一度だけ参照されます。 // 本関数は省略不可です。 { if( *lang ) { strcpy(item,"BOX-DATA(*.BOX)"); //他言語モード(TRYCUT.MESインストール) } else { strcpy(item,"BOXデータ(*.BOX)"); //標準(日本語)モード } } //====================================================================== void TRLOADPARAMETER(int *irc) //[- O] Return Code // 機能:処理パラメータの設定 // 説明:ファイルダイアログで対象ファイルを選択後「OK」を指示 // したタイミングで参照されます。 // 処理に関連するパラメータを設定するI/Fで、ダイアログ // などを表示する処理などに利用して下さい。 // 正常な場合は、*irc は必ずTRUEを設定して下さい。 // 本関数自体は省略可で、その場合*irc=TRUE とみなします。 { *irc=TRUE; } //====================================================================== void TRLOADGETWORKSIZE(char *filename,//[I -] ファイル名 double *bmax, //[- O] ワークの最大値XY (Zは不要) double *bmin, //[- O] ワークの最小値XYZ double *wpitch //[- O] ワークのピッチ(精度) ) // 機能:ロード対象のワークサイズ取得 // 説明:ロード処理開始前に、まず確保するべきデータ領域をTRYCUT2000に認識させ、 // 必要なデータ領域を確保させるためにワークのサイズを返します。 // 指定ファイルから、ワークのサイズと必要によりピッチ(精度)を取得して // 設定して下さい。ワークのピッチ(*wpitch)を未定義(=0.0)にした場合は、 // TRYCUT2000側が指定規準に従って自動的に決定します。 // 本関数は省略不可です。 { int i; char *cp; npbox=nmbox=0; fp=fopen(filename,"rb"); while(fgets(buf,sizeof(buf),fp) ) { if( !strnicmp(buf,"+BOX",4) ) { cp=strpbrk(&buf[5],num); for(i=0;i<6;i++) { pbox[npbox][i]=atof(cp); if( i == 5 ) break; cp=strpbrk(cp," , "); cp=strpbrk(cp,num); } npbox++; } else if( !strnicmp(buf,"-BOX",4) ) { cp=strpbrk(&buf[5],num); for(i=0;i<6;i++) { mbox[nmbox][i]=atof(cp); if( i == 5 ) break; cp=strpbrk(cp," , "); cp=strpbrk(cp,num); } nmbox++; } } fclose(fp); bmax[0]=bmax[1]=-999999.0; bmin[0]=bmin[1]=bmin[2]= 999999.0; for(i=0;i 0 ) { for(k=0;k= pbox[k][4] && y <= pbox[k][1] ) { for(i=0;i<(*xmax);i++) { x=pmin[0]+i*(*wpitch); if( x >= pbox[k][3] && x <= pbox[k][0] ) { top[i+j*(*xmax)]=pbox[k][2]; setpen(&topc[i+j*(*xmax)],l); } } } } l++; if( l == PENMAX ) l=1; } } //-BOX SET if( nmbox > 0 ) { for(k=0;k= mbox[k][4] && y <= mbox[k][1] ) { for(i=0;i<(*xmax);i++) { x=pmin[0]+i*(*wpitch); if( x >= mbox[k][3] && x <= mbox[k][0] && top[i+j*(*xmax)] <= mbox[k][2] ) { top[i+j*(*xmax)]=mbox[k][5]; setpen(&topc[i+j*(*xmax)],l); } } } } l++; if( l == PENMAX ) l=1; } } } //====================================================================== void TRLOADFREE() // 引数なし // 機能:作業エリアの開放など // 説明:TRYCUT2000終了時のWM_DESTROYイベント発生時に参照されます。 // TRLOADINITなどで作業エリアを確保している場合などに、 // その作業エリアの開放(FREE)のために利用します。本関数は省略可です。 { }