ようこそゲストさん | ログイン |

掲示板

トップページ > 記事閲覧
FGMOVA
日時: 2010/08/24 20:07
名前: nakano10

このたびはお世話になります

FGMOVAにて回転を試みております、回転中心座標、回転角度を引数に与えることによりユーザー操作は介入しないことを意図しておりますが、
どうしてもGEOSIS上の任意の位置をクリックしないとFGMOVAが完了しない状態になっています、クリックせずに完了させる方法はございますか?

<開発環境>
VB6.0SP6
GEOSIS-OCX Version 6.091113

<コマンド例>
"FGMOVA", "ROTTMP", "ROT", 10, 10, "GRP", 30 * 3.141592653 / 180, "!", "OFF"
メンテ

Page: 1 |

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秒でした。
幸いグループ図形がないので後者で対策します、どうもありがとうございました。
メンテ

Page: 1 |



| 利用規約 |

(C) 2024 AS Locus INC.