2017-03-16 6 views
0

私は、ESRIアドインボタン(ArcGIS 10.2およびWindows 7)で起動するウィンドウフォームを持っています。私のフォームには、マップからポイントを選択するボタンがあります。 OnMouseDownイベントを持つESRI BaseToolクラスをプロジェクトに追加しました。ArcGISのWindowsフォームからピックポイントを実行

問題は、ツールを実行することができないということです。ツールはArcGISコマンドバーにはありませんが(ボタンのように)、Find(uid)プロセスによってツールが見つかることに注意してください。

ツールが(ArcGIS Add BaseToolプロセスを使用して)プロジェクトに追加されたときに、.esriaddinxファイルが更新されませんでした。私は手動でそれをしなければならなかった。

マイアドインファイルです:

<AddIn language="CLR4.0" library="HVLR_Processing.dll" namespace="HVLR_Processing"> 
<ArcMap> 
    <Commands> 
    <Button id="RMS_HVLR_Processing_clsHVLR_Processing" class="clsHVLR_Processing" ... 
    <Tool id="HVLR_PickTool" class="clsMapPick" category="Add-In Controls" caption="" message="" tip="" image="" /> 
    </Commands> 
</ArcMap> 

clsMapClickコードがOnMouseDownイベントのが含まれています。

私は多くの方法を試してみました。私はツールを取得することができますが、私はそれを実行する(またはそれをCurrentToolに割り当てる)と何も起こりません。

UID pUID; 
ICommandItem pCmdItem; 
ICommand pCmd; 
clsMapPick pPick; 
ITool pTool; 

try 
{ 
    this.WindowState = FormWindowState.Minimized; 

    m_pApp.CurrentTool = null; 

    pUID = new UIDClass(); 
    pUID.Value = "HVLR_PickTool"; 

    pCmdItem = m_pApp.Document.CommandBars.Find(pUID, false, false); 

    if (pCmdItem != null) 
    { 
     m_pApp.CurrentTool = pCmdItem; // Nothing happens 
     m_pApp.CurrentTool.Execute(); // Nothing happens 
     m_pApp.CurrentTool.Refresh(); 
    } 
} 
catch (Exception ex) 

このツールを実行する方法を教えてもらえますか?

答えて

0

OK。大きな事故。 ESRI AddInにBaseToolを追加することはできません。それはCOMオブジェクトです。何が行われる必要があります:

  1. 新しいESRIツールクラスを作成します。

  2. mousedownイベントが発生したことを示すブール変数をクラスに追加します。

  3. OnUpdateメソッドでは、mousedownイベントが発生するまで、いくつかのコードを続行します。

  4. 「protected void On ...」と入力してOnMouseDownイベントハンドラを作成すると、itellisenseで追跡するイベントを選択できます。

  5. 実行するコードをOnMouseDownイベントハンドラに入れ、ブール値をtrueに設定します。

コード:マップ上でクリックするためのボタンが発射された形で

public class clsMapPick : ESRI.ArcGIS.Desktop.AddIns.Tool 
{ 
    private bool m_bIsFinished = false; 
    private int m_iXPixel = -1; 
    private int m_iYPixel = -1; 
    //private string m_sError = ""; 
    //private bool m_bSuccess = true; 

    public clsMapPick() 
    { 
    } 

    protected override void OnActivate() 
    { 
     base.OnActivate(); 
     return; 
    } 

    protected override void OnUpdate() 
    { 
     if (m_bIsFinished) 
     { 

      m_bIsFinished = false; 
      frmHVLR.m_dX = m_iXPixel; 
      frmHVLR.m_dX = m_iYPixel; 

     } 
    } 

    protected override void OnMouseDown(MouseEventArgs arg) 
    { 
     base.OnMouseDown(arg); 

     m_iXPixel = arg.X; 
     m_iYPixel = arg.Y; 
     m_bIsFinished = true; 
    } 
} 

 string sError = ""; 
     dPickedX = 0; 
     dPickedY = 0; 
     UID pUID; 
     ICommandItem pCmdItem; 
     ICommandBars pCmdBars; 
     ICommand pCmd; 
     ITool pTool; 

     try 
     { 
      this.WindowState = FormWindowState.Minimized; 

      pCmdBars = m_pApp.Document.CommandBars; 

      pUID = new UIDClass(); 
      pUID.Value = HVLR_Processing.ThisAddIn.IDs.clsMapPick; 
      pCmdItem = pCmdBars.Find(pUID); 

      if (pCmdItem != null) 
      { 
       m_pApp.CurrentTool = pCmdItem; 
       //pCmdItem.Execute(); 

       dPickedX = m_pMxDoc.CurrentLocation.X; 
       dPickedY = m_pMxDoc.CurrentLocation.Y; 
      } 




      return sError; 
     } 

これは、今、私のために正常に動作しているツールのクラスが中ですOnMouseDownイベントは発生していません。

私はそれを感謝する理由を知っている場合。

関連する問題