6 votos

Cómo hacer una referencia correcta de ArcMap en una biblioteca de clase

He creado varios ESRI complementos, donde el mismo código se utiliza. He creado una biblioteca de clase, que me puede hacer referencia a más que duplicar código. Tengo el siguiente en mi ESRI complemento de código que funciona bien

IMxDocument mxdoc = ArcMap.Application.Document as IMxDocument;

Sin embargo, si el mismo código que se utiliza en la biblioteca de clase, soy incapaz de generar la dll. Como la biblioteca de clase no sabe acerca de ArcMap,

He intentado

ESRI.ArcGIS.ArcMap.Application arcmapApp = new ESRI.ArcGIS.ArcMap.Application();
IMxDocument mxdoc = arcmapApp.Document as IMxDocument;

Sin embargo, cuando ejecuto el código en mi complemento (que hace referencia a mi Biblioteca de clases), me sale el siguiente error

enter image description here

¿Cuál es la forma correcta de hacer referencia a ArcMap en una biblioteca de clases?

3voto

ChrizZz Puntos 24

Si necesita crear una referencia de aplicación, puede crear un objeto IMxDocument que creará un nuevo objeto Aplicación.

http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriArcMapUI/MxDocument.htm

Si desea una referencia existente de ArcMap, puede usar AppROT de la siguiente manera:

 AppROT appRot = new AppROT();
//appRot.Item[#] gives a reference to all Arc applications currently running
appRot.get_Item(0);
IApplication myApp = appRot.get_Item(0) as IApplication;
IMxDocument mxdoc = myApp.Document as IMxDocument;
 

3voto

Karl Voigtland Puntos 326

Lo he hecho funcionar, pero no usando AppRot (un problema es que podría haber varias instancias de ArcMap y ArcCatalog), pero simplemente pasar el objeto de la aplicación ArcGIS desde el complemento.

Dentro de Addin

 public ESRI.ArcGIS.ArcMap.Application arcmap = ArcMap.Application as ESRI.ArcGIS.ArcMap.Application;
 

Dentro de la biblioteca de clase

     public bool isEditing(ESRI.ArcGIS.ArcMap.Application arcMap)
    {
        UID editorUID = new UIDClass();
        editorUID.Value = "esriEditor.Editor";
        IExtension editor = arcMap.FindExtensionByCLSID(editorUID);// (editorUID);// '//as IEditor3;
        IEditor e = editor as IEditor;
        if (e.EditState == esriEditState.esriStateNotEditing)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X