スクリプトによるベクター選択状態の解除
PC-Mappingは、[選択]-[個別選択]-[ポリゴン選択]等により、マウス左クリックで選択、マウス右クリックで選択解除が行えます。
しかし、マウス左クリックで選択解除だけを行う機能はありません。
ここでは、PcmAutoPcmDocClass:DoTrack()メソッドの使用例として、マウス左クリックで選択解除を行うスクリプトをご紹介します。
なお、ここでは行いませんが、PcmAutoPcmDocClass:DoTrackEx()メソッドを使用すれば、マウス中ボタンで領域を選択して選択解除する機能を追加する事も可能です。
- ■ サンプル
サンプル[script49.zip(約37KB)]をダウンロードする
 | sample.pcm | :サンプルプロジェクト |
- ■ 準備
-
- ダウンロードしたファイルを解凍します。
ここでは、「C:\sample\script49」とします。
- PC-Mappingを起動します。
- 「C:\sample\script49\sample.pcm」を開きます。
- [プロジェクト]-[プロジェクトエキスパート]から「スクリプト」パネルを開きます。
- 「スクリプト」パネルは、ウィンドウ右下の角をドラッグ&ドロップする事で、広げる事ができます。
「スクリプト」パネルが見にくければ、【編集>>】ボタンをクリックし、スクリプトエディターで開く事ができます。
- ■ 解説
-
- 要点1
- function pcmunselvec()
本スクリプトは、プロジェクトに埋め込む事で、「pcmunselvec」コマンドとして実行できるようにしています。
- 要点2
- var sTime = pcmGetTimeNowStr();
83行目にあるpcmGetTimeNowStr()関数を実行しています。
AppClass:CreateDateTime()メソッドで日付時刻型オブジェクトを取得、PcmAutoDateTimeClass:SetCurrentTime()メソッドで現在の時刻を設定し、PcmAutoDateTimeClass:GetString()メソッドで「2」を指定して時刻フォーマットタイプ「15:23:45」の文字列を取得しています。
- 要点3
- while(true){
var temp = sb.SetText(0, "個別要素選択解除中... 左(解除) 右(終了)", 0);
var temp = doc.DoTrack(0, ap);
while(true)文で無限ループしながら、PcmAutoPcmDocClass:DoTrack()メソッドを実行しています。
マウス入力待ちになりますので、マウス左ボタンをクリックすると、その位置の座標点をap(座標点配列オブジェクト)に保存します。
マウス右ボタンをクリックすると、その位置の座標点はap(座標点配列オブジェクト)に保存されません。
無限ループの扱いには注意して下さい。
無限ループを抜ける処理がなければ、スクリプトは終了しません。
WindowsタスクマネージャーからPC-Mappingを強制終了して下さい。
- 要点4
- if(ap.GetNum() == 1){
var id = lyr.FindByPos(type, ap.GetPos(0, 0, coord), ap.GetPos(0, 1, coord), coord);
if(id != 0){
var temp = lyr.MarkItem(type, id, false);
var temp = doc.Repaint();
}else{
var temp = sb.SetText(0, "検索要素が見つかりません", 255);
Sleep(1000);
}
}else{
break;
}
PcmAutoArrayPosClass:GetNum()メソッドでap(座標点配列オブジェクト)の数を取得します。
1点であれば、マウス左ボタンをクリックした事になります。
PcmAutoPcmLayerClass:FindByPos()メソッドでその座標点からベクターを検索し、ベクターの内部IDを返します。
「0」でなければ、PcmAutoPcmLayerClass:MarkItem()メソッドでそのベクターの選択状態を解除します。
「0」であれば、「検索要素が見つかりません」とステータスバーに1秒間表記します。
1点以外であれば、break;で無限ループを抜けます。
- ■ 実行
-
- ベクターウィンドウをアクティブにします。
- コマンドラインバーが表示されているか確認します。
表示されていなければ、[ワークスペース]-[コマンドバー]-[コマンドラインバー]を実行します。
- コマンド「pcmunselvec△3」と記述し、実行します(アルファベットは半角小文字、△は半角スペース、数字は半角)。
パラメーター「3」はベクター要素番号で「ポリゴン」を示します。
パラメーターを「1」にすれば「アーク」、「2」にすれば「ノード」、「4」にすれば「ポイント」を指定できます。
- すると、マウス入力待ちになり、PC-Mappingウィンドウ左下のステータスバーに「個別要素選択解除中... 左(解除) 右(終了)」と表記されます。
- 選択されているポリゴン(青丸)をマウス左ボタンでクリックします。
- すると、スナップしたポリゴンの選択状態が解除されます。
スナップしたポリゴンが見つからなければ、PC-Mappingウィンドウ左下のステータスバーに「検索要素が見つかりません」と表記されます。
- マウス右ボタンをクリックすると、処理を終了します。
- ■ エラーメッセージ
- エラーメッセージは、[アウトプットバー]-[メッセージ]パネルに出力しています。
「現状、実行できません」と出力される場合「パラメーターを設定しているか」「プロジェクトを読み込んでいるか」「ベクターウィンドウがアクティブか」、「失敗しました」と出力される場合「前景レイヤーの座標系がペーパー座標系、直角座標系、緯経度座標系のどれかか」をご確認下さい。
|