Creación de un plano utilizando la revit API.

Un ejemplo básico para comprender el uso de una transacción para crear un nuevo plano con el método ViewSheet.Create

ref: ViewSheet.Create RevitApiDocs

https://www.revitapidocs.com/2019/bc9e8be3-f3fd-97c2-2709-1d6eea3db775.htm

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;

namespace DCA_NuevoPlano
{
    // La clase que va a contener el comando externo de Revit, 
    //ha de implementar la interface 'IExternalCommand'.
    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        // Método público el cual buscará Revit para ejecutar el comando externo.
        public Result Execute(
            ExternalCommandData DatosDelComandoExterno,
            ref string mensaje,
            ElementSet elementos)
        {
            // Declaración de una variable local con el documento actual.
            Document documento = DatosDelComandoExterno.Application.ActiveUIDocument.Document;

            // Declaración de una variable local con una selección.
            Selection seleccion = DatosDelComandoExterno.Application.ActiveUIDocument.Selection;

            // Recuperación de la selección actual en el documento activo.
            ICollection<ElementId> idsDeElementosSelecionados = seleccion.GetElementIds();


                   
           #region Búsqueda del cajetín a utilizar.
           // Declaración de una variable local con el ID del tipo de cajetín a utilizar.
           // Se declara con valor nulo.
              ElementId idDelCajetinAUtilizar = null;

           // Declaración de una variable local con el nombre del tipo de cajetín a utilizar.
                string nombreDeCajetin = "A2 derecha abajo";

           // Creación de un filtro para buscar los tipo de familia de cajetín.
                FilteredElementCollector filtroDeTiposDeCajetin = new FilteredElementCollector(documento).
                    OfCategory(BuiltInCategory.OST_TitleBlocks).
                    WhereElementIsElementType();

           // Iteración por todos los tipos de cajetín filtrados para buscar el id del que corresponde
           // al nombre seleccionado.
                foreach (Element cualquierTipoDeCajetin in filtroDeTiposDeCajetin)
                {
                    // Código a ejecutar si el nombre del tipo del cajetín de la iteración actual corresponde con el
                    // indicado.
                    if (cualquierTipoDeCajetin.Name.Equals(nombreDeCajetin))
                    {
                        // Asignación del valor a la variable 'idDelCajetinAUtilizar'.
                        idDelCajetinAUtilizar = cualquierTipoDeCajetin.Id;

                        // interrupción del bucle actual.
                        break;
                    }
                }
            #endregion


            // Creación de un recurso con una transacción.
            using (Transaction transaccion = new Transaction(documento))
            {
                // Apertura de la transacción.
                transaccion.Start("Creación automática de planos");

                #region Creación del plano.
                // creación de un plano con el nombre de la vista.
                ViewSheet NuevoPlano = ViewSheet.Create(
                    documento,
                    idDelCajetinAUtilizar);

                // Asignación al nombre del nuevo plano del nombre de la vista seleccionada.
                NuevoPlano.Name = "NuevoPlano";
                
                // Asignación al nombre del nuevo plano del nombre de la vista seleccionada.
                NuevoPlano.SheetNumber = "100-";
                #endregion
                
                // Cierre de la transacción.
                transaccion.Commit();
            }
          
            // Retorno del método.
            return Result.Succeeded;
        }
    }
}