Mostrando los menús nativos de Digi3D

Aquí el vídeo con el código de esta entrada

Hacer que una orden implementada en un ensamblado .NET se incorpore en los menús nativos de Digi3D 2011 es muy sencillo: únicamente tenemos que decorar la clase con el atributo Digi21.DigiNG.Plugin.Shell.CommandInMenuAttribute que recibe dos parámetros:

  • El título a mostrar al usuario en el menú.
  • El grupo dentro del cual insertar la opción del menú.

El título es una cadena de caracteres, y el grupo es una de las opciones de la enumeración Digi21.DigiNG.Plugin.Shell.MenuItemGroup

Esta enumeración contiene valores que identifican el menú y el grupo o grupo/subgrupo dentro del cual queremos añadir la entrada.
A continuación un recorte con varios de los valores enumerados en esta enumeración:

                public enum MenuItemGroup
                {
                    FileGroup1,
                    FileGroup2,
                    FileGroup3,
                    FileGroup4,
                    FileGroup4Group1,
                    FileGroup4Group2,
                    EditGroup1,
                    EditGroup2,
                    EditGroup3,
                    EditGroup4,
                    EditGroup5,

Si te fijas, las entradas de la enumeración consisten en el nombre del menú primero, Ej: File, y a continuación el grupo, Ej: Group1 y si el grupo anterior tenía un submenú, el grupo dentro de ese sugmenú, Ej: Group4Group1.

Averiguar el grupo dentro del cual queremos añadir una opción puede ser un poco complicado, por eso Digi3D 2011 dispone de un truco que nos permitirá hacerlo rápidamente. El truco consiste en realizar un cambio en el registro para que cuando arranque la aplicación, se muestren en los menús de DigiNG (los que aparecen al abrir un archivo de dibujo) unos nemotécnicos cuyo nombre coincide con el nombre de la propiedad (aunque estos nemotécnicos los veremos en Español y los nombres de los campos de la enumeración están en inglés).

Para realizar el truco, tenemos que crear la siguiente entrada en el registro:
HKEY_CURRENT_USER\Software\Digi21\Digi3D2011\App\Configuration\MostrarMenusNativos de tipo DWORD y con valor 0.

Arrancamos Digi3D 2011, cargamos un archivo de dibujo y el programa mostrará los menús como en la siguiente captura de pantalla:

Captura de pantalla en la que se muestran los menús nativos de Digi3D 2011

Y a continuación un ejemplo práctico: El siguiente código implementa una orden que muestra al usuario el número de entidades de tipo texto que tiene el archivo de dibujo activo. La orden se podrá ejecutar o por su nombre de orden o en el menú Archivo/Herramientas, en el mismo grupo donde aparece la orden Bininfo:

using System;
using System.Collections.Generic;
using System.Linq;
using Digi21.Digi3D;
using Digi21.DigiNG;
using Digi21.DigiNG.Entities;
using Digi21.DigiNG.Plugin;
using Digi21.DigiNG.Plugin.Shell;
using Digi21.DigiNG.Plugin.Command;

namespace TuEmpresa
{
    [CommandInMenu("Muestra el número de textos del archivo de dibujo", MenuItemGroup.FileGroup4Group1)]
    [Command(Name="muestra_cantidad_textos")]
    public class MuestraCantidadtextos : Command
    {
        public MuestraCantidadtextos()
        {
            this.Initialize += Inicializa;
        }

        void Inicializa(object sender, EventArgs e)
        {
            var consulta = from entidad in DigiNG.DrawingFile
                           where entidad is ReadOnlyText
                           select entidad;

            Digi3D.OutputWindow.WriteLine(
                "El archivo de dibujo tiene {0} textos.",
                consulta.Count());

            Dispose();
        }
    }
}

Tan solo te queda compilar el proyecto, registrarlo para que lo cargue Digi3D y disfrutar de tu nueva orden.

A continuación una captura de cómo queda integrada la orden dentro del programa: