Sds setcallbackfunc
- 構文
- int sds_setcallbackfunc (int [int flag, void *arg1, void *arg2, void *arg3]);
- 機能
- IntelliCADコマンドからのコールバックを遮って、指定した機能に送る。
- 引数
-
- flag : コールバックの種類。
- *arg1 : コールバックの内容による。
- *arg2 : コールバックの内容による。
- *arg3 : コールバックの内容による。
- 戻り値
- それぞれ。
- サンプル
- erase コマンドをトラップする関数 cbfunc を作成した場合のサンプル
- 以下のように指定してロードする。
sds_setcallbackfunc(cbfunc);
- ロード以降は、IntelliCADからのコールバックは、cbfunc を通過することになる。
- erase コマンドが実行された時の処理の例は以下のようになる。
int cbfunc(int flag,void *arg1,void *arg2,void *arg3) { int res = RTNORM; switch (flag) { // Command Start/End. case SDS_CBCMDBEGIN: // SDS_CBCMDBEGIN は arg1="command name" cast as (char *) // Callback return RTERROR will cause command to not be called. // コマンドが呼び出されない場合、コールバックは RTERROR を返すはずである。 // 例えば、erase コマンドを動かなくしてユーザーが図形を // 消すことを防ぎたければ、以下のコードのようになる: if (!stricmp(arg1, "erase")) res = RTERROR; break; case default: break; } return res; }
- 上記のコメントが示すように、erase コマンドの実行で RTERROR のコールバックが返る事で、IntelliCAD からの erase コマンド実行をトラップして異なるアクション(RTERRORを返す)になったことがわかる。
- コールバックフラグの種類(IJCAD7のSDS.Hから抜粋)
// コマンド Start/End. SDS_CBCMDBEGIN 0 // arg1="command name" cast as (char *) // Callback return RTERROR will cause command to not be called. SDS_CBCMDEND 1 // arg1="command name" cast as (char *) // Return code does not matter. // マウスの移動とボタン. SDS_CBMOUSEMOVE 2 // arg1=X pixel arg2=Y pixel SDS_CBLBUTTONDN 3 // arg1=X pixel arg2=Y pixel SDS_CBLBUTTONUP 4 // arg1=X pixel arg2=Y pixel SDS_CBLBUTTONDBLCLK 5 // arg1=X pixel arg2=Y pixel SDS_CBRBUTTONDN 6 // arg1=X pixel arg2=Y pixel SDS_CBRBUTTONUP 7 // arg1=X pixel arg2=Y pixel // Callback return RTERROR will cause point to be ignored. // Cast arg1 and arg2 as (int*) // 選択セットの座標変換 SDS_CBXFORMSS 8 // arg1=Selection set (ok to modify) cast as (sds_name) // arg2=Transformation Matrix (ok to modify) cast as (sds_matrix) // Callback return RTERROR will stop the transformation. // Undo/Redo. SDS_CBENTUNDO 9 // arg1=Entname (ok to modify) cast as (sds_name), arg2 below defines on undo type // Callback return RTERROR will stop UNDO for this ent. SDS_CBENTREDO 10 // arg1=Entname (ok to modify) cast as (sds_name), arg2 below defines on undo type // Callback return RTERROR will stop REDO for this ent. / Undo/Redo: 成功した場合 SDS_CBENTUNDONE 44 // arg1 = ename, cast as (sds_namep), arg2 below defines on undo type, arg3 is NULL SDS_CBENTREDONE 45 // arg1 = ename, cast as (sds_namep), arg2 below defines on redo type, arg3 is NULL // Undo/Redo constants - Passed back as arg2 parameter so the user can tell what action is being undone. SDS_ADD_NOTICE 1 SDS_MODIFY_NOTICE 2 SDS_DELETE_NOTICE 3 // Palette Change. SDS_CBPALETTECHG 11 // arg1=HPALETTE cast as (HPALETTE) // ファイルの開く/閉じる/新規/保存 SDS_CBOPENDOC 12 // arg1=file name, cast as (char *) SDS_CBNEWDOC 13 // (all args NULL) SDS_CBCLOSEDOC 14 // arg1=file name, cast as (char *) SDS_CBSAVEDOC 15 // arg1= new file name, cast as (char *) // arg2= old file name, cast as (char *) // !!! See new callback SDS_CBDOCCHG below for better MDI control // Doc/View change (when the user activates a new MDI window). SDS_CBVIEWDOCCHG 16 // arg1=file name, cast as (char *) // arg2=current window HWND, cast as (HWND) // ドキュメントの変更 SDS_CBENTDEL 17 // arg1=Entname to be deleted (or undeleted), cast as (sds_name) // Callback return RTERROR will stop sds_entdel() for this ent. SDS_CBENTMAKE 18 // arg1=Entname of new entity, cast as (sds_name) SDS_CBENTMOD 19 // arg1=Entname of modified entity, cast as (sds_name) // システム変数変更 SDS_CBVARCHANGE 43 // arg1 = name of sysvar, cast as (char*); arg2 & arg3 are NULL // グリップ編集 SDS_CBGRIPEDITBEG 20 // arg1=Entname being edited, cast as (sds_name) // arg2=Point being edited, cast as (sds_point) // Callback return RTERROR will stop grip edit. SDS_CBGRIPEDITEND 21 // arg1=Entname of entity that was edited, cast as (sds_name) // arg2=Point being edited, cast as (sds_point) SDS_CBVIEWCHANGE 22 // arg1=type of paint // 1=redraw, 2=shade, 3=hide, 4=view change (zoom, vpoint, etc.) 5=regen // // Mouse movements and Mouse buttons returning current UCS cordinates // Callback return RTERROR will cause point to be ignored. SDS_CBMOUSEMOVEUCS 23 // arg1=X coord arg2=Y coord arg3=Z coord SDS_CBLBUTTONDNUCS 24 // arg1=X coord arg2=Y coord arg3=Z coord SDS_CBLBUTTONUPUCS 25 // arg1=X coord arg2=Y coord arg3=Z coord SDS_CBLBUTTONDBLCLKUCS 26 // arg1=X coord arg2=Y coord arg3=Z coord SDS_CBRBUTTONDNUCS 27 // arg1=X coord arg2=Y coord arg3=Z coord SDS_CBRBUTTONUPUCS 28 // arg1=X coord arg2=Y coord arg3=Z coord // Cast arg1 and arg2 as (int*) // Callbacks associated with painting and dragging SDS_CBBEGINPAINT 29 // no arguments SDS_CBENDPAINT 30 // no arguments SDS_CBENDMOUSEMOVE 31 // arg1=X coord arg2=Y coord arg3 = is Dragging flag // Cast arg1 and arg2 as (int*) cast arg3 as bool // ファイル変更 (ユーザが新しい MDIウィンドウをアクティブにした時) SDS_CBDOCCHG 32 // arg1=new file name, cast as (char *) // arg2=new window, cast as HWND // arg3=old window, cast as HWND // Callbacks associated with cloning SDS_CBBEGINCLONE 33 // arg1=selection set of the entities to be processed by sds-apps SDS_CBENDCLONE 34 // arg1=selection set of the entities the cloning was performed from // arg2=selection set of created objects or entity name of created block // arg3=mode(0 - arg2=selection set, 1 - agr2=block entity name) // Mouse movements and Mouse buttons. SDS_CBMBUTTONDN 35 // arg1=X pixel arg2=Y pixel // SystemMetrix(Maeda) SDS_CBMBUTTONUP 36 // arg1=X pixel arg2=Y pixel // SystemMetrix(Maeda) SDS_CBMBUTTONDNUCS 37 // arg1=X coord arg2=Y coord arg3=Z coord // SystemMetrix(Maeda) SDS_CBMBUTTONUPUCS 38 // arg1=X coord arg2=Y coord arg3=Z coord // SystemMetrix(Maeda) SDS_CBMBUTTONDBLCLK 39 // arg1=X pixel arg2=Y pixel // SystemMetrix(Maeda) SDS_CBMBUTTONDBLCLKUCS 40 // arg1=X coord arg2=Y coord arg3=Z coord // SystemMetrix(Maeda) SDS_CBRBUTTONDBLCLK 41 // arg1=X pixel arg2=Y pixel // SystemMetrix(Maeda) SDS_CBRBUTTONDBLCLKUCS 42 // arg1=X coord arg2=Y coord arg3=Z coord // SystemMetrix(Maeda) // Cast arg1 and arg2 and arg3 as (double) SDS_CBKEYDOWN 47 // arg1=virtual key code arg2=status flags // SystemMetrix(Maeda) SDS_CBKEYUP 48 // arg1=virtual key code arg2=status flags // SystemMetrix(Maeda) SDS_CBCHAR 49 // arg1=virtual key code arg2=status flags // SystemMetrix(Maeda) SDS_CBGETPOINT 50 // arg1-arg3=ucs point for getpoint function // IntelliJapan(Mimura) 2006/12/26 // 'current selection set changed' callback notification SDS_CBSSCHANGE 46 // arg1 is a changing type (add, del, free: see defines below), cast as int; // arg2 is an entity if it's added or deleted, cast as sds_namep; //arg3 is NULL // The following callback gives third-party apps access to the display buffer for the purposes // of adding their own image data as a background SDS_CBFRAMEBUFFER 98 // arg2 is the struct HDCInfo that contains the frame buffer info SDS_CB_SSMOD 0 // ss is changed somehow, e.g. several ents were added to it and/or other ones were deleted from; // note, neither SDS_CB_SSADD nor SDS_CB_SSDEL are sent if SDS_CB_SSMOD is sent SDS_CB_SSADD 1 SDS_CB_SSDEL 2 SDS_CB_SSFREE 3 // Cast arg1 and arg2 as (UINT) // SystemMetrix(Maeda)