En Revit, cómo crear nuevos tipos (como ventanas o paredes) mediante programación
Para crear objetos en Revit, utilice el método New***() en las clases Autodesk.Revit.Creation.Document y Autodesk.Revit.Creation.Application para crear objetos. Por ejemplo, para crear un muro, utilice el método Autodesk.Revit.Creation.Document.NewWall(). Pero no podemos encontrar un método para crear el tipo de muro desde la clase Documento en el espacio de nombres Creación. ¿Es posible crear nuevos tipos mediante programación? Revit no proporciona una manera de crear un tipo directamente. Porque los tipos tienen muchas propiedades y parámetros, ¿verdad? Si hubiera un método para crearlo, la lista de parámetros tendría que ser muy larga para definir claramente el tipo. Por lo tanto, la API de Revit no crea directamente un nuevo tipo, sino que copia un tipo de un tipo existente. Todas las propiedades y parámetros se obtienen del tipo original y luego modifica los valores de algunas propiedades y parámetros según sea necesario. para lograr lo que deseas. Todas las clases de tipos de Revit se derivan de la clase ElementType. La clase ElementType proporciona el método Duplicate() para copiar tipos. Llame a esta función para agregar un tipo con el nombre especificado en el archivo del modelo actual y se creará el tipo con el nombre especificado. Todas las clases derivadas de ElementType implementan el método Duplicate(), por lo que todos los tipos se pueden crear usando Duplicate() y luego se pueden modificar las propiedades y parámetros del tipo. Por lo tanto, puede crear un tipo de muro a partir del método Duplicate() del tipo WallType y un tipo de ventana a partir del método FamilySymbol.Duplicate(). Consulte el siguiente ejemplo de código para crear un tipo de estilo de llamada: clase pública RevitCommand: IExternalCommand{public Result Execute(ExternalCommandData commandData,ref string message, ElementSet elements){UIApplication app = commandData.Application;Document doc = app.ActiveUIDocument.Document; // obtener un tipo de dimensión existente.FilteredElementCollector recopilador = new FilteredElementCollector(doc);collector.OfClass (typeof(DimensionType));DimensionType dimType = null;foreach(Elemento elem en el recopilador){if(elem.Name == "Dimensión lineal Style" ){dimType = elem as DimensionType ;break;}}DimensionType newType = dimType.Duplicate("NewType");if(newType != null){Transaction trans = new Transaction(doc, "ExComm");trans.Start () ;newType.get_Parameter(BuiltInParameter.LINE_PEN).Set(2);//puedes cambiar más aquí.