C++/Tk/バグ対応/coordsの取得時
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
''[[C++/Tk/バグ対応]]''
* C++/Tkで、coordsの取得時にエラーとなる [#z8b45d22]
今回は以下のように、アイテムの持つ座標を取得しようとした...
Box coords( ".c" << coords( active ) );
コンパイルは通るが実行時エラーとなる。~
原因はTcl_GetIntFromObj()の失敗である。~
APIにおいて、Tclコマンド実行結果としてのオブジェクトから...
まったく同じ原因によって、例えばcanvasx(y)でも実行時エラ...
//int cx = ( ".c" << canvasx( vd_x, GRID_H ) ); ...
//int cy = ( ".c" << canvasy( vd_y, GRID_V ) ); ...
double cx = ( ".c" << canvasx( vd_x, GRID_H ) ); ...
double cy = ( ".c" << canvasy( vd_y, GRID_V ) ); ...
これらのTclコマンドは実数型を戻し、APIの方で整数型に対応...
開発環境に依存した問題かも知れないが、いずれにせよ対応は...
きれいに解決するのであればdouble版のBox構造体を用意する等...
** 制約事項 [#pacc9c63]
cpptk-1.0.2およびboost_1_34を使用。~
~
~
ファイル名:cpptkbase.cc L:571~
/* This is OK for me ***********************************...
details::Expr::operator Tk::Box() const
{
string ret(cmd_->invoke());
if (ret.empty())
{
return Tk::Box(0, 0, 0, 0);
}
int len = getResultLen();
if (len < 4)
{
throw TkError("Cannot convert the result list t...
}
// int x1 = getResultElem<int>(0); ...
// int y1 = getResultElem<int>(1); ...
// int x2 = getResultElem<int>(2); ...
// int y2 = getResultElem<int>(3); ...
// ...
// return Box(x1, y1, x2, y2); ...
int x1 = (int)(getResultElem<double>(0) + 0.5); ...
int y1 = (int)(getResultElem<double>(1) + 0.5); ...
int x2 = (int)(getResultElem<double>(2) + 0.5); ...
int y2 = (int)(getResultElem<double>(3) + 0.5); ...
...
return Box(x1, y1, x2, y2); ...
}
//*This is OK for me ***********************************...
*** 修正履歴 [#vce4ef7b]
~
*** 課題 [#sc4098cb]
~
-備考~
どうなんすかねぇ〜。~
Tcl_GetDoubleFromObj()とTcl_GetIntFromObj()のどちらを使う...
*** 参考ページ [#b6f99754]
[[C++/Tk:http://cpptk.sourceforge.net/]]~
[[Tcl API一気に流し読み:http://www.geocities.co.jp/Silico...
終了行:
''[[C++/Tk/バグ対応]]''
* C++/Tkで、coordsの取得時にエラーとなる [#z8b45d22]
今回は以下のように、アイテムの持つ座標を取得しようとした...
Box coords( ".c" << coords( active ) );
コンパイルは通るが実行時エラーとなる。~
原因はTcl_GetIntFromObj()の失敗である。~
APIにおいて、Tclコマンド実行結果としてのオブジェクトから...
まったく同じ原因によって、例えばcanvasx(y)でも実行時エラ...
//int cx = ( ".c" << canvasx( vd_x, GRID_H ) ); ...
//int cy = ( ".c" << canvasy( vd_y, GRID_V ) ); ...
double cx = ( ".c" << canvasx( vd_x, GRID_H ) ); ...
double cy = ( ".c" << canvasy( vd_y, GRID_V ) ); ...
これらのTclコマンドは実数型を戻し、APIの方で整数型に対応...
開発環境に依存した問題かも知れないが、いずれにせよ対応は...
きれいに解決するのであればdouble版のBox構造体を用意する等...
** 制約事項 [#pacc9c63]
cpptk-1.0.2およびboost_1_34を使用。~
~
~
ファイル名:cpptkbase.cc L:571~
/* This is OK for me ***********************************...
details::Expr::operator Tk::Box() const
{
string ret(cmd_->invoke());
if (ret.empty())
{
return Tk::Box(0, 0, 0, 0);
}
int len = getResultLen();
if (len < 4)
{
throw TkError("Cannot convert the result list t...
}
// int x1 = getResultElem<int>(0); ...
// int y1 = getResultElem<int>(1); ...
// int x2 = getResultElem<int>(2); ...
// int y2 = getResultElem<int>(3); ...
// ...
// return Box(x1, y1, x2, y2); ...
int x1 = (int)(getResultElem<double>(0) + 0.5); ...
int y1 = (int)(getResultElem<double>(1) + 0.5); ...
int x2 = (int)(getResultElem<double>(2) + 0.5); ...
int y2 = (int)(getResultElem<double>(3) + 0.5); ...
...
return Box(x1, y1, x2, y2); ...
}
//*This is OK for me ***********************************...
*** 修正履歴 [#vce4ef7b]
~
*** 課題 [#sc4098cb]
~
-備考~
どうなんすかねぇ〜。~
Tcl_GetDoubleFromObj()とTcl_GetIntFromObj()のどちらを使う...
*** 参考ページ [#b6f99754]
[[C++/Tk:http://cpptk.sourceforge.net/]]~
[[Tcl API一気に流し読み:http://www.geocities.co.jp/Silico...
ページ名: