visual studio2010中C#生成的,ArcGIS二次開發的basetool的dll,注冊為COM組件tlb文件,並在arcmap中加載使用


寫了個標題好長啊~~~~

這兩天又認識了一個新玩意,記錄一下下,啦啦啦~~~~~

話說,認識arcgis快十年了,從桌面版到engine的二次開發,其實不過才認識到它的冰山一角,

它總是能帶來很多還未知的東西,實話說,就是如此的熱愛着它,因為從來都覺得遨游其中,沒有邊界~~~~~

arcengine二次開發,這個玩意現在已經不流行了,但是其奧妙和樂趣依然無窮~~~~

 

言歸:

一. 之前寫的basetool,basecommand等類都是在獨立的系統中運行的,沒有單獨注冊成過組件在桌面版arcmap中加載使用過,這種basetool結構:

    public AddPolygonSymbol1()

    public override void OnCreate(object hook)

    public override void OnClick()

    public override void OnMouseDown(int Button, int Shift, int X, int Y)

    .........等等

    private IMapControlDefault m_pMapControl = null;

    一直通過m_pMapControl在OnCreate(object hook)傳遞其當前MapControl,如this.m_pMapControl = hook as IMapControlDefault;

    but,改為要在arcmap中引用的工具,需要做一下幾點:

二. 修改basetool,basecommand類中傳遞hook的方法,

     private IApplication m_application;     

      public override void OnCreate(object hook)
      {
            m_application = hook as IApplication;

            if (hook is IMxApplication)

                    base.m_enabled = true;
            else
                    base.m_enabled = false; 

       }並對應修改代碼中的其他地方,如

       IMxDocument mxDocument = application.Document as IMxDocument; // Dynamic Cast
       IActiveView activeView = mxDocument.ActiveView;

       總之就是得到mapcontrol下的那些東西啊。

      類修改完成之后,可以注冊生成tlb文件了。

三.  做法,1.在代碼中添加注冊的代碼,我直接拷貝的示例中的代碼,其他方法未知,要自己生成一個新的guid就ok;

                

              2.在visual studio中,項目右鍵屬性,生成,勾選“為COM互操作注冊”

                

              3.在項目的AssemblyInfo.cs中修改[assembly: ComVisible(true)]為ture;

                 

          然后重新生成就ok了,在debug下面會找到.tlb文件,就是想要的那個東西了:

                

         此步參考出處:http://www.cnblogs.com/carekee/articles/2227480.html

四. 在arcmap中加載此工具的tlb文件,然后使用。

     加載方法:點紅框框中那個小箭頭,任意一個都可以

     

     然后在customise對話框中,選擇從文件添加:

    

   添加完后,可以看到commands選項卡下面的walkthroughs下面多了自己定義的工具,

   此處“walkthroughs”在代碼構造函數中的的base.m_category = "Walkthroughs"定義的;

   加上之后就可以用了,這里我添加的是一個AddPolygonSymbol1工具,

   

 

另,本人一向達到目的后就不求甚解, basetool其實之前一直在用,

卻不懂得注冊成工具在桌面版中使用,因為對com組件這些玩意其實不甚了解,

所以都是只知皮毛,淺嘗輒止。

 

問題:

1.com組件注冊的方法,在vs中那些代碼是不是可以自動生成?

2.自定義生成的工具,添加圖片沒有成功, GetType().Name這些玩意不知道到底是怎么讀的;

3.加載到arcmap上的工具怎么去掉啊~~~

4.除了自定義工具按鈕,怎么添加一個工具條呢?~~~~

知者請不吝賜教。

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM