Preguntas frecuentes: macros de Revit

En esta sección, se responde a las preguntas más frecuentes sobre las macros de Revit.

Pregunta Respuesta
Esperaba ver mi macro recién creada en la lista por categorías del Administrador de macros, pero no aparece. ¿Por qué? Debe generar correctamente el proyecto de macro en el IDE de macros de Revit (utilice el menú Construir) antes de que las nuevas macros aparezcan en el Administrador de macros.
¿Tengo que agregar RevitAPI.dll y RevitAPIUI.dll como referencias al escribir una macro nueva? No. No es necesario hacer referencia a los archivos RevitAPI.dll y RevitAPIUI.dll porque este paso ya se ha completado automáticamente. Estos archivos son necesarios en los proyectos de macros de Revit. Las macros de Revit producirán un error si elimina estas referencias en el IDE:

Consulte Restablecer RevitAPI.dll y RevitAPIUI.dll.

¿Tengo que editar mis archivos Revit.ini? No. Las macros de Revit se registran automáticamente para aparecer en el administrador de macros, sin ninguna modificación adicional para el sistema.
En el IDE de macros de Revit, suprimí una macro eliminando su método en el archivo This*.cs o This*.vb. No obstante, el nombre de la macro suprimida sigue apareciendo al volver a abrir la lista por categorías del Administrador de macros. ¿Cómo puedo borrar el nombre de la lista? Debe generar correctamente su proyecto editado antes de que el Administrador de macros reconozca la eliminación.
¿Qué diferencias hay entre las macros de nivel de aplicación y las macros de nivel de documento? Las macros de nivel de aplicación se pueden ejecutar en todos los proyectos de Revit abiertos con un único ejemplar de la aplicación Revit. Los proyectos de macros de nivel de documento se almacenan dentro de un archivo RVT. Se pueden cargar desde el documento activo actual y ejecutarse en dicho documento.
¿Cómo se accede al objeto Application o externalCommandData equivalente? Todas las macros de nivel de aplicación están asociadas al objeto UIApplication. En las macros de nivel de aplicación, el puntero de palabra clave Application en C # y VB.NET devuelve el objeto de API Application.

En las macros de nivel de documento, la palabra clave Document devuelve el objeto de API Document. Para acceder al objeto UIApplication desde una macro de nivel de documento, utilice this.Application.

¿Qué se debe incluir en los métodos de inicio y de cierre: Module_Startup y Module_Shutdown?

Module_Startup se invoca cuando se carga un módulo y Module_Shutdown cuando se descarga.

Para los módulos de macros de nivel de aplicación, Module_Startup se invoca cuando se inicia Revit y Module_Shutdown cuando se cierra.

Para los módulos de macro de nivel de documento, Module_Startup se invoca cuando se abre un proyecto de Revit y Module_Shutdown cuando se cierra el documento del proyecto.

Module_Startup y Module_Shutdown también se invocarán cuando se regenere el proyecto de macro.

Puede añadir su código de inicialización en los métodos Module_Startup y realizar el trabajo de limpieza en los métodos Module_Shutdown. Por ejemplo, puede registrar controladores de evento al iniciar y anular su registro al cerrar (método recomendado).

¿Cómo y por qué debo registrar y anular el registro del controlador de eventos de Revit? Como se ha indicado anteriormente, la forma recomendada de hacerlo en Revit IDE consiste en registrar controladores de evento en el método *_Startup y anularlos del registro en el método *_Shutdown. Todas las macros se cargarán y descargarán dinámicamente. Cuando se depura una macro, si no se ha anulado correctamente el registro del controlador de evento, Revit podría llamar a un método erróneo (quizás una dirección de memoria no válida). Aunque el IDE de Revit evitaría que Revit se bloqueara en este supuesto, los controladores de evento que no se hayan anulado correctamente del registro podrían provocar problemas de rendimiento durante su sesión actual de Revit.
Hay un cuadro de diálogo que no funciona bien y crea problemas en Revit. Los cuadros de diálogo no modales que funcionan fuera del ámbito de llamada de una API en ejecución pueden causar problemas. Se recomienda prescindir de dichas llamadas para evitar la inestabilidad de Revit.
Deseo probar los métodos Startup y Shutdown y un controlador de evento. ¿Puedo ver un ejemplo? El siguiente código de ejemplo muestra cómo registrar un controlador de evento OnDocumentNewed, que ejecutará automáticamente un cuadro de mensaje cuando se cree un nuevo proyecto de Revit. Nota: es posible que una de las muestras de macros suministradas en el SDK de Revit ofrezca un ejemplo de inicio y cierre de un controlador de evento de nivel de documento. En esta sección de preguntas frecuentes, se muestran ejemplos de controladores de evento de nivel de aplicación.

Tenga en cuenta que es posible acceder a todos los eventos de API a través del IDE de Revit en la versión 2011. Los eventos anteriores a 2011 se han eliminado. Los ejemplos siguientes muestran los nuevos eventos.

Ejemplo en C#, nivel de aplicación

private void Module_Startup(object sender, EventArgs e)
{
   this.Application.DocumentOpened
      += new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened);
}

private void Module_Shutdown(object sender, EventArgs e)
{
   this.Application.DocumentOpened
      -= new EventHandler<Autodesk.Revit.DB.Events.DocumentOpenedEventArgs>(Application_DocumentOpened); 
}

void Application_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
{ 
   System.Windows.Forms.MessageBox.Show("message here");
}

Ejemplo de VB.NET, nivel de aplicación:

Private
Sub Module_Startup(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Startup
AddHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub Module_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shutdown
RemoveHandler Me.OnDocumentNewed,
AddressOf Me.ThisApplication_OnDocumentNewed
End SubPrivate Sub ThisApplication_OnDocumentNewed(ByVal document As Autodesk.Revit.Document)
System.Windows.Forms.MessageBox.Show("VB.NET
Application event OnDocumentNewed")
End Sub