Re: FGMOVA ( No.1 ) |
- 日時: 2010/08/25 09:30
- 名前: GEOSISサポート
- nakano10様
FGMOVAコマンドはマウス操作による図形編集コマンドですので、申し訳御座いませんがクリックせずにコマンドを終了する事は出来ません。
回転中心座標と回転角度が分かる場合は以下の公式で回転後の座標を求める事が出来ます。 回転中心座標をCX、CY、回転角度をθ、回転前の座標をX1、X2、回転後の座標をX、Yとします。
X = (X1 - CX) × cosθ - (Y1 - CY) × sinθ + CX Y = (X1 - CX) × sinθ + (Y1 - CY) × cosθ + CY
上記公式を使用し、以下の流れで1点ずつ座標値を更新します。 1.FGGTOAコマンド等で、FGMOVAに渡している図形の全点情報中間ファイルを作成 2.FGSEEKコマンドで、1で作成した中間ファイルのカレントレコードを先頭に設定 3.FGGETINFOコマンドで、1で作成した中間ファイルの1レコードの座標値を取得 4.上記公式により回転後の座標値を計算 5.FGMODXYコマンドで、1で作成した中間ファイルのカレントレコードの座標値を更新 6.FGSEEKコマンドで、1で作成した中間ファイルのカレントレコードを次レコードに移動 7.3からの処理をループ
|
Re: FGMOVA ( No.2 ) |
- 日時: 2010/08/25 11:56
- 名前: nakano10
- ご回答ありがとうございます
おかげさまで意図することはできたのですが、いささか重い処理になってしまいました。 (FGMOVAで約10秒のところ、代替処理は約250秒) これを改善するためFGEXOPEN〜FGEXCLOSE系の処理に書き直してみましたが、更新がうまくいきませんのでご指導を賜りたく存じます。
<ソース> georet = gexec(argGEO, "FGGTOA", argChukanF, "COORDALL") georet = gexec(argGEO, "FGEXOPEN", "COORDALL 0") georet = gexec(argGEO, "FGEXINFO", "RECNUM 0") rCnt = argGEO.ReturnL1 For i = 1 To rCnt georet = gexec(argGEO, "FGEXGET", i, 0) georet = gexec(argGEO, "FGEXINFO", "COORD 0") X1 = argGEO.ReturnD1 Y1 = argGEO.ReturnD2 X = (X1 - argCX) * Cos(lclRad) - (Y1 - argCY) * Sin(lclRad) + argCX Y = (X1 - argCX) * Sin(lclRad) + (Y1 - argCY) * Cos(lclRad) + argCY georet = gexec(argGEO, "FGEXSET", "COORD", X, Y) georet = gexec(argGEO, "FGEXPUT", i, 0) Next georet = gexec(argGEO, "FGEXCLOSE", 0, "ON")
|
Re: FGMOVA ( No.3 ) |
- 日時: 2010/08/25 14:58
- 名前: GEOSISサポート
- nakano10様
添付頂いたソースでは、中間ファイル内の図形の座標値は更新されますが、実際の図形の座標値は更新されません。 実際の図形の座標値を変更するにはFGMODXYコマンドを使用する必要が御座います。
FGEXOPEN等を御使用になられる場合は以下の様にされてみては如何でしょうか。 1.添付ソースの処理で変換した座標値を配列等に保管する(レコード順に対応するように格納します) 2.FGSEEKコマンドで、COORDALL中間ファイルのカレントレコードを先頭に移動 3.FGMODXYコマンドで、COORDALL中間ファイルのカレントレコードの図形の座標値を変更 変更後の座標値は1で取得した座標値を用います 4.FGSEEKコマンドで、COORDALL中間ファイルのカレントレコードを次レコードに移動 5.3からの処理をループ
※FGEXOPEN〜FGEXCLOSEの間にFGMODXYコマンドを実行する事は出来ませんので御注意下さい。
また、編集対象の図形が同一図面グループの場合は、図形の登録及び削除で同様の事が行えます。 但し、編集対象図形にグループ図形を含まない事が前提となります。 1.添付ソースの処理を行う 2.FGINPUTコマンドで、COORDALL中間ファイルを登録 3.FGDELEコマンドで、argChukanF中間ファイル内の図形を削除
|
Re: FGMOVA ( No.4 ) |
- 日時: 2010/08/25 17:35
- 名前: nakano10
- ご回答ありがとうございます
前者の方法は、FGGETINFOをしないで済む分高速化され、約190秒になりました。 後者の方法は、回転後もargChukanFを保持したいためFGINPUT、FGDELEに加えてFGGETFIGも行いましたが約20秒でした。 幸いグループ図形がないので後者で対策します、どうもありがとうございました。
|
|